ETH Price: $3,501.55 (+0.21%)
Gas: 2 Gwei

Token

Epixverse (EPIXVERSE)
 

Overview

Max Total Supply

1,000 EPIXVERSE

Holders

701

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 EPIXVERSE
0xfb6c6de39573a8d8e75c670b14d1b4a2815f1d88
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:
EPIXVERSE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-27
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
pragma solidity ^0.8.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
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 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;
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
pragma solidity ^0.8.1;
library Address {
    function isContract(address account) internal view returns (bool) {

        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    constructor() {
        _setOwner(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        // 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);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
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;

abstract contract ReentrancyGuard {
    // word because each write operation emits an extra SLOAD to first read the
    // back. This is the compiler's defense against contract upgrades and

    // but in exchange the refund on every call to nonReentrant will be lower in
    // transaction's gas, it is best to keep them low in cases like this one, to
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;

        _;
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 private currentIndex = 0;

    uint256 internal immutable collectionSize;
    uint256 internal immutable maxBatchSize;
    string private _name;
    string private _symbol;
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) private _ownerships;
    mapping(address => AddressData) private _addressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 maxBatchSize_,
        uint256 collectionSize_
    ) {
        require(
            collectionSize_ > 0,
            "ERC721A: collection must have a nonzero supply"
        );
        require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
        _name = name_;
        _symbol = symbol_;
        maxBatchSize = maxBatchSize_;
        collectionSize = collectionSize_;
    }
    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < totalSupply(), "ERC721A: global index out of bounds");
        return index;
    }
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert("ERC721A: unable to get token of owner by index");
    }
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view override returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: balance query for the zero address"
        );
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(
            owner != address(0),
            "ERC721A: number minted query for the zero address"
        );
        return uint256(_addressData[owner].numberMinted);
    }

    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        uint256 lowestTokenToCheck;
        if (tokenId >= maxBatchSize) {
            lowestTokenToCheck = tokenId - maxBatchSize + 1;
        }

        for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }
    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 override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

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

        _approve(to, tokenId, owner);
    }
    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721A: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        require(operator != _msgSender(), "ERC721A: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(!_exists(startTokenId), "ERC721A: token already minted");
        require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

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

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            require(
                _checkOnERC721Received(address(0), to, updatedIndex, _data),
                "ERC721A: transfer to non ERC721Receiver implementer"
            );
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(
            isApprovedOrOwner,
            "ERC721A: transfer caller is not owner nor approved"
        );

        require(
            prevOwnership.addr == from,
            "ERC721A: transfer from incorrect owner"
        );
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);
        _approve(address(0), tokenId, prevOwnership.addr);

        _addressData[from].balance -= 1;
        _addressData[to].balance += 1;
        _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId] = TokenOwnership(
                    prevOwnership.addr,
                    prevOwnership.startTimestamp
                );
            }
        }

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

    uint256 public nextOwnerToExplicitlySet = 0;
    function _setOwnersExplicit(uint256 quantity) internal {
        uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
        require(quantity > 0, "quantity must be nonzero");
        uint256 endIndex = oldNextOwnerToSet + quantity - 1;
        if (endIndex > collectionSize - 1) {
            endIndex = collectionSize - 1;
        }
        require(_exists(endIndex), "not enough minted yet for this cleanup");
        for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
            if (_ownerships[i].addr == address(0)) {
                TokenOwnership memory ownership = ownershipOf(i);
                _ownerships[i] = TokenOwnership(
                    ownership.addr,
                    ownership.startTimestamp
                );
            }
        }
        nextOwnerToExplicitlySet = endIndex + 1;
    }
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

