ETH Price: $3,361.32 (-3.60%)

Token

TinyDoge (tdoge)
 

Overview

Max Total Supply

0 tdoge

Holders

477

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 tdoge
0xd7559218b59b774df59679c0da26662db6b5a0d6
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:
TinyDoge

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-15
*/

// SPDX-License-Identifier: Unlicense

pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(
        uint16 _version,
        uint16 _chainId,
        uint256 _configType,
        bytes calldata _config
    ) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress)
        external;
}

pragma solidity >=0.5.0;

interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(
        uint16 _dstChainId,
        bytes calldata _destination,
        bytes calldata _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes calldata _adapterParams
    ) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        address _dstAddress,
        uint64 _nonce,
        uint256 _gasLimit,
        bytes calldata _payload
    ) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress)
        external
        view
        returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(
        uint16 _dstChainId,
        address _userApplication,
        bytes calldata _payload,
        bool _payInZRO,
        bytes calldata _adapterParam
    ) external view returns (uint256 nativeFee, uint256 zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        bytes calldata _payload
    ) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(
        uint16 _version,
        uint16 _chainId,
        address _userApplication,
        uint256 _configType
    ) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication)
        external
        view
        returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication)
        external
        view
        returns (uint16);
}

pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external;
}


pragma solidity ^0.8.0;

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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);
    }
}

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

interface IERC165 {

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

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

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

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

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

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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

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

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

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

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

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

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

        emit Transfer(address(0), to, tokenId);
    }

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

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

pragma solidity ^0.8.6;

abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {
    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint256 payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint256 => FailedMessages)))
        public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;

    event MessageFailed(
        uint16 _srcChainId,
        bytes _srcAddress,
        uint64 _nonce,
        bytes _payload
    );

    function lzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(
            _srcAddress.length == trustedRemoteLookup[_srcChainId].length &&
                keccak256(_srcAddress) ==
                keccak256(trustedRemoteLookup[_srcChainId]),
            "NonblockingReceiver: invalid source sending contract"
        );

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(
                _payload.length,
                keccak256(_payload)
            );
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) public {
        // only internal transaction
        require(
            msg.sender == address(this),
            "NonblockingReceiver: caller must be Bridge."
        );

        // handle incoming message
        _LzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    // abstract function
    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal virtual;

    function _lzSend(
        uint16 _dstChainId,
        bytes memory _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes memory _txParam
    ) internal {
        endpoint.send{value: msg.value}(
            _dstChainId,
            trustedRemoteLookup[_dstChainId],
            _payload,
            _refundAddress,
            _zroPaymentAddress,
            _txParam
        );
    }

    function retryMessage(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][
            _srcAddress
        ][_nonce];
        require(
            failedMsg.payloadHash != bytes32(0),
            "NonblockingReceiver: no stored message"
        );
        require(
            _payload.length == failedMsg.payloadLength &&
                keccak256(_payload) == failedMsg.payloadHash,
            "LayerZero: invalid payload"
        );
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote)
        external
        onlyOwner
    {
        trustedRemoteLookup[_chainId] = _trustedRemote;
    }
}

pragma solidity ^0.8.7;

