ETH Price: $3,072.34 (+2.49%)
Gas: 4 Gwei

Baby Elephants Squad (BES)
 

Overview

TokenID

1053

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
BabyElephantsSquad

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-09
*/

// SPDX-License-Identifier: MIT

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 {}
}

contract BabyElephantsSquad is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;
    address public ElephantContract;

    string public uriPrefix = "";

    string public uriSuffix = ".json";
    string public hiddenMetadataUri;

    uint256 public cost = 0.022 ether;
    uint256 public maxSupply = 2222;
    uint256 public maxMintAmountPerTx = 20;

    bool public publicMint = true; // By default public minting is paused
    bool public publicClaim = true; // By default claim baby NFTs is paused
    bool public revealed = false; //  By default NFTs is in hidden state

    mapping(uint256 => bool) public claimedBabyElephant;

    constructor(address _contract) ERC721A("Baby Elephants Squad", "BES", 1000, maxSupply) {
        ElephantContract = _contract; // Epic Elephant Squad Contract Address
    }

    modifier mintCompliance(uint256 _mintAmount) {
        require(
            _mintAmount > 0 && _mintAmount <= maxMintAmountPerTx,
            "Invalid mint amount!"
        );
        require(
            totalSupply() + _mintAmount <= maxSupply,
            "Max supply exceeded!"
        );
        _;
    }

    function mint(uint256 _mintAmount)
        public
        payable
        mintCompliance(_mintAmount)
    {
        require(!publicMint, "The contract is paused!");
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        _safeMint(msg.sender, _mintAmount);
    }

    function claimBabyElephant()
        public
    {
        require(!publicClaim, "The contract is paused!");
        uint256 elephantsOwned = IERC721(ElephantContract).balanceOf(msg.sender);
        require(elephantsOwned > 0, "No Elephants owned!");

        uint256 claimAmount = 0;
        uint256 lastClaimableToken = 0;
        for (uint256 i = 0; i < elephantsOwned; i++) {
            uint256 tokenId = IERC721Enumerable(ElephantContract).tokenOfOwnerByIndex(msg.sender, i);
            if (!claimedBabyElephant[tokenId]) { 
                claimAmount++;
                claimedBabyElephant[tokenId] = true;
                lastClaimableToken = tokenId;
            }
        }

        if (claimAmount % 2 == 1) {
            claimAmount--;
            delete claimedBabyElephant[lastClaimableToken];
        }

        require(claimAmount > 0, "No reedemable Elephants!");
        _safeMint(msg.sender, claimAmount / 2);
    }

    function claimableElephantsCount(address _owner)
        public
        view
        returns (uint256)
    {
        uint256 elephantsOwned = IERC721(ElephantContract).balanceOf(_owner);

        uint256 claimAmount = 0;
        uint256 lastClaimableToken = 0;
        for (uint256 i = 0; i < elephantsOwned; i++) {
            uint256 tokenId = IERC721Enumerable(ElephantContract).tokenOfOwnerByIndex(_owner, i);
            if (!claimedBabyElephant[tokenId]) { 
                claimAmount++;
                lastClaimableToken = tokenId;
            }
        }

        if (claimAmount % 2 == 1) {
            claimAmount--;
        }

        return (claimAmount / 2);
    }

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

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

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (
            ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply
        ) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;

                ownedTokenIndex++;
            }

            currentTokenId++;
        }

        return ownedTokenIds;
    }

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

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

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

    function setRevealed() public onlyOwner {
        revealed = !revealed;
    }

    function setCost(uint256 _cost) public onlyOwner {
        cost = _cost;
    }

    function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx)
        public
        onlyOwner
    {
        maxMintAmountPerTx = _maxMintAmountPerTx;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri)
        public
        onlyOwner
    {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
        uriPrefix = _uriPrefix;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;
    }

    function setPublicMint() public onlyOwner {
        publicMint = !publicMint;
    }

    function setPublicClaim() public onlyOwner {
        publicClaim = !publicClaim;
    }

    function setElephantContract(address _address) public onlyOwner {
        ElephantContract = _address;
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ElephantContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimBabyElephant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"claimableElephantsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedBabyElephant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","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":"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":"publicClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setElephantContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60006001819055600881905560e060405260c0908152600b9062000024908262000335565b50604080518082019091526005815264173539b7b760d91b6020820152600c9062000050908262000335565b50664e28e2290f0000600e556108ae600f5560146010556011805462ffffff19166101011790553480156200008457600080fd5b506040516200320638038062003206833981016040819052620000a79162000401565b6040518060400160405280601481526020017f4261627920456c657068616e74732053717561640000000000000000000000008152506040518060400160405280600381526020016242455360e81b8152506103e8600f5462000119620001136200023c60201b60201c565b62000240565b60008111620001865760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001e85760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b60648201526084016200017d565b6002620001f6858262000335565b50600362000205848262000335565b5060a09190915260805250506001600955600a80546001600160a01b0319166001600160a01b039290921691909117905562000433565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002bb57607f821691505b602082108103620002dc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033057600081815260208120601f850160051c810160208610156200030b5750805b601f850160051c820191505b818110156200032c5782815560010162000317565b5050505b505050565b81516001600160401b0381111562000351576200035162000290565b6200036981620003628454620002a6565b84620002e2565b602080601f831160018114620003a15760008415620003885750858301515b600019600386901b1c1916600185901b1785556200032c565b600085815260208120601f198616915b82811015620003d257888601518255948401946001909101908401620003b1565b5085821015620003f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200041457600080fd5b81516001600160a01b03811681146200042c57600080fd5b9392505050565b60805160a051612da26200046460003960008181611f7f01528181611fa901526123e0015260005050612da26000f3fe6080604052600436106102885760003560e01c806362b99ad41161015a578063a22cb465116100c1578063d5abeb011161007a578063d5abeb011461079f578063d7224ba0146107b5578063dd4fc04a146107cb578063e985e9c5146107e0578063f254933d14610829578063f2fde38b1461084957600080fd5b8063a22cb465146106ea578063a45ba8e71461070a578063b071401b1461071f578063b88d4fde1461073f578063bdc3926d1461075f578063c87b56dd1461077f57600080fd5b80637f04116a116101135780637f04116a146106205780638da5cb5b146106405780639231ab2a1461065e57806394354fd0146106ac57806395d89b41146106c2578063a0712d68146106d757600080fd5b806362b99ad4146105815780636352211e1461059657806370a08231146105b6578063715018a6146105d65780637e7e40e8146105eb5780637ec4a6591461060057600080fd5b806323b872dd116101fe578063438b6300116101b7578063438b6300146104bf57806344a0d68a146104ec5780634f6ccce71461050c5780634fdd43cb1461052c578063518302271461054c5780635503a0e81461056c57600080fd5b806323b872dd1461041b57806326092b831461043b5780632f745c59146104555780633bd64968146104755780633ccfd60b1461048a57806342842e0e1461049f57600080fd5b806313bfe8ad1161025057806313bfe8ad1461035357806313faede61461037357806316ba10e01461039757806318160ddd146103b75780631b415239146103cc5780631bf57266146103eb57600080fd5b806301ffc9a71461028d57806302456aa2146102c257806306fdde03146102d9578063081812fc146102fb578063095ea7b314610333575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612614565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d76108d6565b005b3480156102e557600080fd5b506102ee61091d565b6040516102b99190612689565b34801561030757600080fd5b5061031b61031636600461269c565b6109af565b6040516001600160a01b0390911681526020016102b9565b34801561033f57600080fd5b506102d761034e3660046126d1565b610a3a565b34801561035f57600080fd5b506102d761036e3660046126fb565b610b51565b34801561037f57600080fd5b50610389600e5481565b6040519081526020016102b9565b3480156103a357600080fd5b506102d76103b23660046127a2565b610b9d565b3480156103c357600080fd5b50600154610389565b3480156103d857600080fd5b506011546102ad90610100900460ff1681565b3480156103f757600080fd5b506102ad61040636600461269c565b60126020526000908152604090205460ff1681565b34801561042757600080fd5b506102d76104363660046127eb565b610bd7565b34801561044757600080fd5b506011546102ad9060ff1681565b34801561046157600080fd5b506103896104703660046126d1565b610be2565b34801561048157600080fd5b506102d7610d59565b34801561049657600080fd5b506102d7610da2565b3480156104ab57600080fd5b506102d76104ba3660046127eb565b610dfb565b3480156104cb57600080fd5b506104df6104da3660046126fb565b610e16565b6040516102b99190612827565b3480156104f857600080fd5b506102d761050736600461269c565b610ef6565b34801561051857600080fd5b5061038961052736600461269c565b610f25565b34801561053857600080fd5b506102d76105473660046127a2565b610f8e565b34801561055857600080fd5b506011546102ad9062010000900460ff1681565b34801561057857600080fd5b506102ee610fc4565b34801561058d57600080fd5b506102ee611052565b3480156105a257600080fd5b5061031b6105b136600461269c565b61105f565b3480156105c257600080fd5b506103896105d13660046126fb565b611071565b3480156105e257600080fd5b506102d7611102565b3480156105f757600080fd5b506102d7611138565b34801561060c57600080fd5b506102d761061b3660046127a2565b6113b4565b34801561062c57600080fd5b50600a5461031b906001600160a01b031681565b34801561064c57600080fd5b506000546001600160a01b031661031b565b34801561066a57600080fd5b5061067e61067936600461269c565b6113ea565b6040805182516001600160a01b0316815260209283015167ffffffffffffffff1692810192909252016102b9565b3480156106b857600080fd5b5061038960105481565b3480156106ce57600080fd5b506102ee611407565b6102d76106e536600461269c565b611416565b3480156106f657600080fd5b506102d761070536600461286b565b611572565b34801561071657600080fd5b506102ee611636565b34801561072b57600080fd5b506102d761073a36600461269c565b611643565b34801561074b57600080fd5b506102d761075a3660046128a7565b611672565b34801561076b57600080fd5b5061038961077a3660046126fb565b6116ab565b34801561078b57600080fd5b506102ee61079a36600461269c565b611815565b3480156107ab57600080fd5b50610389600f5481565b3480156107c157600080fd5b5061038960085481565b3480156107d757600080fd5b506102d761198c565b3480156107ec57600080fd5b506102ad6107fb366004612923565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561083557600080fd5b506102d76108443660046126d1565b6119d3565b34801561085557600080fd5b506102d76108643660046126fb565b611a81565b60006001600160e01b031982166380ac58cd60e01b148061089a57506001600160e01b03198216635b5e139f60e01b145b806108b557506001600160e01b0319821663780e9d6360e01b145b806108d057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146109095760405162461bcd60e51b815260040161090090612956565b60405180910390fd5b6011805460ff19811660ff90911615179055565b60606002805461092c9061298b565b80601f01602080910402602001604051908101604052809291908181526020018280546109589061298b565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109bc826001541190565b610a1e5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610900565b506000908152600660205260409020546001600160a01b031690565b6000610a458261105f565b9050806001600160a01b0316836001600160a01b031603610ab35760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610900565b336001600160a01b0382161480610acf5750610acf81336107fb565b610b415760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610900565b610b4c838383611b19565b505050565b6000546001600160a01b03163314610b7b5760405162461bcd60e51b815260040161090090612956565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bc75760405162461bcd60e51b815260040161090090612956565b600c610bd38282612a0b565b5050565b610b4c838383611b75565b6000610bed83611071565b8210610c465760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610900565b6000610c5160015490565b905060008060005b83811015610cf9576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610cac57805192505b876001600160a01b0316836001600160a01b031603610ce657868403610cd8575093506108d092505050565b83610ce281612ae1565b9450505b5080610cf181612ae1565b915050610c59565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610900565b6000546001600160a01b03163314610d835760405162461bcd60e51b815260040161090090612956565b6011805462ff0000198116620100009182900460ff1615909102179055565b6000546001600160a01b03163314610dcc5760405162461bcd60e51b815260040161090090612956565b60405133904780156108fc02916000818181858888f19350505050158015610df8573d6000803e3d6000fd5b50565b610b4c83838360405180602001604052806000815250611672565b60606000610e2383611071565b905060008167ffffffffffffffff811115610e4057610e40612716565b604051908082528060200260200182016040528015610e69578160200160208202803683370190505b509050600160005b8381108015610e825750600f548211155b15610eec576000610e928361105f565b9050866001600160a01b0316816001600160a01b031603610ed95782848381518110610ec057610ec0612afa565b602090810291909101015281610ed581612ae1565b9250505b82610ee381612ae1565b93505050610e71565b5090949350505050565b6000546001600160a01b03163314610f205760405162461bcd60e51b815260040161090090612956565b600e55565b6000610f3060015490565b8210610f8a5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610900565b5090565b6000546001600160a01b03163314610fb85760405162461bcd60e51b815260040161090090612956565b600d610bd38282612a0b565b600c8054610fd19061298b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd9061298b565b801561104a5780601f1061101f5761010080835404028352916020019161104a565b820191906000526020600020905b81548152906001019060200180831161102d57829003601f168201915b505050505081565b600b8054610fd19061298b565b600061106a82611efd565b5192915050565b60006001600160a01b0382166110dd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610900565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b0316331461112c5760405162461bcd60e51b815260040161090090612956565b61113660006120a7565b565b601154610100900460ff161561118a5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610900565b600a546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f79190612b10565b90506000811161123f5760405162461bcd60e51b81526020600482015260136024820152724e6f20456c657068616e7473206f776e65642160681b6044820152606401610900565b60008060005b8381101561131957600a54604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c5990604401602060405180830381865afa15801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c19190612b10565b60008181526012602052604090205490915060ff1661130657836112e481612ae1565b6000838152601260205260409020805460ff1916600117905594509092508290505b508061131181612ae1565b915050611245565b50611325600283612b3f565b600103611350578161133681612b53565b6000838152601260205260409020805460ff191690559250505b600082116113a05760405162461bcd60e51b815260206004820152601860248201527f4e6f2072656564656d61626c6520456c657068616e74732100000000000000006044820152606401610900565b610b4c336113af600285612b6a565b6120f7565b6000546001600160a01b031633146113de5760405162461bcd60e51b815260040161090090612956565b600b610bd38282612a0b565b60408051808201909152600080825260208201526108d082611efd565b60606003805461092c9061298b565b8060008111801561142957506010548111155b61146c5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610900565b600f548161147960015490565b6114839190612b7e565b11156114c85760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610900565b60115460ff16156115155760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610900565b81600e546115239190612b96565b3410156115685760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610900565b610bd333836120f7565b336001600160a01b038316036115ca5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610900565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600d8054610fd19061298b565b6000546001600160a01b0316331461166d5760405162461bcd60e51b815260040161090090612956565b601055565b61167d848484611b75565b61168984848484612111565b6116a55760405162461bcd60e51b815260040161090090612bb5565b50505050565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa1580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190612b10565b905060008060005b838110156117e057600a54604051632f745c5960e01b81526001600160a01b038881166004830152602482018490526000921690632f745c5990604401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a39190612b10565b60008181526012602052604090205490915060ff166117cd57836117c681612ae1565b9450508092505b50806117d881612ae1565b915050611725565b506117ec600283612b3f565b60010361180157816117fd81612b53565b9250505b61180c600283612b6a565b95945050505050565b6060611822826001541190565b6118865760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610900565b60115462010000900460ff16151560000361192d57600d80546118a89061298b565b80601f01602080910402602001604051908101604052809291908181526020018280546118d49061298b565b80156119215780601f106118f657610100808354040283529160200191611921565b820191906000526020600020905b81548152906001019060200180831161190457829003601f168201915b50505050509050919050565b6000611937612213565b905060008151116119575760405180602001604052806000815250611985565b8061196184612222565b600c60405160200161197593929190612c08565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146119b65760405162461bcd60e51b815260040161090090612956565b6011805461ff001981166101009182900460ff1615909102179055565b6000546001600160a01b031633146119fd5760405162461bcd60e51b815260040161090090612956565b600f5481611a0a60015490565b611a149190612b7e565b1115611a775760405162461bcd60e51b815260206004820152602c60248201527f4e4f545f454e4f5547485f535550504c595f544f5f47495645415741595f444560448201526b14d254915117d05353d5539560a21b6064820152608401610900565b610bd382826120f7565b6000546001600160a01b03163314611aab5760405162461bcd60e51b815260040161090090612956565b6001600160a01b038116611b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610900565b610df8816120a7565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611b8082611efd565b80519091506000906001600160a01b0316336001600160a01b03161480611bb7575033611bac846109af565b6001600160a01b0316145b80611bc957508151611bc990336107fb565b905080611c335760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610900565b846001600160a01b031682600001516001600160a01b031614611ca75760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610900565b6001600160a01b038416611d0b5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610900565b611d1b6000848460000151611b19565b6001600160a01b0385166000908152600560205260408120805460019290611d4d9084906001600160801b0316612ca8565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611d9991859116612cd0565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611e21846001612b7e565b6000818152600460205260409020549091506001600160a01b0316611eb357611e4b816001541190565b15611eb35760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152611f1c826001541190565b611f7b5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610900565b60007f00000000000000000000000000000000000000000000000000000000000000008310611fdc57611fce7f000000000000000000000000000000000000000000000000000000000000000084612cfb565b611fd9906001612b7e565b90505b825b818110612046576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561203357949350505050565b508061203e81612b53565b915050611fde565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610900565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610bd3828260405180602001604052806000815250612323565b60006001600160a01b0384163b1561220757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612155903390899088908890600401612d12565b6020604051808303816000875af1925050508015612190575060408051601f3d908101601f1916820190925261218d91810190612d4f565b60015b6121ed573d8080156121be576040519150601f19603f3d011682016040523d82523d6000602084013e6121c3565b606091505b5080516000036121e55760405162461bcd60e51b815260040161090090612bb5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061220b565b5060015b949350505050565b6060600b805461092c9061298b565b6060816000036122495750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612273578061225d81612ae1565b915061226c9050600a83612b6a565b915061224d565b60008167ffffffffffffffff81111561228e5761228e612716565b6040519080825280601f01601f1916602001820160405280156122b8576020820181803683370190505b5090505b841561220b576122cd600183612cfb565b91506122da600a86612b3f565b6122e5906030612b7e565b60f81b8183815181106122fa576122fa612afa565b60200101906001600160f81b031916908160001a90535061231c600a86612b6a565b94506122bc565b6001546001600160a01b0384166123865760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610900565b612391816001541190565b156123de5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610900565b7f00000000000000000000000000000000000000000000000000000000000000008311156124595760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610900565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906124b5908790612cd0565b6001600160801b031681526020018583602001516124d39190612cd0565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156125f35760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46125b76000888488612111565b6125d35760405162461bcd60e51b815260040161090090612bb5565b816125dd81612ae1565b92505080806125eb90612ae1565b91505061256a565b506001819055611ef5565b6001600160e01b031981168114610df857600080fd5b60006020828403121561262657600080fd5b8135611985816125fe565b60005b8381101561264c578181015183820152602001612634565b838111156116a55750506000910152565b60008151808452612675816020860160208601612631565b601f01601f19169290920160200192915050565b602081526000611985602083018461265d565b6000602082840312156126ae57600080fd5b5035919050565b80356001600160a01b03811681146126cc57600080fd5b919050565b600080604083850312156126e457600080fd5b6126ed836126b5565b946020939093013593505050565b60006020828403121561270d57600080fd5b611985826126b5565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561274757612747612716565b604051601f8501601f19908116603f0116810190828211818310171561276f5761276f612716565b8160405280935085815286868601111561278857600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156127b457600080fd5b813567ffffffffffffffff8111156127cb57600080fd5b8201601f810184136127dc57600080fd5b61220b8482356020840161272c565b60008060006060848603121561280057600080fd5b612809846126b5565b9250612817602085016126b5565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561285f57835183529284019291840191600101612843565b50909695505050505050565b6000806040838503121561287e57600080fd5b612887836126b5565b91506020830135801515811461289c57600080fd5b809150509250929050565b600080600080608085870312156128bd57600080fd5b6128c6856126b5565b93506128d4602086016126b5565b925060408501359150606085013567ffffffffffffffff8111156128f757600080fd5b8501601f8101871361290857600080fd5b6129178782356020840161272c565b91505092959194509250565b6000806040838503121561293657600080fd5b61293f836126b5565b915061294d602084016126b5565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061299f57607f821691505b6020821081036129bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b4c57600081815260208120601f850160051c810160208610156129ec5750805b601f850160051c820191505b81811015611ef5578281556001016129f8565b815167ffffffffffffffff811115612a2557612a25612716565b612a3981612a33845461298b565b846129c5565b602080601f831160018114612a6e5760008415612a565750858301515b600019600386901b1c1916600185901b178555611ef5565b600085815260208120601f198616915b82811015612a9d57888601518255948401946001909101908401612a7e565b5085821015612abb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201612af357612af3612acb565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b2257600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082612b4e57612b4e612b29565b500690565b600081612b6257612b62612acb565b506000190190565b600082612b7957612b79612b29565b500490565b60008219821115612b9157612b91612acb565b500190565b6000816000190483118215151615612bb057612bb0612acb565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b600084516020612c1b8285838a01612631565b855191840191612c2e8184848a01612631565b8554920191600090612c3f8161298b565b60018281168015612c575760018114612c6c57612c98565b60ff1984168752821515830287019450612c98565b896000528560002060005b84811015612c9057815489820152908301908701612c77565b505082870194505b50929a9950505050505050505050565b60006001600160801b0383811690831681811015612cc857612cc8612acb565b039392505050565b60006001600160801b03808316818516808303821115612cf257612cf2612acb565b01949350505050565b600082821015612d0d57612d0d612acb565b500390565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d459083018461265d565b9695505050505050565b600060208284031215612d6157600080fd5b8151611985816125fe56fea264697066735822122042ede51fbf6dabb3a9a02882ab59f688593871aa04748cf7b3f526ce10339d5c64736f6c634300080f0033000000000000000000000000e2ead7593cc0702f4681bb802ef09d417e744b5d

Deployed Bytecode

0x6080604052600436106102885760003560e01c806362b99ad41161015a578063a22cb465116100c1578063d5abeb011161007a578063d5abeb011461079f578063d7224ba0146107b5578063dd4fc04a146107cb578063e985e9c5146107e0578063f254933d14610829578063f2fde38b1461084957600080fd5b8063a22cb465146106ea578063a45ba8e71461070a578063b071401b1461071f578063b88d4fde1461073f578063bdc3926d1461075f578063c87b56dd1461077f57600080fd5b80637f04116a116101135780637f04116a146106205780638da5cb5b146106405780639231ab2a1461065e57806394354fd0146106ac57806395d89b41146106c2578063a0712d68146106d757600080fd5b806362b99ad4146105815780636352211e1461059657806370a08231146105b6578063715018a6146105d65780637e7e40e8146105eb5780637ec4a6591461060057600080fd5b806323b872dd116101fe578063438b6300116101b7578063438b6300146104bf57806344a0d68a146104ec5780634f6ccce71461050c5780634fdd43cb1461052c578063518302271461054c5780635503a0e81461056c57600080fd5b806323b872dd1461041b57806326092b831461043b5780632f745c59146104555780633bd64968146104755780633ccfd60b1461048a57806342842e0e1461049f57600080fd5b806313bfe8ad1161025057806313bfe8ad1461035357806313faede61461037357806316ba10e01461039757806318160ddd146103b75780631b415239146103cc5780631bf57266146103eb57600080fd5b806301ffc9a71461028d57806302456aa2146102c257806306fdde03146102d9578063081812fc146102fb578063095ea7b314610333575b600080fd5b34801561029957600080fd5b506102ad6102a8366004612614565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d76108d6565b005b3480156102e557600080fd5b506102ee61091d565b6040516102b99190612689565b34801561030757600080fd5b5061031b61031636600461269c565b6109af565b6040516001600160a01b0390911681526020016102b9565b34801561033f57600080fd5b506102d761034e3660046126d1565b610a3a565b34801561035f57600080fd5b506102d761036e3660046126fb565b610b51565b34801561037f57600080fd5b50610389600e5481565b6040519081526020016102b9565b3480156103a357600080fd5b506102d76103b23660046127a2565b610b9d565b3480156103c357600080fd5b50600154610389565b3480156103d857600080fd5b506011546102ad90610100900460ff1681565b3480156103f757600080fd5b506102ad61040636600461269c565b60126020526000908152604090205460ff1681565b34801561042757600080fd5b506102d76104363660046127eb565b610bd7565b34801561044757600080fd5b506011546102ad9060ff1681565b34801561046157600080fd5b506103896104703660046126d1565b610be2565b34801561048157600080fd5b506102d7610d59565b34801561049657600080fd5b506102d7610da2565b3480156104ab57600080fd5b506102d76104ba3660046127eb565b610dfb565b3480156104cb57600080fd5b506104df6104da3660046126fb565b610e16565b6040516102b99190612827565b3480156104f857600080fd5b506102d761050736600461269c565b610ef6565b34801561051857600080fd5b5061038961052736600461269c565b610f25565b34801561053857600080fd5b506102d76105473660046127a2565b610f8e565b34801561055857600080fd5b506011546102ad9062010000900460ff1681565b34801561057857600080fd5b506102ee610fc4565b34801561058d57600080fd5b506102ee611052565b3480156105a257600080fd5b5061031b6105b136600461269c565b61105f565b3480156105c257600080fd5b506103896105d13660046126fb565b611071565b3480156105e257600080fd5b506102d7611102565b3480156105f757600080fd5b506102d7611138565b34801561060c57600080fd5b506102d761061b3660046127a2565b6113b4565b34801561062c57600080fd5b50600a5461031b906001600160a01b031681565b34801561064c57600080fd5b506000546001600160a01b031661031b565b34801561066a57600080fd5b5061067e61067936600461269c565b6113ea565b6040805182516001600160a01b0316815260209283015167ffffffffffffffff1692810192909252016102b9565b3480156106b857600080fd5b5061038960105481565b3480156106ce57600080fd5b506102ee611407565b6102d76106e536600461269c565b611416565b3480156106f657600080fd5b506102d761070536600461286b565b611572565b34801561071657600080fd5b506102ee611636565b34801561072b57600080fd5b506102d761073a36600461269c565b611643565b34801561074b57600080fd5b506102d761075a3660046128a7565b611672565b34801561076b57600080fd5b5061038961077a3660046126fb565b6116ab565b34801561078b57600080fd5b506102ee61079a36600461269c565b611815565b3480156107ab57600080fd5b50610389600f5481565b3480156107c157600080fd5b5061038960085481565b3480156107d757600080fd5b506102d761198c565b3480156107ec57600080fd5b506102ad6107fb366004612923565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561083557600080fd5b506102d76108443660046126d1565b6119d3565b34801561085557600080fd5b506102d76108643660046126fb565b611a81565b60006001600160e01b031982166380ac58cd60e01b148061089a57506001600160e01b03198216635b5e139f60e01b145b806108b557506001600160e01b0319821663780e9d6360e01b145b806108d057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146109095760405162461bcd60e51b815260040161090090612956565b60405180910390fd5b6011805460ff19811660ff90911615179055565b60606002805461092c9061298b565b80601f01602080910402602001604051908101604052809291908181526020018280546109589061298b565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b60006109bc826001541190565b610a1e5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610900565b506000908152600660205260409020546001600160a01b031690565b6000610a458261105f565b9050806001600160a01b0316836001600160a01b031603610ab35760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610900565b336001600160a01b0382161480610acf5750610acf81336107fb565b610b415760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610900565b610b4c838383611b19565b505050565b6000546001600160a01b03163314610b7b5760405162461bcd60e51b815260040161090090612956565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bc75760405162461bcd60e51b815260040161090090612956565b600c610bd38282612a0b565b5050565b610b4c838383611b75565b6000610bed83611071565b8210610c465760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610900565b6000610c5160015490565b905060008060005b83811015610cf9576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610cac57805192505b876001600160a01b0316836001600160a01b031603610ce657868403610cd8575093506108d092505050565b83610ce281612ae1565b9450505b5080610cf181612ae1565b915050610c59565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610900565b6000546001600160a01b03163314610d835760405162461bcd60e51b815260040161090090612956565b6011805462ff0000198116620100009182900460ff1615909102179055565b6000546001600160a01b03163314610dcc5760405162461bcd60e51b815260040161090090612956565b60405133904780156108fc02916000818181858888f19350505050158015610df8573d6000803e3d6000fd5b50565b610b4c83838360405180602001604052806000815250611672565b60606000610e2383611071565b905060008167ffffffffffffffff811115610e4057610e40612716565b604051908082528060200260200182016040528015610e69578160200160208202803683370190505b509050600160005b8381108015610e825750600f548211155b15610eec576000610e928361105f565b9050866001600160a01b0316816001600160a01b031603610ed95782848381518110610ec057610ec0612afa565b602090810291909101015281610ed581612ae1565b9250505b82610ee381612ae1565b93505050610e71565b5090949350505050565b6000546001600160a01b03163314610f205760405162461bcd60e51b815260040161090090612956565b600e55565b6000610f3060015490565b8210610f8a5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610900565b5090565b6000546001600160a01b03163314610fb85760405162461bcd60e51b815260040161090090612956565b600d610bd38282612a0b565b600c8054610fd19061298b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd9061298b565b801561104a5780601f1061101f5761010080835404028352916020019161104a565b820191906000526020600020905b81548152906001019060200180831161102d57829003601f168201915b505050505081565b600b8054610fd19061298b565b600061106a82611efd565b5192915050565b60006001600160a01b0382166110dd5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610900565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b0316331461112c5760405162461bcd60e51b815260040161090090612956565b61113660006120a7565b565b601154610100900460ff161561118a5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610900565b600a546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156111d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f79190612b10565b90506000811161123f5760405162461bcd60e51b81526020600482015260136024820152724e6f20456c657068616e7473206f776e65642160681b6044820152606401610900565b60008060005b8381101561131957600a54604051632f745c5960e01b8152336004820152602481018390526000916001600160a01b031690632f745c5990604401602060405180830381865afa15801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c19190612b10565b60008181526012602052604090205490915060ff1661130657836112e481612ae1565b6000838152601260205260409020805460ff1916600117905594509092508290505b508061131181612ae1565b915050611245565b50611325600283612b3f565b600103611350578161133681612b53565b6000838152601260205260409020805460ff191690559250505b600082116113a05760405162461bcd60e51b815260206004820152601860248201527f4e6f2072656564656d61626c6520456c657068616e74732100000000000000006044820152606401610900565b610b4c336113af600285612b6a565b6120f7565b6000546001600160a01b031633146113de5760405162461bcd60e51b815260040161090090612956565b600b610bd38282612a0b565b60408051808201909152600080825260208201526108d082611efd565b60606003805461092c9061298b565b8060008111801561142957506010548111155b61146c5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b6044820152606401610900565b600f548161147960015490565b6114839190612b7e565b11156114c85760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b6044820152606401610900565b60115460ff16156115155760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b6044820152606401610900565b81600e546115239190612b96565b3410156115685760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b6044820152606401610900565b610bd333836120f7565b336001600160a01b038316036115ca5760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610900565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600d8054610fd19061298b565b6000546001600160a01b0316331461166d5760405162461bcd60e51b815260040161090090612956565b601055565b61167d848484611b75565b61168984848484612111565b6116a55760405162461bcd60e51b815260040161090090612bb5565b50505050565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa1580156116f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171d9190612b10565b905060008060005b838110156117e057600a54604051632f745c5960e01b81526001600160a01b038881166004830152602482018490526000921690632f745c5990604401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a39190612b10565b60008181526012602052604090205490915060ff166117cd57836117c681612ae1565b9450508092505b50806117d881612ae1565b915050611725565b506117ec600283612b3f565b60010361180157816117fd81612b53565b9250505b61180c600283612b6a565b95945050505050565b6060611822826001541190565b6118865760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610900565b60115462010000900460ff16151560000361192d57600d80546118a89061298b565b80601f01602080910402602001604051908101604052809291908181526020018280546118d49061298b565b80156119215780601f106118f657610100808354040283529160200191611921565b820191906000526020600020905b81548152906001019060200180831161190457829003601f168201915b50505050509050919050565b6000611937612213565b905060008151116119575760405180602001604052806000815250611985565b8061196184612222565b600c60405160200161197593929190612c08565b6040516020818303038152906040525b9392505050565b6000546001600160a01b031633146119b65760405162461bcd60e51b815260040161090090612956565b6011805461ff001981166101009182900460ff1615909102179055565b6000546001600160a01b031633146119fd5760405162461bcd60e51b815260040161090090612956565b600f5481611a0a60015490565b611a149190612b7e565b1115611a775760405162461bcd60e51b815260206004820152602c60248201527f4e4f545f454e4f5547485f535550504c595f544f5f47495645415741595f444560448201526b14d254915117d05353d5539560a21b6064820152608401610900565b610bd382826120f7565b6000546001600160a01b03163314611aab5760405162461bcd60e51b815260040161090090612956565b6001600160a01b038116611b105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610900565b610df8816120a7565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000611b8082611efd565b80519091506000906001600160a01b0316336001600160a01b03161480611bb7575033611bac846109af565b6001600160a01b0316145b80611bc957508151611bc990336107fb565b905080611c335760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610900565b846001600160a01b031682600001516001600160a01b031614611ca75760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610900565b6001600160a01b038416611d0b5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610900565b611d1b6000848460000151611b19565b6001600160a01b0385166000908152600560205260408120805460019290611d4d9084906001600160801b0316612ca8565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092611d9991859116612cd0565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b03808716825267ffffffffffffffff428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055611e21846001612b7e565b6000818152600460205260409020549091506001600160a01b0316611eb357611e4b816001541190565b15611eb35760408051808201825284516001600160a01b03908116825260208087015167ffffffffffffffff9081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152611f1c826001541190565b611f7b5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610900565b60007f00000000000000000000000000000000000000000000000000000000000003e88310611fdc57611fce7f00000000000000000000000000000000000000000000000000000000000003e884612cfb565b611fd9906001612b7e565b90505b825b818110612046576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff16918301919091521561203357949350505050565b508061203e81612b53565b915050611fde565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610900565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610bd3828260405180602001604052806000815250612323565b60006001600160a01b0384163b1561220757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612155903390899088908890600401612d12565b6020604051808303816000875af1925050508015612190575060408051601f3d908101601f1916820190925261218d91810190612d4f565b60015b6121ed573d8080156121be576040519150601f19603f3d011682016040523d82523d6000602084013e6121c3565b606091505b5080516000036121e55760405162461bcd60e51b815260040161090090612bb5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061220b565b5060015b949350505050565b6060600b805461092c9061298b565b6060816000036122495750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612273578061225d81612ae1565b915061226c9050600a83612b6a565b915061224d565b60008167ffffffffffffffff81111561228e5761228e612716565b6040519080825280601f01601f1916602001820160405280156122b8576020820181803683370190505b5090505b841561220b576122cd600183612cfb565b91506122da600a86612b3f565b6122e5906030612b7e565b60f81b8183815181106122fa576122fa612afa565b60200101906001600160f81b031916908160001a90535061231c600a86612b6a565b94506122bc565b6001546001600160a01b0384166123865760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610900565b612391816001541190565b156123de5760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610900565b7f00000000000000000000000000000000000000000000000000000000000003e88311156124595760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610900565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906124b5908790612cd0565b6001600160801b031681526020018583602001516124d39190612cd0565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b0297909616969096179094558451808601865291825267ffffffffffffffff4281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156125f35760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46125b76000888488612111565b6125d35760405162461bcd60e51b815260040161090090612bb5565b816125dd81612ae1565b92505080806125eb90612ae1565b91505061256a565b506001819055611ef5565b6001600160e01b031981168114610df857600080fd5b60006020828403121561262657600080fd5b8135611985816125fe565b60005b8381101561264c578181015183820152602001612634565b838111156116a55750506000910152565b60008151808452612675816020860160208601612631565b601f01601f19169290920160200192915050565b602081526000611985602083018461265d565b6000602082840312156126ae57600080fd5b5035919050565b80356001600160a01b03811681146126cc57600080fd5b919050565b600080604083850312156126e457600080fd5b6126ed836126b5565b946020939093013593505050565b60006020828403121561270d57600080fd5b611985826126b5565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561274757612747612716565b604051601f8501601f19908116603f0116810190828211818310171561276f5761276f612716565b8160405280935085815286868601111561278857600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156127b457600080fd5b813567ffffffffffffffff8111156127cb57600080fd5b8201601f810184136127dc57600080fd5b61220b8482356020840161272c565b60008060006060848603121561280057600080fd5b612809846126b5565b9250612817602085016126b5565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561285f57835183529284019291840191600101612843565b50909695505050505050565b6000806040838503121561287e57600080fd5b612887836126b5565b91506020830135801515811461289c57600080fd5b809150509250929050565b600080600080608085870312156128bd57600080fd5b6128c6856126b5565b93506128d4602086016126b5565b925060408501359150606085013567ffffffffffffffff8111156128f757600080fd5b8501601f8101871361290857600080fd5b6129178782356020840161272c565b91505092959194509250565b6000806040838503121561293657600080fd5b61293f836126b5565b915061294d602084016126b5565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061299f57607f821691505b6020821081036129bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b4c57600081815260208120601f850160051c810160208610156129ec5750805b601f850160051c820191505b81811015611ef5578281556001016129f8565b815167ffffffffffffffff811115612a2557612a25612716565b612a3981612a33845461298b565b846129c5565b602080601f831160018114612a6e5760008415612a565750858301515b600019600386901b1c1916600185901b178555611ef5565b600085815260208120601f198616915b82811015612a9d57888601518255948401946001909101908401612a7e565b5085821015612abb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201612af357612af3612acb565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612b2257600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082612b4e57612b4e612b29565b500690565b600081612b6257612b62612acb565b506000190190565b600082612b7957612b79612b29565b500490565b60008219821115612b9157612b91612acb565b500190565b6000816000190483118215151615612bb057612bb0612acb565b500290565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b600084516020612c1b8285838a01612631565b855191840191612c2e8184848a01612631565b8554920191600090612c3f8161298b565b60018281168015612c575760018114612c6c57612c98565b60ff1984168752821515830287019450612c98565b896000528560002060005b84811015612c9057815489820152908301908701612c77565b505082870194505b50929a9950505050505050505050565b60006001600160801b0383811690831681811015612cc857612cc8612acb565b039392505050565b60006001600160801b03808316818516808303821115612cf257612cf2612acb565b01949350505050565b600082821015612d0d57612d0d612acb565b500390565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612d459083018461265d565b9695505050505050565b600060208284031215612d6157600080fd5b8151611985816125fe56fea264697066735822122042ede51fbf6dabb3a9a02882ab59f688593871aa04748cf7b3f526ce10339d5c64736f6c634300080f0033

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

000000000000000000000000e2ead7593cc0702f4681bb802ef09d417e744b5d

-----Decoded View---------------
Arg [0] : _contract (address): 0xE2EaD7593Cc0702F4681Bb802ef09d417e744B5d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e2ead7593cc0702f4681bb802ef09d417e744b5d


Deployed Bytecode Sourcemap

23279:6400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13213:422;;;;;;;;;;-1:-1:-1;13213:422:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;13213:422:0;;;;;;;;29142:85;;;;;;;;;;;;;:::i;:::-;;15005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16224:292::-;;;;;;;;;;-1:-1:-1;16224:292:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;16224:292:0;1528:203:1;15803:413:0;;;;;;;;;;-1:-1:-1;15803:413:0;;;;;:::i;:::-;;:::i;29331:110::-;;;;;;;;;;-1:-1:-1;29331:110:0;;;;;:::i;:::-;;:::i;23540:33::-;;;;;;;;;;;;;;;;;;;2510:25:1;;;2498:2;2483:18;23540:33:0;2364:177:1;29028:106:0;;;;;;;;;;-1:-1:-1;29028:106:0;;;;;:::i;:::-;;:::i;11997:100::-;;;;;;;;;;-1:-1:-1;12077:12:0;;11997:100;;23740:30;;;;;;;;;;-1:-1:-1;23740:30:0;;;;;;;;;;;23893:51;;;;;;;;;;-1:-1:-1;23893:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17065:162;;;;;;;;;;-1:-1:-1;17065:162:0;;;;;:::i;:::-;;:::i;23665:29::-;;;;;;;;;;-1:-1:-1;23665:29:0;;;;;;;;12341:864;;;;;;;;;;-1:-1:-1;12341:864:0;;;;;:::i;:::-;;:::i;28403:79::-;;;;;;;;;;;;;:::i;29567:109::-;;;;;;;;;;;;;:::i;17235:177::-;;;;;;;;;;-1:-1:-1;17235:177:0;;;;;:::i;:::-;;:::i;26917:743::-;;;;;;;;;;-1:-1:-1;26917:743:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28490:80::-;;;;;;;;;;-1:-1:-1;28490:80:0;;;;;:::i;:::-;;:::i;12105:228::-;;;;;;;;;;-1:-1:-1;12105:228:0;;;;;:::i;:::-;;:::i;28745:161::-;;;;;;;;;;-1:-1:-1;28745:161:0;;;;;:::i;:::-;;:::i;23817:28::-;;;;;;;;;;-1:-1:-1;23817:28:0;;;;;;;;;;;23460:33;;;;;;;;;;;;;:::i;23423:28::-;;;;;;;;;;;;;:::i;14873:124::-;;;;;;;;;;-1:-1:-1;14873:124:0;;;;;:::i;:::-;;:::i;13643:258::-;;;;;;;;;;-1:-1:-1;13643:258:0;;;;;:::i;:::-;;:::i;7167:94::-;;;;;;;;;;;;;:::i;24765:960::-;;;;;;;;;;;;;:::i;28914:106::-;;;;;;;;;;-1:-1:-1;28914:106:0;;;;;:::i;:::-;;:::i;23383:31::-;;;;;;;;;;-1:-1:-1;23383:31:0;;;;-1:-1:-1;;;;;23383:31:0;;;6944:87;;;;;;;;;;-1:-1:-1;6990:7:0;7017:6;-1:-1:-1;;;;;7017:6:0;6944:87;;26442:167;;;;;;;;;;-1:-1:-1;26442:167:0;;;;;:::i;:::-;;:::i;:::-;;;;4971:13:1;;-1:-1:-1;;;;;4967:39:1;4949:58;;5067:4;5055:17;;;5049:24;5075:18;5045:49;5023:20;;;5016:79;;;;4922:18;26442:167:0;4741:360:1;23618:38:0;;;;;;;;;;;;;;;;15113:104;;;;;;;;;;;;;:::i;24462:295::-;;;;;;:::i;:::-;;:::i;16524:311::-;;;;;;;;;;-1:-1:-1;16524:311:0;;;;;:::i;:::-;;:::i;23500:31::-;;;;;;;;;;;;;:::i;28578:159::-;;;;;;;;;;-1:-1:-1;28578:159:0;;;;;:::i;:::-;;:::i;17420:355::-;;;;;;;;;;-1:-1:-1;17420:355:0;;;;;:::i;:::-;;:::i;25733:701::-;;;;;;;;;;-1:-1:-1;25733:701:0;;;;;:::i;:::-;;:::i;27668:727::-;;;;;;;;;;-1:-1:-1;27668:727:0;;;;;:::i;:::-;;:::i;23580:31::-;;;;;;;;;;;;;;;;21049:43;;;;;;;;;;;;;;;;29235:88;;;;;;;;;;;;;:::i;16843:214::-;;;;;;;;;;-1:-1:-1;16843:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;17014:25:0;;;16985:4;17014:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;16843:214;26617:292;;;;;;;;;;-1:-1:-1;26617:292:0;;;;;:::i;:::-;;:::i;7269:229::-;;;;;;;;;;-1:-1:-1;7269:229:0;;;;;:::i;:::-;;:::i;13213:422::-;13360:4;-1:-1:-1;;;;;;13402:40:0;;-1:-1:-1;;;13402:40:0;;:105;;-1:-1:-1;;;;;;;13459:48:0;;-1:-1:-1;;;13459:48:0;13402:105;:172;;;-1:-1:-1;;;;;;;13524:50:0;;-1:-1:-1;;;13524:50:0;13402:172;:225;;;-1:-1:-1;;;;;;;;;;9655:40:0;;;13591:36;13382:245;13213:422;-1:-1:-1;;13213:422:0:o;29142:85::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;;;;;;;;;29209:10:::1;::::0;;-1:-1:-1;;29195:24:0;::::1;29209:10;::::0;;::::1;29208:11;29195:24;::::0;;29142:85::o;15005:100::-;15059:13;15092:5;15085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15005:100;:::o;16224:292::-;16328:7;16375:16;16383:7;17874:12;;-1:-1:-1;17864:22:0;17783:111;16375:16;16353:111;;;;-1:-1:-1;;;16353:111:0;;7343:2:1;16353:111:0;;;7325:21:1;7382:2;7362:18;;;7355:30;7421:34;7401:18;;;7394:62;-1:-1:-1;;;7472:18:1;;;7465:43;7525:19;;16353:111:0;7141:409:1;16353:111:0;-1:-1:-1;16484:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;16484:24:0;;16224:292::o;15803:413::-;15876:13;15892:24;15908:7;15892:15;:24::i;:::-;15876:40;;15941:5;-1:-1:-1;;;;;15935:11:0;:2;-1:-1:-1;;;;;15935:11:0;;15927:58;;;;-1:-1:-1;;;15927:58:0;;7757:2:1;15927:58:0;;;7739:21:1;7796:2;7776:18;;;7769:30;7835:34;7815:18;;;7808:62;-1:-1:-1;;;7886:18:1;;;7879:32;7928:19;;15927:58:0;7555:398:1;15927:58:0;6527:10;-1:-1:-1;;;;;16020:21:0;;;;:62;;-1:-1:-1;16045:37:0;16062:5;6527:10;16843:214;:::i;16045:37::-;15998:169;;;;-1:-1:-1;;;15998:169:0;;8160:2:1;15998:169:0;;;8142:21:1;8199:2;8179:18;;;8172:30;8238:34;8218:18;;;8211:62;8309:27;8289:18;;;8282:55;8354:19;;15998:169:0;7958:421:1;15998:169:0;16180:28;16189:2;16193:7;16202:5;16180:8;:28::i;:::-;15865:351;15803:413;;:::o;29331:110::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;29406:16:::1;:27:::0;;-1:-1:-1;;;;;;29406:27:0::1;-1:-1:-1::0;;;;;29406:27:0;;;::::1;::::0;;;::::1;::::0;;29331:110::o;29028:106::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;29104:9:::1;:22;29116:10:::0;29104:9;:22:::1;:::i;:::-;;29028:106:::0;:::o;17065:162::-;17191:28;17201:4;17207:2;17211:7;17191:9;:28::i;12341:864::-;12466:7;12507:16;12517:5;12507:9;:16::i;:::-;12499:5;:24;12491:71;;;;-1:-1:-1;;;12491:71:0;;10790:2:1;12491:71:0;;;10772:21:1;10829:2;10809:18;;;10802:30;10868:34;10848:18;;;10841:62;-1:-1:-1;;;10919:18:1;;;10912:32;10961:19;;12491:71:0;10588:398:1;12491:71:0;12573:22;12598:13;12077:12;;;11997:100;12598:13;12573:38;;12622:19;12656:25;12710:9;12705:426;12729:14;12725:1;:18;12705:426;;;12765:31;12799:14;;;:11;:14;;;;;;;;;12765:48;;;;;;;;;-1:-1:-1;;;;;12765:48:0;;;;;-1:-1:-1;;;12765:48:0;;;;;;;;;;;;12832:28;12828:103;;12901:14;;;-1:-1:-1;12828:103:0;12970:5;-1:-1:-1;;;;;12949:26:0;:17;-1:-1:-1;;;;;12949:26:0;;12945:175;;13015:5;13000:11;:20;12996:77;;-1:-1:-1;13052:1:0;-1:-1:-1;13045:8:0;;-1:-1:-1;;;13045:8:0;12996:77;13091:13;;;;:::i;:::-;;;;12945:175;-1:-1:-1;12745:3:0;;;;:::i;:::-;;;;12705:426;;;-1:-1:-1;13141:56:0;;-1:-1:-1;;;13141:56:0;;11465:2:1;13141:56:0;;;11447:21:1;11504:2;11484:18;;;11477:30;11543:34;11523:18;;;11516:62;-1:-1:-1;;;11594:18:1;;;11587:44;11648:19;;13141:56:0;11263:410:1;28403:79:0;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;28466:8:::1;::::0;;-1:-1:-1;;28454:20:0;::::1;28466:8:::0;;;;::::1;;;28465:9;28454:20:::0;;::::1;;::::0;;28403:79::o;29567:109::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;29617:51:::1;::::0;29625:10:::1;::::0;29646:21:::1;29617:51:::0;::::1;;;::::0;::::1;::::0;;;29646:21;29625:10;29617:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29567:109::o:0;17235:177::-;17365:39;17382:4;17388:2;17392:7;17365:39;;;;;;;;;;;;:16;:39::i;26917:743::-;27004:16;27038:23;27064:17;27074:6;27064:9;:17::i;:::-;27038:43;;27092:30;27139:15;27125:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27125:30:0;-1:-1:-1;27092:63:0;-1:-1:-1;27191:1:0;27166:22;27243:377;27282:15;27264;:33;:64;;;;;27319:9;;27301:14;:27;;27264:64;27243:377;;;27355:25;27383:23;27391:14;27383:7;:23::i;:::-;27355:51;;27448:6;-1:-1:-1;;;;;27427:27:0;:17;-1:-1:-1;;;;;27427:27:0;;27423:153;;27508:14;27475:13;27489:15;27475:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;27543:17;;;;:::i;:::-;;;;27423:153;27592:16;;;;:::i;:::-;;;;27340:280;27243:377;;;-1:-1:-1;27639:13:0;;26917:743;-1:-1:-1;;;;26917:743:0:o;28490:80::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;28550:4:::1;:12:::0;28490:80::o;12105:228::-;12208:7;12249:13;12077:12;;;11997:100;12249:13;12241:5;:21;12233:69;;;;-1:-1:-1;;;12233:69:0;;12012:2:1;12233:69:0;;;11994:21:1;12051:2;12031:18;;;12024:30;12090:34;12070:18;;;12063:62;-1:-1:-1;;;12141:18:1;;;12134:33;12184:19;;12233:69:0;11810:399:1;12233:69:0;-1:-1:-1;12320:5:0;12105:228::o;28745:161::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;28860:17:::1;:38;28880:18:::0;28860:17;:38:::1;:::i;23460:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23423:28::-;;;;;;;:::i;14873:124::-;14937:7;14964:20;14976:7;14964:11;:20::i;:::-;:25;;14873:124;-1:-1:-1;;14873:124:0:o;13643:258::-;13707:7;-1:-1:-1;;;;;13749:19:0;;13727:112;;;;-1:-1:-1;;;13727:112:0;;12416:2:1;13727:112:0;;;12398:21:1;12455:2;12435:18;;;12428:30;12494:34;12474:18;;;12467:62;-1:-1:-1;;;12545:18:1;;;12538:41;12596:19;;13727:112:0;12214:407:1;13727:112:0;-1:-1:-1;;;;;;13865:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;13865:27:0;;13643:258::o;7167:94::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;7232:21:::1;7250:1;7232:9;:21::i;:::-;7167:94::o:0;24765:960::-;24835:11;;;;;;;24834:12;24826:48;;;;-1:-1:-1;;;24826:48:0;;12828:2:1;24826:48:0;;;12810:21:1;12867:2;12847:18;;;12840:30;-1:-1:-1;;;12886:18:1;;;12879:53;12949:18;;24826:48:0;12626:347:1;24826:48:0;24918:16;;24910:47;;-1:-1:-1;;;24910:47:0;;24946:10;24910:47;;;1674:51:1;24885:22:0;;-1:-1:-1;;;;;24918:16:0;;24910:35;;1647:18:1;;24910:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24885:72;;24993:1;24976:14;:18;24968:50;;;;-1:-1:-1;;;24968:50:0;;13369:2:1;24968:50:0;;;13351:21:1;13408:2;13388:18;;;13381:30;-1:-1:-1;;;13427:18:1;;;13420:49;13486:18;;24968:50:0;13167:343:1;24968:50:0;25031:19;25065:26;25111:9;25106:359;25130:14;25126:1;:18;25106:359;;;25202:16;;25184:70;;-1:-1:-1;;;25184:70:0;;25240:10;25184:70;;;13689:51:1;13756:18;;;13749:34;;;25166:15:0;;-1:-1:-1;;;;;25202:16:0;;25184:55;;13662:18:1;;25184:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25274:28;;;;:19;:28;;;;;;25166:88;;-1:-1:-1;25274:28:0;;25269:185;;25324:13;;;;:::i;:::-;25356:28;;;;:19;:28;;;;;:35;;-1:-1:-1;;25356:35:0;25387:4;25356:35;;;25324:13;-1:-1:-1;25376:7:0;;-1:-1:-1;25376:7:0;;-1:-1:-1;25269:185:0;-1:-1:-1;25146:3:0;;;;:::i;:::-;;;;25106:359;;;-1:-1:-1;25481:15:0;25495:1;25481:11;:15;:::i;:::-;25500:1;25481:20;25477:127;;25518:13;;;;:::i;:::-;25553:39;;;;:19;:39;;;;;25546:46;;-1:-1:-1;;25546:46:0;;;25518:13;-1:-1:-1;;25477:127:0;25638:1;25624:11;:15;25616:52;;;;-1:-1:-1;;;25616:52:0;;14386:2:1;25616:52:0;;;14368:21:1;14425:2;14405:18;;;14398:30;14464:26;14444:18;;;14437:54;14508:18;;25616:52:0;14184:348:1;25616:52:0;25679:38;25689:10;25701:15;25715:1;25701:11;:15;:::i;:::-;25679:9;:38::i;28914:106::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;28990:9:::1;:22;29002:10:::0;28990:9;:22:::1;:::i;26442:167::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;26581:20:0;26593:7;26581:11;:20::i;15113:104::-;15169:13;15202:7;15195:14;;;;;:::i;24462:295::-;24554:11;24227:1;24213:11;:15;:52;;;;;24247:18;;24232:11;:33;;24213:52;24191:122;;;;-1:-1:-1;;;24191:122:0;;14864:2:1;24191:122:0;;;14846:21:1;14903:2;14883:18;;;14876:30;-1:-1:-1;;;14922:18:1;;;14915:50;14982:18;;24191:122:0;14662:344:1;24191:122:0;24377:9;;24362:11;24346:13;12077:12;;;11997:100;24346:13;:27;;;;:::i;:::-;:40;;24324:110;;;;-1:-1:-1;;;24324:110:0;;15346:2:1;24324:110:0;;;15328:21:1;15385:2;15365:18;;;15358:30;-1:-1:-1;;;15404:18:1;;;15397:50;15464:18;;24324:110:0;15144:344:1;24324:110:0;24592:10:::1;::::0;::::1;;24591:11;24583:47;;;::::0;-1:-1:-1;;;24583:47:0;;12828:2:1;24583:47:0::1;::::0;::::1;12810:21:1::0;12867:2;12847:18;;;12840:30;-1:-1:-1;;;12886:18:1;;;12879:53;12949:18;;24583:47:0::1;12626:347:1::0;24583:47:0::1;24669:11;24662:4;;:18;;;;:::i;:::-;24649:9;:31;;24641:63;;;::::0;-1:-1:-1;;;24641:63:0;;15868:2:1;24641:63:0::1;::::0;::::1;15850:21:1::0;15907:2;15887:18;;;15880:30;-1:-1:-1;;;15926:18:1;;;15919:49;15985:18;;24641:63:0::1;15666:343:1::0;24641:63:0::1;24715:34;24725:10;24737:11;24715:9;:34::i;16524:311::-:0;6527:10;-1:-1:-1;;;;;16642:24:0;;;16634:63;;;;-1:-1:-1;;;16634:63:0;;16216:2:1;16634:63:0;;;16198:21:1;16255:2;16235:18;;;16228:30;16294:28;16274:18;;;16267:56;16340:18;;16634:63:0;16014:350:1;16634:63:0;6527:10;16710:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;16710:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;16710:53:0;;;;;;;;;;16779:48;;540:41:1;;;16710:42:0;;6527:10;16779:48;;513:18:1;16779:48:0;;;;;;;16524:311;;:::o;23500:31::-;;;;;;;:::i;28578:159::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;28689:18:::1;:40:::0;28578:159::o;17420:355::-;17579:28;17589:4;17595:2;17599:7;17579:9;:28::i;:::-;17640:48;17663:4;17669:2;17673:7;17682:5;17640:22;:48::i;:::-;17618:149;;;;-1:-1:-1;;;17618:149:0;;;;;;;:::i;:::-;17420:355;;;;:::o;25733:701::-;25888:16;;25880:43;;-1:-1:-1;;;25880:43:0;;-1:-1:-1;;;;;1692:32:1;;;25880:43:0;;;1674:51:1;25830:7:0;;;;25888:16;;;25880:35;;1647:18:1;;25880:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25855:68;;25936:19;25970:26;26016:9;26011:301;26035:14;26031:1;:18;26011:301;;;26107:16;;26089:66;;-1:-1:-1;;;26089:66:0;;-1:-1:-1;;;;;13707:32:1;;;26089:66:0;;;13689:51:1;13756:18;;;13749:34;;;26071:15:0;;26107:16;;26089:55;;13662:18:1;;26089:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26175:28;;;;:19;:28;;;;;;26071:84;;-1:-1:-1;26175:28:0;;26170:131;;26225:13;;;;:::i;:::-;;;;26278:7;26257:28;;26170:131;-1:-1:-1;26051:3:0;;;;:::i;:::-;;;;26011:301;;;-1:-1:-1;26328:15:0;26342:1;26328:11;:15;:::i;:::-;26347:1;26328:20;26324:66;;26365:13;;;;:::i;:::-;;;;26324:66;26410:15;26424:1;26410:11;:15;:::i;:::-;26402:24;25733:701;-1:-1:-1;;;;;25733:701:0:o;27668:727::-;27787:13;27840:17;27848:8;17874:12;;-1:-1:-1;17864:22:0;17783:111;27840:17;27818:114;;;;-1:-1:-1;;;27818:114:0;;16991:2:1;27818:114:0;;;16973:21:1;17030:2;17010:18;;;17003:30;17069:34;17049:18;;;17042:62;-1:-1:-1;;;17120:18:1;;;17113:45;17175:19;;27818:114:0;16789:411:1;27818:114:0;27949:8;;;;;;;:17;;27961:5;27949:17;27945:74;;27990:17;27983:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27668:727;;;:::o;27945:74::-;28031:28;28062:10;:8;:10::i;:::-;28031:41;;28134:1;28109:14;28103:28;:32;:284;;;;;;;;;;;;;;;;;28227:14;28268:19;:8;:17;:19::i;:::-;28314:9;28184:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28103:284;28083:304;27668:727;-1:-1:-1;;;27668:727:0:o;29235:88::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;29304:11:::1;::::0;;-1:-1:-1;;29289:26:0;::::1;29304:11;::::0;;;::::1;;;29303:12;29289:26:::0;;::::1;;::::0;;29235:88::o;26617:292::-;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;26780:9:::1;;26768:8;26752:13;12077:12:::0;;;11997:100;26752:13:::1;:24;;;;:::i;:::-;:37;;26730:131;;;::::0;-1:-1:-1;;;26730:131:0;;18642:2:1;26730:131:0::1;::::0;::::1;18624:21:1::0;18681:2;18661:18;;;18654:30;18720:34;18700:18;;;18693:62;-1:-1:-1;;;18771:18:1;;;18764:42;18823:19;;26730:131:0::1;18440:408:1::0;26730:131:0::1;26872:29;26882:8;26892;26872:9;:29::i;7269:229::-:0;6990:7;7017:6;-1:-1:-1;;;;;7017:6:0;6527:10;7079:23;7071:68;;;;-1:-1:-1;;;7071:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7372:22:0;::::1;7350:110;;;::::0;-1:-1:-1;;;7350:110:0;;19055:2:1;7350:110:0::1;::::0;::::1;19037:21:1::0;19094:2;19074:18;;;19067:30;19133:34;19113:18;;;19106:62;-1:-1:-1;;;19184:18:1;;;19177:36;19230:19;;7350:110:0::1;18853:402:1::0;7350:110:0::1;7471:19;7481:8;7471:9;:19::i;20845:196::-:0;20960:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;20960:29:0;-1:-1:-1;;;;;20960:29:0;;;;;;;;;21005:28;;20960:24;;21005:28;;;;;;;20845:196;;;:::o;19297:1540::-;19412:35;19450:20;19462:7;19450:11;:20::i;:::-;19525:18;;19412:58;;-1:-1:-1;19483:22:0;;-1:-1:-1;;;;;19509:34:0;6527:10;-1:-1:-1;;;;;19509:34:0;;:87;;;-1:-1:-1;6527:10:0;19560:20;19572:7;19560:11;:20::i;:::-;-1:-1:-1;;;;;19560:36:0;;19509:87;:154;;;-1:-1:-1;19630:18:0;;19613:50;;6527:10;16843:214;:::i;19613:50::-;19483:181;;19699:17;19677:117;;;;-1:-1:-1;;;19677:117:0;;19462:2:1;19677:117:0;;;19444:21:1;19501:2;19481:18;;;19474:30;19540:34;19520:18;;;19513:62;-1:-1:-1;;;19591:18:1;;;19584:48;19649:19;;19677:117:0;19260:414:1;19677:117:0;19851:4;-1:-1:-1;;;;;19829:26:0;:13;:18;;;-1:-1:-1;;;;;19829:26:0;;19807:114;;;;-1:-1:-1;;;19807:114:0;;19881:2:1;19807:114:0;;;19863:21:1;19920:2;19900:18;;;19893:30;19959:34;19939:18;;;19932:62;-1:-1:-1;;;20010:18:1;;;20003:36;20056:19;;19807:114:0;19679:402:1;19807:114:0;-1:-1:-1;;;;;19940:16:0;;19932:66;;;;-1:-1:-1;;;19932:66:0;;20288:2:1;19932:66:0;;;20270:21:1;20327:2;20307:18;;;20300:30;20366:34;20346:18;;;20339:62;-1:-1:-1;;;20417:18:1;;;20410:35;20462:19;;19932:66:0;20086:401:1;19932:66:0;20065:49;20082:1;20086:7;20095:13;:18;;;20065:8;:49::i;:::-;-1:-1:-1;;;;;20127:18:0;;;;;;:12;:18;;;;;:31;;20157:1;;20127:18;:31;;20157:1;;-1:-1:-1;;;;;20127:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;20127:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20169:16:0;;-1:-1:-1;20169:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;20169:16:0;;:29;;-1:-1:-1;;20169:29:0;;:::i;:::-;;;-1:-1:-1;;;;;20169:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20232:43:0;;;;;;;;-1:-1:-1;;;;;20232:43:0;;;;;;20258:15;20232:43;;;;;;;;;-1:-1:-1;20209:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;20209:66:0;-1:-1:-1;;;;;;20209:66:0;;;;;;;;;;;20422:11;20221:7;-1:-1:-1;20422:11:0;:::i;:::-;20489:1;20448:24;;;:11;:24;;;;;:29;20400:33;;-1:-1:-1;;;;;;20448:29:0;20444:288;;20512:20;20520:11;17874:12;;-1:-1:-1;17864:22:0;17783:111;20512:20;20508:213;;;20580:125;;;;;;;;20617:18;;-1:-1:-1;;;;;20580:125:0;;;;;;20658:28;;;;20580:125;;;;;;;;;;-1:-1:-1;20553:24:0;;;:11;:24;;;;;;;:152;;;;;;;;;-1:-1:-1;;;20553:152:0;-1:-1:-1;;;;;;20553:152:0;;;;;;;;;;;;20508:213;20768:7;20764:2;-1:-1:-1;;;;;20749:27:0;20758:4;-1:-1:-1;;;;;20749:27:0;;;;;;;;;;;20787:42;19401:1436;;;19297:1540;;;:::o;14183:682::-;-1:-1:-1;;;;;;;;;;;;;;;;;14318:16:0;14326:7;17874:12;;-1:-1:-1;17864:22:0;17783:111;14318:16;14310:71;;;;-1:-1:-1;;;14310:71:0;;21203:2:1;14310:71:0;;;21185:21:1;21242:2;21222:18;;;21215:30;21281:34;21261:18;;;21254:62;-1:-1:-1;;;21332:18:1;;;21325:40;21382:19;;14310:71:0;21001:406:1;14310:71:0;14394:26;14446:12;14435:7;:23;14431:103;;14496:22;14506:12;14496:7;:22;:::i;:::-;:26;;14521:1;14496:26;:::i;:::-;14475:47;;14431:103;14566:7;14546:242;14583:18;14575:4;:26;14546:242;;14626:31;14660:17;;;:11;:17;;;;;;;;;14626:51;;;;;;;;;-1:-1:-1;;;;;14626:51:0;;;;;-1:-1:-1;;;14626:51:0;;;;;;;;;;;;14696:28;14692:85;;14752:9;14183:682;-1:-1:-1;;;;14183:682:0:o;14692:85::-;-1:-1:-1;14603:6:0;;;;:::i;:::-;;;;14546:242;;;-1:-1:-1;14800:57:0;;-1:-1:-1;;;14800:57:0;;21744:2:1;14800:57:0;;;21726:21:1;21783:2;21763:18;;;21756:30;21822:34;21802:18;;;21795:62;-1:-1:-1;;;21873:18:1;;;21866:45;21928:19;;14800:57:0;21542:411:1;7506:173:0;7562:16;7581:6;;-1:-1:-1;;;;;7598:17:0;;;-1:-1:-1;;;;;;7598:17:0;;;;;;7631:40;;7581:6;;;;;;;7631:40;;7562:16;7631:40;7551:128;7506:173;:::o;17902:104::-;17971:27;17981:2;17985:8;17971:27;;;;;;;;;;;;:9;:27::i;21954:985::-;22109:4;-1:-1:-1;;;;;22130:13:0;;2517:19;:23;22126:806;;22183:175;;-1:-1:-1;;;22183:175:0;;-1:-1:-1;;;;;22183:36:0;;;;;:175;;6527:10;;22277:4;;22304:7;;22334:5;;22183:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22183:175:0;;;;;;;;-1:-1:-1;;22183:175:0;;;;;;;;;;;;:::i;:::-;;;22162:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:6;:13;22562:1;22545:18;22541:321;;22588:109;;-1:-1:-1;;;22588:109:0;;;;;;;:::i;22541:321::-;22812:6;22806:13;22797:6;22793:2;22789:15;22782:38;22162:715;-1:-1:-1;;;;;;22422:55:0;-1:-1:-1;;;22422:55:0;;-1:-1:-1;22415:62:0;;22126:806;-1:-1:-1;22916:4:0;22126:806;21954:985;;;;;;:::o;29449:110::-;29509:13;29542:9;29535:16;;;;;:::i;7857:656::-;7913:13;8067:5;8076:1;8067:10;8063:53;;-1:-1:-1;;8094:10:0;;;;;;;;;;;;-1:-1:-1;;;8094:10:0;;;;;7857:656::o;8063:53::-;8141:5;8126:12;8182:78;8189:9;;8182:78;;8215:8;;;;:::i;:::-;;-1:-1:-1;8238:10:0;;-1:-1:-1;8246:2:0;8238:10;;:::i;:::-;;;8182:78;;;8270:19;8302:6;8292:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8292:17:0;;8270:39;;8320:154;8327:10;;8320:154;;8354:11;8364:1;8354:11;;:::i;:::-;;-1:-1:-1;8423:10:0;8431:2;8423:5;:10;:::i;:::-;8410:24;;:2;:24;:::i;:::-;8397:39;;8380:6;8387;8380:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8380:56:0;;;;;;;;-1:-1:-1;8451:11:0;8460:2;8451:11;;:::i;:::-;;;8320:154;;18014:1275;18160:12;;-1:-1:-1;;;;;18191:16:0;;18183:62;;;;-1:-1:-1;;;18183:62:0;;22908:2:1;18183:62:0;;;22890:21:1;22947:2;22927:18;;;22920:30;22986:34;22966:18;;;22959:62;-1:-1:-1;;;23037:18:1;;;23030:31;23078:19;;18183:62:0;22706:397:1;18183:62:0;18265:21;18273:12;17874;;-1:-1:-1;17864:22:0;17783:111;18265:21;18264:22;18256:64;;;;-1:-1:-1;;;18256:64:0;;23310:2:1;18256:64:0;;;23292:21:1;23349:2;23329:18;;;23322:30;23388:31;23368:18;;;23361:59;23437:18;;18256:64:0;23108:353:1;18256:64:0;18351:12;18339:8;:24;;18331:71;;;;-1:-1:-1;;;18331:71:0;;23668:2:1;18331:71:0;;;23650:21:1;23707:2;23687:18;;;23680:30;23746:34;23726:18;;;23719:62;-1:-1:-1;;;23797:18:1;;;23790:32;23839:19;;18331:71:0;23466:398:1;18331:71:0;-1:-1:-1;;;;;18522:16:0;;18489:30;18522:16;;;:12;:16;;;;;;;;;18489:49;;;;;;;;;-1:-1:-1;;;;;18489:49:0;;;;;-1:-1:-1;;;18489:49:0;;;;;;;;;;;18568:135;;;;;;;;18594:19;;18489:49;;18568:135;;;18594:39;;18624:8;;18594:39;:::i;:::-;-1:-1:-1;;;;;18568:135:0;;;;;18683:8;18648:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;18568:135:0;;;;;;-1:-1:-1;;;;;18549:16:0;;;;;;;:12;:16;;;;;;;;:154;;;;;;;;-1:-1:-1;;;18549:154:0;;;;;;;;;;;;18742:43;;;;;;;;;;;18768:15;18742:43;;;;;;;;18714:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;18714:71:0;-1:-1:-1;;;;;;18714:71:0;;;;;;;;;;;;;;;;;;18726:12;;18846:325;18870:8;18866:1;:12;18846:325;;;18905:38;;18930:12;;-1:-1:-1;;;;;18905:38:0;;;18922:1;;18905:38;;18922:1;;18905:38;18984:59;19015:1;19019:2;19023:12;19037:5;18984:22;:59::i;:::-;18958:172;;;;-1:-1:-1;;;18958:172:0;;;;;;;:::i;:::-;19145:14;;;;:::i;:::-;;;;18880:3;;;;;:::i;:::-;;;;18846:325;;;-1:-1:-1;19183:12:0;:27;;;19221:60;17420:355;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2173:186::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2324:29;2343:9;2324:29;:::i;2546:127::-;2607:10;2602:3;2598:20;2595:1;2588:31;2638:4;2635:1;2628:15;2662:4;2659:1;2652:15;2678:632;2743:5;2773:18;2814:2;2806:6;2803:14;2800:40;;;2820:18;;:::i;:::-;2895:2;2889:9;2863:2;2949:15;;-1:-1:-1;;2945:24:1;;;2971:2;2941:33;2937:42;2925:55;;;2995:18;;;3015:22;;;2992:46;2989:72;;;3041:18;;:::i;:::-;3081:10;3077:2;3070:22;3110:6;3101:15;;3140:6;3132;3125:22;3180:3;3171:6;3166:3;3162:16;3159:25;3156:45;;;3197:1;3194;3187:12;3156:45;3247:6;3242:3;3235:4;3227:6;3223:17;3210:44;3302:1;3295:4;3286:6;3278;3274:19;3270:30;3263:41;;;;2678:632;;;;;:::o;3315:451::-;3384:6;3437:2;3425:9;3416:7;3412:23;3408:32;3405:52;;;3453:1;3450;3443:12;3405:52;3493:9;3480:23;3526:18;3518:6;3515:30;3512:50;;;3558:1;3555;3548:12;3512:50;3581:22;;3634:4;3626:13;;3622:27;-1:-1:-1;3612:55:1;;3663:1;3660;3653:12;3612:55;3686:74;3752:7;3747:2;3734:16;3729:2;3725;3721:11;3686:74;:::i;3771:328::-;3848:6;3856;3864;3917:2;3905:9;3896:7;3892:23;3888:32;3885:52;;;3933:1;3930;3923:12;3885:52;3956:29;3975:9;3956:29;:::i;:::-;3946:39;;4004:38;4038:2;4027:9;4023:18;4004:38;:::i;:::-;3994:48;;4089:2;4078:9;4074:18;4061:32;4051:42;;3771:328;;;;;:::o;4104:632::-;4275:2;4327:21;;;4397:13;;4300:18;;;4419:22;;;4246:4;;4275:2;4498:15;;;;4472:2;4457:18;;;4246:4;4541:169;4555:6;4552:1;4549:13;4541:169;;;4616:13;;4604:26;;4685:15;;;;4650:12;;;;4577:1;4570:9;4541:169;;;-1:-1:-1;4727:3:1;;4104:632;-1:-1:-1;;;;;;4104:632:1:o;5106:347::-;5171:6;5179;5232:2;5220:9;5211:7;5207:23;5203:32;5200:52;;;5248:1;5245;5238:12;5200:52;5271:29;5290:9;5271:29;:::i;:::-;5261:39;;5350:2;5339:9;5335:18;5322:32;5397:5;5390:13;5383:21;5376:5;5373:32;5363:60;;5419:1;5416;5409:12;5363:60;5442:5;5432:15;;;5106:347;;;;;:::o;5458:667::-;5553:6;5561;5569;5577;5630:3;5618:9;5609:7;5605:23;5601:33;5598:53;;;5647:1;5644;5637:12;5598:53;5670:29;5689:9;5670:29;:::i;:::-;5660:39;;5718:38;5752:2;5741:9;5737:18;5718:38;:::i;:::-;5708:48;;5803:2;5792:9;5788:18;5775:32;5765:42;;5858:2;5847:9;5843:18;5830:32;5885:18;5877:6;5874:30;5871:50;;;5917:1;5914;5907:12;5871:50;5940:22;;5993:4;5985:13;;5981:27;-1:-1:-1;5971:55:1;;6022:1;6019;6012:12;5971:55;6045:74;6111:7;6106:2;6093:16;6088:2;6084;6080:11;6045:74;:::i;:::-;6035:84;;;5458:667;;;;;;;:::o;6130:260::-;6198:6;6206;6259:2;6247:9;6238:7;6234:23;6230:32;6227:52;;;6275:1;6272;6265:12;6227:52;6298:29;6317:9;6298:29;:::i;:::-;6288:39;;6346:38;6380:2;6369:9;6365:18;6346:38;:::i;:::-;6336:48;;6130:260;;;;;:::o;6395:356::-;6597:2;6579:21;;;6616:18;;;6609:30;6675:34;6670:2;6655:18;;6648:62;6742:2;6727:18;;6395:356::o;6756:380::-;6835:1;6831:12;;;;6878;;;6899:61;;6953:4;6945:6;6941:17;6931:27;;6899:61;7006:2;6998:6;6995:14;6975:18;6972:38;6969:161;;7052:10;7047:3;7043:20;7040:1;7033:31;7087:4;7084:1;7077:15;7115:4;7112:1;7105:15;6969:161;;6756:380;;;:::o;8510:545::-;8612:2;8607:3;8604:11;8601:448;;;8648:1;8673:5;8669:2;8662:17;8718:4;8714:2;8704:19;8788:2;8776:10;8772:19;8769:1;8765:27;8759:4;8755:38;8824:4;8812:10;8809:20;8806:47;;;-1:-1:-1;8847:4:1;8806:47;8902:2;8897:3;8893:12;8890:1;8886:20;8880:4;8876:31;8866:41;;8957:82;8975:2;8968:5;8965:13;8957:82;;;9020:17;;;9001:1;8990:13;8957:82;;9231:1352;9357:3;9351:10;9384:18;9376:6;9373:30;9370:56;;;9406:18;;:::i;:::-;9435:97;9525:6;9485:38;9517:4;9511:11;9485:38;:::i;:::-;9479:4;9435:97;:::i;:::-;9587:4;;9651:2;9640:14;;9668:1;9663:663;;;;10370:1;10387:6;10384:89;;;-1:-1:-1;10439:19:1;;;10433:26;10384:89;-1:-1:-1;;9188:1:1;9184:11;;;9180:24;9176:29;9166:40;9212:1;9208:11;;;9163:57;10486:81;;9633:944;;9663:663;8457:1;8450:14;;;8494:4;8481:18;;-1:-1:-1;;9699:20:1;;;9817:236;9831:7;9828:1;9825:14;9817:236;;;9920:19;;;9914:26;9899:42;;10012:27;;;;9980:1;9968:14;;;;9847:19;;9817:236;;;9821:3;10081:6;10072:7;10069:19;10066:201;;;10142:19;;;10136:26;-1:-1:-1;;10225:1:1;10221:14;;;10237:3;10217:24;10213:37;10209:42;10194:58;10179:74;;10066:201;-1:-1:-1;;;;;10313:1:1;10297:14;;;10293:22;10280:36;;-1:-1:-1;9231:1352:1:o;10991:127::-;11052:10;11047:3;11043:20;11040:1;11033:31;11083:4;11080:1;11073:15;11107:4;11104:1;11097:15;11123:135;11162:3;11183:17;;;11180:43;;11203:18;;:::i;:::-;-1:-1:-1;11250:1:1;11239:13;;11123:135::o;11678:127::-;11739:10;11734:3;11730:20;11727:1;11720:31;11770:4;11767:1;11760:15;11794:4;11791:1;11784:15;12978:184;13048:6;13101:2;13089:9;13080:7;13076:23;13072:32;13069:52;;;13117:1;13114;13107:12;13069:52;-1:-1:-1;13140:16:1;;12978:184;-1:-1:-1;12978:184:1:o;13794:127::-;13855:10;13850:3;13846:20;13843:1;13836:31;13886:4;13883:1;13876:15;13910:4;13907:1;13900:15;13926:112;13958:1;13984;13974:35;;13989:18;;:::i;:::-;-1:-1:-1;14023:9:1;;13926:112::o;14043:136::-;14082:3;14110:5;14100:39;;14119:18;;:::i;:::-;-1:-1:-1;;;14155:18:1;;14043:136::o;14537:120::-;14577:1;14603;14593:35;;14608:18;;:::i;:::-;-1:-1:-1;14642:9:1;;14537:120::o;15011:128::-;15051:3;15082:1;15078:6;15075:1;15072:13;15069:39;;;15088:18;;:::i;:::-;-1:-1:-1;15124:9:1;;15011:128::o;15493:168::-;15533:7;15599:1;15595;15591:6;15587:14;15584:1;15581:21;15576:1;15569:9;15562:17;15558:45;15555:71;;;15606:18;;:::i;:::-;-1:-1:-1;15646:9:1;;15493:168::o;16369:415::-;16571:2;16553:21;;;16610:2;16590:18;;;16583:30;16649:34;16644:2;16629:18;;16622:62;-1:-1:-1;;;16715:2:1;16700:18;;16693:49;16774:3;16759:19;;16369:415::o;17205:1230::-;17429:3;17467:6;17461:13;17493:4;17506:51;17550:6;17545:3;17540:2;17532:6;17528:15;17506:51;:::i;:::-;17620:13;;17579:16;;;;17642:55;17620:13;17579:16;17664:15;;;17642:55;:::i;:::-;17786:13;;17719:20;;;17759:1;;17824:36;17786:13;17824:36;:::i;:::-;17879:1;17896:18;;;17923:141;;;;18078:1;18073:337;;;;17889:521;;17923:141;-1:-1:-1;;17958:24:1;;17944:39;;18035:16;;18028:24;18014:39;;18003:51;;;-1:-1:-1;17923:141:1;;18073:337;18104:6;18101:1;18094:17;18152:2;18149:1;18139:16;18177:1;18191:169;18205:8;18202:1;18199:15;18191:169;;;18287:14;;18272:13;;;18265:37;18330:16;;;;18222:10;;18191:169;;;18195:3;;18391:8;18384:5;18380:20;18373:27;;17889:521;-1:-1:-1;18426:3:1;;17205:1230;-1:-1:-1;;;;;;;;;;17205:1230:1:o;20492:246::-;20532:4;-1:-1:-1;;;;;20645:10:1;;;;20615;;20667:12;;;20664:38;;;20682:18;;:::i;:::-;20719:13;;20492:246;-1:-1:-1;;;20492:246:1:o;20743:253::-;20783:3;-1:-1:-1;;;;;20872:2:1;20869:1;20865:10;20902:2;20899:1;20895:10;20933:3;20929:2;20925:12;20920:3;20917:21;20914:47;;;20941:18;;:::i;:::-;20977:13;;20743:253;-1:-1:-1;;;;20743:253:1:o;21412:125::-;21452:4;21480:1;21477;21474:8;21471:34;;;21485:18;;:::i;:::-;-1:-1:-1;21522:9:1;;21412:125::o;21958:489::-;-1:-1:-1;;;;;22227:15:1;;;22209:34;;22279:15;;22274:2;22259:18;;22252:43;22326:2;22311:18;;22304:34;;;22374:3;22369:2;22354:18;;22347:31;;;22152:4;;22395:46;;22421:19;;22413:6;22395:46;:::i;:::-;22387:54;21958:489;-1:-1:-1;;;;;;21958:489:1:o;22452:249::-;22521:6;22574:2;22562:9;22553:7;22549:23;22545:32;22542:52;;;22590:1;22587;22580:12;22542:52;22622:9;22616:16;22641:30;22665:5;22641:30;:::i

Swarm Source

ipfs://42ede51fbf6dabb3a9a02882ab59f688593871aa04748cf7b3f526ce10339d5c
Loading...
Loading
Loading...
Loading
[ 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.