pragma solidity ^0.8.0;
library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b)
        private
        pure
        returns (bytes32 value)
    {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

contract EPIXVERSE is Ownable, ERC721A, ReentrancyGuard {

    bool public publicSale = false;
    bool public whitelistSale = false;
    bool public revealed = false;

    uint256 public maxPerTx = 100;
    uint256 public maxPerAddress = 100;
    uint256 public maxPerAddressWL = 2;
    uint256 public maxToken = 10000;
    uint256 public price = 0.029 ether;

    string private _baseTokenURI;
    string public notRevealedUri = "https://epixverse.com/ipfs/unrevealed.json";

    bytes32 root;

    constructor(string memory _NAME, string memory _SYMBOL) ERC721A(_NAME, _SYMBOL, 1000, maxToken) {

    }

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

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory) {
        return ownershipOf(tokenId);
    }

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

        if (revealed == false) {
            return notRevealedUri;
        }

        string memory _tokenURI = super.tokenURI(tokenId);
        return bytes(_tokenURI).length > 0 ? string(abi.encodePacked(_tokenURI, ".json")) : "";
    }

    function verify(bytes32[] memory proof) internal view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(proof, root, leaf);
    }

    function mint(uint256 quantity, bytes32[] memory proof) external payable callerIsUser {
        require(whitelistSale || publicSale, "SALE_HAS_NOT_STARTED_YET");
        require(numberMinted(msg.sender) + quantity <= maxPerAddress, "PER_WALLET_LIMIT_REACHED");
        require(quantity > 0, "INVALID_QUANTITY");
        require(quantity <= maxPerTx, "CANNOT_MINT_THAT_MANY");
        require(totalSupply() + quantity <= maxToken, "NOT_ENOUGH_SUPPLY_TO_MINT_DESIRED_AMOUNT");
        if(whitelistSale){
            require(verify(proof), "ADDRESS_NOT_WHITELISTED");
            require(numberMinted(msg.sender) + quantity <= maxPerAddressWL, "WL_PER_WALLET_LIMIT_REACHED");
        }
        if(numberMinted(msg.sender) > 0){
            require(msg.value >= price * quantity, "INVALID_ETH");
        }else{
            require(msg.value >= (price * quantity) - price, "INVALID_ETH");
        }
        _safeMint(msg.sender, quantity);
    }

    function giveaway(address _address, uint256 quantity) external onlyOwner {
        require(totalSupply() + quantity <= maxToken, "NOT_ENOUGH_SUPPLY_TO_GIVEAWAY_DESIRED_AMOUNT");
        _safeMint(_address, quantity);
    }

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

    function setPrice(uint256 _PriceInWEI) external onlyOwner {
        price = _PriceInWEI;
    }

    function setMaxPerWalletWL(uint256 _maxPerAddressWL) external onlyOwner {
        maxPerAddressWL = _maxPerAddressWL;
    }

    function setMaxPerWallet(uint256 _maxPerAddress) external onlyOwner {
        maxPerAddress = _maxPerAddress;
    }

    function setRoot(bytes32 _root) external onlyOwner {
        root = _root;
    }

    function flipPublicSaleState() external onlyOwner {
        publicSale = !publicSale;
    }

    function flipWhitelistState() external onlyOwner {
        whitelistSale = !whitelistSale;
    }

    function reveal() external onlyOwner {
        revealed = !revealed;
    }

    function setNotRevealedURI(string memory _notRevealedURI) external onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_NAME","type":"string"},{"internalType":"string","name":"_SYMBOL","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipWhitelistState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddress","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddressWL","type":"uint256"}],"name":"setMaxPerWalletWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PriceInWEI","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600060015560006008556000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506064600b556064600c556002600d55612710600e5566670758aa7c8000600f556040518060600160405280602a8152602001620062a5602a913960119081620000a991906200051f565b50348015620000b757600080fd5b50604051620062cf380380620062cf8339818101604052810190620000dd91906200076a565b81816103e8600e5462000105620000f9620001d960201b60201c565b620001e160201b60201c565b600081116200014b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001429062000876565b60405180910390fd5b6000821162000191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000188906200090e565b60405180910390fd5b8360029081620001a291906200051f565b508260039081620001b491906200051f565b508160a081815250508060808181525050505050506001600981905550505062000930565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200032757607f821691505b6020821081036200033d576200033c620002df565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003a77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000368565b620003b3868362000368565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000400620003fa620003f484620003cb565b620003d5565b620003cb565b9050919050565b6000819050919050565b6200041c83620003df565b620004346200042b8262000407565b84845462000375565b825550505050565b600090565b6200044b6200043c565b6200045881848462000411565b505050565b5b8181101562000480576200047460008262000441565b6001810190506200045e565b5050565b601f821115620004cf57620004998162000343565b620004a48462000358565b81016020851015620004b4578190505b620004cc620004c38562000358565b8301826200045d565b50505b505050565b600082821c905092915050565b6000620004f460001984600802620004d4565b1980831691505092915050565b60006200050f8383620004e1565b9150826002028217905092915050565b6200052a82620002a5565b67ffffffffffffffff811115620005465762000545620002b0565b5b6200055282546200030e565b6200055f82828562000484565b600060209050601f83116001811462000597576000841562000582578287015190505b6200058e858262000501565b865550620005fe565b601f198416620005a78662000343565b60005b82811015620005d157848901518255600182019150602085019450602081019050620005aa565b86831015620005f15784890151620005ed601f891682620004e1565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006408262000624565b810181811067ffffffffffffffff82111715620006625762000661620002b0565b5b80604052505050565b60006200067762000606565b905062000685828262000635565b919050565b600067ffffffffffffffff821115620006a857620006a7620002b0565b5b620006b38262000624565b9050602081019050919050565b60005b83811015620006e0578082015181840152602081019050620006c3565b60008484015250505050565b600062000703620006fd846200068a565b6200066b565b9050828152602081018484840111156200072257620007216200061f565b5b6200072f848285620006c0565b509392505050565b600082601f8301126200074f576200074e6200061a565b5b815162000761848260208601620006ec565b91505092915050565b6000806040838503121562000784576200078362000610565b5b600083015167ffffffffffffffff811115620007a557620007a462000615565b5b620007b38582860162000737565b925050602083015167ffffffffffffffff811115620007d757620007d662000615565b5b620007e58582860162000737565b9150509250929050565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60006200085e602e83620007ef565b91506200086b8262000800565b604082019050919050565b6000602082019050818103600083015262000891816200084f565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b6000620008f6602783620007ef565b9150620009038262000898565b604082019050919050565b600060208201905081810360008301526200092981620008e7565b9050919050565b60805160a0516159446200096160003960008181612991015281816129ba015261301c0152600050506159446000f3fe60806040526004361061025c5760003560e01c806391b7f5ed11610144578063c87b56dd116100b6578063e268e4d31161007a578063e268e4d3146108c7578063e985e9c5146108f0578063f2c4ce1e1461092d578063f2fde38b14610956578063f6fa26ab1461097f578063f968adbe146109965761025c565b8063c87b56dd146107ce578063ca69e3231461080b578063d7224ba014610836578063dab5f34014610861578063dc33e6811461088a5761025c565b8063a10866ef11610108578063a10866ef14610709578063a22cb46514610720578063a475b5dd14610749578063b88d4fde14610760578063ba41b0c614610789578063c1612d41146107a55761025c565b806391b7f5ed146106225780639231ab2a1461064b57806395d89b4114610688578063990d5f91146106b3578063a035b1fe146106de5761025c565b806333bc1c5c116101dd57806355f804b3116101a157806355f804b3146105125780636352211e1461053b578063639814e01461057857806370a08231146105a3578063715018a6146105e05780638da5cb5b146105f75761025c565b806333bc1c5c1461043f5780633ccfd60b1461046a57806342842e0e146104815780634f6ccce7146104aa57806351830227146104e75761025c565b8063095ea7b311610224578063095ea7b31461035a57806318160ddd1461038357806323b872dd146103ae5780632f745c59146103d757806331ffd6f1146104145761025c565b806301ffc9a714610261578063050225ea1461029e57806306fdde03146102c7578063081812fc146102f2578063081c8c441461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906137a4565b6109c1565b60405161029591906137ec565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c0919061389b565b610b0b565b005b3480156102d357600080fd5b506102dc610bec565b6040516102e9919061396b565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061398d565b610c7e565b60405161032691906139c9565b60405180910390f35b34801561033b57600080fd5b50610344610d03565b604051610351919061396b565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c919061389b565b610d91565b005b34801561038f57600080fd5b50610398610ea9565b6040516103a591906139f3565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613a0e565b610eb3565b005b3480156103e357600080fd5b506103fe60048036038101906103f9919061389b565b610ec3565b60405161040b91906139f3565b60405180910390f35b34801561042057600080fd5b506104296110bf565b60405161043691906137ec565b60405180910390f35b34801561044b57600080fd5b506104546110d2565b60405161046191906137ec565b60405180910390f35b34801561047657600080fd5b5061047f6110e5565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613a0e565b6111aa565b005b3480156104b657600080fd5b506104d160048036038101906104cc919061398d565b6111ca565b6040516104de91906139f3565b60405180910390f35b3480156104f357600080fd5b506104fc61121d565b60405161050991906137ec565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613ac6565b611230565b005b34801561054757600080fd5b50610562600480360381019061055d919061398d565b6112c2565b60405161056f91906139c9565b60405180910390f35b34801561058457600080fd5b5061058d6112d8565b60405161059a91906139f3565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190613b13565b6112de565b6040516105d791906139f3565b60405180910390f35b3480156105ec57600080fd5b506105f56113c6565b005b34801561060357600080fd5b5061060c61144e565b60405161061991906139c9565b60405180910390f35b34801561062e57600080fd5b506106496004803603810190610644919061398d565b611477565b005b34801561065757600080fd5b50610672600480360381019061066d919061398d565b6114fd565b60405161067f9190613ba1565b60405180910390f35b34801561069457600080fd5b5061069d611515565b6040516106aa919061396b565b60405180910390f35b3480156106bf57600080fd5b506106c86115a7565b6040516106d591906139f3565b60405180910390f35b3480156106ea57600080fd5b506106f36115ad565b60405161070091906139f3565b60405180910390f35b34801561071557600080fd5b5061071e6115b3565b005b34801561072c57600080fd5b5061074760048036038101906107429190613be8565b61165b565b005b34801561075557600080fd5b5061075e6117db565b005b34801561076c57600080fd5b5061078760048036038101906107829190613d58565b611883565b005b6107a3600480360381019061079e9190613ed4565b6118df565b005b3480156107b157600080fd5b506107cc60048036038101906107c7919061398d565b611c72565b005b3480156107da57600080fd5b506107f560048036038101906107f0919061398d565b611cf8565b604051610802919061396b565b60405180910390f35b34801561081757600080fd5b50610820611e44565b60405161082d91906139f3565b60405180910390f35b34801561084257600080fd5b5061084b611e4a565b60405161085891906139f3565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190613f30565b611e50565b005b34801561089657600080fd5b506108b160048036038101906108ac9190613b13565b611ed6565b6040516108be91906139f3565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e9919061398d565b611ee8565b005b3480156108fc57600080fd5b5061091760048036038101906109129190613f5d565b611f6e565b60405161092491906137ec565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f919061403e565b612002565b005b34801561096257600080fd5b5061097d60048036038101906109789190613b13565b612091565b005b34801561098b57600080fd5b50610994612188565b005b3480156109a257600080fd5b506109ab612230565b6040516109b891906139f3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b045750610b0382612236565b5b9050919050565b610b136122a0565b73ffffffffffffffffffffffffffffffffffffffff16610b3161144e565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e906140d3565b60405180910390fd5b600e5481610b93610ea9565b610b9d9190614122565b1115610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd5906141c8565b60405180910390fd5b610be882826122a8565b5050565b606060028054610bfb90614217565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2790614217565b8015610c745780601f10610c4957610100808354040283529160200191610c74565b820191906000526020600020905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b6000610c89826122c6565b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906142ba565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610d1090614217565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c90614217565b8015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b505050505081565b6000610d9c826112c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039061434c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e2b6122a0565b73ffffffffffffffffffffffffffffffffffffffff161480610e5a5750610e5981610e546122a0565b611f6e565b5b610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e90906143de565b60405180910390fd5b610ea48383836122d4565b505050565b6000600154905090565b610ebe838383612386565b505050565b6000610ece836112de565b8210610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690614470565b60405180910390fd5b6000610f19610ea9565b905060008060005b8381101561107d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461101357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110695786840361105a5781955050505050506110b9565b838061106590614490565b9450505b50808061107590614490565b915050610f21565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b09061454a565b60405180910390fd5b92915050565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b6110ed6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661110b61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906140d3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111a7573d6000803e3d6000fd5b50565b6111c583838360405180602001604052806000815250611883565b505050565b60006111d4610ea9565b8210611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906145dc565b60405180910390fd5b819050919050565b600a60029054906101000a900460ff1681565b6112386122a0565b73ffffffffffffffffffffffffffffffffffffffff1661125661144e565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906140d3565b60405180910390fd5b8181601091826112bd9291906147b3565b505050565b60006112cd8261293d565b600001519050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906148f5565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113ce6122a0565b73ffffffffffffffffffffffffffffffffffffffff166113ec61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611442576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611439906140d3565b60405180910390fd5b61144c6000612b40565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147f6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661149d61144e565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea906140d3565b60405180910390fd5b80600f8190555050565b6115056136fe565b61150e8261293d565b9050919050565b60606003805461152490614217565b80601f016020809104026020016040519081016040528092919081815260200182805461155090614217565b801561159d5780601f106115725761010080835404028352916020019161159d565b820191906000526020600020905b81548152906001019060200180831161158057829003601f168201915b5050505050905090565b600d5481565b600f5481565b6115bb6122a0565b73ffffffffffffffffffffffffffffffffffffffff166115d961144e565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906140d3565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6116636122a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790614961565b60405180910390fd5b80600760006116dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178a6122a0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117cf91906137ec565b60405180910390a35050565b6117e36122a0565b73ffffffffffffffffffffffffffffffffffffffff1661180161144e565b73ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906140d3565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b61188e848484612386565b61189a84848484612c04565b6118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d0906149f3565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614a5f565b60405180910390fd5b600a60019054906101000a900460ff16806119745750600a60009054906101000a900460ff165b6119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614acb565b60405180910390fd5b600c54826119c033611ed6565b6119ca9190614122565b1115611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614b37565b60405180910390fd5b60008211611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4590614ba3565b60405180910390fd5b600b54821115611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614c0f565b60405180910390fd5b600e5482611a9f610ea9565b611aa99190614122565b1115611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190614ca1565b60405180910390fd5b600a60019054906101000a900460ff1615611ba057611b0881612d8b565b611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90614d0d565b60405180910390fd5b600d5482611b5433611ed6565b611b5e9190614122565b1115611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690614d79565b60405180910390fd5b5b6000611bab33611ed6565b1115611c065781600f54611bbf9190614d99565b341015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890614e27565b60405180910390fd5b611c64565b600f5482600f54611c179190614d99565b611c219190614e47565b341015611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90614e27565b60405180910390fd5b5b611c6e33836122a8565b5050565b611c7a6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611c9861144e565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce5906140d3565b60405180910390fd5b80600d8190555050565b6060611d03826122c6565b611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990614eed565b60405180910390fd5b60001515600a60029054906101000a900460ff16151503611def5760118054611d6a90614217565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9690614217565b8015611de35780601f10611db857610100808354040283529160200191611de3565b820191906000526020600020905b815481529060010190602001808311611dc657829003601f168201915b50505050509050611e3f565b6000611dfa83612dcc565b90506000815111611e1a5760405180602001604052806000815250611e3b565b80604051602001611e2b9190614f95565b6040516020818303038152906040525b9150505b919050565b600e5481565b60085481565b611e586122a0565b73ffffffffffffffffffffffffffffffffffffffff16611e7661144e565b73ffffffffffffffffffffffffffffffffffffffff1614611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906140d3565b60405180910390fd5b8060128190555050565b6000611ee182612e73565b9050919050565b611ef06122a0565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906140d3565b60405180910390fd5b80600c8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61200a6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661202861144e565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906140d3565b60405180910390fd5b806011908161208d9190614fb7565b5050565b6120996122a0565b73ffffffffffffffffffffffffffffffffffffffff166120b761144e565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612104906140d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612173906150fb565b60405180910390fd5b61218581612b40565b50565b6121906122a0565b73ffffffffffffffffffffffffffffffffffffffff166121ae61144e565b73ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb906140d3565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6122c2828260405180602001604052806000815250612f5b565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006123918261293d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123b86122a0565b73ffffffffffffffffffffffffffffffffffffffff16148061241457506123dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff166123fc84610c7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612430575061242f826000015161242a6122a0565b611f6e565b5b905080612472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124699061518d565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db9061521f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a906152b1565b60405180910390fd5b612560858585600161343a565b61257060008484600001516122d4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125de91906152ed565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126829190615331565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846127889190614122565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128cd576127fd816122c6565b156128cc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129358686866001613440565b505050505050565b6129456136fe565b61294e826122c6565b61298d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612984906153e7565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129f15760017f0000000000000000000000000000000000000000000000000000000000000000846129e49190614e47565b6129ee9190614122565b90505b60008390505b818110612aff576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612aeb57809350505050612b3b565b508080612af790615407565b9150506129f7565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b32906154a2565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c258473ffffffffffffffffffffffffffffffffffffffff16613446565b15612d7e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c4e6122a0565b8786866040518563ffffffff1660e01b8152600401612c709493929190615517565b6020604051808303816000875af1925050508015612cac57506040513d601f19601f82011682018060405250810190612ca99190615578565b60015b612d2e573d8060008114612cdc576040519150601f19603f3d011682016040523d82523d6000602084013e612ce1565b606091505b506000815103612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d906149f3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d83565b600190505b949350505050565b60008033604051602001612d9f91906155ed565b604051602081830303815290604052805190602001209050612dc48360125483613469565b915050919050565b6060612dd7826122c6565b612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614eed565b60405180910390fd5b6000612e20613480565b90506000815111612e405760405180602001604052806000815250612e6b565b80612e4a84613512565b604051602001612e5b929190615608565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda9061569e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc890615730565b60405180910390fd5b612fda816122c6565b1561301a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130119061579c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561307d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130749061582e565b60405180910390fd5b61308a600085838661343a565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516131879190615331565b6fffffffffffffffffffffffffffffffff1681526020018583602001516131ae9190615331565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561341d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133bd6000888488612c04565b6133fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f3906149f3565b60405180910390fd5b818061340790614490565b925050808061341590614490565b91505061334c565b50806001819055506134326000878588613440565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000826134768584613672565b1490509392505050565b60606010805461348f90614217565b80601f01602080910402602001604051908101604052809291908181526020018280546134bb90614217565b80156135085780601f106134dd57610100808354040283529160200191613508565b820191906000526020600020905b8154815290600101906020018083116134eb57829003601f168201915b5050505050905090565b606060008203613559576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061366d565b600082905060005b6000821461358b57808061357490614490565b915050600a82613584919061587d565b9150613561565b60008167ffffffffffffffff8111156135a7576135a6613c2d565b5b6040519080825280601f01601f1916602001820160405280156135d95781602001600182028036833780820191505090505b5090505b60008514613666576001826135f29190614e47565b9150600a8561360191906158ae565b603061360d9190614122565b60f81b818381518110613623576136226158df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561365f919061587d565b94506135dd565b8093505050505b919050565b60008082905060005b84518110156136dc576000858281518110613699576136986158df565b5b602002602001015190508083116136bb576136b483826136e7565b92506136c8565b6136c581846136e7565b92505b5080806136d490614490565b91505061367b565b508091505092915050565b600082600052816020526040600020905092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137818161374c565b811461378c57600080fd5b50565b60008135905061379e81613778565b92915050565b6000602082840312156137ba576137b9613742565b5b60006137c88482850161378f565b91505092915050565b60008115159050919050565b6137e6816137d1565b82525050565b600060208201905061380160008301846137dd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061383282613807565b9050919050565b61384281613827565b811461384d57600080fd5b50565b60008135905061385f81613839565b92915050565b6000819050919050565b61387881613865565b811461388357600080fd5b50565b6000813590506138958161386f565b92915050565b600080604083850312156138b2576138b1613742565b5b60006138c085828601613850565b92505060206138d185828601613886565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139155780820151818401526020810190506138fa565b60008484015250505050565b6000601f19601f8301169050919050565b600061393d826138db565b61394781856138e6565b93506139578185602086016138f7565b61396081613921565b840191505092915050565b600060208201905081810360008301526139858184613932565b905092915050565b6000602082840312156139a3576139a2613742565b5b60006139b184828501613886565b91505092915050565b6139c381613827565b82525050565b60006020820190506139de60008301846139ba565b92915050565b6139ed81613865565b82525050565b6000602082019050613a0860008301846139e4565b92915050565b600080600060608486031215613a2757613a26613742565b5b6000613a3586828701613850565b9350506020613a4686828701613850565b9250506040613a5786828701613886565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613a8657613a85613a61565b5b8235905067ffffffffffffffff811115613aa357613aa2613a66565b5b602083019150836001820283011115613abf57613abe613a6b565b5b9250929050565b60008060208385031215613add57613adc613742565b5b600083013567ffffffffffffffff811115613afb57613afa613747565b5b613b0785828601613a70565b92509250509250929050565b600060208284031215613b2957613b28613742565b5b6000613b3784828501613850565b91505092915050565b613b4981613827565b82525050565b600067ffffffffffffffff82169050919050565b613b6c81613b4f565b82525050565b604082016000820151613b886000850182613b40565b506020820151613b9b6020850182613b63565b50505050565b6000604082019050613bb66000830184613b72565b92915050565b613bc5816137d1565b8114613bd057600080fd5b50565b600081359050613be281613bbc565b92915050565b60008060408385031215613bff57613bfe613742565b5b6000613c0d85828601613850565b9250506020613c1e85828601613bd3565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c6582613921565b810181811067ffffffffffffffff82111715613c8457613c83613c2d565b5b80604052505050565b6000613c97613738565b9050613ca38282613c5c565b919050565b600067ffffffffffffffff821115613cc357613cc2613c2d565b5b613ccc82613921565b9050602081019050919050565b82818337600083830152505050565b6000613cfb613cf684613ca8565b613c8d565b905082815260208101848484011115613d1757613d16613c28565b5b613d22848285613cd9565b509392505050565b600082601f830112613d3f57613d3e613a61565b5b8135613d4f848260208601613ce8565b91505092915050565b60008060008060808587031215613d7257613d71613742565b5b6000613d8087828801613850565b9450506020613d9187828801613850565b9350506040613da287828801613886565b925050606085013567ffffffffffffffff811115613dc357613dc2613747565b5b613dcf87828801613d2a565b91505092959194509250565b600067ffffffffffffffff821115613df657613df5613c2d565b5b602082029050602081019050919050565b6000819050919050565b613e1a81613e07565b8114613e2557600080fd5b50565b600081359050613e3781613e11565b92915050565b6000613e50613e4b84613ddb565b613c8d565b90508083825260208201905060208402830185811115613e7357613e72613a6b565b5b835b81811015613e9c5780613e888882613e28565b845260208401935050602081019050613e75565b5050509392505050565b600082601f830112613ebb57613eba613a61565b5b8135613ecb848260208601613e3d565b91505092915050565b60008060408385031215613eeb57613eea613742565b5b6000613ef985828601613886565b925050602083013567ffffffffffffffff811115613f1a57613f19613747565b5b613f2685828601613ea6565b9150509250929050565b600060208284031215613f4657613f45613742565b5b6000613f5484828501613e28565b91505092915050565b60008060408385031215613f7457613f73613742565b5b6000613f8285828601613850565b9250506020613f9385828601613850565b9150509250929050565b600067ffffffffffffffff821115613fb857613fb7613c2d565b5b613fc182613921565b9050602081019050919050565b6000613fe1613fdc84613f9d565b613c8d565b905082815260208101848484011115613ffd57613ffc613c28565b5b614008848285613cd9565b509392505050565b600082601f83011261402557614024613a61565b5b8135614035848260208601613fce565b91505092915050565b60006020828403121561405457614053613742565b5b600082013567ffffffffffffffff81111561407257614071613747565b5b61407e84828501614010565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140bd6020836138e6565b91506140c882614087565b602082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061412d82613865565b915061413883613865565b92508282019050808211156141505761414f6140f3565b5b92915050565b7f4e4f545f454e4f5547485f535550504c595f544f5f47495645415741595f444560008201527f53495245445f414d4f554e540000000000000000000000000000000000000000602082015250565b60006141b2602c836138e6565b91506141bd82614156565b604082019050919050565b600060208201905081810360008301526141e1816141a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061422f57607f821691505b602082108103614242576142416141e8565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006142a4602d836138e6565b91506142af82614248565b604082019050919050565b600060208201905081810360008301526142d381614297565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006143366022836138e6565b9150614341826142da565b604082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006143c86039836138e6565b91506143d38261436c565b604082019050919050565b600060208201905081810360008301526143f7816143bb565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b600061445a6022836138e6565b9150614465826143fe565b604082019050919050565b600060208201905081810360008301526144898161444d565b9050919050565b600061449b82613865565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144cd576144cc6140f3565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614534602e836138e6565b915061453f826144d8565b604082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c66023836138e6565b91506145d18261456a565b604082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026146697fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261462c565b614673868361462c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006146b06146ab6146a684613865565b61468b565b613865565b9050919050565b6000819050919050565b6146ca83614695565b6146de6146d6826146b7565b848454614639565b825550505050565b600090565b6146f36146e6565b6146fe8184846146c1565b505050565b5b81811015614722576147176000826146eb565b600181019050614704565b5050565b601f8211156147675761473881614607565b6147418461461c565b81016020851015614750578190505b61476461475c8561461c565b830182614703565b50505b505050565b600082821c905092915050565b600061478a6000198460080261476c565b1980831691505092915050565b60006147a38383614779565b9150826002028217905092915050565b6147bd83836145fc565b67ffffffffffffffff8111156147d6576147d5613c2d565b5b6147e08254614217565b6147eb828285614726565b6000601f83116001811461481a5760008415614808578287013590505b6148128582614797565b86555061487a565b601f19841661482886614607565b60005b828110156148505784890135825560018201915060208501945060208101905061482b565b8683101561486d5784890135614869601f891682614779565b8355505b6001600288020188555050505b50505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006148df602b836138e6565b91506148ea82614883565b604082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061494b601a836138e6565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006149dd6033836138e6565b91506149e882614981565b604082019050919050565b60006020820190508181036000830152614a0c816149d0565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000614a49601e836138e6565b9150614a5482614a13565b602082019050919050565b60006020820190508181036000830152614a7881614a3c565b9050919050565b7f53414c455f4841535f4e4f545f535441525445445f5945540000000000000000600082015250565b6000614ab56018836138e6565b9150614ac082614a7f565b602082019050919050565b60006020820190508181036000830152614ae481614aa8565b9050919050565b7f5045525f57414c4c45545f4c494d49545f524541434845440000000000000000600082015250565b6000614b216018836138e6565b9150614b2c82614aeb565b602082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f494e56414c49445f5155414e5449545900000000000000000000000000000000600082015250565b6000614b8d6010836138e6565b9150614b9882614b57565b602082019050919050565b60006020820190508181036000830152614bbc81614b80565b9050919050565b7f43414e4e4f545f4d494e545f544841545f4d414e590000000000000000000000600082015250565b6000614bf96015836138e6565b9150614c0482614bc3565b602082019050919050565b60006020820190508181036000830152614c2881614bec565b9050919050565b7f4e4f545f454e4f5547485f535550504c595f544f5f4d494e545f44455349524560008201527f445f414d4f554e54000000000000000000000000000000000000000000000000602082015250565b6000614c8b6028836138e6565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f414444524553535f4e4f545f57484954454c4953544544000000000000000000600082015250565b6000614cf76017836138e6565b9150614d0282614cc1565b602082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b7f574c5f5045525f57414c4c45545f4c494d49545f524541434845440000000000600082015250565b6000614d63601b836138e6565b9150614d6e82614d2d565b602082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b6000614da482613865565b9150614daf83613865565b9250828202614dbd81613865565b91508282048414831517614dd457614dd36140f3565b5b5092915050565b7f494e56414c49445f455448000000000000000000000000000000000000000000600082015250565b6000614e11600b836138e6565b9150614e1c82614ddb565b602082019050919050565b60006020820190508181036000830152614e4081614e04565b9050919050565b6000614e5282613865565b9150614e5d83613865565b9250828203905081811115614e7557614e746140f3565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614ed7602f836138e6565b9150614ee282614e7b565b604082019050919050565b60006020820190508181036000830152614f0681614eca565b9050919050565b600081905092915050565b6000614f23826138db565b614f2d8185614f0d565b9350614f3d8185602086016138f7565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614f7f600583614f0d565b9150614f8a82614f49565b600582019050919050565b6000614fa18284614f18565b9150614fac82614f72565b915081905092915050565b614fc0826138db565b67ffffffffffffffff811115614fd957614fd8613c2d565b5b614fe38254614217565b614fee828285614726565b600060209050601f831160018114615021576000841561500f578287015190505b6150198582614797565b865550615081565b601f19841661502f86614607565b60005b8281101561505757848901518255600182019150602085019450602081019050615032565b868310156150745784890151615070601f891682614779565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150e56026836138e6565b91506150f082615089565b604082019050919050565b60006020820190508181036000830152615114816150d8565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006151776032836138e6565b91506151828261511b565b604082019050919050565b600060208201905081810360008301526151a68161516a565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006152096026836138e6565b9150615214826151ad565b604082019050919050565b60006020820190508181036000830152615238816151fc565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061529b6025836138e6565b91506152a68261523f565b604082019050919050565b600060208201905081810360008301526152ca8161528e565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006152f8826152d1565b9150615303836152d1565b925082820390506fffffffffffffffffffffffffffffffff81111561532b5761532a6140f3565b5b92915050565b600061533c826152d1565b9150615347836152d1565b925082820190506fffffffffffffffffffffffffffffffff81111561536f5761536e6140f3565b5b92915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006153d1602a836138e6565b91506153dc82615375565b604082019050919050565b60006020820190508181036000830152615400816153c4565b9050919050565b600061541282613865565b915060008203615425576154246140f3565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061548c602f836138e6565b915061549782615430565b604082019050919050565b600060208201905081810360008301526154bb8161547f565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006154e9826154c2565b6154f381856154cd565b93506155038185602086016138f7565b61550c81613921565b840191505092915050565b600060808201905061552c60008301876139ba565b61553960208301866139ba565b61554660408301856139e4565b818103606083015261555881846154de565b905095945050505050565b60008151905061557281613778565b92915050565b60006020828403121561558e5761558d613742565b5b600061559c84828501615563565b91505092915050565b60008160601b9050919050565b60006155bd826155a5565b9050919050565b60006155cf826155b2565b9050919050565b6155e76155e282613827565b6155c4565b82525050565b60006155f982846155d6565b60148201915081905092915050565b60006156148285614f18565b91506156208284614f18565b91508190509392505050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b60006156886031836138e6565b91506156938261562c565b604082019050919050565b600060208201905081810360008301526156b78161567b565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061571a6021836138e6565b9150615725826156be565b604082019050919050565b600060208201905081810360008301526157498161570d565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615786601d836138e6565b915061579182615750565b602082019050919050565b600060208201905081810360008301526157b581615779565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006158186022836138e6565b9150615823826157bc565b604082019050919050565b600060208201905081810360008301526158478161580b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061588882613865565b915061589383613865565b9250826158a3576158a261584e565b5b828204905092915050565b60006158b982613865565b91506158c483613865565b9250826158d4576158d361584e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220203e849375a8d08905d39a2d35a0dd2c02af45836d4638960409b8e32ae5326f64736f6c6343000812003368747470733a2f2f6570697876657273652e636f6d2f697066732f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009457069787665727365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094550495856455253450000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061025c5760003560e01c806391b7f5ed11610144578063c87b56dd116100b6578063e268e4d31161007a578063e268e4d3146108c7578063e985e9c5146108f0578063f2c4ce1e1461092d578063f2fde38b14610956578063f6fa26ab1461097f578063f968adbe146109965761025c565b8063c87b56dd146107ce578063ca69e3231461080b578063d7224ba014610836578063dab5f34014610861578063dc33e6811461088a5761025c565b8063a10866ef11610108578063a10866ef14610709578063a22cb46514610720578063a475b5dd14610749578063b88d4fde14610760578063ba41b0c614610789578063c1612d41146107a55761025c565b806391b7f5ed146106225780639231ab2a1461064b57806395d89b4114610688578063990d5f91146106b3578063a035b1fe146106de5761025c565b806333bc1c5c116101dd57806355f804b3116101a157806355f804b3146105125780636352211e1461053b578063639814e01461057857806370a08231146105a3578063715018a6146105e05780638da5cb5b146105f75761025c565b806333bc1c5c1461043f5780633ccfd60b1461046a57806342842e0e146104815780634f6ccce7146104aa57806351830227146104e75761025c565b8063095ea7b311610224578063095ea7b31461035a57806318160ddd1461038357806323b872dd146103ae5780632f745c59146103d757806331ffd6f1146104145761025c565b806301ffc9a714610261578063050225ea1461029e57806306fdde03146102c7578063081812fc146102f2578063081c8c441461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906137a4565b6109c1565b60405161029591906137ec565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c0919061389b565b610b0b565b005b3480156102d357600080fd5b506102dc610bec565b6040516102e9919061396b565b60405180910390f35b3480156102fe57600080fd5b506103196004803603810190610314919061398d565b610c7e565b60405161032691906139c9565b60405180910390f35b34801561033b57600080fd5b50610344610d03565b604051610351919061396b565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c919061389b565b610d91565b005b34801561038f57600080fd5b50610398610ea9565b6040516103a591906139f3565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613a0e565b610eb3565b005b3480156103e357600080fd5b506103fe60048036038101906103f9919061389b565b610ec3565b60405161040b91906139f3565b60405180910390f35b34801561042057600080fd5b506104296110bf565b60405161043691906137ec565b60405180910390f35b34801561044b57600080fd5b506104546110d2565b60405161046191906137ec565b60405180910390f35b34801561047657600080fd5b5061047f6110e5565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613a0e565b6111aa565b005b3480156104b657600080fd5b506104d160048036038101906104cc919061398d565b6111ca565b6040516104de91906139f3565b60405180910390f35b3480156104f357600080fd5b506104fc61121d565b60405161050991906137ec565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613ac6565b611230565b005b34801561054757600080fd5b50610562600480360381019061055d919061398d565b6112c2565b60405161056f91906139c9565b60405180910390f35b34801561058457600080fd5b5061058d6112d8565b60405161059a91906139f3565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190613b13565b6112de565b6040516105d791906139f3565b60405180910390f35b3480156105ec57600080fd5b506105f56113c6565b005b34801561060357600080fd5b5061060c61144e565b60405161061991906139c9565b60405180910390f35b34801561062e57600080fd5b506106496004803603810190610644919061398d565b611477565b005b34801561065757600080fd5b50610672600480360381019061066d919061398d565b6114fd565b60405161067f9190613ba1565b60405180910390f35b34801561069457600080fd5b5061069d611515565b6040516106aa919061396b565b60405180910390f35b3480156106bf57600080fd5b506106c86115a7565b6040516106d591906139f3565b60405180910390f35b3480156106ea57600080fd5b506106f36115ad565b60405161070091906139f3565b60405180910390f35b34801561071557600080fd5b5061071e6115b3565b005b34801561072c57600080fd5b5061074760048036038101906107429190613be8565b61165b565b005b34801561075557600080fd5b5061075e6117db565b005b34801561076c57600080fd5b5061078760048036038101906107829190613d58565b611883565b005b6107a3600480360381019061079e9190613ed4565b6118df565b005b3480156107b157600080fd5b506107cc60048036038101906107c7919061398d565b611c72565b005b3480156107da57600080fd5b506107f560048036038101906107f0919061398d565b611cf8565b604051610802919061396b565b60405180910390f35b34801561081757600080fd5b50610820611e44565b60405161082d91906139f3565b60405180910390f35b34801561084257600080fd5b5061084b611e4a565b60405161085891906139f3565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190613f30565b611e50565b005b34801561089657600080fd5b506108b160048036038101906108ac9190613b13565b611ed6565b6040516108be91906139f3565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e9919061398d565b611ee8565b005b3480156108fc57600080fd5b5061091760048036038101906109129190613f5d565b611f6e565b60405161092491906137ec565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f919061403e565b612002565b005b34801561096257600080fd5b5061097d60048036038101906109789190613b13565b612091565b005b34801561098b57600080fd5b50610994612188565b005b3480156109a257600080fd5b506109ab612230565b6040516109b891906139f3565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a8c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610af457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b045750610b0382612236565b5b9050919050565b610b136122a0565b73ffffffffffffffffffffffffffffffffffffffff16610b3161144e565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e906140d3565b60405180910390fd5b600e5481610b93610ea9565b610b9d9190614122565b1115610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd5906141c8565b60405180910390fd5b610be882826122a8565b5050565b606060028054610bfb90614217565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2790614217565b8015610c745780601f10610c4957610100808354040283529160200191610c74565b820191906000526020600020905b815481529060010190602001808311610c5757829003601f168201915b5050505050905090565b6000610c89826122c6565b610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf906142ba565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610d1090614217565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c90614217565b8015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b505050505081565b6000610d9c826112c2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039061434c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e2b6122a0565b73ffffffffffffffffffffffffffffffffffffffff161480610e5a5750610e5981610e546122a0565b611f6e565b5b610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e90906143de565b60405180910390fd5b610ea48383836122d4565b505050565b6000600154905090565b610ebe838383612386565b505050565b6000610ece836112de565b8210610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690614470565b60405180910390fd5b6000610f19610ea9565b905060008060005b8381101561107d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461101357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110695786840361105a5781955050505050506110b9565b838061106590614490565b9450505b50808061107590614490565b915050610f21565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b09061454a565b60405180910390fd5b92915050565b600a60019054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b6110ed6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661110b61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611158906140d3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111a7573d6000803e3d6000fd5b50565b6111c583838360405180602001604052806000815250611883565b505050565b60006111d4610ea9565b8210611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c906145dc565b60405180910390fd5b819050919050565b600a60029054906101000a900460ff1681565b6112386122a0565b73ffffffffffffffffffffffffffffffffffffffff1661125661144e565b73ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a3906140d3565b60405180910390fd5b8181601091826112bd9291906147b3565b505050565b60006112cd8261293d565b600001519050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361134e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611345906148f5565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6113ce6122a0565b73ffffffffffffffffffffffffffffffffffffffff166113ec61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611442576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611439906140d3565b60405180910390fd5b61144c6000612b40565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147f6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661149d61144e565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea906140d3565b60405180910390fd5b80600f8190555050565b6115056136fe565b61150e8261293d565b9050919050565b60606003805461152490614217565b80601f016020809104026020016040519081016040528092919081815260200182805461155090614217565b801561159d5780601f106115725761010080835404028352916020019161159d565b820191906000526020600020905b81548152906001019060200180831161158057829003601f168201915b5050505050905090565b600d5481565b600f5481565b6115bb6122a0565b73ffffffffffffffffffffffffffffffffffffffff166115d961144e565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611626906140d3565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6116636122a0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790614961565b60405180910390fd5b80600760006116dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178a6122a0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117cf91906137ec565b60405180910390a35050565b6117e36122a0565b73ffffffffffffffffffffffffffffffffffffffff1661180161144e565b73ffffffffffffffffffffffffffffffffffffffff1614611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906140d3565b60405180910390fd5b600a60029054906101000a900460ff1615600a60026101000a81548160ff021916908315150217905550565b61188e848484612386565b61189a84848484612c04565b6118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d0906149f3565b60405180910390fd5b50505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490614a5f565b60405180910390fd5b600a60019054906101000a900460ff16806119745750600a60009054906101000a900460ff165b6119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa90614acb565b60405180910390fd5b600c54826119c033611ed6565b6119ca9190614122565b1115611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614b37565b60405180910390fd5b60008211611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4590614ba3565b60405180910390fd5b600b54821115611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614c0f565b60405180910390fd5b600e5482611a9f610ea9565b611aa99190614122565b1115611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae190614ca1565b60405180910390fd5b600a60019054906101000a900460ff1615611ba057611b0881612d8b565b611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90614d0d565b60405180910390fd5b600d5482611b5433611ed6565b611b5e9190614122565b1115611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690614d79565b60405180910390fd5b5b6000611bab33611ed6565b1115611c065781600f54611bbf9190614d99565b341015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890614e27565b60405180910390fd5b611c64565b600f5482600f54611c179190614d99565b611c219190614e47565b341015611c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5a90614e27565b60405180910390fd5b5b611c6e33836122a8565b5050565b611c7a6122a0565b73ffffffffffffffffffffffffffffffffffffffff16611c9861144e565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce5906140d3565b60405180910390fd5b80600d8190555050565b6060611d03826122c6565b611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990614eed565b60405180910390fd5b60001515600a60029054906101000a900460ff16151503611def5760118054611d6a90614217565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9690614217565b8015611de35780601f10611db857610100808354040283529160200191611de3565b820191906000526020600020905b815481529060010190602001808311611dc657829003601f168201915b50505050509050611e3f565b6000611dfa83612dcc565b90506000815111611e1a5760405180602001604052806000815250611e3b565b80604051602001611e2b9190614f95565b6040516020818303038152906040525b9150505b919050565b600e5481565b60085481565b611e586122a0565b73ffffffffffffffffffffffffffffffffffffffff16611e7661144e565b73ffffffffffffffffffffffffffffffffffffffff1614611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906140d3565b60405180910390fd5b8060128190555050565b6000611ee182612e73565b9050919050565b611ef06122a0565b73ffffffffffffffffffffffffffffffffffffffff16611f0e61144e565b73ffffffffffffffffffffffffffffffffffffffff1614611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b906140d3565b60405180910390fd5b80600c8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61200a6122a0565b73ffffffffffffffffffffffffffffffffffffffff1661202861144e565b73ffffffffffffffffffffffffffffffffffffffff161461207e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612075906140d3565b60405180910390fd5b806011908161208d9190614fb7565b5050565b6120996122a0565b73ffffffffffffffffffffffffffffffffffffffff166120b761144e565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612104906140d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361217c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612173906150fb565b60405180910390fd5b61218581612b40565b50565b6121906122a0565b73ffffffffffffffffffffffffffffffffffffffff166121ae61144e565b73ffffffffffffffffffffffffffffffffffffffff1614612204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fb906140d3565b60405180910390fd5b600a60019054906101000a900460ff1615600a60016101000a81548160ff021916908315150217905550565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6122c2828260405180602001604052806000815250612f5b565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006123918261293d565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123b86122a0565b73ffffffffffffffffffffffffffffffffffffffff16148061241457506123dd6122a0565b73ffffffffffffffffffffffffffffffffffffffff166123fc84610c7e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612430575061242f826000015161242a6122a0565b611f6e565b5b905080612472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124699061518d565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db9061521f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a906152b1565b60405180910390fd5b612560858585600161343a565b61257060008484600001516122d4565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125de91906152ed565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126829190615331565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846127889190614122565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128cd576127fd816122c6565b156128cc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129358686866001613440565b505050505050565b6129456136fe565b61294e826122c6565b61298d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612984906153e7565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000003e883106129f15760017f00000000000000000000000000000000000000000000000000000000000003e8846129e49190614e47565b6129ee9190614122565b90505b60008390505b818110612aff576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612aeb57809350505050612b3b565b508080612af790615407565b9150506129f7565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b32906154a2565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c258473ffffffffffffffffffffffffffffffffffffffff16613446565b15612d7e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c4e6122a0565b8786866040518563ffffffff1660e01b8152600401612c709493929190615517565b6020604051808303816000875af1925050508015612cac57506040513d601f19601f82011682018060405250810190612ca99190615578565b60015b612d2e573d8060008114612cdc576040519150601f19603f3d011682016040523d82523d6000602084013e612ce1565b606091505b506000815103612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d906149f3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d83565b600190505b949350505050565b60008033604051602001612d9f91906155ed565b604051602081830303815290604052805190602001209050612dc48360125483613469565b915050919050565b6060612dd7826122c6565b612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614eed565b60405180910390fd5b6000612e20613480565b90506000815111612e405760405180602001604052806000815250612e6b565b80612e4a84613512565b604051602001612e5b929190615608565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda9061569e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc890615730565b60405180910390fd5b612fda816122c6565b1561301a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130119061579c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000003e883111561307d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130749061582e565b60405180910390fd5b61308a600085838661343a565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516131879190615331565b6fffffffffffffffffffffffffffffffff1681526020018583602001516131ae9190615331565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561341d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133bd6000888488612c04565b6133fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f3906149f3565b60405180910390fd5b818061340790614490565b925050808061341590614490565b91505061334c565b50806001819055506134326000878588613440565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000826134768584613672565b1490509392505050565b60606010805461348f90614217565b80601f01602080910402602001604051908101604052809291908181526020018280546134bb90614217565b80156135085780601f106134dd57610100808354040283529160200191613508565b820191906000526020600020905b8154815290600101906020018083116134eb57829003601f168201915b5050505050905090565b606060008203613559576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061366d565b600082905060005b6000821461358b57808061357490614490565b915050600a82613584919061587d565b9150613561565b60008167ffffffffffffffff8111156135a7576135a6613c2d565b5b6040519080825280601f01601f1916602001820160405280156135d95781602001600182028036833780820191505090505b5090505b60008514613666576001826135f29190614e47565b9150600a8561360191906158ae565b603061360d9190614122565b60f81b818381518110613623576136226158df565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561365f919061587d565b94506135dd565b8093505050505b919050565b60008082905060005b84518110156136dc576000858281518110613699576136986158df565b5b602002602001015190508083116136bb576136b483826136e7565b92506136c8565b6136c581846136e7565b92505b5080806136d490614490565b91505061367b565b508091505092915050565b600082600052816020526040600020905092915050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137818161374c565b811461378c57600080fd5b50565b60008135905061379e81613778565b92915050565b6000602082840312156137ba576137b9613742565b5b60006137c88482850161378f565b91505092915050565b60008115159050919050565b6137e6816137d1565b82525050565b600060208201905061380160008301846137dd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061383282613807565b9050919050565b61384281613827565b811461384d57600080fd5b50565b60008135905061385f81613839565b92915050565b6000819050919050565b61387881613865565b811461388357600080fd5b50565b6000813590506138958161386f565b92915050565b600080604083850312156138b2576138b1613742565b5b60006138c085828601613850565b92505060206138d185828601613886565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139155780820151818401526020810190506138fa565b60008484015250505050565b6000601f19601f8301169050919050565b600061393d826138db565b61394781856138e6565b93506139578185602086016138f7565b61396081613921565b840191505092915050565b600060208201905081810360008301526139858184613932565b905092915050565b6000602082840312156139a3576139a2613742565b5b60006139b184828501613886565b91505092915050565b6139c381613827565b82525050565b60006020820190506139de60008301846139ba565b92915050565b6139ed81613865565b82525050565b6000602082019050613a0860008301846139e4565b92915050565b600080600060608486031215613a2757613a26613742565b5b6000613a3586828701613850565b9350506020613a4686828701613850565b9250506040613a5786828701613886565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613a8657613a85613a61565b5b8235905067ffffffffffffffff811115613aa357613aa2613a66565b5b602083019150836001820283011115613abf57613abe613a6b565b5b9250929050565b60008060208385031215613add57613adc613742565b5b600083013567ffffffffffffffff811115613afb57613afa613747565b5b613b0785828601613a70565b92509250509250929050565b600060208284031215613b2957613b28613742565b5b6000613b3784828501613850565b91505092915050565b613b4981613827565b82525050565b600067ffffffffffffffff82169050919050565b613b6c81613b4f565b82525050565b604082016000820151613b886000850182613b40565b506020820151613b9b6020850182613b63565b50505050565b6000604082019050613bb66000830184613b72565b92915050565b613bc5816137d1565b8114613bd057600080fd5b50565b600081359050613be281613bbc565b92915050565b60008060408385031215613bff57613bfe613742565b5b6000613c0d85828601613850565b9250506020613c1e85828601613bd3565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c6582613921565b810181811067ffffffffffffffff82111715613c8457613c83613c2d565b5b80604052505050565b6000613c97613738565b9050613ca38282613c5c565b919050565b600067ffffffffffffffff821115613cc357613cc2613c2d565b5b613ccc82613921565b9050602081019050919050565b82818337600083830152505050565b6000613cfb613cf684613ca8565b613c8d565b905082815260208101848484011115613d1757613d16613c28565b5b613d22848285613cd9565b509392505050565b600082601f830112613d3f57613d3e613a61565b5b8135613d4f848260208601613ce8565b91505092915050565b60008060008060808587031215613d7257613d71613742565b5b6000613d8087828801613850565b9450506020613d9187828801613850565b9350506040613da287828801613886565b925050606085013567ffffffffffffffff811115613dc357613dc2613747565b5b613dcf87828801613d2a565b91505092959194509250565b600067ffffffffffffffff821115613df657613df5613c2d565b5b602082029050602081019050919050565b6000819050919050565b613e1a81613e07565b8114613e2557600080fd5b50565b600081359050613e3781613e11565b92915050565b6000613e50613e4b84613ddb565b613c8d565b90508083825260208201905060208402830185811115613e7357613e72613a6b565b5b835b81811015613e9c5780613e888882613e28565b845260208401935050602081019050613e75565b5050509392505050565b600082601f830112613ebb57613eba613a61565b5b8135613ecb848260208601613e3d565b91505092915050565b60008060408385031215613eeb57613eea613742565b5b6000613ef985828601613886565b925050602083013567ffffffffffffffff811115613f1a57613f19613747565b5b613f2685828601613ea6565b9150509250929050565b600060208284031215613f4657613f45613742565b5b6000613f5484828501613e28565b91505092915050565b60008060408385031215613f7457613f73613742565b5b6000613f8285828601613850565b9250506020613f9385828601613850565b9150509250929050565b600067ffffffffffffffff821115613fb857613fb7613c2d565b5b613fc182613921565b9050602081019050919050565b6000613fe1613fdc84613f9d565b613c8d565b905082815260208101848484011115613ffd57613ffc613c28565b5b614008848285613cd9565b509392505050565b600082601f83011261402557614024613a61565b5b8135614035848260208601613fce565b91505092915050565b60006020828403121561405457614053613742565b5b600082013567ffffffffffffffff81111561407257614071613747565b5b61407e84828501614010565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140bd6020836138e6565b91506140c882614087565b602082019050919050565b600060208201905081810360008301526140ec816140b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061412d82613865565b915061413883613865565b92508282019050808211156141505761414f6140f3565b5b92915050565b7f4e4f545f454e4f5547485f535550504c595f544f5f47495645415741595f444560008201527f53495245445f414d4f554e540000000000000000000000000000000000000000602082015250565b60006141b2602c836138e6565b91506141bd82614156565b604082019050919050565b600060208201905081810360008301526141e1816141a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061422f57607f821691505b602082108103614242576142416141e8565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006142a4602d836138e6565b91506142af82614248565b604082019050919050565b600060208201905081810360008301526142d381614297565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006143366022836138e6565b9150614341826142da565b604082019050919050565b6000602082019050818103600083015261436581614329565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006143c86039836138e6565b91506143d38261436c565b604082019050919050565b600060208201905081810360008301526143f7816143bb565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b600061445a6022836138e6565b9150614465826143fe565b604082019050919050565b600060208201905081810360008301526144898161444d565b9050919050565b600061449b82613865565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144cd576144cc6140f3565b5b600182019050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614534602e836138e6565b915061453f826144d8565b604082019050919050565b6000602082019050818103600083015261456381614527565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c66023836138e6565b91506145d18261456a565b604082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026146697fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261462c565b614673868361462c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006146b06146ab6146a684613865565b61468b565b613865565b9050919050565b6000819050919050565b6146ca83614695565b6146de6146d6826146b7565b848454614639565b825550505050565b600090565b6146f36146e6565b6146fe8184846146c1565b505050565b5b81811015614722576147176000826146eb565b600181019050614704565b5050565b601f8211156147675761473881614607565b6147418461461c565b81016020851015614750578190505b61476461475c8561461c565b830182614703565b50505b505050565b600082821c905092915050565b600061478a6000198460080261476c565b1980831691505092915050565b60006147a38383614779565b9150826002028217905092915050565b6147bd83836145fc565b67ffffffffffffffff8111156147d6576147d5613c2d565b5b6147e08254614217565b6147eb828285614726565b6000601f83116001811461481a5760008415614808578287013590505b6148128582614797565b86555061487a565b601f19841661482886614607565b60005b828110156148505784890135825560018201915060208501945060208101905061482b565b8683101561486d5784890135614869601f891682614779565b8355505b6001600288020188555050505b50505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006148df602b836138e6565b91506148ea82614883565b604082019050919050565b6000602082019050818103600083015261490e816148d2565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061494b601a836138e6565b915061495682614915565b602082019050919050565b6000602082019050818103600083015261497a8161493e565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b60006149dd6033836138e6565b91506149e882614981565b604082019050919050565b60006020820190508181036000830152614a0c816149d0565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000614a49601e836138e6565b9150614a5482614a13565b602082019050919050565b60006020820190508181036000830152614a7881614a3c565b9050919050565b7f53414c455f4841535f4e4f545f535441525445445f5945540000000000000000600082015250565b6000614ab56018836138e6565b9150614ac082614a7f565b602082019050919050565b60006020820190508181036000830152614ae481614aa8565b9050919050565b7f5045525f57414c4c45545f4c494d49545f524541434845440000000000000000600082015250565b6000614b216018836138e6565b9150614b2c82614aeb565b602082019050919050565b60006020820190508181036000830152614b5081614b14565b9050919050565b7f494e56414c49445f5155414e5449545900000000000000000000000000000000600082015250565b6000614b8d6010836138e6565b9150614b9882614b57565b602082019050919050565b60006020820190508181036000830152614bbc81614b80565b9050919050565b7f43414e4e4f545f4d494e545f544841545f4d414e590000000000000000000000600082015250565b6000614bf96015836138e6565b9150614c0482614bc3565b602082019050919050565b60006020820190508181036000830152614c2881614bec565b9050919050565b7f4e4f545f454e4f5547485f535550504c595f544f5f4d494e545f44455349524560008201527f445f414d4f554e54000000000000000000000000000000000000000000000000602082015250565b6000614c8b6028836138e6565b9150614c9682614c2f565b604082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f414444524553535f4e4f545f57484954454c4953544544000000000000000000600082015250565b6000614cf76017836138e6565b9150614d0282614cc1565b602082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b7f574c5f5045525f57414c4c45545f4c494d49545f524541434845440000000000600082015250565b6000614d63601b836138e6565b9150614d6e82614d2d565b602082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b6000614da482613865565b9150614daf83613865565b9250828202614dbd81613865565b91508282048414831517614dd457614dd36140f3565b5b5092915050565b7f494e56414c49445f455448000000000000000000000000000000000000000000600082015250565b6000614e11600b836138e6565b9150614e1c82614ddb565b602082019050919050565b60006020820190508181036000830152614e4081614e04565b9050919050565b6000614e5282613865565b9150614e5d83613865565b9250828203905081811115614e7557614e746140f3565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614ed7602f836138e6565b9150614ee282614e7b565b604082019050919050565b60006020820190508181036000830152614f0681614eca565b9050919050565b600081905092915050565b6000614f23826138db565b614f2d8185614f0d565b9350614f3d8185602086016138f7565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614f7f600583614f0d565b9150614f8a82614f49565b600582019050919050565b6000614fa18284614f18565b9150614fac82614f72565b915081905092915050565b614fc0826138db565b67ffffffffffffffff811115614fd957614fd8613c2d565b5b614fe38254614217565b614fee828285614726565b600060209050601f831160018114615021576000841561500f578287015190505b6150198582614797565b865550615081565b601f19841661502f86614607565b60005b8281101561505757848901518255600182019150602085019450602081019050615032565b868310156150745784890151615070601f891682614779565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150e56026836138e6565b91506150f082615089565b604082019050919050565b60006020820190508181036000830152615114816150d8565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006151776032836138e6565b91506151828261511b565b604082019050919050565b600060208201905081810360008301526151a68161516a565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006152096026836138e6565b9150615214826151ad565b604082019050919050565b60006020820190508181036000830152615238816151fc565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061529b6025836138e6565b91506152a68261523f565b604082019050919050565b600060208201905081810360008301526152ca8161528e565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006152f8826152d1565b9150615303836152d1565b925082820390506fffffffffffffffffffffffffffffffff81111561532b5761532a6140f3565b5b92915050565b600061533c826152d1565b9150615347836152d1565b925082820190506fffffffffffffffffffffffffffffffff81111561536f5761536e6140f3565b5b92915050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006153d1602a836138e6565b91506153dc82615375565b604082019050919050565b60006020820190508181036000830152615400816153c4565b9050919050565b600061541282613865565b915060008203615425576154246140f3565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061548c602f836138e6565b915061549782615430565b604082019050919050565b600060208201905081810360008301526154bb8161547f565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006154e9826154c2565b6154f381856154cd565b93506155038185602086016138f7565b61550c81613921565b840191505092915050565b600060808201905061552c60008301876139ba565b61553960208301866139ba565b61554660408301856139e4565b818103606083015261555881846154de565b905095945050505050565b60008151905061557281613778565b92915050565b60006020828403121561558e5761558d613742565b5b600061559c84828501615563565b91505092915050565b60008160601b9050919050565b60006155bd826155a5565b9050919050565b60006155cf826155b2565b9050919050565b6155e76155e282613827565b6155c4565b82525050565b60006155f982846155d6565b60148201915081905092915050565b60006156148285614f18565b91506156208284614f18565b91508190509392505050565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b60006156886031836138e6565b91506156938261562c565b604082019050919050565b600060208201905081810360008301526156b78161567b565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061571a6021836138e6565b9150615725826156be565b604082019050919050565b600060208201905081810360008301526157498161570d565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000615786601d836138e6565b915061579182615750565b602082019050919050565b600060208201905081810360008301526157b581615779565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b60006158186022836138e6565b9150615823826157bc565b604082019050919050565b600060208201905081810360008301526158478161580b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061588882613865565b915061589383613865565b9250826158a3576158a261584e565b5b828204905092915050565b60006158b982613865565b91506158c483613865565b9250826158d4576158d361584e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220203e849375a8d08905d39a2d35a0dd2c02af45836d4638960409b8e32ae5326f64736f6c63430008120033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009457069787665727365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094550495856455253450000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _NAME (string): Epixverse