contract TinyDoge is Ownable, ERC721, NonblockingReceiver {
    address public _owner;
    string private baseURI;
    uint256 private nextTokenId = 0;
    uint256 private maxAmount = 0;
    uint256 private price = 0;
    uint256 MAX_OWNERSHIP = 2;

    uint256 gasForDestinationLzReceive = 350000;

    constructor(string memory baseURI_, address _layerZeroEndpoint, uint256 _nextTokenId, uint256 _maxAmount)
        ERC721("TinyDoge", "tdoge")
    {
        _owner = msg.sender;
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        baseURI = baseURI_;
        nextTokenId = _nextTokenId;
        maxAmount = _maxAmount;
    }

    function mint(uint8 numTokens) external payable {
        require(balanceOf(msg.sender) + numTokens <= MAX_OWNERSHIP, "TinyDoge: Max mint per wallet amount reached");
        require(
            nextTokenId + numTokens <= maxAmount,
            "TinyDoge: Mint exceeds supply for this network"
        );
        for (uint8 i = 0; i < numTokens; i++) {
            _safeMint(msg.sender, ++nextTokenId);
        }
    }

    function traverseChains(uint16 _chainId, uint256 tokenId) public payable {
        require(
            msg.sender == ownerOf(tokenId),
            "You must own the token to traverse"
        );
        require(
            trustedRemoteLookup[_chainId].length > 0,
            "This chain is currently unavailable for travel"
        );

        // burn NFT, eliminating it from circulation on src chain
        _burn(tokenId);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, tokenId);

        // encode adapterParams to specify more gas for the destination
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(
            version,
            gasForDestinationLzReceive
        );

        // get the fees we need to pay to LayerZero + Relayer to cover message delivery
        // you will be refunded for extra gas paid
        (uint256 messageFee, ) = endpoint.estimateFees(
            _chainId,
            address(this),
            payload,
            false,
            adapterParams
        );

        require(
            msg.value >= messageFee,
            "TinyDoge: msg.value not enough to cover messageFee. Send gas for message fees"
        );

        endpoint.send{value: msg.value}(
            _chainId, // destination chainId
            trustedRemoteLookup[_chainId], // destination address of nft contract
            payload, // abi.encoded()'ed bytes
            payable(msg.sender), // refund address
            address(0x0), // 'zroPaymentAddress' unused for this
            adapterParams // txParameters
        );
    }

    function setBaseURI(string memory URI) external onlyOwner {
        baseURI = URI;
    }

    function withdraw(uint256 amt) external onlyOwner {
        (bool sent, ) = payable(_owner).call{value: amt}("");
        require(sent, "TinyDoge: Failed to withdraw funds");
    }

    function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner {
        gasForDestinationLzReceive = newVal;
    }

    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal override {
        // decode
        (address toAddr, uint256 tokenId) = abi.decode(
            _payload,
            (address, uint256)
        );

        // mint the tokens back into existence on destination chain
        _safeMint(toAddr, tokenId);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"_nextTokenId","type":"uint256"},{"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600c556000600d556000600e556002600f55620557306010553480156200002c57600080fd5b50604051620053a9380380620053a98339818101604052810190620000529190620003ed565b6040518060400160405280600881526020017f54696e79446f67650000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f74646f6765000000000000000000000000000000000000000000000000000000815250620000de620000d2620001c560201b60201c565b620001cd60201b60201c565b8160019080519060200190620000f692919062000291565b5080600290805190602001906200010f92919062000291565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600b9080519060200190620001ac92919062000291565b5081600c8190555080600d819055505050505062000674565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029f9062000551565b90600052602060002090601f016020900481019282620002c357600085556200030f565b82601f10620002de57805160ff19168380011785556200030f565b828001600101855582156200030f579182015b828111156200030e578251825591602001919060010190620002f1565b5b5090506200031e919062000322565b5090565b5b808211156200033d57600081600090555060010162000323565b5090565b6000620003586200035284620004a7565b6200047e565b90508281526020810184848401111562000377576200037662000620565b5b620003848482856200051b565b509392505050565b6000815190506200039d8162000640565b92915050565b600082601f830112620003bb57620003ba6200061b565b5b8151620003cd84826020860162000341565b91505092915050565b600081519050620003e7816200065a565b92915050565b600080600080608085870312156200040a57620004096200062a565b5b600085015167ffffffffffffffff8111156200042b576200042a62000625565b5b6200043987828801620003a3565b94505060206200044c878288016200038c565b93505060406200045f87828801620003d6565b92505060606200047287828801620003d6565b91505092959194509250565b60006200048a6200049d565b905062000498828262000587565b919050565b6000604051905090565b600067ffffffffffffffff821115620004c557620004c4620005ec565b5b620004d0826200062f565b9050602081019050919050565b6000620004ea82620004f1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200053b5780820151818401526020810190506200051e565b838111156200054b576000848401525b50505050565b600060028204905060018216806200056a57607f821691505b60208210811415620005815762000580620005bd565b5b50919050565b62000592826200062f565b810181811067ffffffffffffffff82111715620005b457620005b3620005ec565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200064b81620004dd565b81146200065757600080fd5b50565b620006658162000511565b81146200067157600080fd5b50565b614d2580620006846000396000f3fe6080604052600436106101b65760003560e01c80637533d788116100ec578063b88d4fde1161008a578063d1deba1f11610064578063d1deba1f146105fc578063e985e9c514610618578063eb8d72b714610655578063f2fde38b1461067e576101b6565b8063b88d4fde1461057a578063c87b56dd146105a3578063cf89fa03146105e0576101b6565b8063943fb872116100c6578063943fb872146104d257806395d89b41146104fb578063a22cb46514610526578063b2bdfa7b1461054f576101b6565b80637533d7881461042c5780638da5cb5b146104695780638ee7491214610494576101b6565b80632e1a7d4d116101595780636352211e116101335780636352211e1461037f5780636ecd2306146103bc57806370a08231146103d8578063715018a614610415576101b6565b80632e1a7d4d1461030457806342842e0e1461032d57806355f804b314610356576101b6565b8063081812fc11610195578063081812fc1461024c578063095ea7b3146102895780631c37a822146102b257806323b872dd146102db576101b6565b80621d3567146101bb57806301ffc9a7146101e457806306fdde0314610221575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd91906131be565b6106a7565b005b3480156101f057600080fd5b5061020b60048036038101906102069190612f7b565b6108e9565b6040516102189190613abd565b60405180910390f35b34801561022d57600080fd5b506102366109cb565b6040516102439190613afa565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e919061329d565b610a5d565b6040516102809190613a2d565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612f3b565b610ae2565b005b3480156102be57600080fd5b506102d960048036038101906102d491906131be565b610bfa565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190612e25565b610c7a565b005b34801561031057600080fd5b5061032b6004803603810190610326919061329d565b610cda565b005b34801561033957600080fd5b50610354600480360381019061034f9190612e25565b610e28565b005b34801561036257600080fd5b5061037d60048036038101906103789190612fd5565b610e48565b005b34801561038b57600080fd5b506103a660048036038101906103a1919061329d565b610ede565b6040516103b39190613a2d565b60405180910390f35b6103d660048036038101906103d1919061330a565b610f90565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612d78565b611086565b60405161040c9190613fbb565b60405180910390f35b34801561042157600080fd5b5061042a61113e565b005b34801561043857600080fd5b50610453600480360381019061044e919061301e565b6111c6565b6040516104609190613ad8565b60405180910390f35b34801561047557600080fd5b5061047e611266565b60405161048b9190613a2d565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906130ab565b61128f565b6040516104c9929190613fd6565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f4919061329d565b6112e3565b005b34801561050757600080fd5b50610510611369565b60405161051d9190613afa565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612efb565b6113fb565b005b34801561055b57600080fd5b50610564611411565b6040516105719190613a2d565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612e78565b611437565b005b3480156105af57600080fd5b506105ca60048036038101906105c5919061329d565b611499565b6040516105d79190613afa565b60405180910390f35b6105fa60048036038101906105f5919061325d565b611540565b005b6106166004803603810190610611919061311a565b611833565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612de5565b6119d3565b60405161064c9190613abd565b60405180910390f35b34801561066157600080fd5b5061067c6004803603810190610677919061304b565b611a67565b005b34801561068a57600080fd5b506106a560048036038101906106a09190612d78565b611b13565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070157600080fd5b600960008561ffff1661ffff1681526020019081526020016000208054610727906142a5565b9050835114801561076d5750600960008561ffff1661ffff16815260200190815260200160002060405161075b91906139b1565b60405180910390208380519060200120145b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390613d3c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016107eb9493929190613ef2565b600060405180830381600087803b15801561080557600080fd5b505af1925050508015610816575060015b6108e2576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610860919061399a565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108d59493929190613ef2565b60405180910390a16108e3565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c457506109c382611c0b565b5b9050919050565b6060600180546109da906142a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a06906142a5565b8015610a535780601f10610a2857610100808354040283529160200191610a53565b820191906000526020600020905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b6000610a6882611c75565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613cfc565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aed82610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613dbc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7d611ce1565b73ffffffffffffffffffffffffffffffffffffffff161480610bac5750610bab81610ba6611ce1565b6119d3565b5b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613c3c565b60405180910390fd5b610bf58383611ce9565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90613c9c565b60405180910390fd5b610c7484848484611da2565b50505050565b610c8b610c85611ce1565b82611dcf565b610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613ddc565b60405180910390fd5b610cd5838383611ead565b505050565b610ce2611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610d00611266565b73ffffffffffffffffffffffffffffffffffffffff1614610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613d1c565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d9e906139ec565b60006040518083038185875af1925050503d8060008114610ddb576040519150601f19603f3d011682016040523d82523d6000602084013e610de0565b606091505b5050905080610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613bfc565b60405180910390fd5b5050565b610e4383838360405180602001604052806000815250611437565b505050565b610e50611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610e6e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613d1c565b60405180910390fd5b80600b9080519060200190610eda929190612a47565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613c7c565b60405180910390fd5b80915050919050565b600f548160ff16610fa033611086565b610faa91906140e9565b1115610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613d7c565b60405180910390fd5b600d548160ff16600c54610fff91906140e9565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613e1c565b60405180910390fd5b60005b8160ff168160ff1610156110825761106f33600c6000815461106490614308565b919050819055612109565b808061107a90614351565b915050611043565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613c5c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611146611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611164611266565b73ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190613d1c565b60405180910390fd5b6111c46000612127565b565b600960205280600052604060002060009150905080546111e5906142a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611211906142a5565b801561125e5780601f106112335761010080835404028352916020019161125e565b820191906000526020600020905b81548152906001019060200180831161124157829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112eb611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611309611266565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d1c565b60405180910390fd5b8060108190555050565b606060028054611378906142a5565b80601f01602080910402602001604051908101604052809291908181526020018280546113a4906142a5565b80156113f15780601f106113c6576101008083540402835291602001916113f1565b820191906000526020600020905b8154815290600101906020018083116113d457829003601f168201915b5050505050905090565b61140d611406611ce1565b83836121eb565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611448611442611ce1565b83611dcf565b611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90613ddc565b60405180910390fd5b61149384848484612358565b50505050565b60606114a482611c75565b6114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613d9c565b60405180910390fd5b60006114ed6123b4565b9050600081511161150d5760405180602001604052806000815250611538565b8061151784612446565b6040516020016115289291906139c8565b6040516020818303038152906040525b915050919050565b61154981610ede565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613bdc565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115de906142a5565b905011611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613b9c565b60405180910390fd5b611629816125a7565b6000338260405160200161163e929190613a94565b604051602081830303815290604052905060006001905060008160105460405160200161166c929190613a01565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e3959493929190613e3c565b604080518083038186803b1580156116fa57600080fd5b505afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173291906132ca565b50905080341015611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90613cbc565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f996959493929190613f45565b6000604051808303818588803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185e919061399a565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90613dfc565b60405180910390fd5b8060000154838390501480156119035750806001015483836040516118f9929190613981565b6040518091039020145b611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613bbc565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611999959493929190613e9d565b600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a6f611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611a8d611266565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613d1c565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b0d929190612acd565b50505050565b611b1b611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611b39611266565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613d1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613b3c565b60405180910390fd5b611c0881612127565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5c83610ede565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611db99190612da5565b91509150611dc78282612109565b505050505050565b6000611dda82611c75565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613c1c565b60405180910390fd5b6000611e2483610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e9357508373ffffffffffffffffffffffffffffffffffffffff16611e7b84610a5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ea45750611ea381856119d3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ecd82610ede565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613d5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90613b5c565b60405180910390fd5b611f9e8383836126b8565b611fa9600082611ce9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff99190614170565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205091906140e9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121238282604051806020016040528060008152506126bd565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190613b7c565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161234b9190613abd565b60405180910390a3505050565b612363848484611ead565b61236f84848484612718565b6123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590613b1c565b60405180910390fd5b50505050565b6060600b80546123c3906142a5565b80601f01602080910402602001604051908101604052809291908181526020018280546123ef906142a5565b801561243c5780601f106124115761010080835404028352916020019161243c565b820191906000526020600020905b81548152906001019060200180831161241f57829003601f168201915b5050505050905090565b6060600082141561248e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125a2565b600082905060005b600082146124c05780806124a990614308565b915050600a826124b9919061413f565b9150612496565b60008167ffffffffffffffff8111156124dc576124db614484565b5b6040519080825280601f01601f19166020018201604052801561250e5781602001600182028036833780820191505090505b5090505b6000851461259b576001826125279190614170565b9150600a856125369190614397565b603061254291906140e9565b60f81b81838151811061255857612557614455565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612594919061413f565b9450612512565b8093505050505b919050565b60006125b282610ede565b90506125c0816000846126b8565b6125cb600083611ce9565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261b9190614170565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126c783836128af565b6126d46000848484612718565b612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90613b1c565b60405180910390fd5b505050565b60006127398473ffffffffffffffffffffffffffffffffffffffff16612a34565b156128a2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612762611ce1565b8786866040518563ffffffff1660e01b81526004016127849493929190613a48565b602060405180830381600087803b15801561279e57600080fd5b505af19250505080156127cf57506040513d601f19601f820116820180604052508101906127cc9190612fa8565b60015b612852573d80600081146127ff576040519150601f19603f3d011682016040523d82523d6000602084013e612804565b606091505b5060008151141561284a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284190613b1c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561291f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291690613cdc565b60405180910390fd5b61292b600083836126b8565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461297b91906140e9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a53906142a5565b90600052602060002090601f016020900481019282612a755760008555612abc565b82601f10612a8e57805160ff1916838001178555612abc565b82800160010185558215612abc579182015b82811115612abb578251825591602001919060010190612aa0565b5b509050612ac99190612b53565b5090565b828054612ad9906142a5565b90600052602060002090601f016020900481019282612afb5760008555612b42565b82601f10612b1457803560ff1916838001178555612b42565b82800160010185558215612b42579182015b82811115612b41578235825591602001919060010190612b26565b5b509050612b4f9190612b53565b5090565b5b80821115612b6c576000816000905550600101612b54565b5090565b6000612b83612b7e84614024565b613fff565b905082815260208101848484011115612b9f57612b9e6144c2565b5b612baa848285614263565b509392505050565b6000612bc5612bc084614055565b613fff565b905082815260208101848484011115612be157612be06144c2565b5b612bec848285614263565b509392505050565b600081359050612c0381614c37565b92915050565b600081519050612c1881614c4e565b92915050565b600081359050612c2d81614c65565b92915050565b600081359050612c4281614c7c565b92915050565b600081519050612c5781614c7c565b92915050565b60008083601f840112612c7357612c726144b8565b5b8235905067ffffffffffffffff811115612c9057612c8f6144b3565b5b602083019150836001820283011115612cac57612cab6144bd565b5b9250929050565b600082601f830112612cc857612cc76144b8565b5b8135612cd8848260208601612b70565b91505092915050565b600082601f830112612cf657612cf56144b8565b5b8135612d06848260208601612bb2565b91505092915050565b600081359050612d1e81614c93565b92915050565b600081359050612d3381614caa565b92915050565b600081519050612d4881614caa565b92915050565b600081359050612d5d81614cc1565b92915050565b600081359050612d7281614cd8565b92915050565b600060208284031215612d8e57612d8d6144cc565b5b6000612d9c84828501612bf4565b91505092915050565b60008060408385031215612dbc57612dbb6144cc565b5b6000612dca85828601612c09565b9250506020612ddb85828601612d39565b9150509250929050565b60008060408385031215612dfc57612dfb6144cc565b5b6000612e0a85828601612bf4565b9250506020612e1b85828601612bf4565b9150509250929050565b600080600060608486031215612e3e57612e3d6144cc565b5b6000612e4c86828701612bf4565b9350506020612e5d86828701612bf4565b9250506040612e6e86828701612d24565b9150509250925092565b60008060008060808587031215612e9257612e916144cc565b5b6000612ea087828801612bf4565b9450506020612eb187828801612bf4565b9350506040612ec287828801612d24565b925050606085013567ffffffffffffffff811115612ee357612ee26144c7565b5b612eef87828801612cb3565b91505092959194509250565b60008060408385031215612f1257612f116144cc565b5b6000612f2085828601612bf4565b9250506020612f3185828601612c1e565b9150509250929050565b60008060408385031215612f5257612f516144cc565b5b6000612f6085828601612bf4565b9250506020612f7185828601612d24565b9150509250929050565b600060208284031215612f9157612f906144cc565b5b6000612f9f84828501612c33565b91505092915050565b600060208284031215612fbe57612fbd6144cc565b5b6000612fcc84828501612c48565b91505092915050565b600060208284031215612feb57612fea6144cc565b5b600082013567ffffffffffffffff811115613009576130086144c7565b5b61301584828501612ce1565b91505092915050565b600060208284031215613034576130336144cc565b5b600061304284828501612d0f565b91505092915050565b600080600060408486031215613064576130636144cc565b5b600061307286828701612d0f565b935050602084013567ffffffffffffffff811115613093576130926144c7565b5b61309f86828701612c5d565b92509250509250925092565b6000806000606084860312156130c4576130c36144cc565b5b60006130d286828701612d0f565b935050602084013567ffffffffffffffff8111156130f3576130f26144c7565b5b6130ff86828701612cb3565b925050604061311086828701612d24565b9150509250925092565b600080600080600060808688031215613136576131356144cc565b5b600061314488828901612d0f565b955050602086013567ffffffffffffffff811115613165576131646144c7565b5b61317188828901612cb3565b945050604061318288828901612d4e565b935050606086013567ffffffffffffffff8111156131a3576131a26144c7565b5b6131af88828901612c5d565b92509250509295509295909350565b600080600080608085870312156131d8576131d76144cc565b5b60006131e687828801612d0f565b945050602085013567ffffffffffffffff811115613207576132066144c7565b5b61321387828801612cb3565b935050604061322487828801612d4e565b925050606085013567ffffffffffffffff811115613245576132446144c7565b5b61325187828801612cb3565b91505092959194509250565b60008060408385031215613274576132736144cc565b5b600061328285828601612d0f565b925050602061329385828601612d24565b9150509250929050565b6000602082840312156132b3576132b26144cc565b5b60006132c184828501612d24565b91505092915050565b600080604083850312156132e1576132e06144cc565b5b60006132ef85828601612d39565b925050602061330085828601612d39565b9150509250929050565b6000602082840312156133205761331f6144cc565b5b600061332e84828501612d63565b91505092915050565b613340816141b6565b82525050565b61334f816141a4565b82525050565b61335e816141c8565b82525050565b61336d816141d4565b82525050565b600061337f83856140b1565b935061338c838584614263565b613395836144d1565b840190509392505050565b60006133ac83856140c2565b93506133b9838584614263565b82840190509392505050565b60006133d08261409b565b6133da81856140b1565b93506133ea818560208601614272565b6133f3816144d1565b840191505092915050565b60006134098261409b565b61341381856140c2565b9350613423818560208601614272565b80840191505092915050565b6000815461343c816142a5565b61344681866140b1565b945060018216600081146134615760018114613473576134a6565b60ff19831686526020860193506134a6565b61347c85614086565b60005b8381101561349e5781548189015260018201915060208101905061347f565b808801955050505b50505092915050565b600081546134bc816142a5565b6134c681866140c2565b945060018216600081146134e157600181146134f257613525565b60ff19831686528186019350613525565b6134fb85614086565b60005b8381101561351d578154818901526001820191506020810190506134fe565b838801955050505b50505092915050565b6000613539826140a6565b61354381856140cd565b9350613553818560208601614272565b61355c816144d1565b840191505092915050565b6000613572826140a6565b61357c81856140de565b935061358c818560208601614272565b80840191505092915050565b60006135a56032836140cd565b91506135b0826144ef565b604082019050919050565b60006135c86026836140cd565b91506135d38261453e565b604082019050919050565b60006135eb6024836140cd565b91506135f68261458d565b604082019050919050565b600061360e6019836140cd565b9150613619826145dc565b602082019050919050565b6000613631602e836140cd565b915061363c82614605565b604082019050919050565b6000613654601a836140cd565b915061365f82614654565b602082019050919050565b60006136776022836140cd565b91506136828261467d565b604082019050919050565b600061369a6022836140cd565b91506136a5826146cc565b604082019050919050565b60006136bd602c836140cd565b91506136c88261471b565b604082019050919050565b60006136e06038836140cd565b91506136eb8261476a565b604082019050919050565b6000613703602a836140cd565b915061370e826147b9565b604082019050919050565b60006137266029836140cd565b915061373182614808565b604082019050919050565b6000613749602b836140cd565b915061375482614857565b604082019050919050565b600061376c604d836140cd565b9150613777826148a6565b606082019050919050565b600061378f6020836140cd565b915061379a8261491b565b602082019050919050565b60006137b2602c836140cd565b91506137bd82614944565b604082019050919050565b60006137d56020836140cd565b91506137e082614993565b602082019050919050565b60006137f86034836140cd565b9150613803826149bc565b604082019050919050565b600061381b6029836140cd565b915061382682614a0b565b604082019050919050565b600061383e602c836140cd565b915061384982614a5a565b604082019050919050565b6000613861602f836140cd565b915061386c82614aa9565b604082019050919050565b60006138846021836140cd565b915061388f82614af8565b604082019050919050565b60006138a76000836140c2565b91506138b282614b47565b600082019050919050565b60006138ca6031836140cd565b91506138d582614b4a565b604082019050919050565b60006138ed6026836140cd565b91506138f882614b99565b604082019050919050565b6000613910602e836140cd565b915061391b82614be8565b604082019050919050565b61392f8161420a565b82525050565b6139466139418261420a565b61437b565b82525050565b61395581614238565b82525050565b61396c61396782614238565b61438d565b82525050565b61397b81614242565b82525050565b600061398e8284866133a0565b91508190509392505050565b60006139a682846133fe565b915081905092915050565b60006139bd82846134af565b915081905092915050565b60006139d48285613567565b91506139e08284613567565b91508190509392505050565b60006139f78261389a565b9150819050919050565b6000613a0d8285613935565b600282019150613a1d828461395b565b6020820191508190509392505050565b6000602082019050613a426000830184613346565b92915050565b6000608082019050613a5d6000830187613346565b613a6a6020830186613346565b613a77604083018561394c565b8181036060830152613a8981846133c5565b905095945050505050565b6000604082019050613aa96000830185613346565b613ab6602083018461394c565b9392505050565b6000602082019050613ad26000830184613355565b92915050565b60006020820190508181036000830152613af281846133c5565b905092915050565b60006020820190508181036000830152613b14818461352e565b905092915050565b60006020820190508181036000830152613b3581613598565b9050919050565b60006020820190508181036000830152613b55816135bb565b9050919050565b60006020820190508181036000830152613b75816135de565b9050919050565b60006020820190508181036000830152613b9581613601565b9050919050565b60006020820190508181036000830152613bb581613624565b9050919050565b60006020820190508181036000830152613bd581613647565b9050919050565b60006020820190508181036000830152613bf58161366a565b9050919050565b60006020820190508181036000830152613c158161368d565b9050919050565b60006020820190508181036000830152613c35816136b0565b9050919050565b60006020820190508181036000830152613c55816136d3565b9050919050565b60006020820190508181036000830152613c75816136f6565b9050919050565b60006020820190508181036000830152613c9581613719565b9050919050565b60006020820190508181036000830152613cb58161373c565b9050919050565b60006020820190508181036000830152613cd58161375f565b9050919050565b60006020820190508181036000830152613cf581613782565b9050919050565b60006020820190508181036000830152613d15816137a5565b9050919050565b60006020820190508181036000830152613d35816137c8565b9050919050565b60006020820190508181036000830152613d55816137eb565b9050919050565b60006020820190508181036000830152613d758161380e565b9050919050565b60006020820190508181036000830152613d9581613831565b9050919050565b60006020820190508181036000830152613db581613854565b9050919050565b60006020820190508181036000830152613dd581613877565b9050919050565b60006020820190508181036000830152613df5816138bd565b9050919050565b60006020820190508181036000830152613e15816138e0565b9050919050565b60006020820190508181036000830152613e3581613903565b9050919050565b600060a082019050613e516000830188613926565b613e5e6020830187613346565b8181036040830152613e7081866133c5565b9050613e7f6060830185613355565b8181036080830152613e9181846133c5565b90509695505050505050565b6000608082019050613eb26000830188613926565b8181036020830152613ec481876133c5565b9050613ed36040830186613972565b8181036060830152613ee6818486613373565b90509695505050505050565b6000608082019050613f076000830187613926565b8181036020830152613f1981866133c5565b9050613f286040830185613972565b8181036060830152613f3a81846133c5565b905095945050505050565b600060c082019050613f5a6000830189613926565b8181036020830152613f6c818861342f565b90508181036040830152613f8081876133c5565b9050613f8f6060830186613337565b613f9c6080830185613346565b81810360a0830152613fae81846133c5565b9050979650505050505050565b6000602082019050613fd0600083018461394c565b92915050565b6000604082019050613feb600083018561394c565b613ff86020830184613364565b9392505050565b600061400961401a565b905061401582826142d7565b919050565b6000604051905090565b600067ffffffffffffffff82111561403f5761403e614484565b5b614048826144d1565b9050602081019050919050565b600067ffffffffffffffff8211156140705761406f614484565b5b614079826144d1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140f482614238565b91506140ff83614238565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614134576141336143c8565b5b828201905092915050565b600061414a82614238565b915061415583614238565b925082614165576141646143f7565b5b828204905092915050565b600061417b82614238565b915061418683614238565b925082821015614199576141986143c8565b5b828203905092915050565b60006141af82614218565b9050919050565b60006141c182614218565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614290578082015181840152602081019050614275565b8381111561429f576000848401525b50505050565b600060028204905060018216806142bd57607f821691505b602082108114156142d1576142d0614426565b5b50919050565b6142e0826144d1565b810181811067ffffffffffffffff821117156142ff576142fe614484565b5b80604052505050565b600061431382614238565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614346576143456143c8565b5b600182019050919050565b600061435c82614256565b915060ff8214156143705761436f6143c8565b5b600182019050919050565b6000614386826144e2565b9050919050565b6000819050919050565b60006143a282614238565b91506143ad83614238565b9250826143bd576143bc6143f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a204661696c656420746f2077697468647261772066756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a206d73672e76616c7565206e6f7420656e6f756768207460008201527f6f20636f766572206d6573736167654665652e2053656e642067617320666f7260208201527f206d657373616765206665657300000000000000000000000000000000000000604082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a204d6178206d696e74207065722077616c6c657420616d60008201527f6f756e7420726561636865640000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a204d696e74206578636565647320737570706c7920666f60008201527f722074686973206e6574776f726b000000000000000000000000000000000000602082015250565b614c40816141a4565b8114614c4b57600080fd5b50565b614c57816141b6565b8114614c6257600080fd5b50565b614c6e816141c8565b8114614c7957600080fd5b50565b614c85816141de565b8114614c9057600080fd5b50565b614c9c8161420a565b8114614ca757600080fd5b50565b614cb381614238565b8114614cbe57600080fd5b50565b614cca81614242565b8114614cd557600080fd5b50565b614ce181614256565b8114614cec57600080fd5b5056fea2646970667358221220552e51a04b8a3ba1ce0231a96043e45759883d09829149874ea6fc4d477d816964736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6433616d30376372766e7472302e636c6f756466726f6e742e6e65742f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b65760003560e01c80637533d788116100ec578063b88d4fde1161008a578063d1deba1f11610064578063d1deba1f146105fc578063e985e9c514610618578063eb8d72b714610655578063f2fde38b1461067e576101b6565b8063b88d4fde1461057a578063c87b56dd146105a3578063cf89fa03146105e0576101b6565b8063943fb872116100c6578063943fb872146104d257806395d89b41146104fb578063a22cb46514610526578063b2bdfa7b1461054f576101b6565b80637533d7881461042c5780638da5cb5b146104695780638ee7491214610494576101b6565b80632e1a7d4d116101595780636352211e116101335780636352211e1461037f5780636ecd2306146103bc57806370a08231146103d8578063715018a614610415576101b6565b80632e1a7d4d1461030457806342842e0e1461032d57806355f804b314610356576101b6565b8063081812fc11610195578063081812fc1461024c578063095ea7b3146102895780631c37a822146102b257806323b872dd146102db576101b6565b80621d3567146101bb57806301ffc9a7146101e457806306fdde0314610221575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd91906131be565b6106a7565b005b3480156101f057600080fd5b5061020b60048036038101906102069190612f7b565b6108e9565b6040516102189190613abd565b60405180910390f35b34801561022d57600080fd5b506102366109cb565b6040516102439190613afa565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e919061329d565b610a5d565b6040516102809190613a2d565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612f3b565b610ae2565b005b3480156102be57600080fd5b506102d960048036038101906102d491906131be565b610bfa565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190612e25565b610c7a565b005b34801561031057600080fd5b5061032b6004803603810190610326919061329d565b610cda565b005b34801561033957600080fd5b50610354600480360381019061034f9190612e25565b610e28565b005b34801561036257600080fd5b5061037d60048036038101906103789190612fd5565b610e48565b005b34801561038b57600080fd5b506103a660048036038101906103a1919061329d565b610ede565b6040516103b39190613a2d565b60405180910390f35b6103d660048036038101906103d1919061330a565b610f90565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612d78565b611086565b60405161040c9190613fbb565b60405180910390f35b34801561042157600080fd5b5061042a61113e565b005b34801561043857600080fd5b50610453600480360381019061044e919061301e565b6111c6565b6040516104609190613ad8565b60405180910390f35b34801561047557600080fd5b5061047e611266565b60405161048b9190613a2d565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906130ab565b61128f565b6040516104c9929190613fd6565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f4919061329d565b6112e3565b005b34801561050757600080fd5b50610510611369565b60405161051d9190613afa565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612efb565b6113fb565b005b34801561055b57600080fd5b50610564611411565b6040516105719190613a2d565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612e78565b611437565b005b3480156105af57600080fd5b506105ca60048036038101906105c5919061329d565b611499565b6040516105d79190613afa565b60405180910390f35b6105fa60048036038101906105f5919061325d565b611540565b005b6106166004803603810190610611919061311a565b611833565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612de5565b6119d3565b60405161064c9190613abd565b60405180910390f35b34801561066157600080fd5b5061067c6004803603810190610677919061304b565b611a67565b005b34801561068a57600080fd5b506106a560048036038101906106a09190612d78565b611b13565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070157600080fd5b600960008561ffff1661ffff1681526020019081526020016000208054610727906142a5565b9050835114801561076d5750600960008561ffff1661ffff16815260200190815260200160002060405161075b91906139b1565b60405180910390208380519060200120145b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390613d3c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016107eb9493929190613ef2565b600060405180830381600087803b15801561080557600080fd5b505af1925050508015610816575060015b6108e2576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff16815260200190815260200160002084604051610860919061399a565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108d59493929190613ef2565b60405180910390a16108e3565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c457506109c382611c0b565b5b9050919050565b6060600180546109da906142a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a06906142a5565b8015610a535780601f10610a2857610100808354040283529160200191610a53565b820191906000526020600020905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b6000610a6882611c75565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613cfc565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aed82610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613dbc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7d611ce1565b73ffffffffffffffffffffffffffffffffffffffff161480610bac5750610bab81610ba6611ce1565b6119d3565b5b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613c3c565b60405180910390fd5b610bf58383611ce9565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90613c9c565b60405180910390fd5b610c7484848484611da2565b50505050565b610c8b610c85611ce1565b82611dcf565b610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613ddc565b60405180910390fd5b610cd5838383611ead565b505050565b610ce2611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610d00611266565b73ffffffffffffffffffffffffffffffffffffffff1614610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613d1c565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d9e906139ec565b60006040518083038185875af1925050503d8060008114610ddb576040519150601f19603f3d011682016040523d82523d6000602084013e610de0565b606091505b5050905080610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613bfc565b60405180910390fd5b5050565b610e4383838360405180602001604052806000815250611437565b505050565b610e50611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610e6e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613d1c565b60405180910390fd5b80600b9080519060200190610eda929190612a47565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613c7c565b60405180910390fd5b80915050919050565b600f548160ff16610fa033611086565b610faa91906140e9565b1115610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613d7c565b60405180910390fd5b600d548160ff16600c54610fff91906140e9565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613e1c565b60405180910390fd5b60005b8160ff168160ff1610156110825761106f33600c6000815461106490614308565b919050819055612109565b808061107a90614351565b915050611043565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90613c5c565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611146611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611164611266565b73ffffffffffffffffffffffffffffffffffffffff16146111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190613d1c565b60405180910390fd5b6111c46000612127565b565b600960205280600052604060002060009150905080546111e5906142a5565b80601f0160208091040260200160405190810160405280929190818152602001828054611211906142a5565b801561125e5780601f106112335761010080835404028352916020019161125e565b820191906000526020600020905b81548152906001019060200180831161124157829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112eb611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611309611266565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690613d1c565b60405180910390fd5b8060108190555050565b606060028054611378906142a5565b80601f01602080910402602001604051908101604052809291908181526020018280546113a4906142a5565b80156113f15780601f106113c6576101008083540402835291602001916113f1565b820191906000526020600020905b8154815290600101906020018083116113d457829003601f168201915b5050505050905090565b61140d611406611ce1565b83836121eb565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611448611442611ce1565b83611dcf565b611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e90613ddc565b60405180910390fd5b61149384848484612358565b50505050565b60606114a482611c75565b6114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90613d9c565b60405180910390fd5b60006114ed6123b4565b9050600081511161150d5760405180602001604052806000815250611538565b8061151784612446565b6040516020016115289291906139c8565b6040516020818303038152906040525b915050919050565b61154981610ede565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613bdc565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115de906142a5565b905011611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613b9c565b60405180910390fd5b611629816125a7565b6000338260405160200161163e929190613a94565b604051602081830303815290604052905060006001905060008160105460405160200161166c929190613a01565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e3959493929190613e3c565b604080518083038186803b1580156116fa57600080fd5b505afa15801561170e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173291906132ca565b50905080341015611778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176f90613cbc565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f996959493929190613f45565b6000604051808303818588803b15801561181257600080fd5b505af1158015611826573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185e919061399a565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90613dfc565b60405180910390fd5b8060000154838390501480156119035750806001015483836040516118f9929190613981565b6040518091039020145b611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613bbc565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b8152600401611999959493929190613e9d565b600060405180830381600087803b1580156119b357600080fd5b505af11580156119c7573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a6f611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611a8d611266565b73ffffffffffffffffffffffffffffffffffffffff1614611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613d1c565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b0d929190612acd565b50505050565b611b1b611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611b39611266565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613d1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613b3c565b60405180910390fd5b611c0881612127565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5c83610ede565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611db99190612da5565b91509150611dc78282612109565b505050505050565b6000611dda82611c75565b611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613c1c565b60405180910390fd5b6000611e2483610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e9357508373ffffffffffffffffffffffffffffffffffffffff16611e7b84610a5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ea45750611ea381856119d3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ecd82610ede565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613d5c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90613b5c565b60405180910390fd5b611f9e8383836126b8565b611fa9600082611ce9565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff99190614170565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205091906140e9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121238282604051806020016040528060008152506126bd565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190613b7c565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161234b9190613abd565b60405180910390a3505050565b612363848484611ead565b61236f84848484612718565b6123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590613b1c565b60405180910390fd5b50505050565b6060600b80546123c3906142a5565b80601f01602080910402602001604051908101604052809291908181526020018280546123ef906142a5565b801561243c5780601f106124115761010080835404028352916020019161243c565b820191906000526020600020905b81548152906001019060200180831161241f57829003601f168201915b5050505050905090565b6060600082141561248e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125a2565b600082905060005b600082146124c05780806124a990614308565b915050600a826124b9919061413f565b9150612496565b60008167ffffffffffffffff8111156124dc576124db614484565b5b6040519080825280601f01601f19166020018201604052801561250e5781602001600182028036833780820191505090505b5090505b6000851461259b576001826125279190614170565b9150600a856125369190614397565b603061254291906140e9565b60f81b81838151811061255857612557614455565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612594919061413f565b9450612512565b8093505050505b919050565b60006125b282610ede565b90506125c0816000846126b8565b6125cb600083611ce9565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261b9190614170565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126c783836128af565b6126d46000848484612718565b612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90613b1c565b60405180910390fd5b505050565b60006127398473ffffffffffffffffffffffffffffffffffffffff16612a34565b156128a2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612762611ce1565b8786866040518563ffffffff1660e01b81526004016127849493929190613a48565b602060405180830381600087803b15801561279e57600080fd5b505af19250505080156127cf57506040513d601f19601f820116820180604052508101906127cc9190612fa8565b60015b612852573d80600081146127ff576040519150601f19603f3d011682016040523d82523d6000602084013e612804565b606091505b5060008151141561284a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284190613b1c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561291f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291690613cdc565b60405180910390fd5b61292b600083836126b8565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461297b91906140e9565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a53906142a5565b90600052602060002090601f016020900481019282612a755760008555612abc565b82601f10612a8e57805160ff1916838001178555612abc565b82800160010185558215612abc579182015b82811115612abb578251825591602001919060010190612aa0565b5b509050612ac99190612b53565b5090565b828054612ad9906142a5565b90600052602060002090601f016020900481019282612afb5760008555612b42565b82601f10612b1457803560ff1916838001178555612b42565b82800160010185558215612b42579182015b82811115612b41578235825591602001919060010190612b26565b5b509050612b4f9190612b53565b5090565b5b80821115612b6c576000816000905550600101612b54565b5090565b6000612b83612b7e84614024565b613fff565b905082815260208101848484011115612b9f57612b9e6144c2565b5b612baa848285614263565b509392505050565b6000612bc5612bc084614055565b613fff565b905082815260208101848484011115612be157612be06144c2565b5b612bec848285614263565b509392505050565b600081359050612c0381614c37565b92915050565b600081519050612c1881614c4e565b92915050565b600081359050612c2d81614c65565b92915050565b600081359050612c4281614c7c565b92915050565b600081519050612c5781614c7c565b92915050565b60008083601f840112612c7357612c726144b8565b5b8235905067ffffffffffffffff811115612c9057612c8f6144b3565b5b602083019150836001820283011115612cac57612cab6144bd565b5b9250929050565b600082601f830112612cc857612cc76144b8565b5b8135612cd8848260208601612b70565b91505092915050565b600082601f830112612cf657612cf56144b8565b5b8135612d06848260208601612bb2565b91505092915050565b600081359050612d1e81614c93565b92915050565b600081359050612d3381614caa565b92915050565b600081519050612d4881614caa565b92915050565b600081359050612d5d81614cc1565b92915050565b600081359050612d7281614cd8565b92915050565b600060208284031215612d8e57612d8d6144cc565b5b6000612d9c84828501612bf4565b91505092915050565b60008060408385031215612dbc57612dbb6144cc565b5b6000612dca85828601612c09565b9250506020612ddb85828601612d39565b9150509250929050565b60008060408385031215612dfc57612dfb6144cc565b5b6000612e0a85828601612bf4565b9250506020612e1b85828601612bf4565b9150509250929050565b600080600060608486031215612e3e57612e3d6144cc565b5b6000612e4c86828701612bf4565b9350506020612e5d86828701612bf4565b9250506040612e6e86828701612d24565b9150509250925092565b60008060008060808587031215612e9257612e916144cc565b5b6000612ea087828801612bf4565b9450506020612eb187828801612bf4565b9350506040612ec287828801612d24565b925050606085013567ffffffffffffffff811115612ee357612ee26144c7565b5b612eef87828801612cb3565b91505092959194509250565b60008060408385031215612f1257612f116144cc565b5b6000612f2085828601612bf4565b9250506020612f3185828601612c1e565b9150509250929050565b60008060408385031215612f5257612f516144cc565b5b6000612f6085828601612bf4565b9250506020612f7185828601612d24565b9150509250929050565b600060208284031215612f9157612f906144cc565b5b6000612f9f84828501612c33565b91505092915050565b600060208284031215612fbe57612fbd6144cc565b5b6000612fcc84828501612c48565b91505092915050565b600060208284031215612feb57612fea6144cc565b5b600082013567ffffffffffffffff811115613009576130086144c7565b5b61301584828501612ce1565b91505092915050565b600060208284031215613034576130336144cc565b5b600061304284828501612d0f565b91505092915050565b600080600060408486031215613064576130636144cc565b5b600061307286828701612d0f565b935050602084013567ffffffffffffffff811115613093576130926144c7565b5b61309f86828701612c5d565b92509250509250925092565b6000806000606084860312156130c4576130c36144cc565b5b60006130d286828701612d0f565b935050602084013567ffffffffffffffff8111156130f3576130f26144c7565b5b6130ff86828701612cb3565b925050604061311086828701612d24565b9150509250925092565b600080600080600060808688031215613136576131356144cc565b5b600061314488828901612d0f565b955050602086013567ffffffffffffffff811115613165576131646144c7565b5b61317188828901612cb3565b945050604061318288828901612d4e565b935050606086013567ffffffffffffffff8111156131a3576131a26144c7565b5b6131af88828901612c5d565b92509250509295509295909350565b600080600080608085870312156131d8576131d76144cc565b5b60006131e687828801612d0f565b945050602085013567ffffffffffffffff811115613207576132066144c7565b5b61321387828801612cb3565b935050604061322487828801612d4e565b925050606085013567ffffffffffffffff811115613245576132446144c7565b5b61325187828801612cb3565b91505092959194509250565b60008060408385031215613274576132736144cc565b5b600061328285828601612d0f565b925050602061329385828601612d24565b9150509250929050565b6000602082840312156132b3576132b26144cc565b5b60006132c184828501612d24565b91505092915050565b600080604083850312156132e1576132e06144cc565b5b60006132ef85828601612d39565b925050602061330085828601612d39565b9150509250929050565b6000602082840312156133205761331f6144cc565b5b600061332e84828501612d63565b91505092915050565b613340816141b6565b82525050565b61334f816141a4565b82525050565b61335e816141c8565b82525050565b61336d816141d4565b82525050565b600061337f83856140b1565b935061338c838584614263565b613395836144d1565b840190509392505050565b60006133ac83856140c2565b93506133b9838584614263565b82840190509392505050565b60006133d08261409b565b6133da81856140b1565b93506133ea818560208601614272565b6133f3816144d1565b840191505092915050565b60006134098261409b565b61341381856140c2565b9350613423818560208601614272565b80840191505092915050565b6000815461343c816142a5565b61344681866140b1565b945060018216600081146134615760018114613473576134a6565b60ff19831686526020860193506134a6565b61347c85614086565b60005b8381101561349e5781548189015260018201915060208101905061347f565b808801955050505b50505092915050565b600081546134bc816142a5565b6134c681866140c2565b945060018216600081146134e157600181146134f257613525565b60ff19831686528186019350613525565b6134fb85614086565b60005b8381101561351d578154818901526001820191506020810190506134fe565b838801955050505b50505092915050565b6000613539826140a6565b61354381856140cd565b9350613553818560208601614272565b61355c816144d1565b840191505092915050565b6000613572826140a6565b61357c81856140de565b935061358c818560208601614272565b80840191505092915050565b60006135a56032836140cd565b91506135b0826144ef565b604082019050919050565b60006135c86026836140cd565b91506135d38261453e565b604082019050919050565b60006135eb6024836140cd565b91506135f68261458d565b604082019050919050565b600061360e6019836140cd565b9150613619826145dc565b602082019050919050565b6000613631602e836140cd565b915061363c82614605565b604082019050919050565b6000613654601a836140cd565b915061365f82614654565b602082019050919050565b60006136776022836140cd565b91506136828261467d565b604082019050919050565b600061369a6022836140cd565b91506136a5826146cc565b604082019050919050565b60006136bd602c836140cd565b91506136c88261471b565b604082019050919050565b60006136e06038836140cd565b91506136eb8261476a565b604082019050919050565b6000613703602a836140cd565b915061370e826147b9565b604082019050919050565b60006137266029836140cd565b915061373182614808565b604082019050919050565b6000613749602b836140cd565b915061375482614857565b604082019050919050565b600061376c604d836140cd565b9150613777826148a6565b606082019050919050565b600061378f6020836140cd565b915061379a8261491b565b602082019050919050565b60006137b2602c836140cd565b91506137bd82614944565b604082019050919050565b60006137d56020836140cd565b91506137e082614993565b602082019050919050565b60006137f86034836140cd565b9150613803826149bc565b604082019050919050565b600061381b6029836140cd565b915061382682614a0b565b604082019050919050565b600061383e602c836140cd565b915061384982614a5a565b604082019050919050565b6000613861602f836140cd565b915061386c82614aa9565b604082019050919050565b60006138846021836140cd565b915061388f82614af8565b604082019050919050565b60006138a76000836140c2565b91506138b282614b47565b600082019050919050565b60006138ca6031836140cd565b91506138d582614b4a565b604082019050919050565b60006138ed6026836140cd565b91506138f882614b99565b604082019050919050565b6000613910602e836140cd565b915061391b82614be8565b604082019050919050565b61392f8161420a565b82525050565b6139466139418261420a565b61437b565b82525050565b61395581614238565b82525050565b61396c61396782614238565b61438d565b82525050565b61397b81614242565b82525050565b600061398e8284866133a0565b91508190509392505050565b60006139a682846133fe565b915081905092915050565b60006139bd82846134af565b915081905092915050565b60006139d48285613567565b91506139e08284613567565b91508190509392505050565b60006139f78261389a565b9150819050919050565b6000613a0d8285613935565b600282019150613a1d828461395b565b6020820191508190509392505050565b6000602082019050613a426000830184613346565b92915050565b6000608082019050613a5d6000830187613346565b613a6a6020830186613346565b613a77604083018561394c565b8181036060830152613a8981846133c5565b905095945050505050565b6000604082019050613aa96000830185613346565b613ab6602083018461394c565b9392505050565b6000602082019050613ad26000830184613355565b92915050565b60006020820190508181036000830152613af281846133c5565b905092915050565b60006020820190508181036000830152613b14818461352e565b905092915050565b60006020820190508181036000830152613b3581613598565b9050919050565b60006020820190508181036000830152613b55816135bb565b9050919050565b60006020820190508181036000830152613b75816135de565b9050919050565b60006020820190508181036000830152613b9581613601565b9050919050565b60006020820190508181036000830152613bb581613624565b9050919050565b60006020820190508181036000830152613bd581613647565b9050919050565b60006020820190508181036000830152613bf58161366a565b9050919050565b60006020820190508181036000830152613c158161368d565b9050919050565b60006020820190508181036000830152613c35816136b0565b9050919050565b60006020820190508181036000830152613c55816136d3565b9050919050565b60006020820190508181036000830152613c75816136f6565b9050919050565b60006020820190508181036000830152613c9581613719565b9050919050565b60006020820190508181036000830152613cb58161373c565b9050919050565b60006020820190508181036000830152613cd58161375f565b9050919050565b60006020820190508181036000830152613cf581613782565b9050919050565b60006020820190508181036000830152613d15816137a5565b9050919050565b60006020820190508181036000830152613d35816137c8565b9050919050565b60006020820190508181036000830152613d55816137eb565b9050919050565b60006020820190508181036000830152613d758161380e565b9050919050565b60006020820190508181036000830152613d9581613831565b9050919050565b60006020820190508181036000830152613db581613854565b9050919050565b60006020820190508181036000830152613dd581613877565b9050919050565b60006020820190508181036000830152613df5816138bd565b9050919050565b60006020820190508181036000830152613e15816138e0565b9050919050565b60006020820190508181036000830152613e3581613903565b9050919050565b600060a082019050613e516000830188613926565b613e5e6020830187613346565b8181036040830152613e7081866133c5565b9050613e7f6060830185613355565b8181036080830152613e9181846133c5565b90509695505050505050565b6000608082019050613eb26000830188613926565b8181036020830152613ec481876133c5565b9050613ed36040830186613972565b8181036060830152613ee6818486613373565b90509695505050505050565b6000608082019050613f076000830187613926565b8181036020830152613f1981866133c5565b9050613f286040830185613972565b8181036060830152613f3a81846133c5565b905095945050505050565b600060c082019050613f5a6000830189613926565b8181036020830152613f6c818861342f565b90508181036040830152613f8081876133c5565b9050613f8f6060830186613337565b613f9c6080830185613346565b81810360a0830152613fae81846133c5565b9050979650505050505050565b6000602082019050613fd0600083018461394c565b92915050565b6000604082019050613feb600083018561394c565b613ff86020830184613364565b9392505050565b600061400961401a565b905061401582826142d7565b919050565b6000604051905090565b600067ffffffffffffffff82111561403f5761403e614484565b5b614048826144d1565b9050602081019050919050565b600067ffffffffffffffff8211156140705761406f614484565b5b614079826144d1565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140f482614238565b91506140ff83614238565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614134576141336143c8565b5b828201905092915050565b600061414a82614238565b915061415583614238565b925082614165576141646143f7565b5b828204905092915050565b600061417b82614238565b915061418683614238565b925082821015614199576141986143c8565b5b828203905092915050565b60006141af82614218565b9050919050565b60006141c182614218565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614290578082015181840152602081019050614275565b8381111561429f576000848401525b50505050565b600060028204905060018216806142bd57607f821691505b602082108114156142d1576142d0614426565b5b50919050565b6142e0826144d1565b810181811067ffffffffffffffff821117156142ff576142fe614484565b5b80604052505050565b600061431382614238565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614346576143456143c8565b5b600182019050919050565b600061435c82614256565b915060ff8214156143705761436f6143c8565b5b600182019050919050565b6000614386826144e2565b9050919050565b6000819050919050565b60006143a282614238565b91506143ad83614238565b9250826143bd576143bc6143f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a204661696c656420746f2077697468647261772066756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a206d73672e76616c7565206e6f7420656e6f756768207460008201527f6f20636f766572206d6573736167654665652e2053656e642067617320666f7260208201527f206d657373616765206665657300000000000000000000000000000000000000604082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a204d6178206d696e74207065722077616c6c657420616d60008201527f6f756e7420726561636865640000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f54696e79446f67653a204d696e74206578636565647320737570706c7920666f60008201527f722074686973206e6574776f726b000000000000000000000000000000000000602082015250565b614c40816141a4565b8114614c4b57600080fd5b50565b614c57816141b6565b8114614c6257600080fd5b50565b614c6e816141c8565b8114614c7957600080fd5b50565b614c85816141de565b8114614c9057600080fd5b50565b614c9c8161420a565b8114614ca757600080fd5b50565b614cb381614238565b8114614cbe57600080fd5b50565b614cca81614242565b8114614cd557600080fd5b50565b614ce181614256565b8114614cec57600080fd5b5056fea2646970667358221220552e51a04b8a3ba1ce0231a96043e45759883d09829149874ea6fc4d477d816964736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6433616d30376372766e7472302e636c6f756466726f6e742e6e65742f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://d3am07crvntr0.cloudfront.net/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
Arg [2] : _nextTokenId (uint256): 1800
Arg [3] : _maxAmount (uint256): 3000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000708
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000bb8
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [5] : 68747470733a2f2f6433616d30376372766e7472302e636c6f756466726f6e74
Arg [6] : 2e6e65742f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

32110:3769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28770:1098;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19972:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22189:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21770:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29876:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22922:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35017:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23306:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34919:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20638:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32777:428;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20335:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11608:103;;;;;;;;;;;;;:::i;:::-;;28569:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10957:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28460:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35208:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21080:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22505:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32175:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23499:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21192:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33213:1698;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30971:916;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22700:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31895:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11866:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28770:1098;28975:8;;;;;;;;;;;28953:31;;:10;:31;;;28945:40;;;;;;29110:19;:32;29130:11;29110:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;29088:11;:18;:61;:168;;;;;29223:19;:32;29243:11;29223:32;;;;;;;;;;;;;;;29213:43;;;;;;:::i;:::-;;;;;;;;29180:11;29170:22;;;;;;:86;29088:168;29066:270;;;;;;;;;;;;:::i;:::-;;;;;;;;;29464:4;:16;;;29481:11;29494;29507:6;29515:8;29464:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29460:401;;29671:101;;;;;;;;29704:8;:15;29671:101;;;;29748:8;29738:19;;;;;;29671:101;;;29620:14;:27;29635:11;29620:27;;;;;;;;;;;;;;;29648:11;29620:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;29661:6;29620:48;;;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;29792:57;29806:11;29819;29832:6;29840:8;29792:57;;;;;;;;;:::i;:::-;;;;;;;;29460:401;;;;28770:1098;;;;:::o;19972:355::-;20119:4;20176:25;20161:40;;;:11;:40;;;;:105;;;;20233:33;20218:48;;;:11;:48;;;;20161:105;:158;;;;20283:36;20307:11;20283:23;:36::i;:::-;20161:158;20141:178;;19972:355;;;:::o;20972:100::-;21026:13;21059:5;21052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20972:100;:::o;22189:308::-;22310:7;22357:16;22365:7;22357;:16::i;:::-;22335:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:15;:24;22481:7;22465:24;;;;;;;;;;;;;;;;;;;;;22458:31;;22189:308;;;:::o;21770:411::-;21851:13;21867:23;21882:7;21867:14;:23::i;:::-;21851:39;;21915:5;21909:11;;:2;:11;;;;21901:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22009:5;21993:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22018:37;22035:5;22042:12;:10;:12::i;:::-;22018:16;:37::i;:::-;21993:62;21971:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22152:21;22161:2;22165:7;22152:8;:21::i;:::-;21840:341;21770:411;;:::o;29876:435::-;30124:4;30102:27;;:10;:27;;;30080:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30249:54;30260:11;30273;30286:6;30294:8;30249:10;:54::i;:::-;29876:435;;;;:::o;22922:376::-;23131:41;23150:12;:10;:12::i;:::-;23164:7;23131:18;:41::i;:::-;23109:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23262:28;23272:4;23278:2;23282:7;23262:9;:28::i;:::-;22922:376;;;:::o;35017:183::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35079:9:::1;35102:6;;;;;;;;;;;35094:20;;35122:3;35094:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35078:52;;;35149:4;35141:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35067:133;35017:183:::0;:::o;23306:185::-;23444:39;23461:4;23467:2;23471:7;23444:39;;;;;;;;;;;;:16;:39::i;:::-;23306:185;;;:::o;34919:90::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34998:3:::1;34988:7;:13;;;;;;;;;;;;:::i;:::-;;34919:90:::0;:::o;20638:326::-;20755:7;20780:13;20796:7;:16;20804:7;20796:16;;;;;;;;;;;;;;;;;;;;;20780:32;;20862:1;20845:19;;:5;:19;;;;20823:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20951:5;20944:12;;;20638:326;;;:::o;32777:428::-;32881:13;;32868:9;32844:33;;:21;32854:10;32844:9;:21::i;:::-;:33;;;;:::i;:::-;:50;;32836:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;33003:9;;32990;32976:23;;:11;;:23;;;;:::i;:::-;:36;;32954:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;33102:7;33097:101;33119:9;33115:13;;:1;:13;;;33097:101;;;33150:36;33160:10;33174:11;;33172:13;;;;;:::i;:::-;;;;;;;33150:9;:36::i;:::-;33130:3;;;;;:::i;:::-;;;;33097:101;;;;32777:428;:::o;20335:295::-;20452:7;20516:1;20499:19;;:5;:19;;;;20477:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20606:9;:16;20616:5;20606:16;;;;;;;;;;;;;;;;20599:23;;20335:295;;;:::o;11608:103::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11673:30:::1;11700:1;11673:18;:30::i;:::-;11608:103::o:0;28569:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10957:87::-;11003:7;11030:6;;;;;;;;;;;11023:13;;10957:87;:::o;28460:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35208:128::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35322:6:::1;35293:26;:35;;;;35208:128:::0;:::o;21080:104::-;21136:13;21169:7;21162:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21080:104;:::o;22505:187::-;22632:52;22651:12;:10;:12::i;:::-;22665:8;22675;22632:18;:52::i;:::-;22505:187;;:::o;32175:21::-;;;;;;;;;;;;;:::o;23499:365::-;23688:41;23707:12;:10;:12::i;:::-;23721:7;23688:18;:41::i;:::-;23666:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23817:39;23831:4;23837:2;23841:7;23850:5;23817:13;:39::i;:::-;23499:365;;;;:::o;21192:468::-;21310:13;21363:16;21371:7;21363;:16::i;:::-;21341:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;21467:21;21491:10;:8;:10::i;:::-;21467:34;;21556:1;21538:7;21532:21;:25;:120;;;;;;;;;;;;;;;;;21601:7;21610:18;:7;:16;:18::i;:::-;21584:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21532:120;21512:140;;;21192:468;;;:::o;33213:1698::-;33333:16;33341:7;33333;:16::i;:::-;33319:30;;:10;:30;;;33297:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33483:1;33444:19;:29;33464:8;33444:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;33422:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;33638:14;33644:7;33638:5;:14::i;:::-;33726:20;33760:10;33772:7;33749:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33726:54;;33866:14;33883:1;33866:18;;33895:26;33955:7;33977:26;;33924:90;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33895:119;;34169:18;34193:8;;;;;;;;;;;:21;;;34229:8;34260:4;34280:7;34302:5;34322:13;34193:153;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34168:178;;;34394:10;34381:9;:23;;34359:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34522:8;;;;;;;;;;;:13;;;34543:9;34568:8;34614:19;:29;34634:8;34614:29;;;;;;;;;;;;;;;34697:7;34753:10;34805:3;34863:13;34522:381;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33286:1625;;;;33213:1698;;:::o;30971:916::-;31195:32;31230:14;:27;31245:11;31230:27;;;;;;;;;;;;;;;31272:11;31230:64;;;;;;:::i;:::-;;;;;;;;;;;;;:72;31295:6;31230:72;;;;;;;;;;;;;31195:107;;31368:1;31360:10;;31335:9;:21;;;:35;;31313:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;31488:9;:23;;;31469:8;;:15;;:42;:107;;;;;31555:9;:21;;;31542:8;;31532:19;;;;;;;:::i;:::-;;;;;;;;:44;31469:107;31447:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;31704:1;31678:9;:23;;:27;;;;31748:1;31740:10;;31716:9;:21;;:34;;;;31819:4;:16;;;31836:11;31849;31862:6;31870:8;;31819:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31139:748;30971:916;;;;;:::o;22700:214::-;22842:4;22871:18;:25;22890:5;22871:25;;;;;;;;;;;;;;;:35;22897:8;22871:35;;;;;;;;;;;;;;;;;;;;;;;;;22864:42;;22700:214;;;;:::o;31895:181::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:14:::1;;32022:19;:29;32042:8;32022:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;31895:181:::0;;;:::o;11866:238::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11989:1:::1;11969:22;;:8;:22;;;;11947:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12068:28;12087:8;12068:18;:28::i;:::-;11866:238:::0;:::o;17285:207::-;17415:4;17459:25;17444:40;;;:11;:40;;;;17437:47;;17285:207;;;:::o;24232:127::-;24297:4;24349:1;24321:30;;:7;:16;24329:7;24321:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24314:37;;24232:127;;;:::o;10279:98::-;10332:7;10359:10;10352:17;;10279:98;:::o;26586:174::-;26688:2;26661:15;:24;26677:7;26661:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26744:7;26740:2;26706:46;;26715:23;26730:7;26715:14;:23::i;:::-;26706:46;;;;;;;;;;;;26586:174;;:::o;35344:424::-;35540:14;35556:15;35600:8;35575:77;;;;;;;;;;;;:::i;:::-;35539:113;;;;35734:26;35744:6;35752:7;35734:9;:26::i;:::-;35509:259;;35344:424;;;;:::o;24367:452::-;24496:4;24540:16;24548:7;24540;:16::i;:::-;24518:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24639:13;24655:23;24670:7;24655:14;:23::i;:::-;24639:39;;24708:5;24697:16;;:7;:16;;;:64;;;;24754:7;24730:31;;:20;24742:7;24730:11;:20::i;:::-;:31;;;24697:64;:113;;;;24778:32;24795:5;24802:7;24778:16;:32::i;:::-;24697:113;24689:122;;;24367:452;;;;:::o;25963:615::-;26136:4;26109:31;;:23;26124:7;26109:14;:23::i;:::-;:31;;;26087:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26242:1;26228:16;;:2;:16;;;;26220:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26298:39;26319:4;26325:2;26329:7;26298:20;:39::i;:::-;26402:29;26419:1;26423:7;26402:8;:29::i;:::-;26463:1;26444:9;:15;26454:4;26444:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;26492:1;26475:9;:13;26485:2;26475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26523:2;26504:7;:16;26512:7;26504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26562:7;26558:2;26543:27;;26552:4;26543:27;;;;;;;;;;;;25963:615;;;:::o;24827:110::-;24903:26;24913:2;24917:7;24903:26;;;;;;;;;;;;:9;:26::i;:::-;24827:110;;:::o;12264:191::-;12338:16;12357:6;;;;;;;;;;;12338:25;;12383:8;12374:6;;:17;;;;;;;;;;;;;;;;;;12438:8;12407:40;;12428:8;12407:40;;;;;;;;;;;;12327:128;12264:191;:::o;26768:315::-;26923:8;26914:17;;:5;:17;;;;26906:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27010:8;26972:18;:25;26991:5;26972:25;;;;;;;;;;;;;;;:35;26998:8;26972:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27056:8;27034:41;;27049:5;27034:41;;;27066:8;27034:41;;;;;;:::i;:::-;;;;;;;;26768:315;;;:::o;23872:352::-;24029:28;24039:4;24045:2;24049:7;24029:9;:28::i;:::-;24090:48;24113:4;24119:2;24123:7;24132:5;24090:22;:48::i;:::-;24068:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;23872:352;;;;:::o;35776:100::-;35828:13;35861:7;35854:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35776:100;:::o;8428:723::-;8484:13;8714:1;8705:5;:10;8701:53;;;8732:10;;;;;;;;;;;;;;;;;;;;;8701:53;8764:12;8779:5;8764:20;;8795:14;8820:78;8835:1;8827:4;:9;8820:78;;8853:8;;;;;:::i;:::-;;;;8884:2;8876:10;;;;;:::i;:::-;;;8820:78;;;8908:19;8940:6;8930:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8908:39;;8958:154;8974:1;8965:5;:10;8958:154;;9002:1;8992:11;;;;;:::i;:::-;;;9069:2;9061:5;:10;;;;:::i;:::-;9048:2;:24;;;;:::i;:::-;9035:39;;9018:6;9025;9018:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9098:2;9089:11;;;;;:::i;:::-;;;8958:154;;;9136:6;9122:21;;;;;8428:723;;;;:::o;25595:360::-;25655:13;25671:23;25686:7;25671:14;:23::i;:::-;25655:39;;25707:48;25728:5;25743:1;25747:7;25707:20;:48::i;:::-;25796:29;25813:1;25817:7;25796:8;:29::i;:::-;25858:1;25838:9;:16;25848:5;25838:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;25877:7;:16;25885:7;25877:16;;;;;;;;;;;;25870:23;;;;;;;;;;;25939:7;25935:1;25911:36;;25920:5;25911:36;;;;;;;;;;;;25644:311;25595:360;:::o;28079:126::-;;;;:::o;24945:321::-;25075:18;25081:2;25085:7;25075:5;:18::i;:::-;25126:54;25157:1;25161:2;25165:7;25174:5;25126:22;:54::i;:::-;25104:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24945:321;;;:::o;27091:980::-;27246:4;27267:15;:2;:13;;;:15::i;:::-;27263:801;;;27336:2;27320:36;;;27379:12;:10;:12::i;:::-;27414:4;27441:7;27471:5;27320:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27299:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:1;27678:6;:13;:18;27674:320;;;27721:108;;;;;;;;;;:::i;:::-;;;;;;;;27674:320;27944:6;27938:13;27929:6;27925:2;27921:15;27914:38;27299:710;27569:41;;;27559:51;;;:6;:51;;;;27552:58;;;;;27263:801;28048:4;28041:11;;27091:980;;;;;;;:::o;25274:313::-;25368:1;25354:16;;:2;:16;;;;25346:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25420:45;25449:1;25453:2;25457:7;25420:20;:45::i;:::-;25495:1;25478:9;:13;25488:2;25478:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25526:2;25507:7;:16;25515:7;25507:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25571:7;25567:2;25546:33;;25563:1;25546:33;;;;;;;;;;;;25274:313;;:::o;12512:387::-;12572:4;12780:12;12847:7;12835:20;12827:28;;12890:1;12883:4;:8;12876:15;;;12512:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:159::-;1051:5;1082:6;1076:13;1067:22;;1098:41;1133:5;1098:41;:::i;:::-;986:159;;;;:::o;1151:133::-;1194:5;1232:6;1219:20;1210:29;;1248:30;1272:5;1248:30;:::i;:::-;1151:133;;;;:::o;1290:137::-;1335:5;1373:6;1360:20;1351:29;;1389:32;1415:5;1389:32;:::i;:::-;1290:137;;;;:::o;1433:141::-;1489:5;1520:6;1514:13;1505:22;;1536:32;1562:5;1536:32;:::i;:::-;1433:141;;;;:::o;1593:552::-;1650:8;1660:6;1710:3;1703:4;1695:6;1691:17;1687:27;1677:122;;1718:79;;:::i;:::-;1677:122;1831:6;1818:20;1808:30;;1861:18;1853:6;1850:30;1847:117;;;1883:79;;:::i;:::-;1847:117;1997:4;1989:6;1985:17;1973:29;;2051:3;2043:4;2035:6;2031:17;2021:8;2017:32;2014:41;2011:128;;;2058:79;;:::i;:::-;2011:128;1593:552;;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:143::-;3213:5;3244:6;3238:13;3229:22;;3260:33;3287:5;3260:33;:::i;:::-;3156:143;;;;:::o;3305:137::-;3350:5;3388:6;3375:20;3366:29;;3404:32;3430:5;3404:32;:::i;:::-;3305:137;;;;:::o;3448:135::-;3492:5;3530:6;3517:20;3508:29;;3546:31;3571:5;3546:31;:::i;:::-;3448:135;;;;:::o;3589:329::-;3648:6;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3589:329;;;;:::o;3924:523::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:72;4283:7;4274:6;4263:9;4259:22;4219:72;:::i;:::-;4209:82;;4165:136;4340:2;4366:64;4422:7;4413:6;4402:9;4398:22;4366:64;:::i;:::-;4356:74;;4311:129;3924:523;;;;;:::o;4453:474::-;4521:6;4529;4578:2;4566:9;4557:7;4553:23;4549:32;4546:119;;;4584:79;;:::i;:::-;4546:119;4704:1;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4675:117;4831:2;4857:53;4902:7;4893:6;4882:9;4878:22;4857:53;:::i;:::-;4847:63;;4802:118;4453:474;;;;;:::o;4933:619::-;5010:6;5018;5026;5075:2;5063:9;5054:7;5050:23;5046:32;5043:119;;;5081:79;;:::i;:::-;5043:119;5201:1;5226:53;5271:7;5262:6;5251:9;5247:22;5226:53;:::i;:::-;5216:63;;5172:117;5328:2;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5299:118;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;4933:619;;;;;:::o;5558:943::-;5653:6;5661;5669;5677;5726:3;5714:9;5705:7;5701:23;5697:33;5694:120;;;5733:79;;:::i;:::-;5694:120;5853:1;5878:53;5923:7;5914:6;5903:9;5899:22;5878:53;:::i;:::-;5868:63;;5824:117;5980:2;6006:53;6051:7;6042:6;6031:9;6027:22;6006:53;:::i;:::-;5996:63;;5951:118;6108:2;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6079:118;6264:2;6253:9;6249:18;6236:32;6295:18;6287:6;6284:30;6281:117;;;6317:79;;:::i;:::-;6281:117;6422:62;6476:7;6467:6;6456:9;6452:22;6422:62;:::i;:::-;6412:72;;6207:287;5558:943;;;;;;;:::o;6507:468::-;6572:6;6580;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:53;6825:7;6816:6;6805:9;6801:22;6780:53;:::i;:::-;6770:63;;6726:117;6882:2;6908:50;6950:7;6941:6;6930:9;6926:22;6908:50;:::i;:::-;6898:60;;6853:115;6507:468;;;;;:::o;6981:474::-;7049:6;7057;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;7359:2;7385:53;7430:7;7421:6;7410:9;7406:22;7385:53;:::i;:::-;7375:63;;7330:118;6981:474;;;;;:::o;7461:327::-;7519:6;7568:2;7556:9;7547:7;7543:23;7539:32;7536:119;;;7574:79;;:::i;:::-;7536:119;7694:1;7719:52;7763:7;7754:6;7743:9;7739:22;7719:52;:::i;:::-;7709:62;;7665:116;7461:327;;;;:::o;7794:349::-;7863:6;7912:2;7900:9;7891:7;7887:23;7883:32;7880:119;;;7918:79;;:::i;:::-;7880:119;8038:1;8063:63;8118:7;8109:6;8098:9;8094:22;8063:63;:::i;:::-;8053:73;;8009:127;7794:349;;;;:::o;8149:509::-;8218:6;8267:2;8255:9;8246:7;8242:23;8238:32;8235:119;;;8273:79;;:::i;:::-;8235:119;8421:1;8410:9;8406:17;8393:31;8451:18;8443:6;8440:30;8437:117;;;8473:79;;:::i;:::-;8437:117;8578:63;8633:7;8624:6;8613:9;8609:22;8578:63;:::i;:::-;8568:73;;8364:287;8149:509;;;;:::o;8664:327::-;8722:6;8771:2;8759:9;8750:7;8746:23;8742:32;8739:119;;;8777:79;;:::i;:::-;8739:119;8897:1;8922:52;8966:7;8957:6;8946:9;8942:22;8922:52;:::i;:::-;8912:62;;8868:116;8664:327;;;;:::o;8997:670::-;9075:6;9083;9091;9140:2;9128:9;9119:7;9115:23;9111:32;9108:119;;;9146:79;;:::i;:::-;9108:119;9266:1;9291:52;9335:7;9326:6;9315:9;9311:22;9291:52;:::i;:::-;9281:62;;9237:116;9420:2;9409:9;9405:18;9392:32;9451:18;9443:6;9440:30;9437:117;;;9473:79;;:::i;:::-;9437:117;9586:64;9642:7;9633:6;9622:9;9618:22;9586:64;:::i;:::-;9568:82;;;;9363:297;8997:670;;;;;:::o;9673:795::-;9758:6;9766;9774;9823:2;9811:9;9802:7;9798:23;9794:32;9791:119;;;9829:79;;:::i;:::-;9791:119;9949:1;9974:52;10018:7;10009:6;9998:9;9994:22;9974:52;:::i;:::-;9964:62;;9920:116;10103:2;10092:9;10088:18;10075:32;10134:18;10126:6;10123:30;10120:117;;;10156:79;;:::i;:::-;10120:117;10261:62;10315:7;10306:6;10295:9;10291:22;10261:62;:::i;:::-;10251:72;;10046:287;10372:2;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10343:118;9673:795;;;;;:::o;10474:1137::-;10578:6;10586;10594;10602;10610;10659:3;10647:9;10638:7;10634:23;10630:33;10627:120;;;10666:79;;:::i;:::-;10627:120;10786:1;10811:52;10855:7;10846:6;10835:9;10831:22;10811:52;:::i;:::-;10801:62;;10757:116;10940:2;10929:9;10925:18;10912:32;10971:18;10963:6;10960:30;10957:117;;;10993:79;;:::i;:::-;10957:117;11098:62;11152:7;11143:6;11132:9;11128:22;11098:62;:::i;:::-;11088:72;;10883:287;11209:2;11235:52;11279:7;11270:6;11259:9;11255:22;11235:52;:::i;:::-;11225:62;;11180:117;11364:2;11353:9;11349:18;11336:32;11395:18;11387:6;11384:30;11381:117;;;11417:79;;:::i;:::-;11381:117;11530:64;11586:7;11577:6;11566:9;11562:22;11530:64;:::i;:::-;11512:82;;;;11307:297;10474:1137;;;;;;;;:::o;11617:1117::-;11719:6;11727;11735;11743;11792:3;11780:9;11771:7;11767:23;11763:33;11760:120;;;11799:79;;:::i;:::-;11760:120;11919:1;11944:52;11988:7;11979:6;11968:9;11964:22;11944:52;:::i;:::-;11934:62;;11890:116;12073:2;12062:9;12058:18;12045:32;12104:18;12096:6;12093:30;12090:117;;;12126:79;;:::i;:::-;12090:117;12231:62;12285:7;12276:6;12265:9;12261:22;12231:62;:::i;:::-;12221:72;;12016:287;12342:2;12368:52;12412:7;12403:6;12392:9;12388:22;12368:52;:::i;:::-;12358:62;;12313:117;12497:2;12486:9;12482:18;12469:32;12528:18;12520:6;12517:30;12514:117;;;12550:79;;:::i;:::-;12514:117;12655:62;12709:7;12700:6;12689:9;12685:22;12655:62;:::i;:::-;12645:72;;12440:287;11617:1117;;;;;;;:::o;12740:472::-;12807:6;12815;12864:2;12852:9;12843:7;12839:23;12835:32;12832:119;;;12870:79;;:::i;:::-;12832:119;12990:1;13015:52;13059:7;13050:6;13039:9;13035:22;13015:52;:::i;:::-;13005:62;;12961:116;13116:2;13142:53;13187:7;13178:6;13167:9;13163:22;13142:53;:::i;:::-;13132:63;;13087:118;12740:472;;;;;:::o;13218:329::-;13277:6;13326:2;13314:9;13305:7;13301:23;13297:32;13294:119;;;13332:79;;:::i;:::-;13294:119;13452:1;13477:53;13522:7;13513:6;13502:9;13498:22;13477:53;:::i;:::-;13467:63;;13423:117;13218:329;;;;:::o;13553:507::-;13632:6;13640;13689:2;13677:9;13668:7;13664:23;13660:32;13657:119;;;13695:79;;:::i;:::-;13657:119;13815:1;13840:64;13896:7;13887:6;13876:9;13872:22;13840:64;:::i;:::-;13830:74;;13786:128;13953:2;13979:64;14035:7;14026:6;14015:9;14011:22;13979:64;:::i;:::-;13969:74;;13924:129;13553:507;;;;;:::o;14066:325::-;14123:6;14172:2;14160:9;14151:7;14147:23;14143:32;14140:119;;;14178:79;;:::i;:::-;14140:119;14298:1;14323:51;14366:7;14357:6;14346:9;14342:22;14323:51;:::i;:::-;14313:61;;14269:115;14066:325;;;;:::o;14397:142::-;14500:32;14526:5;14500:32;:::i;:::-;14495:3;14488:45;14397:142;;:::o;14545:118::-;14632:24;14650:5;14632:24;:::i;:::-;14627:3;14620:37;14545:118;;:::o;14669:109::-;14750:21;14765:5;14750:21;:::i;:::-;14745:3;14738:34;14669:109;;:::o;14784:118::-;14871:24;14889:5;14871:24;:::i;:::-;14866:3;14859:37;14784:118;;:::o;14930:301::-;15026:3;15047:70;15110:6;15105:3;15047:70;:::i;:::-;15040:77;;15127:43;15163:6;15158:3;15151:5;15127:43;:::i;:::-;15195:29;15217:6;15195:29;:::i;:::-;15190:3;15186:39;15179:46;;14930:301;;;;;:::o;15259:314::-;15373:3;15394:88;15475:6;15470:3;15394:88;:::i;:::-;15387:95;;15492:43;15528:6;15523:3;15516:5;15492:43;:::i;:::-;15560:6;15555:3;15551:16;15544:23;;15259:314;;;;;:::o;15579:360::-;15665:3;15693:38;15725:5;15693:38;:::i;:::-;15747:70;15810:6;15805:3;15747:70;:::i;:::-;15740:77;;15826:52;15871:6;15866:3;15859:4;15852:5;15848:16;15826:52;:::i;:::-;15903:29;15925:6;15903:29;:::i;:::-;15898:3;15894:39;15887:46;;15669:270;15579:360;;;;:::o;15945:373::-;16049:3;16077:38;16109:5;16077:38;:::i;:::-;16131:88;16212:6;16207:3;16131:88;:::i;:::-;16124:95;;16228:52;16273:6;16268:3;16261:4;16254:5;16250:16;16228:52;:::i;:::-;16305:6;16300:3;16296:16;16289:23;;16053:265;15945:373;;;;:::o;16346:798::-;16429:3;16466:5;16460:12;16495:36;16521:9;16495:36;:::i;:::-;16547:70;16610:6;16605:3;16547:70;:::i;:::-;16540:77;;16648:1;16637:9;16633:17;16664:1;16659:135;;;;16808:1;16803:335;;;;16626:512;;16659:135;16743:4;16739:9;16728;16724:25;16719:3;16712:38;16779:4;16774:3;16770:14;16763:21;;16659:135;;16803:335;16870:37;16901:5;16870:37;:::i;:::-;16929:1;16943:154;16957:6;16954:1;16951:13;16943:154;;;17031:7;17025:14;17021:1;17016:3;17012:11;17005:35;17081:1;17072:7;17068:15;17057:26;;16979:4;16976:1;16972:12;16967:17;;16943:154;;;17126:1;17121:3;17117:11;17110:18;;16810:328;;16626:512;;16433:711;;16346:798;;;;:::o;17172:841::-;17273:3;17310:5;17304:12;17339:36;17365:9;17339:36;:::i;:::-;17391:88;17472:6;17467:3;17391:88;:::i;:::-;17384:95;;17510:1;17499:9;17495:17;17526:1;17521:137;;;;17672:1;17667:340;;;;17488:519;;17521:137;17605:4;17601:9;17590;17586:25;17581:3;17574:38;17641:6;17636:3;17632:16;17625:23;;17521:137;;17667:340;17734:37;17765:5;17734:37;:::i;:::-;17793:1;17807:154;17821:6;17818:1;17815:13;17807:154;;;17895:7;17889:14;17885:1;17880:3;17876:11;17869:35;17945:1;17936:7;17932:15;17921:26;;17843:4;17840:1;17836:12;17831:17;;17807:154;;;17990:6;17985:3;17981:16;17974:23;;17674:333;;17488:519;;17277:736;;17172:841;;;;:::o;18019:364::-;18107:3;18135:39;18168:5;18135:39;:::i;:::-;18190:71;18254:6;18249:3;18190:71;:::i;:::-;18183:78;;18270:52;18315:6;18310:3;18303:4;18296:5;18292:16;18270:52;:::i;:::-;18347:29;18369:6;18347:29;:::i;:::-;18342:3;18338:39;18331:46;;18111:272;18019:364;;;;:::o;18389:377::-;18495:3;18523:39;18556:5;18523:39;:::i;:::-;18578:89;18660:6;18655:3;18578:89;:::i;:::-;18571:96;;18676:52;18721:6;18716:3;18709:4;18702:5;18698:16;18676:52;:::i;:::-;18753:6;18748:3;18744:16;18737:23;;18499:267;18389:377;;;;:::o;18772:366::-;18914:3;18935:67;18999:2;18994:3;18935:67;:::i;:::-;18928:74;;19011:93;19100:3;19011:93;:::i;:::-;19129:2;19124:3;19120:12;19113:19;;18772:366;;;:::o;19144:::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:::-;19658:3;19679:67;19743:2;19738:3;19679:67;:::i;:::-;19672:74;;19755:93;19844:3;19755:93;:::i;:::-;19873:2;19868:3;19864:12;19857:19;;19516:366;;;:::o;19888:::-;20030:3;20051:67;20115:2;20110:3;20051:67;:::i;:::-;20044:74;;20127:93;20216:3;20127:93;:::i;:::-;20245:2;20240:3;20236:12;20229:19;;19888:366;;;:::o;20260:::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:::-;20774:3;20795:67;20859:2;20854:3;20795:67;:::i;:::-;20788:74;;20871:93;20960:3;20871:93;:::i;:::-;20989:2;20984:3;20980:12;20973:19;;20632:366;;;:::o;21004:::-;21146:3;21167:67;21231:2;21226:3;21167:67;:::i;:::-;21160:74;;21243:93;21332:3;21243:93;:::i;:::-;21361:2;21356:3;21352:12;21345:19;;21004:366;;;:::o;21376:::-;21518:3;21539:67;21603:2;21598:3;21539:67;:::i;:::-;21532:74;;21615:93;21704:3;21615:93;:::i;:::-;21733:2;21728:3;21724:12;21717:19;;21376:366;;;:::o;21748:::-;21890:3;21911:67;21975:2;21970:3;21911:67;:::i;:::-;21904:74;;21987:93;22076:3;21987:93;:::i;:::-;22105:2;22100:3;22096:12;22089:19;;21748:366;;;:::o;22120:::-;22262:3;22283:67;22347:2;22342:3;22283:67;:::i;:::-;22276:74;;22359:93;22448:3;22359:93;:::i;:::-;22477:2;22472:3;22468:12;22461:19;;22120:366;;;:::o;22492:::-;22634:3;22655:67;22719:2;22714:3;22655:67;:::i;:::-;22648:74;;22731:93;22820:3;22731:93;:::i;:::-;22849:2;22844:3;22840:12;22833:19;;22492:366;;;:::o;22864:::-;23006:3;23027:67;23091:2;23086:3;23027:67;:::i;:::-;23020:74;;23103:93;23192:3;23103:93;:::i;:::-;23221:2;23216:3;23212:12;23205:19;;22864:366;;;:::o;23236:::-;23378:3;23399:67;23463:2;23458:3;23399:67;:::i;:::-;23392:74;;23475:93;23564:3;23475:93;:::i;:::-;23593:2;23588:3;23584:12;23577:19;;23236:366;;;:::o;23608:::-;23750:3;23771:67;23835:2;23830:3;23771:67;:::i;:::-;23764:74;;23847:93;23936:3;23847:93;:::i;:::-;23965:2;23960:3;23956:12;23949:19;;23608:366;;;:::o;23980:::-;24122:3;24143:67;24207:2;24202:3;24143:67;:::i;:::-;24136:74;;24219:93;24308:3;24219:93;:::i;:::-;24337:2;24332:3;24328:12;24321:19;;23980:366;;;:::o;24352:::-;24494:3;24515:67;24579:2;24574:3;24515:67;:::i;:::-;24508:74;;24591:93;24680:3;24591:93;:::i;:::-;24709:2;24704:3;24700:12;24693:19;;24352:366;;;:::o;24724:::-;24866:3;24887:67;24951:2;24946:3;24887:67;:::i;:::-;24880:74;;24963:93;25052:3;24963:93;:::i;:::-;25081:2;25076:3;25072:12;25065:19;;24724:366;;;:::o;25096:::-;25238:3;25259:67;25323:2;25318:3;25259:67;:::i;:::-;25252:74;;25335:93;25424:3;25335:93;:::i;:::-;25453:2;25448:3;25444:12;25437:19;;25096:366;;;:::o;25468:::-;25610:3;25631:67;25695:2;25690:3;25631:67;:::i;:::-;25624:74;;25707:93;25796:3;25707:93;:::i;:::-;25825:2;25820:3;25816:12;25809:19;;25468:366;;;:::o;25840:::-;25982:3;26003:67;26067:2;26062:3;26003:67;:::i;:::-;25996:74;;26079:93;26168:3;26079:93;:::i;:::-;26197:2;26192:3;26188:12;26181:19;;25840:366;;;:::o;26212:::-;26354:3;26375:67;26439:2;26434:3;26375:67;:::i;:::-;26368:74;;26451:93;26540:3;26451:93;:::i;:::-;26569:2;26564:3;26560:12;26553:19;;26212:366;;;:::o;26584:::-;26726:3;26747:67;26811:2;26806:3;26747:67;:::i;:::-;26740:74;;26823:93;26912:3;26823:93;:::i;:::-;26941:2;26936:3;26932:12;26925:19;;26584:366;;;:::o;26956:398::-;27115:3;27136:83;27217:1;27212:3;27136:83;:::i;:::-;27129:90;;27228:93;27317:3;27228:93;:::i;:::-;27346:1;27341:3;27337:11;27330:18;;26956:398;;;:::o;27360:366::-;27502:3;27523:67;27587:2;27582:3;27523:67;:::i;:::-;27516:74;;27599:93;27688:3;27599:93;:::i;:::-;27717:2;27712:3;27708:12;27701:19;;27360:366;;;:::o;27732:::-;27874:3;27895:67;27959:2;27954:3;27895:67;:::i;:::-;27888:74;;27971:93;28060:3;27971:93;:::i;:::-;28089:2;28084:3;28080:12;28073:19;;27732:366;;;:::o;28104:::-;28246:3;28267:67;28331:2;28326:3;28267:67;:::i;:::-;28260:74;;28343:93;28432:3;28343:93;:::i;:::-;28461:2;28456:3;28452:12;28445:19;;28104:366;;;:::o;28476:115::-;28561:23;28578:5;28561:23;:::i;:::-;28556:3;28549:36;28476:115;;:::o;28597:153::-;28700:43;28719:23;28736:5;28719:23;:::i;:::-;28700:43;:::i;:::-;28695:3;28688:56;28597:153;;:::o;28756:118::-;28843:24;28861:5;28843:24;:::i;:::-;28838:3;28831:37;28756:118;;:::o;28880:157::-;28985:45;29005:24;29023:5;29005:24;:::i;:::-;28985:45;:::i;:::-;28980:3;28973:58;28880:157;;:::o;29043:115::-;29128:23;29145:5;29128:23;:::i;:::-;29123:3;29116:36;29043:115;;:::o;29164:291::-;29304:3;29326:103;29425:3;29416:6;29408;29326:103;:::i;:::-;29319:110;;29446:3;29439:10;;29164:291;;;;;:::o;29461:271::-;29591:3;29613:93;29702:3;29693:6;29613:93;:::i;:::-;29606:100;;29723:3;29716:10;;29461:271;;;;:::o;29738:265::-;29865:3;29887:90;29973:3;29964:6;29887:90;:::i;:::-;29880:97;;29994:3;29987:10;;29738:265;;;;:::o;30009:435::-;30189:3;30211:95;30302:3;30293:6;30211:95;:::i;:::-;30204:102;;30323:95;30414:3;30405:6;30323:95;:::i;:::-;30316:102;;30435:3;30428:10;;30009:435;;;;;:::o;30450:379::-;30634:3;30656:147;30799:3;30656:147;:::i;:::-;30649:154;;30820:3;30813:10;;30450:379;;;:::o;30835:392::-;30973:3;30988:73;31057:3;31048:6;30988:73;:::i;:::-;31086:1;31081:3;31077:11;31070:18;;31098:75;31169:3;31160:6;31098:75;:::i;:::-;31198:2;31193:3;31189:12;31182:19;;31218:3;31211:10;;30835:392;;;;;:::o;31233:222::-;31326:4;31364:2;31353:9;31349:18;31341:26;;31377:71;31445:1;31434:9;31430:17;31421:6;31377:71;:::i;:::-;31233:222;;;;:::o;31461:640::-;31656:4;31694:3;31683:9;31679:19;31671:27;;31708:71;31776:1;31765:9;31761:17;31752:6;31708:71;:::i;:::-;31789:72;31857:2;31846:9;31842:18;31833:6;31789:72;:::i;:::-;31871;31939:2;31928:9;31924:18;31915:6;31871:72;:::i;:::-;31990:9;31984:4;31980:20;31975:2;31964:9;31960:18;31953:48;32018:76;32089:4;32080:6;32018:76;:::i;:::-;32010:84;;31461:640;;;;;;;:::o;32107:332::-;32228:4;32266:2;32255:9;32251:18;32243:26;;32279:71;32347:1;32336:9;32332:17;32323:6;32279:71;:::i;:::-;32360:72;32428:2;32417:9;32413:18;32404:6;32360:72;:::i;:::-;32107:332;;;;;:::o;32445:210::-;32532:4;32570:2;32559:9;32555:18;32547:26;;32583:65;32645:1;32634:9;32630:17;32621:6;32583:65;:::i;:::-;32445:210;;;;:::o;32661:309::-;32772:4;32810:2;32799:9;32795:18;32787:26;;32859:9;32853:4;32849:20;32845:1;32834:9;32830:17;32823:47;32887:76;32958:4;32949:6;32887:76;:::i;:::-;32879:84;;32661:309;;;;:::o;32976:313::-;33089:4;33127:2;33116:9;33112:18;33104:26;;33176:9;33170:4;33166:20;33162:1;33151:9;33147:17;33140:47;33204:78;33277:4;33268:6;33204:78;:::i;:::-;33196:86;;32976:313;;;;:::o;33295:419::-;33461:4;33499:2;33488:9;33484:18;33476:26;;33548:9;33542:4;33538:20;33534:1;33523:9;33519:17;33512:47;33576:131;33702:4;33576:131;:::i;:::-;33568:139;;33295:419;;;:::o;33720:::-;33886:4;33924:2;33913:9;33909:18;33901:26;;33973:9;33967:4;33963:20;33959:1;33948:9;33944:17;33937:47;34001:131;34127:4;34001:131;:::i;:::-;33993:139;;33720:419;;;:::o;34145:::-;34311:4;34349:2;34338:9;34334:18;34326:26;;34398:9;34392:4;34388:20;34384:1;34373:9;34369:17;34362:47;34426:131;34552:4;34426:131;:::i;:::-;34418:139;;34145:419;;;:::o;34570:::-;34736:4;34774:2;34763:9;34759:18;34751:26;;34823:9;34817:4;34813:20;34809:1;34798:9;34794:17;34787:47;34851:131;34977:4;34851:131;:::i;:::-;34843:139;;34570:419;;;:::o;34995:::-;35161:4;35199:2;35188:9;35184:18;35176:26;;35248:9;35242:4;35238:20;35234:1;35223:9;35219:17;35212:47;35276:131;35402:4;35276:131;:::i;:::-;35268:139;;34995:419;;;:::o;35420:::-;35586:4;35624:2;35613:9;35609:18;35601:26;;35673:9;35667:4;35663:20;35659:1;35648:9;35644:17;35637:47;35701:131;35827:4;35701:131;:::i;:::-;35693:139;;35420:419;;;:::o;35845:::-;36011:4;36049:2;36038:9;36034:18;36026:26;;36098:9;36092:4;36088:20;36084:1;36073:9;36069:17;36062:47;36126:131;36252:4;36126:131;:::i;:::-;36118:139;;35845:419;;;:::o;36270:::-;36436:4;36474:2;36463:9;36459:18;36451:26;;36523:9;36517:4;36513:20;36509:1;36498:9;36494:17;36487:47;36551:131;36677:4;36551:131;:::i;:::-;36543:139;;36270:419;;;:::o;36695:::-;36861:4;36899:2;36888:9;36884:18;36876:26;;36948:9;36942:4;36938:20;36934:1;36923:9;36919:17;36912:47;36976:131;37102:4;36976:131;:::i;:::-;36968:139;;36695:419;;;:::o;37120:::-;37286:4;37324:2;37313:9;37309:18;37301:26;;37373:9;37367:4;37363:20;37359:1;37348:9;37344:17;37337:47;37401:131;37527:4;37401:131;:::i;:::-;37393:139;;37120:419;;;:::o;37545:::-;37711:4;37749:2;37738:9;37734:18;37726:26;;37798:9;37792:4;37788:20;37784:1;37773:9;37769:17;37762:47;37826:131;37952:4;37826:131;:::i;:::-;37818:139;;37545:419;;;:::o;37970:::-;38136:4;38174:2;38163:9;38159:18;38151:26;;38223:9;38217:4;38213:20;38209:1;38198:9;38194:17;38187:47;38251:131;38377:4;38251:131;:::i;:::-;38243:139;;37970:419;;;:::o;38395:::-;38561:4;38599:2;38588:9;38584:18;38576:26;;38648:9;38642:4;38638:20;38634:1;38623:9;38619:17;38612:47;38676:131;38802:4;38676:131;:::i;:::-;38668:139;;38395:419;;;:::o;38820:::-;38986:4;39024:2;39013:9;39009:18;39001:26;;39073:9;39067:4;39063:20;39059:1;39048:9;39044:17;39037:47;39101:131;39227:4;39101:131;:::i;:::-;39093:139;;38820:419;;;:::o;39245:::-;39411:4;39449:2;39438:9;39434:18;39426:26;;39498:9;39492:4;39488:20;39484:1;39473:9;39469:17;39462:47;39526:131;39652:4;39526:131;:::i;:::-;39518:139;;39245:419;;;:::o;39670:::-;39836:4;39874:2;39863:9;39859:18;39851:26;;39923:9;39917:4;39913:20;39909:1;39898:9;39894:17;39887:47;39951:131;40077:4;39951:131;:::i;:::-;39943:139;;39670:419;;;:::o;40095:::-;40261:4;40299:2;40288:9;40284:18;40276:26;;40348:9;40342:4;40338:20;40334:1;40323:9;40319:17;40312:47;40376:131;40502:4;40376:131;:::i;:::-;40368:139;;40095:419;;;:::o;40520:::-;40686:4;40724:2;40713:9;40709:18;40701:26;;40773:9;40767:4;40763:20;40759:1;40748:9;40744:17;40737:47;40801:131;40927:4;40801:131;:::i;:::-;40793:139;;40520:419;;;:::o;40945:::-;41111:4;41149:2;41138:9;41134:18;41126:26;;41198:9;41192:4;41188:20;41184:1;41173:9;41169:17;41162:47;41226:131;41352:4;41226:131;:::i;:::-;41218:139;;40945:419;;;:::o;41370:::-;41536:4;41574:2;41563:9;41559:18;41551:26;;41623:9;41617:4;41613:20;41609:1;41598:9;41594:17;41587:47;41651:131;41777:4;41651:131;:::i;:::-;41643:139;;41370:419;;;:::o;41795:::-;41961:4;41999:2;41988:9;41984:18;41976:26;;42048:9;42042:4;42038:20;42034:1;42023:9;42019:17;42012:47;42076:131;42202:4;42076:131;:::i;:::-;42068:139;;41795:419;;;:::o;42220:::-;42386:4;42424:2;42413:9;42409:18;42401:26;;42473:9;42467:4;42463:20;42459:1;42448:9;42444:17;42437:47;42501:131;42627:4;42501:131;:::i;:::-;42493:139;;42220:419;;;:::o;42645:::-;42811:4;42849:2;42838:9;42834:18;42826:26;;42898:9;42892:4;42888:20;42884:1;42873:9;42869:17;42862:47;42926:131;43052:4;42926:131;:::i;:::-;42918:139;;42645:419;;;:::o;43070:::-;43236:4;43274:2;43263:9;43259:18;43251:26;;43323:9;43317:4;43313:20;43309:1;43298:9;43294:17;43287:47;43351:131;43477:4;43351:131;:::i;:::-;43343:139;;43070:419;;;:::o;43495:::-;43661:4;43699:2;43688:9;43684:18;43676:26;;43748:9;43742:4;43738:20;43734:1;43723:9;43719:17;43712:47;43776:131;43902:4;43776:131;:::i;:::-;43768:139;;43495:419;;;:::o;43920:822::-;44153:4;44191:3;44180:9;44176:19;44168:27;;44205:69;44271:1;44260:9;44256:17;44247:6;44205:69;:::i;:::-;44284:72;44352:2;44341:9;44337:18;44328:6;44284:72;:::i;:::-;44403:9;44397:4;44393:20;44388:2;44377:9;44373:18;44366:48;44431:76;44502:4;44493:6;44431:76;:::i;:::-;44423:84;;44517:66;44579:2;44568:9;44564:18;44555:6;44517:66;:::i;:::-;44631:9;44625:4;44621:20;44615:3;44604:9;44600:19;44593:49;44659:76;44730:4;44721:6;44659:76;:::i;:::-;44651:84;;43920:822;;;;;;;;:::o;44748:739::-;44967:4;45005:3;44994:9;44990:19;44982:27;;45019:69;45085:1;45074:9;45070:17;45061:6;45019:69;:::i;:::-;45135:9;45129:4;45125:20;45120:2;45109:9;45105:18;45098:48;45163:76;45234:4;45225:6;45163:76;:::i;:::-;45155:84;;45249:70;45315:2;45304:9;45300:18;45291:6;45249:70;:::i;:::-;45366:9;45360:4;45356:20;45351:2;45340:9;45336:18;45329:48;45394:86;45475:4;45466:6;45458;45394:86;:::i;:::-;45386:94;;44748:739;;;;;;;;:::o;45493:719::-;45702:4;45740:3;45729:9;45725:19;45717:27;;45754:69;45820:1;45809:9;45805:17;45796:6;45754:69;:::i;:::-;45870:9;45864:4;45860:20;45855:2;45844:9;45840:18;45833:48;45898:76;45969:4;45960:6;45898:76;:::i;:::-;45890:84;;45984:70;46050:2;46039:9;46035:18;46026:6;45984:70;:::i;:::-;46101:9;46095:4;46091:20;46086:2;46075:9;46071:18;46064:48;46129:76;46200:4;46191:6;46129:76;:::i;:::-;46121:84;;45493:719;;;;;;;:::o;46218:1058::-;46516:4;46554:3;46543:9;46539:19;46531:27;;46568:69;46634:1;46623:9;46619:17;46610:6;46568:69;:::i;:::-;46684:9;46678:4;46674:20;46669:2;46658:9;46654:18;46647:48;46712:73;46780:4;46771:6;46712:73;:::i;:::-;46704:81;;46832:9;46826:4;46822:20;46817:2;46806:9;46802:18;46795:48;46860:76;46931:4;46922:6;46860:76;:::i;:::-;46852:84;;46946:88;47030:2;47019:9;47015:18;47006:6;46946:88;:::i;:::-;47044:73;47112:3;47101:9;47097:19;47088:6;47044:73;:::i;:::-;47165:9;47159:4;47155:20;47149:3;47138:9;47134:19;47127:49;47193:76;47264:4;47255:6;47193:76;:::i;:::-;47185:84;;46218:1058;;;;;;;;;:::o;47282:222::-;47375:4;47413:2;47402:9;47398:18;47390:26;;47426:71;47494:1;47483:9;47479:17;47470:6;47426:71;:::i;:::-;47282:222;;;;:::o;47510:332::-;47631:4;47669:2;47658:9;47654:18;47646:26;;47682:71;47750:1;47739:9;47735:17;47726:6;47682:71;:::i;:::-;47763:72;47831:2;47820:9;47816:18;47807:6;47763:72;:::i;:::-;47510:332;;;;;:::o;47848:129::-;47882:6;47909:20;;:::i;:::-;47899:30;;47938:33;47966:4;47958:6;47938:33;:::i;:::-;47848:129;;;:::o;47983:75::-;48016:6;48049:2;48043:9;48033:19;;47983:75;:::o;48064:307::-;48125:4;48215:18;48207:6;48204:30;48201:56;;;48237:18;;:::i;:::-;48201:56;48275:29;48297:6;48275:29;:::i;:::-;48267:37;;48359:4;48353;48349:15;48341:23;;48064:307;;;:::o;48377:308::-;48439:4;48529:18;48521:6;48518:30;48515:56;;;48551:18;;:::i;:::-;48515:56;48589:29;48611:6;48589:29;:::i;:::-;48581:37;;48673:4;48667;48663:15;48655:23;;48377:308;;;:::o;48691:140::-;48739:4;48762:3;48754:11;;48785:3;48782:1;48775:14;48819:4;48816:1;48806:18;48798:26;;48691:140;;;:::o;48837:98::-;48888:6;48922:5;48916:12;48906:22;;48837:98;;;:::o;48941:99::-;48993:6;49027:5;49021:12;49011:22;;48941:99;;;:::o;49046:168::-;49129:11;49163:6;49158:3;49151:19;49203:4;49198:3;49194:14;49179:29;;49046:168;;;;:::o;49220:147::-;49321:11;49358:3;49343:18;;49220:147;;;;:::o;49373:169::-;49457:11;49491:6;49486:3;49479:19;49531:4;49526:3;49522:14;49507:29;;49373:169;;;;:::o;49548:148::-;49650:11;49687:3;49672:18;;49548:148;;;;:::o;49702:305::-;49742:3;49761:20;49779:1;49761:20;:::i;:::-;49756:25;;49795:20;49813:1;49795:20;:::i;:::-;49790:25;;49949:1;49881:66;49877:74;49874:1;49871:81;49868:107;;;49955:18;;:::i;:::-;49868:107;49999:1;49996;49992:9;49985:16;;49702:305;;;;:::o;50013:185::-;50053:1;50070:20;50088:1;50070:20;:::i;:::-;50065:25;;50104:20;50122:1;50104:20;:::i;:::-;50099:25;;50143:1;50133:35;;50148:18;;:::i;:::-;50133:35;50190:1;50187;50183:9;50178:14;;50013:185;;;;:::o;50204:191::-;50244:4;50264:20;50282:1;50264:20;:::i;:::-;50259:25;;50298:20;50316:1;50298:20;:::i;:::-;50293:25;;50337:1;50334;50331:8;50328:34;;;50342:18;;:::i;:::-;50328:34;50387:1;50384;50380:9;50372:17;;50204:191;;;;:::o;50401:96::-;50438:7;50467:24;50485:5;50467:24;:::i;:::-;50456:35;;50401:96;;;:::o;50503:104::-;50548:7;50577:24;50595:5;50577:24;:::i;:::-;50566:35;;50503:104;;;:::o;50613:90::-;50647:7;50690:5;50683:13;50676:21;50665:32;;50613:90;;;:::o;50709:77::-;50746:7;50775:5;50764:16;;50709:77;;;:::o;50792:149::-;50828:7;50868:66;50861:5;50857:78;50846:89;;50792:149;;;:::o;50947:89::-;50983:7;51023:6;51016:5;51012:18;51001:29;;50947:89;;;:::o;51042:126::-;51079:7;51119:42;51112:5;51108:54;51097:65;;51042:126;;;:::o;51174:77::-;51211:7;51240:5;51229:16;;51174:77;;;:::o;51257:101::-;51293:7;51333:18;51326:5;51322:30;51311:41;;51257:101;;;:::o;51364:86::-;51399:7;51439:4;51432:5;51428:16;51417:27;;51364:86;;;:::o;51456:154::-;51540:6;51535:3;51530;51517:30;51602:1;51593:6;51588:3;51584:16;51577:27;51456:154;;;:::o;51616:307::-;51684:1;51694:113;51708:6;51705:1;51702:13;51694:113;;;51793:1;51788:3;51784:11;51778:18;51774:1;51769:3;51765:11;51758:39;51730:2;51727:1;51723:10;51718:15;;51694:113;;;51825:6;51822:1;51819:13;51816:101;;;51905:1;51896:6;51891:3;51887:16;51880:27;51816:101;51665:258;51616:307;;;:::o;51929:320::-;51973:6;52010:1;52004:4;52000:12;51990:22;;52057:1;52051:4;52047:12;52078:18;52068:81;;52134:4;52126:6;52122:17;52112:27;;52068:81;52196:2;52188:6;52185:14;52165:18;52162:38;52159:84;;;52215:18;;:::i;:::-;52159:84;51980:269;51929:320;;;:::o;52255:281::-;52338:27;52360:4;52338:27;:::i;:::-;52330:6;52326:40;52468:6;52456:10;52453:22;52432:18;52420:10;52417:34;52414:62;52411:88;;;52479:18;;:::i;:::-;52411:88;52519:10;52515:2;52508:22;52298:238;52255:281;;:::o;52542:233::-;52581:3;52604:24;52622:5;52604:24;:::i;:::-;52595:33;;52650:66;52643:5;52640:77;52637:103;;;52720:18;;:::i;:::-;52637:103;52767:1;52760:5;52756:13;52749:20;;52542:233;;;:::o;52781:167::-;52818:3;52841:22;52857:5;52841:22;:::i;:::-;52832:31;;52885:4;52878:5;52875:15;52872:41;;;52893:18;;:::i;:::-;52872:41;52940:1;52933:5;52929:13;52922:20;;52781:167;;;:::o;52954:94::-;52992:7;53021:21;53036:5;53021:21;:::i;:::-;53010:32;;52954:94;;;:::o;53054:79::-;53093:7;53122:5;53111:16;;53054:79;;;:::o;53139:176::-;53171:1;53188:20;53206:1;53188:20;:::i;:::-;53183:25;;53222:20;53240:1;53222:20;:::i;:::-;53217:25;;53261:1;53251:35;;53266:18;;:::i;:::-;53251:35;53307:1;53304;53300:9;53295:14;;53139:176;;;;:::o;53321:180::-;53369:77;53366:1;53359:88;53466:4;53463:1;53456:15;53490:4;53487:1;53480:15;53507:180;53555:77;53552:1;53545:88;53652:4;53649:1;53642:15;53676:4;53673:1;53666:15;53693:180;53741:77;53738:1;53731:88;53838:4;53835:1;53828:15;53862:4;53859:1;53852:15;53879:180;53927:77;53924:1;53917:88;54024:4;54021:1;54014:15;54048:4;54045:1;54038:15;54065:180;54113:77;54110:1;54103:88;54210:4;54207:1;54200:15;54234:4;54231:1;54224:15;54251:117;54360:1;54357;54350:12;54374:117;54483:1;54480;54473:12;54497:117;54606:1;54603;54596:12;54620:117;54729:1;54726;54719:12;54743:117;54852:1;54849;54842:12;54866:117;54975:1;54972;54965:12;54989:102;55030:6;55081:2;55077:7;55072:2;55065:5;55061:14;55057:28;55047:38;;54989:102;;;:::o;55097:96::-;55131:8;55180:5;55175:3;55171:15;55150:36;;55097:96;;;:::o;55199:237::-;55339:34;55335:1;55327:6;55323:14;55316:58;55408:20;55403:2;55395:6;55391:15;55384:45;55199:237;:::o;55442:225::-;55582:34;55578:1;55570:6;55566:14;55559:58;55651:8;55646:2;55638:6;55634:15;55627:33;55442:225;:::o;55673:223::-;55813:34;55809:1;55801:6;55797:14;55790:58;55882:6;55877:2;55869:6;55865:15;55858:31;55673:223;:::o;55902:175::-;56042:27;56038:1;56030:6;56026:14;56019:51;55902:175;:::o;56083:233::-;56223:34;56219:1;56211:6;56207:14;56200:58;56292:16;56287:2;56279:6;56275:15;56268:41;56083:233;:::o;56322:176::-;56462:28;56458:1;56450:6;56446:14;56439:52;56322:176;:::o;56504:221::-;56644:34;56640:1;56632:6;56628:14;56621:58;56713:4;56708:2;56700:6;56696:15;56689:29;56504:221;:::o;56731:::-;56871:34;56867:1;56859:6;56855:14;56848:58;56940:4;56935:2;56927:6;56923:15;56916:29;56731:221;:::o;56958:231::-;57098:34;57094:1;57086:6;57082:14;57075:58;57167:14;57162:2;57154:6;57150:15;57143:39;56958:231;:::o;57195:243::-;57335:34;57331:1;57323:6;57319:14;57312:58;57404:26;57399:2;57391:6;57387:15;57380:51;57195:243;:::o;57444:229::-;57584:34;57580:1;57572:6;57568:14;57561:58;57653:12;57648:2;57640:6;57636:15;57629:37;57444:229;:::o;57679:228::-;57819:34;57815:1;57807:6;57803:14;57796:58;57888:11;57883:2;57875:6;57871:15;57864:36;57679:228;:::o;57913:230::-;58053:34;58049:1;58041:6;58037:14;58030:58;58122:13;58117:2;58109:6;58105:15;58098:38;57913:230;:::o;58149:301::-;58289:34;58285:1;58277:6;58273:14;58266:58;58358:34;58353:2;58345:6;58341:15;58334:59;58427:15;58422:2;58414:6;58410:15;58403:40;58149:301;:::o;58456:182::-;58596:34;58592:1;58584:6;58580:14;58573:58;58456:182;:::o;58644:231::-;58784:34;58780:1;58772:6;58768:14;58761:58;58853:14;58848:2;58840:6;58836:15;58829:39;58644:231;:::o;58881:182::-;59021:34;59017:1;59009:6;59005:14;58998:58;58881:182;:::o;59069:239::-;59209:34;59205:1;59197:6;59193:14;59186:58;59278:22;59273:2;59265:6;59261:15;59254:47;59069:239;:::o;59314:228::-;59454:34;59450:1;59442:6;59438:14;59431:58;59523:11;59518:2;59510:6;59506:15;59499:36;59314:228;:::o;59548:231::-;59688:34;59684:1;59676:6;59672:14;59665:58;59757:14;59752:2;59744:6;59740:15;59733:39;59548:231;:::o;59785:234::-;59925:34;59921:1;59913:6;59909:14;59902:58;59994:17;59989:2;59981:6;59977:15;59970:42;59785:234;:::o;60025:220::-;60165:34;60161:1;60153:6;60149:14;60142:58;60234:3;60229:2;60221:6;60217:15;60210:28;60025:220;:::o;60251:114::-;;:::o;60371:236::-;60511:34;60507:1;60499:6;60495:14;60488:58;60580:19;60575:2;60567:6;60563:15;60556:44;60371:236;:::o;60613:225::-;60753:34;60749:1;60741:6;60737:14;60730:58;60822:8;60817:2;60809:6;60805:15;60798:33;60613:225;:::o;60844:233::-;60984:34;60980:1;60972:6;60968:14;60961:58;61053:16;61048:2;61040:6;61036:15;61029:41;60844:233;:::o;61083:122::-;61156:24;61174:5;61156:24;:::i;:::-;61149:5;61146:35;61136:63;;61195:1;61192;61185:12;61136:63;61083:122;:::o;61211:138::-;61292:32;61318:5;61292:32;:::i;:::-;61285:5;61282:43;61272:71;;61339:1;61336;61329:12;61272:71;61211:138;:::o;61355:116::-;61425:21;61440:5;61425:21;:::i;:::-;61418:5;61415:32;61405:60;;61461:1;61458;61451:12;61405:60;61355:116;:::o;61477:120::-;61549:23;61566:5;61549:23;:::i;:::-;61542:5;61539:34;61529:62;;61587:1;61584;61577:12;61529:62;61477:120;:::o;61603:::-;61675:23;61692:5;61675:23;:::i;:::-;61668:5;61665:34;61655:62;;61713:1;61710;61703:12;61655:62;61603:120;:::o;61729:122::-;61802:24;61820:5;61802:24;:::i;:::-;61795:5;61792:35;61782:63;;61841:1;61838;61831:12;61782:63;61729:122;:::o;61857:120::-;61929:23;61946:5;61929:23;:::i;:::-;61922:5;61919:34;61909:62;;61967:1;61964;61957:12;61909:62;61857:120;:::o;61983:118::-;62054:22;62070:5;62054:22;:::i;:::-;62047:5;62044:33;62034:61;;62091:1;62088;62081:12;62034:61;61983:118;:::o

Swarm Source

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