Arg [1] : _SYMBOL (string): EPIXVERSE

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 4570697876657273650000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 4550495856455253450000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

24222:4087:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13130:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26849:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14916:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16125:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24635:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15706:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11920:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16960:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12260:864;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24324:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28197:109;;;;;;;;;;;;;:::i;:::-;;17128:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12026:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24364:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28083:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14786:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24437:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13558:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7114:94;;;;;;;;;;;;;:::i;:::-;;6895:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27204:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25104:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15022:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24478:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24557;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27656:93;;;;;;;;;;;;;:::i;:::-;;16423:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27863:76;;;;;;;;;;;;;:::i;:::-;;17311:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25885:956;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27308:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25247:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24519:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20932:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27566:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24983:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27441:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16740:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27947:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7214:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27757:98;;;;;;;;;;;;;:::i;:::-;;24401:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13130:422;13277:4;13334:25;13319:40;;;:11;:40;;;;:105;;;;13391:33;13376:48;;;:11;:48;;;;13319:105;:172;;;;13456:35;13441:50;;;:11;:50;;;;13319:172;:225;;;;13508:36;13532:11;13508:23;:36::i;:::-;13319:225;13299:245;;13130:422;;;:::o;26849:225::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26969:8:::1;;26957;26941:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:36;;26933:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;27037:29;27047:8;27057;27037:9;:29::i;:::-;26849:225:::0;;:::o;14916:100::-;14970:13;15003:5;14996:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14916:100;:::o;16125:292::-;16229:7;16276:16;16284:7;16276;:16::i;:::-;16254:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16385:15;:24;16401:7;16385:24;;;;;;;;;;;;;;;;;;;;;16378:31;;16125:292;;;:::o;24635:75::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15706:413::-;15779:13;15795:24;15811:7;15795:15;:24::i;:::-;15779:40;;15844:5;15838:11;;:2;:11;;;15830:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15939:5;15923:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;15948:37;15965:5;15972:12;:10;:12::i;:::-;15948:16;:37::i;:::-;15923:62;15901:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;16083:28;16092:2;16096:7;16105:5;16083:8;:28::i;:::-;15768:351;15706:413;;:::o;11920:100::-;11973:7;12000:12;;11993:19;;11920:100;:::o;16960:162::-;17086:28;17096:4;17102:2;17106:7;17086:9;:28::i;:::-;16960:162;;;:::o;12260:864::-;12385:7;12426:16;12436:5;12426:9;:16::i;:::-;12418:5;:24;12410:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12492:22;12517:13;:11;:13::i;:::-;12492:38;;12541:19;12575:25;12629:9;12624:426;12648:14;12644:1;:18;12624:426;;;12684:31;12718:11;:14;12730:1;12718:14;;;;;;;;;;;12684:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12777:1;12751:28;;:9;:14;;;:28;;;12747:103;;12820:9;:14;;;12800:34;;12747:103;12889:5;12868:26;;:17;:26;;;12864:175;;12934:5;12919:11;:20;12915:77;;12971:1;12964:8;;;;;;;;;12915:77;13010:13;;;;;:::i;:::-;;;;12864:175;12669:381;12664:3;;;;;:::i;:::-;;;;12624:426;;;;13060:56;;;;;;;;;;:::i;:::-;;;;;;;;12260:864;;;;;:::o;24324:33::-;;;;;;;;;;;;;:::o;24287:30::-;;;;;;;;;;;;;:::o;28197:109::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28255:10:::1;28247:28;;:51;28276:21;28247:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28197:109::o:0;17128:177::-;17258:39;17275:4;17281:2;17285:7;17258:39;;;;;;;;;;;;:16;:39::i;:::-;17128:177;;;:::o;12026:228::-;12129:7;12170:13;:11;:13::i;:::-;12162:5;:21;12154:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12241:5;12234:12;;12026:228;;;:::o;24364:28::-;;;;;;;;;;;;;:::o;28083:106::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28174:7:::1;;28158:13;:23;;;;;;;:::i;:::-;;28083:106:::0;;:::o;14786:124::-;14850:7;14877:20;14889:7;14877:11;:20::i;:::-;:25;;;14870:32;;14786:124;;;:::o;24437:34::-;;;;:::o;13558:258::-;13622:7;13681:1;13664:19;;:5;:19;;;13642:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;13780:12;:19;13793:5;13780:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;13772:36;;13765:43;;13558:258;;;:::o;7114:94::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7179:21:::1;7197:1;7179:9;:21::i;:::-;7114:94::o:0;6895:87::-;6941:7;6968:6;;;;;;;;;;;6961:13;;6895:87;:::o;27204:96::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27281:11:::1;27273:5;:19;;;;27204:96:::0;:::o;25104:135::-;25170:21;;:::i;:::-;25211:20;25223:7;25211:11;:20::i;:::-;25204:27;;25104:135;;;:::o;15022:104::-;15078:13;15111:7;15104:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15022:104;:::o;24478:34::-;;;;:::o;24557:::-;;;;:::o;27656:93::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27731:10:::1;;;;;;;;;;;27730:11;27717:10;;:24;;;;;;;;;;;;;;;;;;27656:93::o:0;16423:311::-;16553:12;:10;:12::i;:::-;16541:24;;:8;:24;;;16533:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16654:8;16609:18;:32;16628:12;:10;:12::i;:::-;16609:32;;;;;;;;;;;;;;;:42;16642:8;16609:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16707:8;16678:48;;16693:12;:10;:12::i;:::-;16678:48;;;16717:8;16678:48;;;;;;:::i;:::-;;;;;;;;16423:311;;:::o;27863:76::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27923:8:::1;;;;;;;;;;;27922:9;27911:8;;:20;;;;;;;;;;;;;;;;;;27863:76::o:0;17311:355::-;17470:28;17480:4;17486:2;17490:7;17470:9;:28::i;:::-;17531:48;17554:4;17560:2;17564:7;17573:5;17531:22;:48::i;:::-;17509:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;17311:355;;;;:::o;25885:956::-;24910:10;24897:23;;:9;:23;;;24889:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25990:13:::1;;;;;;;;;;;:27;;;;26007:10;;;;;;;;;;;25990:27;25982:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26104:13;;26092:8;26065:24;26078:10;26065:12;:24::i;:::-;:35;;;;:::i;:::-;:52;;26057:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;26176:1;26165:8;:12;26157:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;26229:8;;26217;:20;;26209:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;26310:8;;26298;26282:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:36;;26274:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;26377:13;;;;;;;;;;;26374:202;;;26414:13;26421:5;26414:6;:13::i;:::-;26406:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;26517:15;;26505:8;26478:24;26491:10;26478:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;26470:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;26374:202;26616:1;26589:24;26602:10;26589:12;:24::i;:::-;:28;26586:206;;;26662:8;26654:5;;:16;;;;:::i;:::-;26641:9;:29;;26633:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;26586:206;;;26759:5;;26747:8;26739:5;;:16;;;;:::i;:::-;26738:26;;;;:::i;:::-;26725:9;:39;;26717:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26586:206;26802:31;26812:10;26824:8;26802:9;:31::i;:::-;25885:956:::0;;:::o;27308:125::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27409:16:::1;27391:15;:34;;;;27308:125:::0;:::o;25247:425::-;25320:13;25354:16;25362:7;25354;:16::i;:::-;25346:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25451:5;25439:17;;:8;;;;;;;;;;;:17;;;25435:71;;25480:14;25473:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25435:71;25518:23;25544;25559:7;25544:14;:23::i;:::-;25518:49;;25611:1;25591:9;25585:23;:27;:79;;;;;;;;;;;;;;;;;25639:9;25622:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;25585:79;25578:86;;;25247:425;;;;:::o;24519:31::-;;;;:::o;20932:43::-;;;;:::o;27566:82::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27635:5:::1;27628:4;:12;;;;27566:82:::0;:::o;24983:113::-;25041:7;25068:20;25082:5;25068:13;:20::i;:::-;25061:27;;24983:113;;;:::o;27441:117::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27536:14:::1;27520:13;:30;;;;27441:117:::0;:::o;16740:214::-;16882:4;16911:18;:25;16930:5;16911:25;;;;;;;;;;;;;;;:35;16937:8;16911:35;;;;;;;;;;;;;;;;;;;;;;;;;16904:42;;16740:214;;;;:::o;27947:128::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28052:15:::1;28035:14;:32;;;;;;:::i;:::-;;27947:128:::0;:::o;7214:229::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7337:1:::1;7317:22;;:8;:22;;::::0;7295:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7416:19;7426:8;7416:9;:19::i;:::-;7214:229:::0;:::o;27757:98::-;7039:12;:10;:12::i;:::-;7028:23;;:7;:5;:7::i;:::-;:23;;;7020:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27834:13:::1;;;;;;;;;;;27833:14;27817:13;;:30;;;;;;;;;;;;;;;;;;27757:98::o:0;24401:29::-;;;;:::o;9427:207::-;9557:4;9601:25;9586:40;;;:11;:40;;;;9579:47;;9427:207;;;:::o;6402:98::-;6455:7;6482:10;6475:17;;6402:98;:::o;17791:104::-;17860:27;17870:2;17874:8;17860:27;;;;;;;;;;;;:9;:27::i;:::-;17791:104;;:::o;17672:111::-;17729:4;17763:12;;17753:7;:22;17746:29;;17672:111;;;:::o;20728:196::-;20870:2;20843:15;:24;20859:7;20843:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;20908:7;20904:2;20888:28;;20897:5;20888:28;;;;;;;;;;;;20728:196;;;:::o;19182:1540::-;19297:35;19335:20;19347:7;19335:11;:20::i;:::-;19297:58;;19368:22;19410:13;:18;;;19394:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;19469:12;:10;:12::i;:::-;19445:36;;:20;19457:7;19445:11;:20::i;:::-;:36;;;19394:87;:154;;;;19498:50;19515:13;:18;;;19535:12;:10;:12::i;:::-;19498:16;:50::i;:::-;19394:154;19368:181;;19584:17;19562:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19736:4;19714:26;;:13;:18;;;:26;;;19692:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;19839:1;19825:16;;:2;:16;;;19817:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19896:43;19918:4;19924:2;19928:7;19937:1;19896:21;:43::i;:::-;19950:49;19967:1;19971:7;19980:13;:18;;;19950:8;:49::i;:::-;20042:1;20012:12;:18;20025:4;20012:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20082:1;20054:12;:16;20067:2;20054:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20117:43;;;;;;;;20132:2;20117:43;;;;;;20143:15;20117:43;;;;;20094:11;:20;20106:7;20094:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20285:19;20317:1;20307:7;:11;;;;:::i;:::-;20285:33;;20374:1;20333:43;;:11;:24;20345:11;20333:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;20329:288;;20397:20;20405:11;20397:7;:20::i;:::-;20393:213;;;20465:125;;;;;;;;20502:13;:18;;;20465:125;;;;;;20543:13;:28;;;20465:125;;;;;20438:11;:24;20450:11;20438:24;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20393:213;20329:288;20653:7;20649:2;20634:27;;20643:4;20634:27;;;;;;;;;;;;20672:42;20693:4;20699:2;20703:7;20712:1;20672:20;:42::i;:::-;19286:1436;;;19182:1540;;;:::o;14098:682::-;14186:21;;:::i;:::-;14233:16;14241:7;14233;:16::i;:::-;14225:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14309:26;14361:12;14350:7;:23;14346:103;;14436:1;14421:12;14411:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;14390:47;;14346:103;14466:12;14481:7;14466:22;;14461:242;14498:18;14490:4;:26;14461:242;;14541:31;14575:11;:17;14587:4;14575:17;;;;;;;;;;;14541:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14637:1;14611:28;;:9;:14;;;:28;;;14607:85;;14667:9;14660:16;;;;;;;14607:85;14526:177;14518:6;;;;;:::i;:::-;;;;14461:242;;;;14715:57;;;;;;;;;;:::i;:::-;;;;;;;;14098:682;;;;:::o;7451:173::-;7507:16;7526:6;;;;;;;;;;;7507:25;;7552:8;7543:6;;:17;;;;;;;;;;;;;;;;;;7607:8;7576:40;;7597:8;7576:40;;;;;;;;;;;;7496:128;7451:173;:::o;21833:985::-;21988:4;22009:15;:2;:13;;;:15::i;:::-;22005:806;;;22078:2;22062:36;;;22121:12;:10;:12::i;:::-;22156:4;22183:7;22213:5;22062:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22041:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22441:1;22424:6;:13;:18;22420:321;;22467:109;;;;;;;;;;:::i;:::-;;;;;;;;22420:321;22691:6;22685:13;22676:6;22672:2;22668:15;22661:38;22041:715;22311:45;;;22301:55;;;:6;:55;;;;22294:62;;;;;22005:806;22795:4;22788:11;;21833:985;;;;;;;:::o;25680:197::-;25743:4;25760:12;25802:10;25785:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;25775:39;;;;;;25760:54;;25832:37;25851:5;25858:4;;25864;25832:18;:37::i;:::-;25825:44;;;25680:197;;;:::o;15132:468::-;15250:13;15303:16;15311:7;15303;:16::i;:::-;15281:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;15407:21;15431:10;:8;:10::i;:::-;15407:34;;15496:1;15478:7;15472:21;:25;:120;;;;;;;;;;;;;;;;;15541:7;15550:18;:7;:16;:18::i;:::-;15524:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15472:120;15452:140;;;15132:468;;;:::o;13824:266::-;13885:7;13944:1;13927:19;;:5;:19;;;13905:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;14049:12;:19;14062:5;14049:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;14041:41;;14034:48;;13824:266;;;:::o;17901:1275::-;18024:20;18047:12;;18024:35;;18092:1;18078:16;;:2;:16;;;18070:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18152:21;18160:12;18152:7;:21::i;:::-;18151:22;18143:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18238:12;18226:8;:24;;18218:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18302:61;18332:1;18336:2;18340:12;18354:8;18302:21;:61::i;:::-;18376:30;18409:12;:16;18422:2;18409:16;;;;;;;;;;;;;;;18376:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18455:135;;;;;;;;18511:8;18481:11;:19;;;:39;;;;:::i;:::-;18455:135;;;;;;18570:8;18535:11;:24;;;:44;;;;:::i;:::-;18455:135;;;;;18436:12;:16;18449:2;18436:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18629:43;;;;;;;;18644:2;18629:43;;;;;;18655:15;18629:43;;;;;18601:11;:25;18613:12;18601:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18685:20;18708:12;18685:35;;18738:9;18733:325;18757:8;18753:1;:12;18733:325;;;18817:12;18813:2;18792:38;;18809:1;18792:38;;;;;;;;;;;;18871:59;18902:1;18906:2;18910:12;18924:5;18871:22;:59::i;:::-;18845:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;19032:14;;;;;:::i;:::-;;;;18767:3;;;;;:::i;:::-;;;;18733:325;;;;19085:12;19070;:27;;;;19108:60;19137:1;19141:2;19145:12;19159:8;19108:20;:60::i;:::-;18013:1163;;;17901:1275;;;:::o;22824:159::-;;;;;:::o;22989:158::-;;;;;:::o;2408:117::-;2468:4;2516:1;2494:7;:19;;;:23;2487:30;;2408:117;;;:::o;23206:190::-;23331:4;23384;23355:25;23368:5;23375:4;23355:12;:25::i;:::-;:33;23348:40;;23206:190;;;;;:::o;27082:114::-;27142:13;27175;27168:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27082:114;:::o;7796:656::-;7852:13;8015:1;8006:5;:10;8002:53;;8033:10;;;;;;;;;;;;;;;;;;;;;8002:53;8065:12;8080:5;8065:20;;8096:14;8121:78;8136:1;8128:4;:9;8121:78;;8154:8;;;;;:::i;:::-;;;;8185:2;8177:10;;;;;:::i;:::-;;;8121:78;;;8209:19;8241:6;8231:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8209:39;;8259:154;8275:1;8266:5;:10;8259:154;;8303:1;8293:11;;;;;:::i;:::-;;;8370:2;8362:5;:10;;;;:::i;:::-;8349:2;:24;;;;:::i;:::-;8336:39;;8319:6;8326;8319:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8399:2;8390:11;;;;;:::i;:::-;;;8259:154;;;8437:6;8423:21;;;;;7796:656;;;;:::o;23402:549::-;23512:7;23537:20;23560:4;23537:27;;23580:9;23575:339;23599:5;:12;23595:1;:16;23575:339;;;23633:20;23656:5;23662:1;23656:8;;;;;;;;:::i;:::-;;;;;;;;23633:31;;23699:12;23683;:28;23679:224;;23747:42;23762:12;23776;23747:14;:42::i;:::-;23732:57;;23679:224;;;23845:42;23860:12;23874;23845:14;:42::i;:::-;23830:57;;23679:224;23618:296;23613:3;;;;;:::i;:::-;;;;23575:339;;;;23931:12;23924:19;;;23402:549;;;;:::o;23959:256::-;24054:13;24122:1;24116:4;24109:15;24151:1;24145:4;24138:15;24192:4;24186;24176:21;24167:30;;23959:256;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:77::-;2062:7;2091:5;2080:16;;2025:77;;;:::o;2108:122::-;2181:24;2199:5;2181:24;:::i;:::-;2174:5;2171:35;2161:63;;2220:1;2217;2210:12;2161:63;2108:122;:::o;2236:139::-;2282:5;2320:6;2307:20;2298:29;;2336:33;2363:5;2336:33;:::i;:::-;2236:139;;;;:::o;2381:474::-;2449:6;2457;2506:2;2494:9;2485:7;2481:23;2477:32;2474:119;;;2512:79;;:::i;:::-;2474:119;2632:1;2657:53;2702:7;2693:6;2682:9;2678:22;2657:53;:::i;:::-;2647:63;;2603:117;2759:2;2785:53;2830:7;2821:6;2810:9;2806:22;2785:53;:::i;:::-;2775:63;;2730:118;2381:474;;;;;:::o;2861:99::-;2913:6;2947:5;2941:12;2931:22;;2861:99;;;:::o;2966:169::-;3050:11;3084:6;3079:3;3072:19;3124:4;3119:3;3115:14;3100:29;;2966:169;;;;:::o;3141:246::-;3222:1;3232:113;3246:6;3243:1;3240:13;3232:113;;;3331:1;3326:3;3322:11;3316:18;3312:1;3307:3;3303:11;3296:39;3268:2;3265:1;3261:10;3256:15;;3232:113;;;3379:1;3370:6;3365:3;3361:16;3354:27;3203:184;3141:246;;;:::o;3393:102::-;3434:6;3485:2;3481:7;3476:2;3469:5;3465:14;3461:28;3451:38;;3393:102;;;:::o;3501:377::-;3589:3;3617:39;3650:5;3617:39;:::i;:::-;3672:71;3736:6;3731:3;3672:71;:::i;:::-;3665:78;;3752:65;3810:6;3805:3;3798:4;3791:5;3787:16;3752:65;:::i;:::-;3842:29;3864:6;3842:29;:::i;:::-;3837:3;3833:39;3826:46;;3593:285;3501:377;;;;:::o;3884:313::-;3997:4;4035:2;4024:9;4020:18;4012:26;;4084:9;4078:4;4074:20;4070:1;4059:9;4055:17;4048:47;4112:78;4185:4;4176:6;4112:78;:::i;:::-;4104:86;;3884:313;;;;:::o;4203:329::-;4262:6;4311:2;4299:9;4290:7;4286:23;4282:32;4279:119;;;4317:79;;:::i;:::-;4279:119;4437:1;4462:53;4507:7;4498:6;4487:9;4483:22;4462:53;:::i;:::-;4452:63;;4408:117;4203:329;;;;:::o;4538:118::-;4625:24;4643:5;4625:24;:::i;:::-;4620:3;4613:37;4538:118;;:::o;4662:222::-;4755:4;4793:2;4782:9;4778:18;4770:26;;4806:71;4874:1;4863:9;4859:17;4850:6;4806:71;:::i;:::-;4662:222;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:117;6222:1;6219;6212:12;6250:553;6308:8;6318:6;6368:3;6361:4;6353:6;6349:17;6345:27;6335:122;;6376:79;;:::i;:::-;6335:122;6489:6;6476:20;6466:30;;6519:18;6511:6;6508:30;6505:117;;;6541:79;;:::i;:::-;6505:117;6655:4;6647:6;6643:17;6631:29;;6709:3;6701:4;6693:6;6689:17;6679:8;6675:32;6672:41;6669:128;;;6716:79;;:::i;:::-;6669:128;6250:553;;;;;:::o;6809:529::-;6880:6;6888;6937:2;6925:9;6916:7;6912:23;6908:32;6905:119;;;6943:79;;:::i;:::-;6905:119;7091:1;7080:9;7076:17;7063:31;7121:18;7113:6;7110:30;7107:117;;;7143:79;;:::i;:::-;7107:117;7256:65;7313:7;7304:6;7293:9;7289:22;7256:65;:::i;:::-;7238:83;;;;7034:297;6809:529;;;;;:::o;7344:329::-;7403:6;7452:2;7440:9;7431:7;7427:23;7423:32;7420:119;;;7458:79;;:::i;:::-;7420:119;7578:1;7603:53;7648:7;7639:6;7628:9;7624:22;7603:53;:::i;:::-;7593:63;;7549:117;7344:329;;;;:::o;7679:108::-;7756:24;7774:5;7756:24;:::i;:::-;7751:3;7744:37;7679:108;;:::o;7793:101::-;7829:7;7869:18;7862:5;7858:30;7847:41;;7793:101;;;:::o;7900:105::-;7975:23;7992:5;7975:23;:::i;:::-;7970:3;7963:36;7900:105;;:::o;8081:527::-;8240:4;8235:3;8231:14;8327:4;8320:5;8316:16;8310:23;8346:63;8403:4;8398:3;8394:14;8380:12;8346:63;:::i;:::-;8255:164;8511:4;8504:5;8500:16;8494:23;8530:61;8585:4;8580:3;8576:14;8562:12;8530:61;:::i;:::-;8429:172;8209:399;8081:527;;:::o;8614:346::-;8769:4;8807:2;8796:9;8792:18;8784:26;;8820:133;8950:1;8939:9;8935:17;8926:6;8820:133;:::i;:::-;8614:346;;;;:::o;8966:116::-;9036:21;9051:5;9036:21;:::i;:::-;9029:5;9026:32;9016:60;;9072:1;9069;9062:12;9016:60;8966:116;:::o;9088:133::-;9131:5;9169:6;9156:20;9147:29;;9185:30;9209:5;9185:30;:::i;:::-;9088:133;;;;:::o;9227:468::-;9292:6;9300;9349:2;9337:9;9328:7;9324:23;9320:32;9317:119;;;9355:79;;:::i;:::-;9317:119;9475:1;9500:53;9545:7;9536:6;9525:9;9521:22;9500:53;:::i;:::-;9490:63;;9446:117;9602:2;9628:50;9670:7;9661:6;9650:9;9646:22;9628:50;:::i;:::-;9618:60;;9573:115;9227:468;;;;;:::o;9701:117::-;9810:1;9807;9800:12;9824:180;9872:77;9869:1;9862:88;9969:4;9966:1;9959:15;9993:4;9990:1;9983:15;10010:281;10093:27;10115:4;10093:27;:::i;:::-;10085:6;10081:40;10223:6;10211:10;10208:22;10187:18;10175:10;10172:34;10169:62;10166:88;;;10234:18;;:::i;:::-;10166:88;10274:10;10270:2;10263:22;10053:238;10010:281;;:::o;10297:129::-;10331:6;10358:20;;:::i;:::-;10348:30;;10387:33;10415:4;10407:6;10387:33;:::i;:::-;10297:129;;;:::o;10432:307::-;10493:4;10583:18;10575:6;10572:30;10569:56;;;10605:18;;:::i;:::-;10569:56;10643:29;10665:6;10643:29;:::i;:::-;10635:37;;10727:4;10721;10717:15;10709:23;;10432:307;;;:::o;10745:146::-;10842:6;10837:3;10832;10819:30;10883:1;10874:6;10869:3;10865:16;10858:27;10745:146;;;:::o;10897:423::-;10974:5;10999:65;11015:48;11056:6;11015:48;:::i;:::-;10999:65;:::i;:::-;10990:74;;11087:6;11080:5;11073:21;11125:4;11118:5;11114:16;11163:3;11154:6;11149:3;11145:16;11142:25;11139:112;;;11170:79;;:::i;:::-;11139:112;11260:54;11307:6;11302:3;11297;11260:54;:::i;:::-;10980:340;10897:423;;;;;:::o;11339:338::-;11394:5;11443:3;11436:4;11428:6;11424:17;11420:27;11410:122;;11451:79;;:::i;:::-;11410:122;11568:6;11555:20;11593:78;11667:3;11659:6;11652:4;11644:6;11640:17;11593:78;:::i;:::-;11584:87;;11400:277;11339:338;;;;:::o;11683:943::-;11778:6;11786;11794;11802;11851:3;11839:9;11830:7;11826:23;11822:33;11819:120;;;11858:79;;:::i;:::-;11819:120;11978:1;12003:53;12048:7;12039:6;12028:9;12024:22;12003:53;:::i;:::-;11993:63;;11949:117;12105:2;12131:53;12176:7;12167:6;12156:9;12152:22;12131:53;:::i;:::-;12121:63;;12076:118;12233:2;12259:53;12304:7;12295:6;12284:9;12280:22;12259:53;:::i;:::-;12249:63;;12204:118;12389:2;12378:9;12374:18;12361:32;12420:18;12412:6;12409:30;12406:117;;;12442:79;;:::i;:::-;12406:117;12547:62;12601:7;12592:6;12581:9;12577:22;12547:62;:::i;:::-;12537:72;;12332:287;11683:943;;;;;;;:::o;12632:311::-;12709:4;12799:18;12791:6;12788:30;12785:56;;;12821:18;;:::i;:::-;12785:56;12871:4;12863:6;12859:17;12851:25;;12931:4;12925;12921:15;12913:23;;12632:311;;;:::o;12949:77::-;12986:7;13015:5;13004:16;;12949:77;;;:::o;13032:122::-;13105:24;13123:5;13105:24;:::i;:::-;13098:5;13095:35;13085:63;;13144:1;13141;13134:12;13085:63;13032:122;:::o;13160:139::-;13206:5;13244:6;13231:20;13222:29;;13260:33;13287:5;13260:33;:::i;:::-;13160:139;;;;:::o;13322:710::-;13418:5;13443:81;13459:64;13516:6;13459:64;:::i;:::-;13443:81;:::i;:::-;13434:90;;13544:5;13573:6;13566:5;13559:21;13607:4;13600:5;13596:16;13589:23;;13660:4;13652:6;13648:17;13640:6;13636:30;13689:3;13681:6;13678:15;13675:122;;;13708:79;;:::i;:::-;13675:122;13823:6;13806:220;13840:6;13835:3;13832:15;13806:220;;;13915:3;13944:37;13977:3;13965:10;13944:37;:::i;:::-;13939:3;13932:50;14011:4;14006:3;14002:14;13995:21;;13882:144;13866:4;13861:3;13857:14;13850:21;;13806:220;;;13810:21;13424:608;;13322:710;;;;;:::o;14055:370::-;14126:5;14175:3;14168:4;14160:6;14156:17;14152:27;14142:122;;14183:79;;:::i;:::-;14142:122;14300:6;14287:20;14325:94;14415:3;14407:6;14400:4;14392:6;14388:17;14325:94;:::i;:::-;14316:103;;14132:293;14055:370;;;;:::o;14431:684::-;14524:6;14532;14581:2;14569:9;14560:7;14556:23;14552:32;14549:119;;;14587:79;;:::i;:::-;14549:119;14707:1;14732:53;14777:7;14768:6;14757:9;14753:22;14732:53;:::i;:::-;14722:63;;14678:117;14862:2;14851:9;14847:18;14834:32;14893:18;14885:6;14882:30;14879:117;;;14915:79;;:::i;:::-;14879:117;15020:78;15090:7;15081:6;15070:9;15066:22;15020:78;:::i;:::-;15010:88;;14805:303;14431:684;;;;;:::o;15121:329::-;15180:6;15229:2;15217:9;15208:7;15204:23;15200:32;15197:119;;;15235:79;;:::i;:::-;15197:119;15355:1;15380:53;15425:7;15416:6;15405:9;15401:22;15380:53;:::i;:::-;15370:63;;15326:117;15121:329;;;;:::o;15456:474::-;15524:6;15532;15581:2;15569:9;15560:7;15556:23;15552:32;15549:119;;;15587:79;;:::i;:::-;15549:119;15707:1;15732:53;15777:7;15768:6;15757:9;15753:22;15732:53;:::i;:::-;15722:63;;15678:117;15834:2;15860:53;15905:7;15896:6;15885:9;15881:22;15860:53;:::i;:::-;15850:63;;15805:118;15456:474;;;;;:::o;15936:308::-;15998:4;16088:18;16080:6;16077:30;16074:56;;;16110:18;;:::i;:::-;16074:56;16148:29;16170:6;16148:29;:::i;:::-;16140:37;;16232:4;16226;16222:15;16214:23;;15936:308;;;:::o;16250:425::-;16328:5;16353:66;16369:49;16411:6;16369:49;:::i;:::-;16353:66;:::i;:::-;16344:75;;16442:6;16435:5;16428:21;16480:4;16473:5;16469:16;16518:3;16509:6;16504:3;16500:16;16497:25;16494:112;;;16525:79;;:::i;:::-;16494:112;16615:54;16662:6;16657:3;16652;16615:54;:::i;:::-;16334:341;16250:425;;;;;:::o;16695:340::-;16751:5;16800:3;16793:4;16785:6;16781:17;16777:27;16767:122;;16808:79;;:::i;:::-;16767:122;16925:6;16912:20;16950:79;17025:3;17017:6;17010:4;17002:6;16998:17;16950:79;:::i;:::-;16941:88;;16757:278;16695:340;;;;:::o;17041:509::-;17110:6;17159:2;17147:9;17138:7;17134:23;17130:32;17127:119;;;17165:79;;:::i;:::-;17127:119;17313:1;17302:9;17298:17;17285:31;17343:18;17335:6;17332:30;17329:117;;;17365:79;;:::i;:::-;17329:117;17470:63;17525:7;17516:6;17505:9;17501:22;17470:63;:::i;:::-;17460:73;;17256:287;17041:509;;;;:::o;17556:182::-;17696:34;17692:1;17684:6;17680:14;17673:58;17556:182;:::o;17744:366::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:419::-;18282:4;18320:2;18309:9;18305:18;18297:26;;18369:9;18363:4;18359:20;18355:1;18344:9;18340:17;18333:47;18397:131;18523:4;18397:131;:::i;:::-;18389:139;;18116:419;;;:::o;18541:180::-;18589:77;18586:1;18579:88;18686:4;18683:1;18676:15;18710:4;18707:1;18700:15;18727:191;18767:3;18786:20;18804:1;18786:20;:::i;:::-;18781:25;;18820:20;18838:1;18820:20;:::i;:::-;18815:25;;18863:1;18860;18856:9;18849:16;;18884:3;18881:1;18878:10;18875:36;;;18891:18;;:::i;:::-;18875:36;18727:191;;;;:::o;18924:231::-;19064:34;19060:1;19052:6;19048:14;19041:58;19133:14;19128:2;19120:6;19116:15;19109:39;18924:231;:::o;19161:366::-;19303:3;19324:67;19388:2;19383:3;19324:67;:::i;:::-;19317:74;;19400:93;19489:3;19400:93;:::i;:::-;19518:2;19513:3;19509:12;19502:19;;19161:366;;;:::o;19533:419::-;19699:4;19737:2;19726:9;19722:18;19714:26;;19786:9;19780:4;19776:20;19772:1;19761:9;19757:17;19750:47;19814:131;19940:4;19814:131;:::i;:::-;19806:139;;19533:419;;;:::o;19958:180::-;20006:77;20003:1;19996:88;20103:4;20100:1;20093:15;20127:4;20124:1;20117:15;20144:320;20188:6;20225:1;20219:4;20215:12;20205:22;;20272:1;20266:4;20262:12;20293:18;20283:81;;20349:4;20341:6;20337:17;20327:27;;20283:81;20411:2;20403:6;20400:14;20380:18;20377:38;20374:84;;20430:18;;:::i;:::-;20374:84;20195:269;20144:320;;;:::o;20470:232::-;20610:34;20606:1;20598:6;20594:14;20587:58;20679:15;20674:2;20666:6;20662:15;20655:40;20470:232;:::o;20708:366::-;20850:3;20871:67;20935:2;20930:3;20871:67;:::i;:::-;20864:74;;20947:93;21036:3;20947:93;:::i;:::-;21065:2;21060:3;21056:12;21049:19;;20708:366;;;:::o;21080:419::-;21246:4;21284:2;21273:9;21269:18;21261:26;;21333:9;21327:4;21323:20;21319:1;21308:9;21304:17;21297:47;21361:131;21487:4;21361:131;:::i;:::-;21353:139;;21080:419;;;:::o;21505:221::-;21645:34;21641:1;21633:6;21629:14;21622:58;21714:4;21709:2;21701:6;21697:15;21690:29;21505:221;:::o;21732:366::-;21874:3;21895:67;21959:2;21954:3;21895:67;:::i;:::-;21888:74;;21971:93;22060:3;21971:93;:::i;:::-;22089:2;22084:3;22080:12;22073:19;;21732:366;;;:::o;22104:419::-;22270:4;22308:2;22297:9;22293:18;22285:26;;22357:9;22351:4;22347:20;22343:1;22332:9;22328:17;22321:47;22385:131;22511:4;22385:131;:::i;:::-;22377:139;;22104:419;;;:::o;22529:244::-;22669:34;22665:1;22657:6;22653:14;22646:58;22738:27;22733:2;22725:6;22721:15;22714:52;22529:244;:::o;22779:366::-;22921:3;22942:67;23006:2;23001:3;22942:67;:::i;:::-;22935:74;;23018:93;23107:3;23018:93;:::i;:::-;23136:2;23131:3;23127:12;23120:19;;22779:366;;;:::o;23151:419::-;23317:4;23355:2;23344:9;23340:18;23332:26;;23404:9;23398:4;23394:20;23390:1;23379:9;23375:17;23368:47;23432:131;23558:4;23432:131;:::i;:::-;23424:139;;23151:419;;;:::o;23576:221::-;23716:34;23712:1;23704:6;23700:14;23693:58;23785:4;23780:2;23772:6;23768:15;23761:29;23576:221;:::o;23803:366::-;23945:3;23966:67;24030:2;24025:3;23966:67;:::i;:::-;23959:74;;24042:93;24131:3;24042:93;:::i;:::-;24160:2;24155:3;24151:12;24144:19;;23803:366;;;:::o;24175:419::-;24341:4;24379:2;24368:9;24364:18;24356:26;;24428:9;24422:4;24418:20;24414:1;24403:9;24399:17;24392:47;24456:131;24582:4;24456:131;:::i;:::-;24448:139;;24175:419;;;:::o;24600:233::-;24639:3;24662:24;24680:5;24662:24;:::i;:::-;24653:33;;24708:66;24701:5;24698:77;24695:103;;24778:18;;:::i;:::-;24695:103;24825:1;24818:5;24814:13;24807:20;;24600:233;;;:::o;24839:::-;24979:34;24975:1;24967:6;24963:14;24956:58;25048:16;25043:2;25035:6;25031:15;25024:41;24839:233;:::o;25078:366::-;25220:3;25241:67;25305:2;25300:3;25241:67;:::i;:::-;25234:74;;25317:93;25406:3;25317:93;:::i;:::-;25435:2;25430:3;25426:12;25419:19;;25078:366;;;:::o;25450:419::-;25616:4;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:131;25857:4;25731:131;:::i;:::-;25723:139;;25450:419;;;:::o;25875:222::-;26015:34;26011:1;26003:6;25999:14;25992:58;26084:5;26079:2;26071:6;26067:15;26060:30;25875:222;:::o;26103:366::-;26245:3;26266:67;26330:2;26325:3;26266:67;:::i;:::-;26259:74;;26342:93;26431:3;26342:93;:::i;:::-;26460:2;26455:3;26451:12;26444:19;;26103:366;;;:::o;26475:419::-;26641:4;26679:2;26668:9;26664:18;26656:26;;26728:9;26722:4;26718:20;26714:1;26703:9;26699:17;26692:47;26756:131;26882:4;26756:131;:::i;:::-;26748:139;;26475:419;;;:::o;26900:97::-;26959:6;26987:3;26977:13;;26900:97;;;;:::o;27003:141::-;27052:4;27075:3;27067:11;;27098:3;27095:1;27088:14;27132:4;27129:1;27119:18;27111:26;;27003:141;;;:::o;27150:93::-;27187:6;27234:2;27229;27222:5;27218:14;27214:23;27204:33;;27150:93;;;:::o;27249:107::-;27293:8;27343:5;27337:4;27333:16;27312:37;;27249:107;;;;:::o;27362:393::-;27431:6;27481:1;27469:10;27465:18;27504:97;27534:66;27523:9;27504:97;:::i;:::-;27622:39;27652:8;27641:9;27622:39;:::i;:::-;27610:51;;27694:4;27690:9;27683:5;27679:21;27670:30;;27743:4;27733:8;27729:19;27722:5;27719:30;27709:40;;27438:317;;27362:393;;;;;:::o;27761:60::-;27789:3;27810:5;27803:12;;27761:60;;;:::o;27827:142::-;27877:9;27910:53;27928:34;27937:24;27955:5;27937:24;:::i;:::-;27928:34;:::i;:::-;27910:53;:::i;:::-;27897:66;;27827:142;;;:::o;27975:75::-;28018:3;28039:5;28032:12;;27975:75;;;:::o;28056:269::-;28166:39;28197:7;28166:39;:::i;:::-;28227:91;28276:41;28300:16;28276:41;:::i;:::-;28268:6;28261:4;28255:11;28227:91;:::i;:::-;28221:4;28214:105;28132:193;28056:269;;;:::o;28331:73::-;28376:3;28331:73;:::o;28410:189::-;28487:32;;:::i;:::-;28528:65;28586:6;28578;28572:4;28528:65;:::i;:::-;28463:136;28410:189;;:::o;28605:186::-;28665:120;28682:3;28675:5;28672:14;28665:120;;;28736:39;28773:1;28766:5;28736:39;:::i;:::-;28709:1;28702:5;28698:13;28689:22;;28665:120;;;28605:186;;:::o;28797:543::-;28898:2;28893:3;28890:11;28887:446;;;28932:38;28964:5;28932:38;:::i;:::-;29016:29;29034:10;29016:29;:::i;:::-;29006:8;29002:44;29199:2;29187:10;29184:18;29181:49;;;29220:8;29205:23;;29181:49;29243:80;29299:22;29317:3;29299:22;:::i;:::-;29289:8;29285:37;29272:11;29243:80;:::i;:::-;28902:431;;28887:446;28797:543;;;:::o;29346:117::-;29400:8;29450:5;29444:4;29440:16;29419:37;;29346:117;;;;:::o;29469:169::-;29513:6;29546:51;29594:1;29590:6;29582:5;29579:1;29575:13;29546:51;:::i;:::-;29542:56;29627:4;29621;29617:15;29607:25;;29520:118;29469:169;;;;:::o;29643:295::-;29719:4;29865:29;29890:3;29884:4;29865:29;:::i;:::-;29857:37;;29927:3;29924:1;29920:11;29914:4;29911:21;29903:29;;29643:295;;;;:::o;29943:1403::-;30067:44;30107:3;30102;30067:44;:::i;:::-;30176:18;30168:6;30165:30;30162:56;;;30198:18;;:::i;:::-;30162:56;30242:38;30274:4;30268:11;30242:38;:::i;:::-;30327:67;30387:6;30379;30373:4;30327:67;:::i;:::-;30421:1;30450:2;30442:6;30439:14;30467:1;30462:632;;;;31138:1;31155:6;31152:84;;;31211:9;31206:3;31202:19;31189:33;31180:42;;31152:84;31262:67;31322:6;31315:5;31262:67;:::i;:::-;31256:4;31249:81;31111:229;30432:908;;30462:632;30514:4;30510:9;30502:6;30498:22;30548:37;30580:4;30548:37;:::i;:::-;30607:1;30621:215;30635:7;30632:1;30629:14;30621:215;;;30721:9;30716:3;30712:19;30699:33;30691:6;30684:49;30772:1;30764:6;30760:14;30750:24;;30819:2;30808:9;30804:18;30791:31;;30658:4;30655:1;30651:12;30646:17;;30621:215;;;30864:6;30855:7;30852:19;30849:186;;;30929:9;30924:3;30920:19;30907:33;30972:48;31014:4;31006:6;31002:17;30991:9;30972:48;:::i;:::-;30964:6;30957:64;30872:163;30849:186;31081:1;31077;31069:6;31065:14;31061:22;31055:4;31048:36;30469:625;;;30432:908;;30042:1304;;;29943:1403;;;:::o;31352:230::-;31492:34;31488:1;31480:6;31476:14;31469:58;31561:13;31556:2;31548:6;31544:15;31537:38;31352:230;:::o;31588:366::-;31730:3;31751:67;31815:2;31810:3;31751:67;:::i;:::-;31744:74;;31827:93;31916:3;31827:93;:::i;:::-;31945:2;31940:3;31936:12;31929:19;;31588:366;;;:::o;31960:419::-;32126:4;32164:2;32153:9;32149:18;32141:26;;32213:9;32207:4;32203:20;32199:1;32188:9;32184:17;32177:47;32241:131;32367:4;32241:131;:::i;:::-;32233:139;;31960:419;;;:::o;32385:176::-;32525:28;32521:1;32513:6;32509:14;32502:52;32385:176;:::o;32567:366::-;32709:3;32730:67;32794:2;32789:3;32730:67;:::i;:::-;32723:74;;32806:93;32895:3;32806:93;:::i;:::-;32924:2;32919:3;32915:12;32908:19;;32567:366;;;:::o;32939:419::-;33105:4;33143:2;33132:9;33128:18;33120:26;;33192:9;33186:4;33182:20;33178:1;33167:9;33163:17;33156:47;33220:131;33346:4;33220:131;:::i;:::-;33212:139;;32939:419;;;:::o;33364:238::-;33504:34;33500:1;33492:6;33488:14;33481:58;33573:21;33568:2;33560:6;33556:15;33549:46;33364:238;:::o;33608:366::-;33750:3;33771:67;33835:2;33830:3;33771:67;:::i;:::-;33764:74;;33847:93;33936:3;33847:93;:::i;:::-;33965:2;33960:3;33956:12;33949:19;;33608:366;;;:::o;33980:419::-;34146:4;34184:2;34173:9;34169:18;34161:26;;34233:9;34227:4;34223:20;34219:1;34208:9;34204:17;34197:47;34261:131;34387:4;34261:131;:::i;:::-;34253:139;;33980:419;;;:::o;34405:180::-;34545:32;34541:1;34533:6;34529:14;34522:56;34405:180;:::o;34591:366::-;34733:3;34754:67;34818:2;34813:3;34754:67;:::i;:::-;34747:74;;34830:93;34919:3;34830:93;:::i;:::-;34948:2;34943:3;34939:12;34932:19;;34591:366;;;:::o;34963:419::-;35129:4;35167:2;35156:9;35152:18;35144:26;;35216:9;35210:4;35206:20;35202:1;35191:9;35187:17;35180:47;35244:131;35370:4;35244:131;:::i;:::-;35236:139;;34963:419;;;:::o;35388:174::-;35528:26;35524:1;35516:6;35512:14;35505:50;35388:174;:::o;35568:366::-;35710:3;35731:67;35795:2;35790:3;35731:67;:::i;:::-;35724:74;;35807:93;35896:3;35807:93;:::i;:::-;35925:2;35920:3;35916:12;35909:19;;35568:366;;;:::o;35940:419::-;36106:4;36144:2;36133:9;36129:18;36121:26;;36193:9;36187:4;36183:20;36179:1;36168:9;36164:17;36157:47;36221:131;36347:4;36221:131;:::i;:::-;36213:139;;35940:419;;;:::o;36365:174::-;36505:26;36501:1;36493:6;36489:14;36482:50;36365:174;:::o;36545:366::-;36687:3;36708:67;36772:2;36767:3;36708:67;:::i;:::-;36701:74;;36784:93;36873:3;36784:93;:::i;:::-;36902:2;36897:3;36893:12;36886:19;;36545:366;;;:::o;36917:419::-;37083:4;37121:2;37110:9;37106:18;37098:26;;37170:9;37164:4;37160:20;37156:1;37145:9;37141:17;37134:47;37198:131;37324:4;37198:131;:::i;:::-;37190:139;;36917:419;;;:::o;37342:166::-;37482:18;37478:1;37470:6;37466:14;37459:42;37342:166;:::o;37514:366::-;37656:3;37677:67;37741:2;37736:3;37677:67;:::i;:::-;37670:74;;37753:93;37842:3;37753:93;:::i;:::-;37871:2;37866:3;37862:12;37855:19;;37514:366;;;:::o;37886:419::-;38052:4;38090:2;38079:9;38075:18;38067:26;;38139:9;38133:4;38129:20;38125:1;38114:9;38110:17;38103:47;38167:131;38293:4;38167:131;:::i;:::-;38159:139;;37886:419;;;:::o;38311:171::-;38451:23;38447:1;38439:6;38435:14;38428:47;38311:171;:::o;38488:366::-;38630:3;38651:67;38715:2;38710:3;38651:67;:::i;:::-;38644:74;;38727:93;38816:3;38727:93;:::i;:::-;38845:2;38840:3;38836:12;38829:19;;38488:366;;;:::o;38860:419::-;39026:4;39064:2;39053:9;39049:18;39041:26;;39113:9;39107:4;39103:20;39099:1;39088:9;39084:17;39077:47;39141:131;39267:4;39141:131;:::i;:::-;39133:139;;38860:419;;;:::o;39285:227::-;39425:34;39421:1;39413:6;39409:14;39402:58;39494:10;39489:2;39481:6;39477:15;39470:35;39285:227;:::o;39518:366::-;39660:3;39681:67;39745:2;39740:3;39681:67;:::i;:::-;39674:74;;39757:93;39846:3;39757:93;:::i;:::-;39875:2;39870:3;39866:12;39859:19;;39518:366;;;:::o;39890:419::-;40056:4;40094:2;40083:9;40079:18;40071:26;;40143:9;40137:4;40133:20;40129:1;40118:9;40114:17;40107:47;40171:131;40297:4;40171:131;:::i;:::-;40163:139;;39890:419;;;:::o;40315:173::-;40455:25;40451:1;40443:6;40439:14;40432:49;40315:173;:::o;40494:366::-;40636:3;40657:67;40721:2;40716:3;40657:67;:::i;:::-;40650:74;;40733:93;40822:3;40733:93;:::i;:::-;40851:2;40846:3;40842:12;40835:19;;40494:366;;;:::o;40866:419::-;41032:4;41070:2;41059:9;41055:18;41047:26;;41119:9;41113:4;41109:20;41105:1;41094:9;41090:17;41083:47;41147:131;41273:4;41147:131;:::i;:::-;41139:139;;40866:419;;;:::o;41291:177::-;41431:29;41427:1;41419:6;41415:14;41408:53;41291:177;:::o;41474:366::-;41616:3;41637:67;41701:2;41696:3;41637:67;:::i;:::-;41630:74;;41713:93;41802:3;41713:93;:::i;:::-;41831:2;41826:3;41822:12;41815:19;;41474:366;;;:::o;41846:419::-;42012:4;42050:2;42039:9;42035:18;42027:26;;42099:9;42093:4;42089:20;42085:1;42074:9;42070:17;42063:47;42127:131;42253:4;42127:131;:::i;:::-;42119:139;;41846:419;;;:::o;42271:410::-;42311:7;42334:20;42352:1;42334:20;:::i;:::-;42329:25;;42368:20;42386:1;42368:20;:::i;:::-;42363:25;;42423:1;42420;42416:9;42445:30;42463:11;42445:30;:::i;:::-;42434:41;;42624:1;42615:7;42611:15;42608:1;42605:22;42585:1;42578:9;42558:83;42535:139;;42654:18;;:::i;:::-;42535:139;42319:362;42271:410;;;;:::o;42687:161::-;42827:13;42823:1;42815:6;42811:14;42804:37;42687:161;:::o;42854:366::-;42996:3;43017:67;43081:2;43076:3;43017:67;:::i;:::-;43010:74;;43093:93;43182:3;43093:93;:::i;:::-;43211:2;43206:3;43202:12;43195:19;;42854:366;;;:::o;43226:419::-;43392:4;43430:2;43419:9;43415:18;43407:26;;43479:9;43473:4;43469:20;43465:1;43454:9;43450:17;43443:47;43507:131;43633:4;43507:131;:::i;:::-;43499:139;;43226:419;;;:::o;43651:194::-;43691:4;43711:20;43729:1;43711:20;:::i;:::-;43706:25;;43745:20;43763:1;43745:20;:::i;:::-;43740:25;;43789:1;43786;43782:9;43774:17;;43813:1;43807:4;43804:11;43801:37;;;43818:18;;:::i;:::-;43801:37;43651:194;;;;:::o;43851:234::-;43991:34;43987:1;43979:6;43975:14;43968:58;44060:17;44055:2;44047:6;44043:15;44036:42;43851:234;:::o;44091:366::-;44233:3;44254:67;44318:2;44313:3;44254:67;:::i;:::-;44247:74;;44330:93;44419:3;44330:93;:::i;:::-;44448:2;44443:3;44439:12;44432:19;;44091:366;;;:::o;44463:419::-;44629:4;44667:2;44656:9;44652:18;44644:26;;44716:9;44710:4;44706:20;44702:1;44691:9;44687:17;44680:47;44744:131;44870:4;44744:131;:::i;:::-;44736:139;;44463:419;;;:::o;44888:148::-;44990:11;45027:3;45012:18;;44888:148;;;;:::o;45042:390::-;45148:3;45176:39;45209:5;45176:39;:::i;:::-;45231:89;45313:6;45308:3;45231:89;:::i;:::-;45224:96;;45329:65;45387:6;45382:3;45375:4;45368:5;45364:16;45329:65;:::i;:::-;45419:6;45414:3;45410:16;45403:23;;45152:280;45042:390;;;;:::o;45438:155::-;45578:7;45574:1;45566:6;45562:14;45555:31;45438:155;:::o;45599:400::-;45759:3;45780:84;45862:1;45857:3;45780:84;:::i;:::-;45773:91;;45873:93;45962:3;45873:93;:::i;:::-;45991:1;45986:3;45982:11;45975:18;;45599:400;;;:::o;46005:541::-;46238:3;46260:95;46351:3;46342:6;46260:95;:::i;:::-;46253:102;;46372:148;46516:3;46372:148;:::i;:::-;46365:155;;46537:3;46530:10;;46005:541;;;;:::o;46552:1395::-;46669:37;46702:3;46669:37;:::i;:::-;46771:18;46763:6;46760:30;46757:56;;;46793:18;;:::i;:::-;46757:56;46837:38;46869:4;46863:11;46837:38;:::i;:::-;46922:67;46982:6;46974;46968:4;46922:67;:::i;:::-;47016:1;47040:4;47027:17;;47072:2;47064:6;47061:14;47089:1;47084:618;;;;47746:1;47763:6;47760:77;;;47812:9;47807:3;47803:19;47797:26;47788:35;;47760:77;47863:67;47923:6;47916:5;47863:67;:::i;:::-;47857:4;47850:81;47719:222;47054:887;;47084:618;47136:4;47132:9;47124:6;47120:22;47170:37;47202:4;47170:37;:::i;:::-;47229:1;47243:208;47257:7;47254:1;47251:14;47243:208;;;47336:9;47331:3;47327:19;47321:26;47313:6;47306:42;47387:1;47379:6;47375:14;47365:24;;47434:2;47423:9;47419:18;47406:31;;47280:4;47277:1;47273:12;47268:17;;47243:208;;;47479:6;47470:7;47467:19;47464:179;;;47537:9;47532:3;47528:19;47522:26;47580:48;47622:4;47614:6;47610:17;47599:9;47580:48;:::i;:::-;47572:6;47565:64;47487:156;47464:179;47689:1;47685;47677:6;47673:14;47669:22;47663:4;47656:36;47091:611;;;47054:887;;46644:1303;;;46552:1395;;:::o;47953:225::-;48093:34;48089:1;48081:6;48077:14;48070:58;48162:8;48157:2;48149:6;48145:15;48138:33;47953:225;:::o;48184:366::-;48326:3;48347:67;48411:2;48406:3;48347:67;:::i;:::-;48340:74;;48423:93;48512:3;48423:93;:::i;:::-;48541:2;48536:3;48532:12;48525:19;;48184:366;;;:::o;48556:419::-;48722:4;48760:2;48749:9;48745:18;48737:26;;48809:9;48803:4;48799:20;48795:1;48784:9;48780:17;48773:47;48837:131;48963:4;48837:131;:::i;:::-;48829:139;;48556:419;;;:::o;48981:237::-;49121:34;49117:1;49109:6;49105:14;49098:58;49190:20;49185:2;49177:6;49173:15;49166:45;48981:237;:::o;49224:366::-;49366:3;49387:67;49451:2;49446:3;49387:67;:::i;:::-;49380:74;;49463:93;49552:3;49463:93;:::i;:::-;49581:2;49576:3;49572:12;49565:19;;49224:366;;;:::o;49596:419::-;49762:4;49800:2;49789:9;49785:18;49777:26;;49849:9;49843:4;49839:20;49835:1;49824:9;49820:17;49813:47;49877:131;50003:4;49877:131;:::i;:::-;49869:139;;49596:419;;;:::o;50021:225::-;50161:34;50157:1;50149:6;50145:14;50138:58;50230:8;50225:2;50217:6;50213:15;50206:33;50021:225;:::o;50252:366::-;50394:3;50415:67;50479:2;50474:3;50415:67;:::i;:::-;50408:74;;50491:93;50580:3;50491:93;:::i;:::-;50609:2;50604:3;50600:12;50593:19;;50252:366;;;:::o;50624:419::-;50790:4;50828:2;50817:9;50813:18;50805:26;;50877:9;50871:4;50867:20;50863:1;50852:9;50848:17;50841:47;50905:131;51031:4;50905:131;:::i;:::-;50897:139;;50624:419;;;:::o;51049:224::-;51189:34;51185:1;51177:6;51173:14;51166:58;51258:7;51253:2;51245:6;51241:15;51234:32;51049:224;:::o;51279:366::-;51421:3;51442:67;51506:2;51501:3;51442:67;:::i;:::-;51435:74;;51518:93;51607:3;51518:93;:::i;:::-;51636:2;51631:3;51627:12;51620:19;;51279:366;;;:::o;51651:419::-;51817:4;51855:2;51844:9;51840:18;51832:26;;51904:9;51898:4;51894:20;51890:1;51879:9;51875:17;51868:47;51932:131;52058:4;51932:131;:::i;:::-;51924:139;;51651:419;;;:::o;52076:118::-;52113:7;52153:34;52146:5;52142:46;52131:57;;52076:118;;;:::o;52200:227::-;52240:4;52260:20;52278:1;52260:20;:::i;:::-;52255:25;;52294:20;52312:1;52294:20;:::i;:::-;52289:25;;52338:1;52335;52331:9;52323:17;;52362:34;52356:4;52353:44;52350:70;;;52400:18;;:::i;:::-;52350:70;52200:227;;;;:::o;52433:224::-;52473:3;52492:20;52510:1;52492:20;:::i;:::-;52487:25;;52526:20;52544:1;52526:20;:::i;:::-;52521:25;;52569:1;52566;52562:9;52555:16;;52592:34;52587:3;52584:43;52581:69;;;52630:18;;:::i;:::-;52581:69;52433:224;;;;:::o;52663:229::-;52803:34;52799:1;52791:6;52787:14;52780:58;52872:12;52867:2;52859:6;52855:15;52848:37;52663:229;:::o;52898:366::-;53040:3;53061:67;53125:2;53120:3;53061:67;:::i;:::-;53054:74;;53137:93;53226:3;53137:93;:::i;:::-;53255:2;53250:3;53246:12;53239:19;;52898:366;;;:::o;53270:419::-;53436:4;53474:2;53463:9;53459:18;53451:26;;53523:9;53517:4;53513:20;53509:1;53498:9;53494:17;53487:47;53551:131;53677:4;53551:131;:::i;:::-;53543:139;;53270:419;;;:::o;53695:171::-;53734:3;53757:24;53775:5;53757:24;:::i;:::-;53748:33;;53803:4;53796:5;53793:15;53790:41;;53811:18;;:::i;:::-;53790:41;53858:1;53851:5;53847:13;53840:20;;53695:171;;;:::o;53872:234::-;54012:34;54008:1;54000:6;53996:14;53989:58;54081:17;54076:2;54068:6;54064:15;54057:42;53872:234;:::o;54112:366::-;54254:3;54275:67;54339:2;54334:3;54275:67;:::i;:::-;54268:74;;54351:93;54440:3;54351:93;:::i;:::-;54469:2;54464:3;54460:12;54453:19;;54112:366;;;:::o;54484:419::-;54650:4;54688:2;54677:9;54673:18;54665:26;;54737:9;54731:4;54727:20;54723:1;54712:9;54708:17;54701:47;54765:131;54891:4;54765:131;:::i;:::-;54757:139;;54484:419;;;:::o;54909:98::-;54960:6;54994:5;54988:12;54978:22;;54909:98;;;:::o;55013:168::-;55096:11;55130:6;55125:3;55118:19;55170:4;55165:3;55161:14;55146:29;;55013:168;;;;:::o;55187:373::-;55273:3;55301:38;55333:5;55301:38;:::i;:::-;55355:70;55418:6;55413:3;55355:70;:::i;:::-;55348:77;;55434:65;55492:6;55487:3;55480:4;55473:5;55469:16;55434:65;:::i;:::-;55524:29;55546:6;55524:29;:::i;:::-;55519:3;55515:39;55508:46;;55277:283;55187:373;;;;:::o;55566:640::-;55761:4;55799:3;55788:9;55784:19;55776:27;;55813:71;55881:1;55870:9;55866:17;55857:6;55813:71;:::i;:::-;55894:72;55962:2;55951:9;55947:18;55938:6;55894:72;:::i;:::-;55976;56044:2;56033:9;56029:18;56020:6;55976:72;:::i;:::-;56095:9;56089:4;56085:20;56080:2;56069:9;56065:18;56058:48;56123:76;56194:4;56185:6;56123:76;:::i;:::-;56115:84;;55566:640;;;;;;;:::o;56212:141::-;56268:5;56299:6;56293:13;56284:22;;56315:32;56341:5;56315:32;:::i;:::-;56212:141;;;;:::o;56359:349::-;56428:6;56477:2;56465:9;56456:7;56452:23;56448:32;56445:119;;;56483:79;;:::i;:::-;56445:119;56603:1;56628:63;56683:7;56674:6;56663:9;56659:22;56628:63;:::i;:::-;56618:73;;56574:127;56359:349;;;;:::o;56714:94::-;56747:8;56795:5;56791:2;56787:14;56766:35;;56714:94;;;:::o;56814:::-;56853:7;56882:20;56896:5;56882:20;:::i;:::-;56871:31;;56814:94;;;:::o;56914:100::-;56953:7;56982:26;57002:5;56982:26;:::i;:::-;56971:37;;56914:100;;;:::o;57020:157::-;57125:45;57145:24;57163:5;57145:24;:::i;:::-;57125:45;:::i;:::-;57120:3;57113:58;57020:157;;:::o;57183:256::-;57295:3;57310:75;57381:3;57372:6;57310:75;:::i;:::-;57410:2;57405:3;57401:12;57394:19;;57430:3;57423:10;;57183:256;;;;:::o;57445:435::-;57625:3;57647:95;57738:3;57729:6;57647:95;:::i;:::-;57640:102;;57759:95;57850:3;57841:6;57759:95;:::i;:::-;57752:102;;57871:3;57864:10;;57445:435;;;;;:::o;57886:236::-;58026:34;58022:1;58014:6;58010:14;58003:58;58095:19;58090:2;58082:6;58078:15;58071:44;57886:236;:::o;58128:366::-;58270:3;58291:67;58355:2;58350:3;58291:67;:::i;:::-;58284:74;;58367:93;58456:3;58367:93;:::i;:::-;58485:2;58480:3;58476:12;58469:19;;58128:366;;;:::o;58500:419::-;58666:4;58704:2;58693:9;58689:18;58681:26;;58753:9;58747:4;58743:20;58739:1;58728:9;58724:17;58717:47;58781:131;58907:4;58781:131;:::i;:::-;58773:139;;58500:419;;;:::o;58925:220::-;59065:34;59061:1;59053:6;59049:14;59042:58;59134:3;59129:2;59121:6;59117:15;59110:28;58925:220;:::o;59151:366::-;59293:3;59314:67;59378:2;59373:3;59314:67;:::i;:::-;59307:74;;59390:93;59479:3;59390:93;:::i;:::-;59508:2;59503:3;59499:12;59492:19;;59151:366;;;:::o;59523:419::-;59689:4;59727:2;59716:9;59712:18;59704:26;;59776:9;59770:4;59766:20;59762:1;59751:9;59747:17;59740:47;59804:131;59930:4;59804:131;:::i;:::-;59796:139;;59523:419;;;:::o;59948:179::-;60088:31;60084:1;60076:6;60072:14;60065:55;59948:179;:::o;60133:366::-;60275:3;60296:67;60360:2;60355:3;60296:67;:::i;:::-;60289:74;;60372:93;60461:3;60372:93;:::i;:::-;60490:2;60485:3;60481:12;60474:19;;60133:366;;;:::o;60505:419::-;60671:4;60709:2;60698:9;60694:18;60686:26;;60758:9;60752:4;60748:20;60744:1;60733:9;60729:17;60722:47;60786:131;60912:4;60786:131;:::i;:::-;60778:139;;60505:419;;;:::o;60930:221::-;61070:34;61066:1;61058:6;61054:14;61047:58;61139:4;61134:2;61126:6;61122:15;61115:29;60930:221;:::o;61157:366::-;61299:3;61320:67;61384:2;61379:3;61320:67;:::i;:::-;61313:74;;61396:93;61485:3;61396:93;:::i;:::-;61514:2;61509:3;61505:12;61498:19;;61157:366;;;:::o;61529:419::-;61695:4;61733:2;61722:9;61718:18;61710:26;;61782:9;61776:4;61772:20;61768:1;61757:9;61753:17;61746:47;61810:131;61936:4;61810:131;:::i;:::-;61802:139;;61529:419;;;:::o;61954:180::-;62002:77;61999:1;61992:88;62099:4;62096:1;62089:15;62123:4;62120:1;62113:15;62140:185;62180:1;62197:20;62215:1;62197:20;:::i;:::-;62192:25;;62231:20;62249:1;62231:20;:::i;:::-;62226:25;;62270:1;62260:35;;62275:18;;:::i;:::-;62260:35;62317:1;62314;62310:9;62305:14;;62140:185;;;;:::o;62331:176::-;62363:1;62380:20;62398:1;62380:20;:::i;:::-;62375:25;;62414:20;62432:1;62414:20;:::i;:::-;62409:25;;62453:1;62443:35;;62458:18;;:::i;:::-;62443:35;62499:1;62496;62492:9;62487:14;;62331:176;;;;:::o;62513:180::-;62561:77;62558:1;62551:88;62658:4;62655:1;62648:15;62682:4;62679:1;62672:15

Swarm Source

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