ETH Price: $3,006.10 (+3.12%)
Gas: 2 Gwei

Token

We Are Satoshis (W.A.S.)
 

Overview

Max Total Supply

1,024 W.A.S.

Holders

354

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
moneymankirk.eth
Balance
4 W.A.S.
0xC709ACBD5531E461e39D04A28E36B81F4f6b995d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The official We Are Satoshis NFT collection page. 1024 rebels fighting for freedom, against corruption, and against inflation. ==> Mint yours at https://www.wearesatoshis.com/ <== We Are Satoshis are built by a fully doxxed team and bring you amazing artwork. Besides artwor...

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Satoshis

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 17 : Satoshis.sol
//Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./Mintpass.sol";


contract Satoshis is ERC721URIStorage, Ownable, Pausable, ERC721Enumerable, Mintpass {

    using Counters for Counters.Counter;
	Counters.Counter private _tokenIds;


    //Ensure unique tokenURIs are used
    mapping (string => bool) private _mintedTokenUris;


    //Collection limits and counters
	uint256 public tokensLimit;
	uint256 public tokensMinted;
	uint256 public tokensAvailable;

    uint256 public mintPassTokensLimit;
    uint256 public mintPassTokensMinted;

    uint256 public wlOneTokensLimit;
    uint256 public wlOneTokensMinted;    

    //Mint stages
    bool public wlOneStatus;
    bool public mintPassStatus;
    bool public publicMintStatus;
    bool public gloablMintStatus; //allows for minting to happen even if the contratc is paused & vice versa


    //Destination addresses
	address payable teamOne;
    address payable teamTwo;


    //Load mint passes
    mapping(uint256 => address) private _mintPasses;


    //Mint prices
    uint256 public publicMintPrice;
    uint256 public wlMintPrice;
    
    //whooray, new Satoshi is minted
	event UpdateTokenCounts(uint256 tokensMintedNew,uint256 tokensAvailableNew);


    //Contract constructor
	constructor(uint256 tokensLimitInit, uint256 wlOneTokensLimitInit, uint256 mintPassTokensLimitInit, address payable destAddOne, address payable destAddTwo) public ERC721("We Are Satoshis","W.A.S.") 
    {

		//Set global collection size & initial number of available tokens
        tokensLimit = tokensLimitInit;
		tokensAvailable = tokensLimitInit;
		tokensMinted = 0;

        //Set destination addresses
		teamOne = destAddOne;
        teamTwo = destAddTwo;

        //Set initial mint stages
        wlOneStatus = true;
        mintPassStatus = true;
        publicMintStatus = false;
        gloablMintStatus = true;

        //Set token availability per stage
        wlOneTokensLimit = wlOneTokensLimitInit;
        mintPassTokensLimit = mintPassTokensLimitInit;

        //Set counters for whitelists and mintpasses
        mintPassTokensMinted = 0;
        wlOneTokensMinted = 0;

        publicMintPrice = 80000000000000000;
        wlMintPrice = 60000000000000000;

	}




function masterMint(address to)
    internal
    virtual
    returns (uint256)
    {
        require(tokensAvailable >= 1,"All tokens have been minted");
        require(gloablMintStatus,"Minting is disabled");

        _tokenIds.increment();
        uint256 newItemId = _tokenIds.current();
        _mint(to,newItemId);

        tokensMinted = newItemId;
        tokensAvailable = tokensLimit - newItemId;


        emit UpdateTokenCounts(tokensMinted,tokensAvailable);
        return newItemId;
    }


//Minting methods : Mint pass

function mintSingleMintPass (address to, uint256 mintPass)
    public
    virtual
    returns (uint256)
    {
        require(verifyMintPass(mintPass,to),"This mint pass was used already");
        require(mintPassStatus,"Mint pass minting is disabled");
        require(mintPassTokensMinted <= mintPassTokensLimit,"All Mint Pass tokens have already been minted");

        uint256 newTokenId = masterMint(to);
        mintPassTokensMinted++;
        invalidateMintPass(mintPass);

        return newTokenId;
    }



function multiMintPassMint(address to, uint256 quantity, uint[] memory mintPases)
    public
    virtual
    {
        require(quantity <= 10,"Can not mint that many tokens at once");
        uint256 i;
        for(i = 0; i < quantity; i++) {
            mintSingleMintPass(to, mintPases[i]);
        }
    }




//Minting methods : Whitelist

function wlOneMintToken(address to, uint256 quantity) 
	public 
	virtual 
	payable 
    {
        require(msg.value >= (wlMintPrice*quantity),"Not enough ETH sent");
        require(tokensAvailable >= quantity,"All tokens have been minted");
        require(wlOneStatus,"Whitelist one is not minting anymore");
        require(wlOneTokensMinted <= wlOneTokensLimit,"All whitelist #1 tokens have been minted");
        require(quantity <= 10,"Can not mint that many tokens at once");

        passOnEth(msg.value);

        uint256 i;
        for(i = 0; i < quantity; i++) {
            masterMint(to);
            wlOneTokensMinted++;
        }
    }

//Minting methods : Public

function publicMintToken(address to, uint256 quantity) 
    public 
    virtual 
    payable 
    {
        require(msg.value >= (publicMintPrice*quantity),"Not enough ETH sent");
        require(tokensAvailable >= quantity,"All tokens have been minted");
        require(publicMintStatus,"The General Public Mint is not active at the moment");
        require(quantity <= 10,"Can not mint that many tokens at once");

        passOnEth(msg.value);

        uint256 i;
        for(i = 0; i < quantity; i++) {
            masterMint(to);
        }
    }

//Honorary mint
function honoraryMint(address to, uint256 quantity) 
    public 
    virtual 
    onlyOwner
    {
        require(tokensAvailable >= quantity,"All tokens have been minted");
        require(quantity <= 10,"Can not mint that many tokens at once");
        uint256 i;
        for(i = 0; i < quantity; i++) {
            masterMint(to);
        }
    }



/*
    General methods, utilities.
    Utilities are onlyOwner.
*/

//Update collection size
function setCollectionSize (uint256 newCollectionSize)
    public
    onlyOwner
    virtual
    returns (uint256)
    {
        require(newCollectionSize >= tokensMinted,"Cant set the collection size this low");
        tokensLimit = newCollectionSize;
        tokensAvailable = tokensLimit - tokensMinted;
        return tokensLimit;
    }

//Modify the limits for WL1, emergency use only
function setWlOneLimit (uint256 newWlOneLimit)
    public
    onlyOwner
    virtual
    returns (uint256)
    {
        wlOneTokensLimit = newWlOneLimit;
        return wlOneTokensLimit;
    }

//Modify public sale price
function setPublicSalePrice (uint256 newPublicPrice)
    public
    onlyOwner
    virtual
    returns (uint256)
    {
        publicMintPrice = newPublicPrice;
        return publicMintPrice;
    }


//Toggle global minting
function toggleGlobalMinting ()
    public
    onlyOwner
    virtual
    {
        gloablMintStatus = !gloablMintStatus;
    }

//Toggle Wl1 minting
function toggleWlOneMinting ()
    public
    onlyOwner
    virtual
    {
        wlOneStatus = !wlOneStatus;
    }

//Toggle Public minting
function togglePublicMinting ()
    public
    onlyOwner
    virtual
    {
        publicMintStatus = !publicMintStatus;
    }

//Toggle Mint Pass minting
function toggleMintPassMinting ()
    public
    onlyOwner
    virtual
    {
        mintPassStatus = !mintPassStatus;
    }


function pauseContract() public onlyOwner whenNotPaused 
{

	_pause();
}

function unPauseContract() public onlyOwner whenPaused 
{
	_unpause();
}

 function passOnEth(uint256 amount) public payable {
    uint singleAmount = amount/2;

    (bool sentToAddressOne, bytes memory dataToAddressOne) = teamOne.call{value: singleAmount}("");
    (bool sentToAddressTwo, bytes memory dataToAddressTwo) = teamTwo.call{value: singleAmount}("");


    require(sentToAddressOne, "Failed to send Ether to Team Address One");
    require(sentToAddressTwo, "Failed to send Ether to Team Address Two");

}


function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
) internal virtual override (ERC721,ERC721Enumerable)  {
    super._beforeTokenTransfer(from, to, tokenId);
    require(!paused(), "ERC721Pausable: token transfer while paused");

}


function _burn(uint256 tokenId) 
	internal 
	virtual 
	override (ERC721, ERC721URIStorage) 
{
    super._burn(tokenId);

}


function tokenURI(uint256 tokenId)
public 
view 
virtual 
override (ERC721, ERC721URIStorage)
	returns (string memory) 
	{

    return super.tokenURI(tokenId);
}

function _baseURI() 
internal 
view 
virtual 
override (ERC721) 
returns (string memory) 
{
    return "https://meta.wearesatoshis.com/";
}

function supportsInterface(bytes4 interfaceId) 
public 
view 
virtual 
override(ERC721, ERC721Enumerable) returns (bool) 
{
    return super.supportsInterface(interfaceId);
}

}

File 2 of 17 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 17 : ERC721URIStorage.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC721.sol";

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

File 4 of 17 : ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 5 of 17 : Counters.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 6 of 17 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 7 of 17 : Mintpass.sol
//Contract based on https://docs.openzeppelin.com/contracts/3.x/erc721
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;
contract Mintpass {
    mapping(uint256 => address) private _mintPasses;
	constructor() {
        //Available mintpasses
        _mintPasses[3628] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[3629] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[3630] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[3631] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[3632] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[3633] = 0x826ae03F697BbD3dAD37E9b34e7a8989d9317fc4;
        _mintPasses[3634] = 0x826ae03F697BbD3dAD37E9b34e7a8989d9317fc4;
        _mintPasses[3635] = 0x79dbBF34F0158E3497dAd620E40b904a6a5C7F67;
        _mintPasses[3636] = 0x79dbBF34F0158E3497dAd620E40b904a6a5C7F67;
        _mintPasses[3637] = 0x79dbBF34F0158E3497dAd620E40b904a6a5C7F67;
        _mintPasses[3638] = 0x0eCddcF41754360AB129d7Ca4c8ABf220F9c32BD;
        _mintPasses[3639] = 0x0eCddcF41754360AB129d7Ca4c8ABf220F9c32BD;
        _mintPasses[3640] = 0x0eCddcF41754360AB129d7Ca4c8ABf220F9c32BD;
        _mintPasses[3641] = 0xE38ada1fd757915a5B7458b828e00A7416CB8ed7;
        _mintPasses[3642] = 0xE38ada1fd757915a5B7458b828e00A7416CB8ed7;
        _mintPasses[3643] = 0xA613e95408dbEfc3aeCB4630BDE04E757Bc46fD8;
        _mintPasses[3644] = 0xA613e95408dbEfc3aeCB4630BDE04E757Bc46fD8;
        _mintPasses[3645] = 0x5c5D1c68957EF6E9e46303e3CB02a0e3AecE1678;
        _mintPasses[3646] = 0x5c5D1c68957EF6E9e46303e3CB02a0e3AecE1678;
        _mintPasses[3647] = 0xF8f18ff9969aB94299e763e038902262002341CD;
        _mintPasses[3648] = 0xF8f18ff9969aB94299e763e038902262002341CD;
        _mintPasses[3649] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3650] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3651] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3652] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3653] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3654] = 0xE7bFCE6D3613D20ea879430EA78279Ec3eeCB473;
        _mintPasses[3655] = 0xE7bFCE6D3613D20ea879430EA78279Ec3eeCB473;
        _mintPasses[3656] = 0xc8c626980f06e95825cf2e12F762D2eaB8CA7b46;
        _mintPasses[3657] = 0xc8c626980f06e95825cf2e12F762D2eaB8CA7b46;
        _mintPasses[3658] = 0xc8c626980f06e95825cf2e12F762D2eaB8CA7b46;
        _mintPasses[3659] = 0x4384293860C81Dc6a8A248a648B6dCa35fF3aA33;
        _mintPasses[3660] = 0x4384293860C81Dc6a8A248a648B6dCa35fF3aA33;
        _mintPasses[3661] = 0x4384293860C81Dc6a8A248a648B6dCa35fF3aA33;
        _mintPasses[3662] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3663] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3664] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3665] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3666] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3667] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3668] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3669] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3670] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3671] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3672] = 0x513E8473FC9658c50EA01D4a0D358458b15932c5;
        _mintPasses[3673] = 0x513E8473FC9658c50EA01D4a0D358458b15932c5;
        _mintPasses[3674] = 0x513E8473FC9658c50EA01D4a0D358458b15932c5;
        _mintPasses[3675] = 0x513E8473FC9658c50EA01D4a0D358458b15932c5;
        _mintPasses[3676] = 0x513E8473FC9658c50EA01D4a0D358458b15932c5;
        _mintPasses[3677] = 0x399190C47dD486A553dEDCbD5465f811ab15C32B;
        _mintPasses[3678] = 0x399190C47dD486A553dEDCbD5465f811ab15C32B;
        _mintPasses[3679] = 0x399190C47dD486A553dEDCbD5465f811ab15C32B;
        _mintPasses[3680] = 0x399190C47dD486A553dEDCbD5465f811ab15C32B;
        _mintPasses[3681] = 0x399190C47dD486A553dEDCbD5465f811ab15C32B;
        _mintPasses[3682] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3683] = 0x72988B423c86afed473278E8d19a79456C404995;
        _mintPasses[3684] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3685] = 0x6F14AFA784Ff0c764ecCB5F7A133403D5b7a4D34;
        _mintPasses[3686] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3687] = 0x5f0Fa6E54B9296622235CC146E02aaEaC667325a;
        _mintPasses[3688] = 0x822166Dc6A1ADc21ae1B7fbA3b700167cf0f0a6c;
        _mintPasses[3689] = 0x822166Dc6A1ADc21ae1B7fbA3b700167cf0f0a6c;
        _mintPasses[3691] = 0x822166Dc6A1ADc21ae1B7fbA3b700167cf0f0a6c;
        _mintPasses[3692] = 0x56E712FC5bc7B92aE2DD96585a5d4985913Bfd23;
        _mintPasses[3693] = 0x56E712FC5bc7B92aE2DD96585a5d4985913Bfd23;
        _mintPasses[3694] = 0x876b32129a32B21d86c82b0630fb3c6DDBB0e7B8;
        _mintPasses[3695] = 0x876b32129a32B21d86c82b0630fb3c6DDBB0e7B8;
        _mintPasses[3696] = 0x995418c315Ff98763dCe8e57695f1C05548b4eF5;
        _mintPasses[3697] = 0x995418c315Ff98763dCe8e57695f1C05548b4eF5;
        _mintPasses[3698] = 0x015732d3b7cda5826Ae3177a5A16ca0e271eA13F;
        _mintPasses[3699] = 0x015732d3b7cda5826Ae3177a5A16ca0e271eA13F;
        _mintPasses[3700] = 0x75AbF28b9CAe8edb0c1209efF172f9420CC63549;
        _mintPasses[3701] = 0x75AbF28b9CAe8edb0c1209efF172f9420CC63549;
        _mintPasses[3702] = 0x75AbF28b9CAe8edb0c1209efF172f9420CC63549;
        _mintPasses[3703] = 0xF8f18ff9969aB94299e763e038902262002341CD;
        _mintPasses[3704] = 0x56a68181A1358AF92C680610B5fD7e2d2cF6BF65;
        _mintPasses[3705] = 0x56a68181A1358AF92C680610B5fD7e2d2cF6BF65;
        _mintPasses[3706] = 0x56a68181A1358AF92C680610B5fD7e2d2cF6BF65;
        _mintPasses[3707] = 0x5A6bdC17B9F89Cb52b38dad319dF293b037a43d4;
        _mintPasses[3708] = 0x5A6bdC17B9F89Cb52b38dad319dF293b037a43d4;
        _mintPasses[3709] = 0x5A6bdC17B9F89Cb52b38dad319dF293b037a43d4;
        _mintPasses[3710] = 0x175F02F6473EcD2E87d450Ef33400C4eE673C387;
        _mintPasses[3711] = 0x175F02F6473EcD2E87d450Ef33400C4eE673C387;
        _mintPasses[3712] = 0xDF1e3abB229d42A182aD61ce8a63355a8A3EB0F8;
        _mintPasses[3713] = 0xDF1e3abB229d42A182aD61ce8a63355a8A3EB0F8;
        _mintPasses[3714] = 0xED721dC63328be92A08b6b7D677e11100C945eA9;
        _mintPasses[3715] = 0xED721dC63328be92A08b6b7D677e11100C945eA9;
        _mintPasses[3716] = 0xb6ddE9a985c77d7bC62B171582819D995a51C3bf;
        _mintPasses[3717] = 0xb6ddE9a985c77d7bC62B171582819D995a51C3bf;
        _mintPasses[3718] = 0xd469CD19CEFA18e4eb9112e57A47e09398d98766;
        _mintPasses[3719] = 0xd469CD19CEFA18e4eb9112e57A47e09398d98766;
        _mintPasses[3720] = 0x682ae71bae517bcc4179a1d66223fcDfFb186581;
        _mintPasses[3721] = 0x682ae71bae517bcc4179a1d66223fcDfFb186581;
        _mintPasses[3722] = 0x682ae71bae517bcc4179a1d66223fcDfFb186581;
        _mintPasses[3723] = 0xE495C36e756Ba677D5Ae8fb868f8c8A41cc51611;
        _mintPasses[3724] = 0xE495C36e756Ba677D5Ae8fb868f8c8A41cc51611;
        _mintPasses[3725] = 0xE495C36e756Ba677D5Ae8fb868f8c8A41cc51611;
        _mintPasses[3726] = 0xE495C36e756Ba677D5Ae8fb868f8c8A41cc51611;
        _mintPasses[3727] = 0xE495C36e756Ba677D5Ae8fb868f8c8A41cc51611;
        _mintPasses[3728] = 0x2eea4706F85b9A2D5DD9e9ff007F27C07443EAB1;
        _mintPasses[3729] = 0x2eea4706F85b9A2D5DD9e9ff007F27C07443EAB1;
        _mintPasses[3730] = 0xD77D92f3C97B5ce6430560bd1Ab298E82ed4E058;
        _mintPasses[3731] = 0xD77D92f3C97B5ce6430560bd1Ab298E82ed4E058;
        _mintPasses[3732] = 0xD77D92f3C97B5ce6430560bd1Ab298E82ed4E058;
        _mintPasses[3733] = 0x2c1a74debC7f797972EdbdA51554BE887594008F;
        _mintPasses[3734] = 0x2c1a74debC7f797972EdbdA51554BE887594008F;
        _mintPasses[3735] = 0x215867219e590352f50f5c3B8cE2587236138494;
        _mintPasses[3736] = 0x215867219e590352f50f5c3B8cE2587236138494;
        _mintPasses[3737] = 0xE57b245a1b403A56669f3F30b8db4ea94051E25D;
        _mintPasses[3738] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[3739] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[3740] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[3741] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[3742] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[3743] = 0x81083379a8c41501B39986D5C74428Dd618EB440;
        _mintPasses[3744] = 0x81083379a8c41501B39986D5C74428Dd618EB440;
        _mintPasses[3745] = 0x81083379a8c41501B39986D5C74428Dd618EB440;
        _mintPasses[3746] = 0x81083379a8c41501B39986D5C74428Dd618EB440;
        _mintPasses[3747] = 0x81083379a8c41501B39986D5C74428Dd618EB440;
        _mintPasses[3748] = 0x369DCD945f2ec96EFC489D9541b47cCa9594E9Fc;
        _mintPasses[3749] = 0x369DCD945f2ec96EFC489D9541b47cCa9594E9Fc;
        _mintPasses[3750] = 0x3C132E2d16f7452bdfAEFaE6C37b81e0FF83e749;
        _mintPasses[3751] = 0x3C132E2d16f7452bdfAEFaE6C37b81e0FF83e749;
        _mintPasses[3752] = 0x3C132E2d16f7452bdfAEFaE6C37b81e0FF83e749;
        _mintPasses[3753] = 0x5c5D1c68957EF6E9e46303e3CB02a0e3AecE1678;
        _mintPasses[3754] = 0x97874cf634457f07E7f1888C5C47D70DFAA542cb;
        _mintPasses[3755] = 0x97874cf634457f07E7f1888C5C47D70DFAA542cb;
        _mintPasses[3756] = 0xb261F055621fb3D19b86CD87d499b5aD9a561115;
        _mintPasses[3757] = 0xb261F055621fb3D19b86CD87d499b5aD9a561115;
        _mintPasses[3758] = 0xEd62B641dB277c9C6A2bA6D7246A1d76E483C11C;
        _mintPasses[3759] = 0xEd62B641dB277c9C6A2bA6D7246A1d76E483C11C;
        _mintPasses[3760] = 0x4384293860C81Dc6a8A248a648B6dCa35fF3aA33;
        _mintPasses[3761] = 0xec7dA9b90713B119969a8309607197e5A8606493;
        _mintPasses[3762] = 0xec7dA9b90713B119969a8309607197e5A8606493;
        _mintPasses[3763] = 0x0e0bDf28A0324dD3639520Cd189983F194132825;
        _mintPasses[3764] = 0x0e0bDf28A0324dD3639520Cd189983F194132825;
        _mintPasses[3765] = 0x0e0bDf28A0324dD3639520Cd189983F194132825;
        _mintPasses[3766] = 0x1e27F3175a52877CC8C4e3115B2669037381DeDc;
        _mintPasses[3767] = 0x1e27F3175a52877CC8C4e3115B2669037381DeDc;
        _mintPasses[3768] = 0x1e27F3175a52877CC8C4e3115B2669037381DeDc;
        _mintPasses[3769] = 0x1e27F3175a52877CC8C4e3115B2669037381DeDc;
        _mintPasses[3770] = 0x1e27F3175a52877CC8C4e3115B2669037381DeDc;
        _mintPasses[3771] = 0x1FC9aD1d4b2Ec8D78CfDA9FC35Cf729b9B49E7B6;
        _mintPasses[3772] = 0x1FC9aD1d4b2Ec8D78CfDA9FC35Cf729b9B49E7B6;
        _mintPasses[3773] = 0x1877e5A2B21dBC2EB73eC1b8838461e080932A9f;
        _mintPasses[3774] = 0x1877e5A2B21dBC2EB73eC1b8838461e080932A9f;
        _mintPasses[3775] = 0xA219F044dc6d726f61249c7279EcFa457D6Aaea2;
        _mintPasses[3776] = 0xA219F044dc6d726f61249c7279EcFa457D6Aaea2;
        _mintPasses[3777] = 0x0F683E30E71Ba4B5c1f610b675c8A48BB7cB1530;
        _mintPasses[3778] = 0x0F683E30E71Ba4B5c1f610b675c8A48BB7cB1530;
        _mintPasses[3779] = 0x2eE88422FBC9Ed5C4689089b05154887d737d76B;
        _mintPasses[3780] = 0x2eE88422FBC9Ed5C4689089b05154887d737d76B;
        _mintPasses[3781] = 0x2eE88422FBC9Ed5C4689089b05154887d737d76B;
        _mintPasses[3782] = 0xC294E0a06076EbB0ee3C4831e4a3C1C31A6A2484;
        _mintPasses[3783] = 0xC294E0a06076EbB0ee3C4831e4a3C1C31A6A2484;
        _mintPasses[3784] = 0xC294E0a06076EbB0ee3C4831e4a3C1C31A6A2484;
        _mintPasses[3785] = 0xC294E0a06076EbB0ee3C4831e4a3C1C31A6A2484;
        _mintPasses[3786] = 0xC294E0a06076EbB0ee3C4831e4a3C1C31A6A2484;
        _mintPasses[3787] = 0xb1D610fB451b5cdee4eADcA4538816122ad40E1d;
        _mintPasses[3788] = 0xb1D610fB451b5cdee4eADcA4538816122ad40E1d;
        _mintPasses[3791] = 0x4B9fC228C687f8Ae3C7889579c9723b65882Ebd9;
        _mintPasses[3792] = 0x635123F0a1e192B03F69b3d082e79C969A5eE9b0;
        _mintPasses[3793] = 0x635123F0a1e192B03F69b3d082e79C969A5eE9b0;
        _mintPasses[3794] = 0x635123F0a1e192B03F69b3d082e79C969A5eE9b0;
        _mintPasses[3795] = 0x635123F0a1e192B03F69b3d082e79C969A5eE9b0;
        _mintPasses[3796] = 0x635123F0a1e192B03F69b3d082e79C969A5eE9b0;
        _mintPasses[3797] = 0xeFf626B4beBBd3f26cbA77b47e9ae6C9326cfebB;
        _mintPasses[3798] = 0xeFf626B4beBBd3f26cbA77b47e9ae6C9326cfebB;
        _mintPasses[3799] = 0xeFf626B4beBBd3f26cbA77b47e9ae6C9326cfebB;
        _mintPasses[3800] = 0xeFf626B4beBBd3f26cbA77b47e9ae6C9326cfebB;
        _mintPasses[3801] = 0xeFf626B4beBBd3f26cbA77b47e9ae6C9326cfebB;
        _mintPasses[3802] = 0xE7bFCE6D3613D20ea879430EA78279Ec3eeCB473;
        _mintPasses[3804] = 0x6cb603c1967a32bb7b0726EcbCbB8c3A16b1c299;
        _mintPasses[3805] = 0x6cb603c1967a32bb7b0726EcbCbB8c3A16b1c299;
        _mintPasses[3806] = 0x6cb603c1967a32bb7b0726EcbCbB8c3A16b1c299;
        _mintPasses[3807] = 0x6cb603c1967a32bb7b0726EcbCbB8c3A16b1c299;
        _mintPasses[3808] = 0x6cb603c1967a32bb7b0726EcbCbB8c3A16b1c299;
        _mintPasses[3809] = 0x2BEa720a5fe5e7738d775e8BfD3a37Fa072Cd46c;
        _mintPasses[3810] = 0x2BEa720a5fe5e7738d775e8BfD3a37Fa072Cd46c;
        _mintPasses[3811] = 0x2BEa720a5fe5e7738d775e8BfD3a37Fa072Cd46c;
        _mintPasses[3812] = 0xe4b52ecE9903d8a1995dd4ebf1d16D1a5D51D58D;
        _mintPasses[3813] = 0xe4b52ecE9903d8a1995dd4ebf1d16D1a5D51D58D;
        _mintPasses[3814] = 0xe4b52ecE9903d8a1995dd4ebf1d16D1a5D51D58D;
        _mintPasses[3815] = 0xe4b52ecE9903d8a1995dd4ebf1d16D1a5D51D58D;
        _mintPasses[3816] = 0xe4b52ecE9903d8a1995dd4ebf1d16D1a5D51D58D;
        _mintPasses[3817] = 0xc564D44045a70646BeEf777469E7Aa4E4B6e692A;
        _mintPasses[3818] = 0xc564D44045a70646BeEf777469E7Aa4E4B6e692A;
        _mintPasses[3819] = 0x7255FE6f25ecaED72E85338c131D0daA60724Ecc;
        _mintPasses[3820] = 0x7255FE6f25ecaED72E85338c131D0daA60724Ecc;
        _mintPasses[3821] = 0x2ee963A7B3d9f14D9F748026055C15528fB87f30;
        _mintPasses[3822] = 0x2ee963A7B3d9f14D9F748026055C15528fB87f30;
        _mintPasses[3823] = 0x3908176C1802C43Cf5F481f53243145AcaA76bcc;
        _mintPasses[3824] = 0x3908176C1802C43Cf5F481f53243145AcaA76bcc;
        _mintPasses[3825] = 0x3f6a989786FD0FDAE539F356d99944e5aA4fBae1;
        _mintPasses[3826] = 0x3f6a989786FD0FDAE539F356d99944e5aA4fBae1;
        _mintPasses[3827] = 0x4d140380DE92396cE3Fa583393257a7024a2b653;
        _mintPasses[3828] = 0x4d140380DE92396cE3Fa583393257a7024a2b653;
        _mintPasses[3829] = 0x4d140380DE92396cE3Fa583393257a7024a2b653;
        _mintPasses[3830] = 0x4d140380DE92396cE3Fa583393257a7024a2b653;
        _mintPasses[3831] = 0x4d140380DE92396cE3Fa583393257a7024a2b653;
        _mintPasses[3832] = 0x64C9fb6C978f0f5dd46CB36325b56c04243bAB75;
        _mintPasses[3833] = 0x64C9fb6C978f0f5dd46CB36325b56c04243bAB75;
        _mintPasses[3834] = 0x64C9fb6C978f0f5dd46CB36325b56c04243bAB75;
        _mintPasses[3835] = 0xA01481b6fBE54BE00661290f1cE49e14E3Af82Ef;
        _mintPasses[3836] = 0xA01481b6fBE54BE00661290f1cE49e14E3Af82Ef;
        _mintPasses[3837] = 0xA01481b6fBE54BE00661290f1cE49e14E3Af82Ef;
        _mintPasses[3838] = 0xA01481b6fBE54BE00661290f1cE49e14E3Af82Ef;
        _mintPasses[3839] = 0xA01481b6fBE54BE00661290f1cE49e14E3Af82Ef;
        _mintPasses[6010] = 0xFeF49F32fB60ea475b8cf7193AC32C3DA8a05B7E;
        _mintPasses[6011] = 0xFeF49F32fB60ea475b8cf7193AC32C3DA8a05B7E;
        _mintPasses[6012] = 0x5c4668d494C6Af375a20782727Ec2084605DDB64;
        _mintPasses[6013] = 0x5c4668d494C6Af375a20782727Ec2084605DDB64;
        _mintPasses[6014] = 0xA613e95408dbEfc3aeCB4630BDE04E757Bc46fD8;
        _mintPasses[6019] = 0x7C8A576941E14934643Bb22f3f5eAD4771f7E3Af;
        _mintPasses[6020] = 0x7C8A576941E14934643Bb22f3f5eAD4771f7E3Af;
        _mintPasses[6021] = 0xA7bD22BcFC1eAE5f9944978d81ff71Bd5f5eAF42;
        _mintPasses[6022] = 0xA7bD22BcFC1eAE5f9944978d81ff71Bd5f5eAF42;
        _mintPasses[6023] = 0x1105bF50bE63cdaD34Ff7ac9425C1645e6275E1e;
        _mintPasses[6024] = 0x1105bF50bE63cdaD34Ff7ac9425C1645e6275E1e;
        _mintPasses[6025] = 0x0E54FD21F4eae61A9594393b237bA6de3eDb93D1;
        _mintPasses[6026] = 0x0E54FD21F4eae61A9594393b237bA6de3eDb93D1;
        _mintPasses[6027] = 0x2B7cD3Fec35fb21eFc8913E7383639adb088384B;
        _mintPasses[6028] = 0x2B7cD3Fec35fb21eFc8913E7383639adb088384B;
        _mintPasses[6029] = 0xa4D26fC0814a8dacef55A79166291DD0898a8194;
        _mintPasses[6030] = 0xa4D26fC0814a8dacef55A79166291DD0898a8194;
        _mintPasses[6031] = 0x79122374eCBaD9cbA0dDF0e0A5F1B676462677B4;
        _mintPasses[6032] = 0x79122374eCBaD9cbA0dDF0e0A5F1B676462677B4;
        _mintPasses[6033] = 0x79122374eCBaD9cbA0dDF0e0A5F1B676462677B4;
        _mintPasses[6034] = 0x79122374eCBaD9cbA0dDF0e0A5F1B676462677B4;
        _mintPasses[6036] = 0x79122374eCBaD9cbA0dDF0e0A5F1B676462677B4;
        _mintPasses[6037] = 0xaEabe7513BB61325E22c0D7Fd7B2804b3e2C9C28;
        _mintPasses[6038] = 0xaEabe7513BB61325E22c0D7Fd7B2804b3e2C9C28;
        _mintPasses[6039] = 0xaEabe7513BB61325E22c0D7Fd7B2804b3e2C9C28;
        _mintPasses[6040] = 0xDCC15c04963095154aBa0131462C5F4b5284b7c0;
        _mintPasses[6041] = 0xDCC15c04963095154aBa0131462C5F4b5284b7c0;
        _mintPasses[6042] = 0xDCC15c04963095154aBa0131462C5F4b5284b7c0;
        _mintPasses[6043] = 0x1215731ACF43E83E5dAbE1fe342eD79160e85366;
        _mintPasses[6044] = 0x1215731ACF43E83E5dAbE1fe342eD79160e85366;
        _mintPasses[6045] = 0xF2E81438e26FcE88cC8deBf8C178b80A506cE435;
        _mintPasses[6046] = 0xF2E81438e26FcE88cC8deBf8C178b80A506cE435;
        _mintPasses[6047] = 0xF2E81438e26FcE88cC8deBf8C178b80A506cE435;
        _mintPasses[6048] = 0x28e58A14A39c6BD994e4864119A0348f233992c0;
        _mintPasses[6049] = 0x28e58A14A39c6BD994e4864119A0348f233992c0;
        _mintPasses[6050] = 0x28e58A14A39c6BD994e4864119A0348f233992c0;
        _mintPasses[6051] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[6052] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[6053] = 0x826ae03F697BbD3dAD37E9b34e7a8989d9317fc4;
        _mintPasses[6055] = 0x0eCddcF41754360AB129d7Ca4c8ABf220F9c32BD;
        _mintPasses[6058] = 0x405EB35A58a0C88d9E193D4cB7e61c4Adf2fbcdF;
        _mintPasses[6059] = 0x405EB35A58a0C88d9E193D4cB7e61c4Adf2fbcdF;
        _mintPasses[6060] = 0xD39EbDa59a76EfF9df72C37F8260e53E073bd7BC;
        _mintPasses[6061] = 0xD39EbDa59a76EfF9df72C37F8260e53E073bd7BC;
        _mintPasses[6062] = 0xC93e7FEc09E54ECbbAE66754159989E44FB12aD2;
        _mintPasses[6063] = 0xC93e7FEc09E54ECbbAE66754159989E44FB12aD2;
        _mintPasses[6064] = 0x53851a72902197865EFA99Edc0f73d89990863A9;
        _mintPasses[6065] = 0x53851a72902197865EFA99Edc0f73d89990863A9;
        _mintPasses[6066] = 0x53851a72902197865EFA99Edc0f73d89990863A9;
        _mintPasses[6067] = 0x53851a72902197865EFA99Edc0f73d89990863A9;
        _mintPasses[6068] = 0x53851a72902197865EFA99Edc0f73d89990863A9;
        _mintPasses[6069] = 0xA14B8d5E0687e63F9991E85DC17287f17d858731;
        _mintPasses[6070] = 0xA14B8d5E0687e63F9991E85DC17287f17d858731;
        _mintPasses[6071] = 0xF2E81438e26FcE88cC8deBf8C178b80A506cE435;
        _mintPasses[6072] = 0x828cDcDc2a006E5EBCA06EEd673BFa8DF897852D;
        _mintPasses[6073] = 0x828cDcDc2a006E5EBCA06EEd673BFa8DF897852D;
        _mintPasses[6074] = 0x828cDcDc2a006E5EBCA06EEd673BFa8DF897852D;
        _mintPasses[6075] = 0x828cDcDc2a006E5EBCA06EEd673BFa8DF897852D;
        _mintPasses[6076] = 0x828cDcDc2a006E5EBCA06EEd673BFa8DF897852D;
        _mintPasses[6077] = 0x3723DDeC18A8F59CFC2bED4AEDe5e5Bebdf21712;
        _mintPasses[6078] = 0x3723DDeC18A8F59CFC2bED4AEDe5e5Bebdf21712;
        _mintPasses[6079] = 0x4A90601B49605B3998A5339833763931D9BD4918;
        _mintPasses[6080] = 0x4A90601B49605B3998A5339833763931D9BD4918;
        _mintPasses[6081] = 0x7358B3dD144332377c14D8A47844E05A1b6f50aC;
        _mintPasses[6082] = 0x7358B3dD144332377c14D8A47844E05A1b6f50aC;
        _mintPasses[6084] = 0x7358B3dD144332377c14D8A47844E05A1b6f50aC;
        _mintPasses[6085] = 0x7358B3dD144332377c14D8A47844E05A1b6f50aC;
        _mintPasses[6086] = 0x7358B3dD144332377c14D8A47844E05A1b6f50aC;
        _mintPasses[6087] = 0xDf3759cc2277aDcDB0a97b8AC1469a6EddBC6A8d;
        _mintPasses[6088] = 0xDf3759cc2277aDcDB0a97b8AC1469a6EddBC6A8d;
        _mintPasses[6089] = 0xDf3759cc2277aDcDB0a97b8AC1469a6EddBC6A8d;
        _mintPasses[6090] = 0xe29fb0952a8FA002B353e255dD7EE45527084240;
        _mintPasses[6091] = 0xe29fb0952a8FA002B353e255dD7EE45527084240;
        _mintPasses[6092] = 0x087e269f123F479aE3Cf441657A8739236d36aEe;
        _mintPasses[6093] = 0x087e269f123F479aE3Cf441657A8739236d36aEe;
        _mintPasses[6094] = 0x60F444A38d8792EeD42E6E091E64216F93ceEeb8;
        _mintPasses[6095] = 0x60F444A38d8792EeD42E6E091E64216F93ceEeb8;
        _mintPasses[6096] = 0x386c2f5aAB7392F86e5aF3de097673b7BFc4aE64;
        _mintPasses[6097] = 0x386c2f5aAB7392F86e5aF3de097673b7BFc4aE64;
        _mintPasses[6098] = 0x386c2f5aAB7392F86e5aF3de097673b7BFc4aE64;
        _mintPasses[6099] = 0x386c2f5aAB7392F86e5aF3de097673b7BFc4aE64;
        _mintPasses[6100] = 0x386c2f5aAB7392F86e5aF3de097673b7BFc4aE64;
        _mintPasses[6101] = 0x62182A2Ca7879E2440ca3f5c5c5E1EbdC4fC7c17;
        _mintPasses[6102] = 0x62182A2Ca7879E2440ca3f5c5c5E1EbdC4fC7c17;
        _mintPasses[6103] = 0x8Bf52d54578d06724A989906D47c7B021612E502;
        _mintPasses[6104] = 0x8Bf52d54578d06724A989906D47c7B021612E502;
        _mintPasses[6105] = 0x8EaC156f7df9245F360AE39c47879c2919317402;
        _mintPasses[6106] = 0x8EaC156f7df9245F360AE39c47879c2919317402;
        _mintPasses[6107] = 0x38c05b9B18f8B512CFDCE9bCFD0e57030344f602;
        _mintPasses[6108] = 0x38c05b9B18f8B512CFDCE9bCFD0e57030344f602;
        _mintPasses[6109] = 0xC15f55d4381473A51830196d0307c2987e9A39d9;
        _mintPasses[6110] = 0xC15f55d4381473A51830196d0307c2987e9A39d9;
        _mintPasses[6111] = 0xC15f55d4381473A51830196d0307c2987e9A39d9;
        _mintPasses[6112] = 0x8951A87Adf50b555034B47D103875A1613B003B6;
        _mintPasses[6113] = 0x8951A87Adf50b555034B47D103875A1613B003B6;
        _mintPasses[6114] = 0x4Cb18005A1586F3A743B59bcAc574A01B73B0a18;
        _mintPasses[6115] = 0x4Cb18005A1586F3A743B59bcAc574A01B73B0a18;
        _mintPasses[6116] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6117] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6118] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6119] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6120] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6121] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6122] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6123] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6124] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6125] = 0x8aF0B9A9B751E086122bC340188Bd9d99b8C7ec1;
        _mintPasses[6126] = 0xeb77045939E3FaFB19eCa0389f343fB19a052DFe;
        _mintPasses[6127] = 0xeb77045939E3FaFB19eCa0389f343fB19a052DFe;
        _mintPasses[6128] = 0x2A17068BC37705fA1710dC8bFd1EE49Bc0b432b0;
        _mintPasses[6129] = 0x2A17068BC37705fA1710dC8bFd1EE49Bc0b432b0;
        _mintPasses[6130] = 0x2A17068BC37705fA1710dC8bFd1EE49Bc0b432b0;
        _mintPasses[6131] = 0x2A17068BC37705fA1710dC8bFd1EE49Bc0b432b0;
        _mintPasses[6132] = 0x2A17068BC37705fA1710dC8bFd1EE49Bc0b432b0;
        _mintPasses[6133] = 0x554DDFABaB2524A229070E01e9FaaD627e4Ac513;
        _mintPasses[6134] = 0x554DDFABaB2524A229070E01e9FaaD627e4Ac513;
        _mintPasses[6135] = 0x554DDFABaB2524A229070E01e9FaaD627e4Ac513;
        _mintPasses[6136] = 0x554DDFABaB2524A229070E01e9FaaD627e4Ac513;
        _mintPasses[6137] = 0x554DDFABaB2524A229070E01e9FaaD627e4Ac513;
        _mintPasses[6138] = 0xbdF53Fe485928d2F269cb344864d539C5862AeAb;
        _mintPasses[6139] = 0xbdF53Fe485928d2F269cb344864d539C5862AeAb;
        _mintPasses[6140] = 0x03CCeA443bF78E52bB01c737A00A793CdB7e53d8;
        _mintPasses[6141] = 0x03CCeA443bF78E52bB01c737A00A793CdB7e53d8;
        _mintPasses[6142] = 0xF6d4A41579BF6069A369eA56a72C29fB7D710664;
        _mintPasses[6143] = 0xF6d4A41579BF6069A369eA56a72C29fB7D710664;
        _mintPasses[6144] = 0x9309F2Ed55De312FDf51368593db75dE39369173;
        _mintPasses[6145] = 0x9309F2Ed55De312FDf51368593db75dE39369173;
        _mintPasses[6148] = 0xE4324E43Ae3e8a611E927dF10795D3A20152aE4a;
        _mintPasses[6149] = 0xE4324E43Ae3e8a611E927dF10795D3A20152aE4a;
        _mintPasses[6150] = 0xC992c764a5dD14dd5Bd6F662a14377E1Cf7e31df;
        _mintPasses[6151] = 0xC992c764a5dD14dd5Bd6F662a14377E1Cf7e31df;
        _mintPasses[6152] = 0xC992c764a5dD14dd5Bd6F662a14377E1Cf7e31df;
        _mintPasses[6153] = 0xC992c764a5dD14dd5Bd6F662a14377E1Cf7e31df;
        _mintPasses[6154] = 0xC992c764a5dD14dd5Bd6F662a14377E1Cf7e31df;
        _mintPasses[6155] = 0x01C9a2bbb109a24E86535bB41007cd15a0177C11;
        _mintPasses[6156] = 0x01C9a2bbb109a24E86535bB41007cd15a0177C11;
        _mintPasses[6157] = 0x01C9a2bbb109a24E86535bB41007cd15a0177C11;
        _mintPasses[6158] = 0xbcD8F6a884efde5Da425A3DD5032b3681e3ec0D8;
        _mintPasses[6159] = 0xbcD8F6a884efde5Da425A3DD5032b3681e3ec0D8;
        _mintPasses[6160] = 0x208Eff61de4d585bf1983fdaA5eE9E6c0A92D938;
        _mintPasses[6161] = 0x208Eff61de4d585bf1983fdaA5eE9E6c0A92D938;
        _mintPasses[6162] = 0xdD4127C80F8E59b2a8a9A64dC9d62dd7caa5C339;
        _mintPasses[6163] = 0xdD4127C80F8E59b2a8a9A64dC9d62dd7caa5C339;
        _mintPasses[6164] = 0xdD4127C80F8E59b2a8a9A64dC9d62dd7caa5C339;
        _mintPasses[6165] = 0x8869583E848b60F934C84AB6BC157f9e02A65C4a;
        _mintPasses[6166] = 0x8869583E848b60F934C84AB6BC157f9e02A65C4a;
        _mintPasses[6167] = 0x004196E84C7320EbB2e90e8dC4e0a766d3aaC8Db;
        _mintPasses[6168] = 0x004196E84C7320EbB2e90e8dC4e0a766d3aaC8Db;
        _mintPasses[6169] = 0xA27E6a2e557587e9ca321351ac6Fa09892ec971E;
        _mintPasses[6170] = 0xA27E6a2e557587e9ca321351ac6Fa09892ec971E;
        _mintPasses[6171] = 0xA27E6a2e557587e9ca321351ac6Fa09892ec971E;
        _mintPasses[6226] = 0x01C9a2bbb109a24E86535bB41007cd15a0177C11;
        _mintPasses[6227] = 0x01C9a2bbb109a24E86535bB41007cd15a0177C11;
        _mintPasses[6228] = 0x87689C4e28200de1f0313A98080B4428490F7285;
        _mintPasses[6229] = 0xedE6D8113CF88bbA583a905241abdf23089b312D;
        _mintPasses[6230] = 0xedE6D8113CF88bbA583a905241abdf23089b312D;
        _mintPasses[6231] = 0xd9FCBf56aD6793E10181c28B6E418208656f21C2;
        _mintPasses[6232] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6233] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6234] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6235] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6236] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6237] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6238] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6239] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6240] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6241] = 0x59DC8eE69a7e57b42D25cd13C0Cd8d6665Aa70B2;
        _mintPasses[6242] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[6243] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[6244] = 0x4e1b83Dbc5F77faF3B3d450c2ea30BCD441d67b2;
        _mintPasses[6245] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[6246] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[6247] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[6248] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[6249] = 0x667B2a94Dd4053508C7440EA1F902694336B9814;
        _mintPasses[6250] = 0x298A8fF8128D8427781B44F7e64657548768E3D4;
        _mintPasses[6251] = 0x298A8fF8128D8427781B44F7e64657548768E3D4;
        _mintPasses[6252] = 0x298A8fF8128D8427781B44F7e64657548768E3D4;
        _mintPasses[6253] = 0x298A8fF8128D8427781B44F7e64657548768E3D4;
        _mintPasses[6254] = 0x298A8fF8128D8427781B44F7e64657548768E3D4;
        _mintPasses[6255] = 0x944266ac7c1BcE8b0bF307a060D42A1B9Baa6Ca9;
        _mintPasses[6256] = 0x944266ac7c1BcE8b0bF307a060D42A1B9Baa6Ca9;
        _mintPasses[6257] = 0x944266ac7c1BcE8b0bF307a060D42A1B9Baa6Ca9;
        _mintPasses[6258] = 0x944266ac7c1BcE8b0bF307a060D42A1B9Baa6Ca9;
        _mintPasses[6259] = 0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9;
        _mintPasses[6260] = 0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9;
        _mintPasses[6261] = 0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9;
        _mintPasses[6262] = 0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9;
        _mintPasses[6263] = 0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9;
        _mintPasses[6264] = 0x6DFaEA023567DF25E4b1f0E05EF5443aC5C26Ed9;
	}

    function verifyMintPass(uint mintPass, address to) 
    internal 
    view
    returns (bool)
    {
        if (_mintPasses[mintPass] == to) {
            return true;
        } else {
            return false;
        }
    }

    function invalidateMintPass(uint mintPass) 
    internal
    {
        delete _mintPasses[mintPass];
    }

}

File 8 of 17 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 9 of 17 : ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    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())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

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

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 10 of 17 : IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 11 of 17 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 12 of 17 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 13 of 17 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 14 of 17 : Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 15 of 17 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 16 of 17 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 17 of 17 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"tokensLimitInit","type":"uint256"},{"internalType":"uint256","name":"wlOneTokensLimitInit","type":"uint256"},{"internalType":"uint256","name":"mintPassTokensLimitInit","type":"uint256"},{"internalType":"address payable","name":"destAddOne","type":"address"},{"internalType":"address payable","name":"destAddTwo","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensMintedNew","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensAvailableNew","type":"uint256"}],"name":"UpdateTokenCounts","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gloablMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"honoraryMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPassStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPassTokensLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPassTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"mintPass","type":"uint256"}],"name":"mintSingleMintPass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256[]","name":"mintPases","type":"uint256[]"}],"name":"multiMintPassMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"passOnEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":"newCollectionSize","type":"uint256"}],"name":"setCollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPublicPrice","type":"uint256"}],"name":"setPublicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWlOneLimit","type":"uint256"}],"name":"setWlOneLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"toggleGlobalMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMintPassMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWlOneMinting","outputs":[],"stateMutability":"nonpayable","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":"tokensAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"unPauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wlMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"wlOneMintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlOneStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlOneTokensLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlOneTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162007d4938038062007d49833981016040819052620000349162004e0f565b604080518082018252600f81526e576520417265205361746f7368697360881b6020808301918252835180850190945260068452652b972097299760d11b908401528151919291620000899160009162004d4c565b5080516200009f90600190602084019062004d4c565b505050620000bc620000b662004cf660201b60201c565b62004cfa565b6007805460ff60a01b19169055600c6020527fbbd9be895418c4ed7850f8bdf3319626e7661471284892a07accc571718bb0fb8054734e1b83dbc5f77faf3b3d450c2ea30bcd441d67b26001600160a01b031991821681179092557fac12a56b72b70d78f5661abe11c261bec3bfb790152b4ba4fca230759034eed680548216831790557f508f7df54e96edad10b70a7615adf5e528192884922182ad0344334a64e030cf80548216831790557fc1da5fbcb62f53a51c9b1b1aec890603f4759df66e216663a631a15e220dc3e680548216831790557fc9990cf517f6317996f5d8cdb0c9ad5f3c8690c73f5f646e83d4e654af8feb4c80548216831790557f5d9e8acecfe79a3ab7f8cb26fc0fe84506313ea2b7453ef166fdb155bd489ee1805473826ae03f697bbd3dad37e9b34e7a8989d9317fc490831681179091557f6f2834cf680751cd58ad31db4bfcd26930628ec6083d12409e6e06bcfb18269480548316821790557f155972dd4f75fd62f148b2225c4cf428a1a2c07288efd789020418344e08700b80547379dbbf34f0158e3497dad620e40b904a6a5c7f6790841681179091557fbf118d943a3a6cb8b5cf9b4348bbbe1c089c8bfed33aa211aaa304f29480a85080548416821790557f076d5675bb4792e0d177533b5cc8ee827ca15a789f31c27dfb1a35a37d425a208054841690911790557f70ffdfe58fca708f3d10e66423c4fa719507bf455b3350920441d36b202be2a68054730ecddcf41754360ab129d7ca4c8abf220f9c32bd90841681179091557f312910c0a4b248376a6fe5fd41d4fd32b4a1b60923b5b9eea9d65dc1677e69a080548416821790557fd100330a87a92059fa39f660dea3190e107e7dcbc60c763940365450eb4977bf80548416821790557fd4b59ce33f76beeec84f7005b9386d03121d5e8f5b2ef6d43fcfb633cba50c21805473e38ada1fd757915a5b7458b828e00a7416cb8ed790851681179091557fbf341ac9336e0f3502dbb0adb0be43b347fc99b95be1d225df58f1438e2788808054851690911790557f0f3773bfc269ae1acc734c8451378deaad1c900ef6934e8a8488dcc4c69b4179805473a613e95408dbefc3aecb4630bde04e757bc46fd890851681179091557f130abab09880c40dce058adc9601c33d10c7941f824b49ec3dde13d3d7d6784f80548516821790557f776ada2f0c831ca778d0bb69fc81e2a5631d46d62b0753827d972eb00a277e898054735c5d1c68957ef6e9e46303e3cb02a0e3aece167890861681179091557fbc9a6479aca989a0895d789368b0d5bd5d93a4c3f7fbc33acf0ba3b7511272fb80548616821790557f3c20297b26ff2bb88ca2a80b245cfa173b12bea34e682371b9f1b5b98e201072805473f8f18ff9969ab94299e763e038902262002341cd90871681179091557fa9baebb2ce950acbb96154038f4f20193f8857022b4b2f47fe9c913cf56e30a780548716821790557f655c9eac6a459063ab09482262c1365a0ac3291323903397c48a4078f6577f098054735f0fa6e54b9296622235cc146e02aaeac667325a90881681179091557f72ea0f97ea80543cc416ddae196d64ca817847860fc0e54378349ab46e7bc8de80548816821790557fca7f89a838d296b2f4bc1d086b3b0fafc09826918756dd0a6bf9a9768e65a9bf80548816821790557fc183b5a8576ce3af385b3819eb50ba1dbd32f7bd05f7e487207244c8b97321ad80548816821790557f29b63ec225db226fd42718c1b9ce9c484cf8a267c04eb85d70635b9e0491c48f80548816821790557f2935f549e26f17f76ba66e18a40803b586cb74c94b2cdbcca473de0f9bfe4e65805473e7bfce6d3613d20ea879430ea78279ec3eecb47390891681179091557fe0b5fab92a650d83036a6d961b6f6cd770e7a21ead3d3375efa73873f5acf1e080548916821790557ff713f072e9e5e86d95a88b2ebadda023526acec208e4b65dbd141f4a8049194c805473c8c626980f06e95825cf2e12f762d2eab8ca7b46908a1681179091557f84abedf261a73796474e03031b022b63ac97918de38a73bcdcd642dbf5bbcf8380548a16821790557fb5177875454cbc4fe0ddd854f5ffb431463a0531a6fbf7222f053f91e15450e880548a1690911790557ff23ac7e9c50626b80edf30ae5b0086290b5bb3418b667a80e786351701a390528054734384293860c81dc6a8a248a648b6dca35ff3aa33908a1681179091557fd691556d31780b62771fde3351bc7c211e0f32ccf2d83673c8c4d173b3569af680548a16821790557f4acfe4c57556995e3a4eb127537215d60d494e44e238e3871658e8d8f4994e9e80548a16821790557f0a6c51474a6a2afd0123b8266aa6d0b3f16a95b4467aef9259930b36895f180880547372988b423c86afed473278e8d19a79456c404995908b1681179091557f82e2be49896aaffe529310bace044b9a0bd12ab642aff5a329a4563eb716034a80548b16821790557f33e6d76575aa0e6ab20be6c4f1de009488768f2b5325089610c631dfe3db5c7780548b16821790557fc6eeed1dcca56b1c59ee2e3dab15310d0f8b069093b2cbabdc66e844071dc7f380548b16821790557f516b402d49f3eff3b4258cf92fccb60a71d86a76438b7c0dce2e6b595870614180548b16821790557f02aae141a857e3835c0e8dd98caf3f14d8abbede33d4da4b13673cb2dc06d4b48054736f14afa784ff0c764eccb5f7a133403d5b7a4d34908c1681179091557f8e20f9579de01351d158109ee5cfabf2fce49bc8cb53bc196e06ccd4bda8071180548c16821790557f9eaae4b79dad62a65e6a70fab908d628bab69125092a6f6541e99280651e9b3780548c16821790557f500f3881a3ef5829fe77d34c0429d8ceece7cb64e1980966273ddb58098c1bd580548c16821790557f182fcb39afdc2f48eeab063dc04a62606fa9b448878c377aee2d34273ba521e280548c16821790557fd4cc2ec2a65249b7af4ac969bcf1ba9c919185fe900b8e3fc08bd8587567df27805473513e8473fc9658c50ea01d4a0d358458b15932c5908d1681179091557f346dbc4e34c29db8cedd87d7c520bd67e5658a31d16082d7aa241723c01120b480548d16821790557fc4a320a4e3152ba358edb822b5c72ddd29917eb7cf05c048286433270a33383e80548d16821790557fb500d55e87f323459ce3432d52e32a4eaef7766ff7271abab04bb4f4709d8d2080548d16821790557f7f0a6d8ac5acae9c189cffafd9642659862113bf5ac871bfdeb786587d9f773080548d1690911790557fb8e52c4c6de45b599caab0968046fc968d602feb222102b1e358a9305e006e4f805473399190c47dd486a553dedcbd5465f811ab15c32b908d1681179091557f684f9f80c9fb78f167a8119d67dfa2608f4547b60fedfd9b781b786cfb7c8c2e80548d16821790557fb2fa6e30ef04bb93b596450481ff4514dbff4ab49810988c867032741161dbc880548d16821790557f8daf8768423c8ac4c59d557c01950806b3aca527a30d0901b53fb6bd5b942ac480548d16821790557f2fa4382266eaa2beacc914da6370626054ed7312beadadac853482f8c3eeb83180548d1690911790557f23eff93d80d9dbb13eb84012aa3258e3c3474466e144ef21259aa257c59e90e880548c16831790557f116e1152901dc95945be340d582dcedeb196598a193c78434a312a999c3305ab80548c169092179091557fbc123f9e6458ed1f52e40ba82bcccb4f11aeb96c22d31bbc25ce8eb5026087e880548b16821790557f9e50bff5b2532aec81ccf3fd23c4693415fb1157e52d54f22f599133d10183c480548b1690911790557f9215d6eb55fda1d33e8b5f1adbedeea9b7428e0f5f58d2e8a229dd80081d4dc680548a16841790557f93b3411cc91b9bc571e43fd6adfc4b139b43ca29f8b599da182d68963905894680548a169093179092557f5f061a3afcc7265a5f95266ecf535cb844282203db539f4432bb7dd5540edba9805473822166dc6a1adc21ae1b7fba3b700167cf0f0a6c908a1681179091557f95ef54bc5ca858eb602fb9a7b3e2e96a7497c67e0a9afbdd54e10e735b486e4280548a16821790557f350d0ab7ad1b7c3079bf0c1345e867ef650fd068fcd71442753f066081b1cc5380548a1690911790557f0f51184bb08ccc2a840d3c43f5fc85625a4152843d3e97b868a8d5ef8bb0c7a280547356e712fc5bc7b92ae2dd96585a5d4985913bfd23908a1681179091557f63c1c7b4293ce36a1dbb2d4c293c72f2de07f244e374e1104c8b8e3f6a60b68980548a1690911790557f5cd915c6f2997fe8fc7574695729b89a2df2d1f2863d107e91f07fa7ce3099a3805473876b32129a32b21d86c82b0630fb3c6ddbb0e7b8908a1681179091557fa1af713575fb96c2475240104d3c08acb1d87c436bdb3928e252b6b85644646e80548a1690911790557fc29c57a19e799f2d7aae5aa132880b94f0c321c8023fb0cad090526e68a8b835805473995418c315ff98763dce8e57695f1c05548b4ef5908a1681179091557fe95bddfbc641dc774615673cd47af86b6f4bb64891d5ef9d6c83a1d60d2d669580548a1690911790557f627d040ebd4107eaac2506792c6dbea2a21afd233305c98aea95a520a7584134805473015732d3b7cda5826ae3177a5a16ca0e271ea13f908a1681179091557f4c5249d008ffe2894107449290e2530c260a3f5baa82a47b758b53a3eb3131a480548a1690911790557f6f8a1a4d3f11ccdadcf7abc2cff184b12ceee9557d9a136f5e83773e88bbc0ab80547375abf28b9cae8edb0c1209eff172f9420cc63549908a1681179091557f54bb779f3efaa6fdc3bb2a529d860069b01146662849a9d39614f8253e73f80f80548a16821790557ff980e4f419be98701a165c87b9badbef273a6eed228c818042831cf45f91b5f180548a1690911790557fbbcee1be369813aca3d9326b42fb42bd45b6e75ff4567cd563d8bc44e14352b9805489169093179092557f0d2f6ec10abadeb2ad6ef29d5339b16eb223e09c3e29dd5bd6ab0b8a4dd2ec3180547356a68181a1358af92c680610b5fd7e2d2cf6bf6590891681179091557f7f512974bf042f7d95ddf56b9a35f8813ff4dbd908caf8df7f38926c9ddc7cb380548916821790557f63517218af02dbf6975ec7966266277963d2030a7cc16ff60d656155c1ded2938054891690911790557f081a0b33e65450e5ad259083ec826bb2c51abfcdca3f9c688e6a388c594f72bc8054735a6bdc17b9f89cb52b38dad319df293b037a43d490891681179091557ffd772845dd2d7aec7c527978545489c856caea4989dc6b87bda997f4099b590880548916821790557f446d7c814607f4199c4c4d63178ca3435827e27f400dc78d470d67350e47b34f8054891690911790557ff410aef5d55bbb79d65e98601b88976dd136a01932027f020b673bd9a1e2da0e805473175f02f6473ecd2e87d450ef33400c4ee673c38790891681179091557f89fa32fdafa1cd5c4bd0881f8f16e9ae977629846bdf8dcfc1108a202ca403578054891690911790557f76fa43dcf350a092d213536b0cfec181856c1058a4dcedd08b0ddbc002937378805473df1e3abb229d42a182ad61ce8a63355a8a3eb0f890891681179091557f550c96f54a2dfac45faa8a2868ce37d7dc2b3596845afff0220689f042e468c48054891690911790557fe12cb0a4bb4cf38ae6d981f8b2d588aa79d57c3683e40c10d47f2c4201d2bd68805473ed721dc63328be92a08b6b7d677e11100c945ea990891681179091557ff44f2ae471fc01de4f4a4d10a40094098409910f4acf8941f39c2f392e2618548054891690911790557f24be3e24e3130f9d1e00f077e96d9cc5676c1d8e9aa9976c7844b7898f39c663805473b6dde9a985c77d7bc62b171582819d995a51c3bf90891681179091557ffd4e23127918d51ef872f3f5b5bc7fad7b05ac14deb2204f78119916d060221a8054891690911790557f6fdbd0a903e9b94e81953c8ccc88169a2eed5460b4f855fb5def9380e11183df805473d469cd19cefa18e4eb9112e57a47e09398d9876690891681179091557f5440da9fe83965538cd0339456398134cf19afd8672df363fdfe83ab286028648054891690911790557f41f0a61b0eb9ba8906116fad017cff80441b35b7977d20ff53352e6fc3afb99b805473682ae71bae517bcc4179a1d66223fcdffb18658190891681179091557fb3e899d370c4e87160ce3a0f23482b7a376dfa39f8e152e39e4e2cd2ad3a6af080548916821790557fbe3a31af3f7853f82a669c7fd04e2926322f5a5386e7b8e87b0fced368e721a58054891690911790557f036260766d19cdb7473475adff8c0ee7335fffce9d674ae027db2f9d317847dd805473e495c36e756ba677d5ae8fb868f8c8a41cc5161190891681179091557f63f622fedf684dcdde38295817c5bd9d2b9cc93f64808404cee0ecddb6b9164980548916821790557f20a41b3039220d6d38704c1c1bb58cdda625f602f6979b193f40b76396c3dc2780548916821790557f853f82b5cc5cbfc094b94e0f5acbdccafa7961bd2e188f907c0e3ba8e8ab3e7a80548916821790557f6993f4a5adbc40c85e73c3d88ab0b1ee9f1219b3ccd67e514a389b1360c8e4108054891690911790557fc17fc4f0772ee6d312c8ca28fa06f515a81e82046f8fe6e1e16ca7a1c55ec28c8054732eea4706f85b9a2d5dd9e9ff007f27c07443eab190891681179091557f1ae38ed916b24f2aacb904a409b0be859ccca1ec94a909b6d0f753a2d430d4618054891690911790557f5a9311a3758cfc4f449586994b1da8945cacdc9764b9098624977193ffb8ab2e805473d77d92f3c97b5ce6430560bd1ab298e82ed4e05890891681179091557f552ec38fdbc372e16d4a3f2f0638b0cfbfd92889728d236701db54846df8a45080548916821790557f9b39aad4c2e595034ba89052adab50d1fe07ee3aa0bdf2b29c1e387e08f638d28054891690911790557f36794a073046e06b3071542c4c098aae2098bf7f911337aefb1a1447e2d94ab08054732c1a74debc7f797972edbda51554be887594008f90891681179091557fc13ca5604e81d200d741250a27951b1bf75b0aa39d0587b37c09c3fddabe04d88054891690911790557fa8330c7e3803c705a23d143e162c54100a88586a1ffa9a2058ebca32cc5399d3805473215867219e590352f50f5c3b8ce258723613849490891681179091557f1aecb0b522517137a0ce9b916b66c6aaf053fad069fc38b7f2f184897b2789ad8054891690911790557f758df724155984911d89acdbe677f0fda994c2e4cd28fc8b6a33ac9a310ca8a5805473e57b245a1b403a56669f3f30b8db4ea94051e25d9089161790557f43b04f8309396fd713f589d87edb922d3c2cc95327b2644723f83849b1e95000805473667b2a94dd4053508c7440ea1f902694336b981490891681179091557ff2f971bcdc757c35a9046ef95ad38a1270ae910bba1de40f2b9d9364b2998dee80548916821790557fd79237f39808e908ddd41746ac83b33650a70b057ea80ef834ce5b59a97b00f780548916821790557ffa496e0c7c6a5a88b0d32d505806e8175e672c960f3b3dd4641ad44b1f27a7cb80548916821790557fcbbeaa316b68999f94e7d734cf9ffa20acd71ecab575d29a2f8da0fead1c96a780548916821790557f9a47e4f1e5d663d34afa5272fb238d23be80464089945f7de6eecf7f36d4ac9280547381083379a8c41501b39986d5c74428dd618eb440908a1681179091557fa5f1185219ffe25f3cf109da8e25a4c1f9bb26ac397bba5da71973a6ec25e3f280548a16821790557fa17113e211b23741f7ebd1a526b56f998e262a47aae9ca19a3e45cae680710ac80548a16821790557ff06931e73e757e676ec08766ae6118655880247c314b362b035cfce53c78887380548a16821790557f29b0292fa46301e8d2aa522692b52b1f97d33ec2cd6743a1369c740ba70f097080548a1690911790557f59fea891284acfbf2f18f8393f77732e10da4d03ed1484ebf3b80ac018675839805473369dcd945f2ec96efc489d9541b47cca9594e9fc908a1681179091557ff7a3418f8d49eea29541a84e0c8a50013c7ed5b1358d1c85f3f816b0368e35ee80548a1690911790557f42a3dfc568b3a6350656ca1d5a0efb7a445eae57ad1bf22ffe3f7d035c595ee88054733c132e2d16f7452bdfaefae6c37b81e0ff83e749908a1681179091557f07fdcd606e3a229252e05d3fd4597416557062588affb36712040e7cba68e3af80548a16821790557fc40fb688dbbf47f03a9d01badd2beeaca60d6e64c500d0747d8340803cdb397f80548a1690911790557f5138921c24653849f1ca4470cfce8d5557c58586d41fbb72560e05a5df04e415805489169094179093557fd28b97d6bf9d8d08a3bc6b109b3508da65ddde799a19e9caf4a9a0de23e2474080547397874cf634457f07e7f1888c5c47d70dfaa542cb90891681179091557fc4b6ac48fc49e1b4f1bc20af9db7688e9b02cbd68f51f34f6adc8d0aeb76d5258054891690911790557f40b9ecafc87b04f44bb1079e60a66fd5b4a78bd27b1ea9dfd9f20a86670cf7d7805473b261f055621fb3d19b86cd87d499b5ad9a56111590891681179091557f376e68ea83f5061a82d128c75e0ceb122ad1b777708b70da9e86fc0f5c4ae0f28054891690911790557f5d9308e3ce9ec724a1203fdee8fb5acab36f235de93db4f545f05e7fb9577095805473ed62b641db277c9c6a2ba6d7246a1d76e483c11c90891681179091557fc39d4328818f1ff80460a5d6e46a44f51d0bde8c8579e427aa4ae5b838a2bf068054891690911790557f5ec96513bda15ecc6d6ff41929d45b00d03e449019baa230fd8e78fdbf97cf7d8054881690911790557f7117158c5b516715195e73dc28d0045e80a8d955a8721cbf6a38ce35aefe9323805473ec7da9b90713b119969a8309607197e5a860649390881681179091557f8fe1020762e8a56aac66f17d055348667d8b3ed16ba44b65f4f95b9a6fc90fb68054881690911790557fb42e63b9f74bb946d9e0d0fbd5b2f9183f37a650c0cd3c1cb8321f8768967f008054730e0bdf28a0324dd3639520cd189983f19413282590881681179091557f9c57f393962e73b36708429fb7da25f0836d92d71ea3093c3e8410f5b4aa840d80548816821790557fbdb5799555ac15619f7b2b05c2ab477902eddc22944304da57a1f0da6d402dd58054881690911790557fd16135c6c4602ba52fbf2b8855dea7b9ad26b5fa5e891ef0e51cc23c427fc7308054731e27f3175a52877cc8c4e3115b2669037381dedc90881681179091557f0c1b1cc2a7d29523830c8f064456a1194e2227f58351b37cbf6d9883b6df364480548816821790557f4d07b75f3decfb674e07dda5bca5444ff650556a4d068115d5c242dd91397b4d80548816821790557fed79b4ed66b8b1ad903ec0b79b7172e1848f76bd10b8232b8b33dd84bf01326580548816821790557f398bcf03de6b81938beabece51bed1038b21c8d543c0a596a9cdb1b484ec25e58054881690911790557fd10b6389fcfb95db1eb342e8690850d071b03d0500a34dafb02c4c42a7a1a9a38054731fc9ad1d4b2ec8d78cfda9fc35cf729b9b49e7b690881681179091557f249fb7e8c70530c9387dce7366bf57684539b3fc18f9be804944c999d17b985c8054881690911790557fb51632e6b97a8a95ec147abcf027ca2518acf8c999b9dc0e901a71a558a3fdbd8054731877e5a2b21dbc2eb73ec1b8838461e080932a9f90881681179091557f9463481d02c8813fb85d47eaa76bbb28767cf4b06ed2af075a56f993ba61aca28054881690911790557f1151cb052c42ebfb76ff808dcdb381607f3c6337e8d39981093d04744db8484a805473a219f044dc6d726f61249c7279ecfa457d6aaea290881681179091557f3c895b457acc91694d802784a311bf225d6aa623b4dfcd9da5e3d850af0517a68054881690911790557f615441d03c14b6c86dacef5a0eaa9854dc46ef672a8b2b1b21fd752a1bfd012e8054730f683e30e71ba4b5c1f610b675c8a48bb7cb153090881681179091557ff196c8b7bbcec58101bd4129f833025cf46d98c9d7aa53cafc6af5cb7926441d8054881690911790557f86c5e65117933ea534eab42a98fa560c1a161dc1421788632662ad76f71c112f8054732ee88422fbc9ed5c4689089b05154887d737d76b90881681179091557f1d5411d4c060736a1e81f36f115475cb621273414e2e4d454affb675de219cf280548816821790557f10112084d7ed7e7b29d08d27c19790667902ad1f8d19e1e16eb24cbf2a38e28a8054881690911790557f55f49970325f7e1e1a812df8e56a536bdea4d1dd3573c782e9d0dc39c9350428805473c294e0a06076ebb0ee3c4831e4a3c1c31a6a248490881681179091557f24aa7943bfba57a0b8dec9eaaa9601c08e15570e99519e4a2bb223d010e6814b80548816821790557f75537b6e3b0ecf5ecd34e5c19e1ff2aae77dc311bc7efe0bf6bf0d0ceb7abb8d80548816821790557fd1196a711db61d263169712ed07d5ac2b9984ba2ea3c8dbaf097eccf09ef77ba80548816821790557fdd8a4587c9dda5be1a5f0a80b88e84a6084f11bcf1c420b82fceda38b0ddec908054881690911790557f881add7910788f4816411f2fbe85467405e622ec5d46ac2afe0033d18bd21dd5805473b1d610fb451b5cdee4eadca4538816122ad40e1d90881681179091557ffef06704bfe2fcb8277149b43cad16a270bae4eff0187b5d053aaee13dfb115a8054881690911790557f584aeb4163bc8148d59400a95afa344de1f1f2ae0322e60c5092919db8feca728054734b9fc228c687f8ae3c7889579c9723b65882ebd99088161790557f6989b6aa746559f94e7641721e44d0990dc53c969a248e5b8a0b42500e01d5e3805473635123f0a1e192b03f69b3d082e79c969a5ee9b090881681179091557f954c5524030357d288bf45307f0d37211e03cdbe39709f86cd3c881cdf4db32580548816821790557fa1045fac8c934dfe0646d640087b428eaaaa8202238cf726b8966b0cc66683a580548816821790557f467ab0f4d47b25816b22225a7a13c6724350d8a6e4c4d3d114b57a1c893077e080548816821790557faa62bcfe935efb1f10737cc5812560b94c25bf433fdab981d6ed1d8dcd2d577b8054881690911790557f8aa3afbd2539a87fa5bac4282e5f6bdec12eb5074ad23389eda0062d6933909f805473eff626b4bebbd3f26cba77b47e9ae6c9326cfebb90881681179091557f4a68a3d26855130ac22999e536d3de851ecf4cb20bf59eb36bebff49ac50ea5180548816821790557fe1eeccc2a487d3ef9871e9ac3279d93b14c02fa5792cf7d58269e9bff73a22ca80548816821790557fcbad507d3eec6df925dfe9ae04cb30a340b710a1c8277beec978e8f19f59926d80548816821790557fa8c5a7d81c956f32a35b5a11b87800fae23a59a1a622a5148e4d30da76efab188054881690911790557fe2d938acde18bf0a9a3a1fdd9057b7641d4d3f2d724a5eb96b1a68e8d4fc1e238054871690911790557f5f5aaafb18fecc9e8d8c711b45cb516eb704623f16dbf4a4503b0fc91d85deaf8054736cb603c1967a32bb7b0726ecbcbb8c3a16b1c29990871681179091557f1d010e5733f713cc6394510b035dc98a9f48de60b5211ed9adf65dfbfba70af480548716821790557fbe0baba9d4b86266b17fad51a9af3d6246870170ecbdb5406c5223706646affc80548716821790557fc53c500643f68039f3ed599820193d9b91521054fc22e1c98d7cafa77b2ebdf880548716821790557f020aeaf0c00d7e9a0498cb7a04a6b932e0d5321c3c79ba38a77f5ca8150264c08054871690911790557fd5e2cc2d9e5bd44dea6b48368b39cabe0d32011a8065885a793e5fe49af6f6ff8054732bea720a5fe5e7738d775e8bfd3a37fa072cd46c90871681179091557fe19908f12dfe93a713929710f6b9e4aa21ad7f13d50ac12206892f2db7a9385d80548716821790557f056bdda5fd2845de0339f3dd6c89245e5d370e8e4b97dee390a8a528bb0a5e0c8054871690911790557fceb992259bf9635356d9d2c40bf9ed78a77c6383c6091818e77b2019cd345f36805473e4b52ece9903d8a1995dd4ebf1d16d1a5d51d58d90871681179091557fa6355fba2ab605cdbf7b4d26b64e2a3175fc8496306b70a2d3b7157f48e2813b80548716821790557f6099c3a7cc82d5380dae9555da2079f71a0c9233fae44d59ea93ed1cdbde590380548716821790557f9debd989b30bc40af90dd8cb7058bcc9d5f67d8194f4ee148540a9fdaf867e4880548716821790557f2a7d1a212ba7854b96f76c041f16183dd6e49cca15ed1df6ab6154610c96083c8054871690911790557f6687d409b7e60fe351a440a296c721b499e80ab625969d58c94260b0744f2372805473c564d44045a70646beef777469e7aa4e4b6e692a90871681179091557fb7e38639f2c59eaf4a851cb472c3fb2dd3bc9303e8d2d78f9ee6c3268af639598054871690911790557f685fb94ec4c73ed1efa952e0eb9ba205da94530df9bbde757612f9cb1fd9e9cb8054737255fe6f25ecaed72e85338c131d0daa60724ecc90871681179091557f4330588eef97ffcbf56a79a162865e60df79ad17bc5c93c2a8ec32c8faffe01c8054871690911790557fafaeabea5fdd19504f67b24c0ececa9376b7987e9cfbc8a567eb500b219d4b888054732ee963a7b3d9f14d9f748026055c15528fb87f3090871681179091557f30723662b3f0291b5764934aa61380c9f52f62c02ed39906eebebf634940efba8054871690911790557ffe373c67c6d333503437dd4296f98a3a7509e328c56fb877d8473245e2cee5f08054733908176c1802c43cf5f481f53243145acaa76bcc90871681179091557fca90f59b5cb8465d63450027600553a107a2a484cba369ea7f6f669b5be3dd358054871690911790557f11cdb4f89e095d0dc23f2c3a431e35625c01dae79e8481d92ea98fc5128921418054733f6a989786fd0fdae539f356d99944e5aa4fbae190871681179091557faec0107f868a20e0bad1a94061e9caa5999f743a28667a5e59dacb5490e339528054871690911790557f0ce71b2f5bd18f9059ff3aa99266b593938ee6227f890beab48b3ea65f2b2f728054734d140380de92396ce3fa583393257a7024a2b65390871681179091557fa285d3e740c15560a0bb9b70830ad9cf37190878dc87a8d055bbb40e6621fe4580548716821790557f054c82e449495818b5380acc0d0678eccdf7a0cda4e6c4873541186ce2a3ca0480548716821790557ff696d32c46a39b374fd845a6ba2debd0a8e53e925e39dbb834ed6649b757a36280548716821790557fbcc1099d80fb725ab6eeb2901c96c78b697c52342396c528c3470ddd8dada1f28054871690911790557f967bef6ec6a574369dbc9db6b820ec1c6bd70b1d0ac8ba269886d9e482aeacd580547364c9fb6c978f0f5dd46cb36325b56c04243bab7590871681179091557f69efff1a3994d86a9689f9161394bd239f6dbf4574b5c8e46a1aa7c2993c28fb80548716821790557fcff64b7e1b8f78296501481c17be8d15caee18f3d952f8c5139a985db042a6fb8054871690911790557f12a4dd58e4d29a19719dc2042efe828cc37425a58fb8a167649b12144f746b7d805473a01481b6fbe54be00661290f1ce49e14e3af82ef90871681179091557f3e0acce7be886693252b150ef33a29d59e131e85b419134d8ada17d93fa66a8d80548716821790557f4cfdd46a10cfb9d5a86da6503153ff722d1692cbadbc19a32b77d4ac8b9101c280548716821790557f1032f2429241d577ada297471a3b779f5d1f708a0e65fa0a48f97cbcd92ee75180548716821790557f1247b238533c7b477f5c538ae38b8da5effa9583863e4ef564a289b0fa42b9c38054871690911790557f24fb845d0b603b3ca9b1a1c2931de6b0043f4f98ee5fc00077abca5c9d2ac9cd805473fef49f32fb60ea475b8cf7193ac32c3da8a05b7e90871681179091557f26f376fe93b081b4a06504c2d6cedcef8fcdb620a3a89167733a4546f2ddcf2d8054871690911790557f7ef5004397eb627cc4e4f188a1a7bfacdef322f56521c612423a9593e31937e88054735c4668d494c6af375a20782727ec2084605ddb6490871681179091557f213bb574c8fc0fbd4eb446cd312b7c84371449caf76701ab6e9474b7a4ad242e8054871690911790557f1a1177684abeeb7343678d18170a7105ec9c7e596cb284d6b7238f12e4db8ac5805486169092179091557f431f1b36513880d92f3b704a93a9a29db09565adcf48b8b62b827ad47dc604748054737c8a576941e14934643bb22f3f5ead4771f7e3af90861681179091557f5ae4e18ab06008911c2082dc01a52166572bf5fe57a7a29775111126ac954aa58054861690911790557fda47a241e093f00df7ce27b5e17a5001cba5c50e9717bbf59b9077fccc384e28805473a7bd22bcfc1eae5f9944978d81ff71bd5f5eaf4290861681179091557f3d72efbb2fb97024165e5e1bb344f5494da2e50e186ae7b2794c446d81c2282d8054861690911790557fb93777e494a4e636247a9090f0801793b313c21550b077dd43b4eca1e0a15a468054731105bf50be63cdad34ff7ac9425c1645e6275e1e90861681179091557fae31188cad83030e08f72bfabf6b51389b5eb3785c2444b972b97f3dbc1ef0cd8054861690911790557f80c91c99d1100e39d87f7ea6faebbf66fcd5a2b6f780fe8fa3f540aaf9bbb4aa8054730e54fd21f4eae61a9594393b237ba6de3edb93d190861681179091557f1d1cc77ffaba58790897800329b4ad821e4bbeae44a4a847da579a30fe539c3d8054861690911790557f8e2d5fb9f90aa1558a3648115673037d7bd8c3af1e840d17c8317f25bc87fdf08054732b7cd3fec35fb21efc8913e7383639adb088384b90861681179091557f0812e29e3187f7a64fb7a11d2ad42d1f0aaa3040c3314b77c4ac7d76311849ae8054861690911790557f8bfafeb76cb6706976d81e149f1148a1381821cda1deb8d3eea765fe569960e0805473a4d26fc0814a8dacef55a79166291dd0898a819490861681179091557f42345396e4ffccd74120fb6d98446e1a0b290a15c7c9db47971e506205e15c238054861690911790557fd8f74e013dffd00c76ed2b3123010bf5cc88df60d90ed8e40575efbd75b4acd080547379122374ecbad9cba0ddf0e0a5f1b676462677b490861681179091557fc9525ec1fa7626dcf951a38ad87f0595903adbd146d2c786d12fda7709f0ac3b80548616821790557fa682c98645422699a4a547ee1bcac1c0cd554065306b1b60ba94e3b384a4ece980548616821790557e65a41820a19fe6cf10b484dad006cafa99d44f67c1ce9b61dbb9ab3ad1658780548616821790557f78afccc65ff4e410a62f5443673699a800d371b9777089ad53d3265d792166848054861690911790557f9923a25dc00ffb55e3566b51a53101944ffd6755ee3e07937d8459727e8c9821805473aeabe7513bb61325e22c0d7fd7b2804b3e2c9c2890861681179091557f562148d0dd4f56a459ce3d25a227fce77ec33ea661736574e8cb5117b12d496980548616821790557ffa64b5f3d6671ee0980bc5761f0741dd0787ba26e7021d2e30b1b08ed81178f88054861690911790557fb15a6104aecbd9d7d9fa615a01a58c65e21e1d268f6ba79988cafcc70e3aada2805473dcc15c04963095154aba0131462c5f4b5284b7c090861681179091557fa1806fd5081e1d5491aa8be962c313f1db6f0991cc7aab7d4ebd3946f988e40680548616821790557f4d46c38d39271018cf8f79dbbba1c02b8866ed3d8f88139d712ba009f1d969998054861690911790557f20d41d1a51e18e8126a036aa4e8d218dcbf46774fdde6fc6ac23a74cde2ca3188054731215731acf43e83e5dabe1fe342ed79160e8536690861681179091557fc09073c41c71cca5c00809e40b6afecf099abb917d3d21b97b4707058c23408a8054861690911790557f7f90fa6e687b86a089800882867936ef30055bd13027a0ea238694322fcc5b20805473f2e81438e26fce88cc8debf8c178b80a506ce43590861681179091557ffa85eed3852d8c2d03a5bb7a4dc73735ebffec95a7d5ff0d565fa83bf82cd16a80548616821790557fcc4e670b878f632ca7fef2ed7bd36a806e8130778dbb25d49d2efb300d4bc52380548616821790557faf4a9129f0bc5f91a66cbacc339496b7d1dc0496df310f68dfc4acec5a145d9380547328e58a14a39c6bd994e4864119a0348f233992c090871681179091557fff842230989f970b5f317b3598e2868dfc6e1bc70472a2e69470aa6da7b9a1f980548716821790557f48519fd5c527f40f17a946b56087748ba6f1948ca1162bef2781300ece34a19a8054871690911790557fb01a81c05f43df16f5cde738c232d4b416ce1b45bafd1f73ef9bbacfd2a2984380548616871790557fd31936b7af22d07531eb0fe62339fd55b70df04f64b76db9d8bd1292b9df529380548616871790557f22254aa7593ebc1604b7f570f026e92029a1da237c148af1f54e9201ef789bd7805486169094179093557ffbfa9f8af5f3c4c2172418c43db85a924583aeaa9dca6d1872c0f896a2b3ae1a805485169092179091557f77449c48a8fd3f0c651e15a0d731e4c3477f7df7678f8ba14215f9884ca854e3805473405eb35a58a0c88d9e193d4cb7e61c4adf2fbcdf90851681179091557f5e3d60621a96864a6175146aed669e062874c95b42a72188686715588103df3f8054851690911790557f6a2c1a41fdffc0b3d4b4da083ccbbd7f8314a49aa9016736f379cecbf1af630d805473d39ebda59a76eff9df72c37f8260e53e073bd7bc90851681179091557f0aee77d855dfea9f85a90cd7823a3a650b471bab9b0cf752c965523a3c23d3b28054851690911790557f57f5e35ad4c0dd6542fd93fc0e521ff945d8d6f35d9270f039efbcd61baee707805473c93e7fec09e54ecbbae66754159989e44fb12ad290851681179091557fd5c8189d9ad8f9862345f746d00819f0edcd86f4dccd7d5e721086aa706b2ba28054851690911790557f69cb5cee0322c429e0d42618d49ccc030d964d59ba5fc3bea4e11e47068d57b880547353851a72902197865efa99edc0f73d89990863a990851681179091557f223399f4fe902963d5102b9572583b77a5c603fd8a0b6d8ebeb9f9d16c5233e480548516821790557f0a61bf806aa99790903451962cb24469f1857a7a62bb8914c0b22315ba4b5d6680548516821790557f3ec3aa09d6311547f4766f0f01fb3a0fda911394fac4352d069a15a490f5fe3980548516821790557f7369a68eacfa02aafe803224c58bf202a001ee6aaf9cdf44994e17a0cb2240e08054851690911790557f06a051277cf0764fd4dfa53fef94ff799828b21a0110cf21bbb873daccc85350805473a14b8d5e0687e63f9991e85dc17287f17d85873190851681179091557f316da27d8057ec298fbea43ed88a9af4e4cc747a72c830c540e4c0fe5c0d28b98054851690911790557ff5b9cfbed60fc26f5492af4b6ebead917c6e62d9d63f3456b320807b76ad7735805484169092179091557fbace6f94c6edbea96e52e915fd21c04015d17a17a3c614b1b951292a4ca15e13805473828cdcdc2a006e5ebca06eed673bfa8df897852d90841681179091557f33b43d0a0ada0185bd83bbffd71bee78f8bab389a52c2cafad95eb3a60f4f48980548416821790557fb313e13f024c0694d5bcc2c2ee616b6856c4c0067d0a80b60b5bd93f3513e6ce80548416821790557f7e2563e909933ece5f974b91aae74931341a29003e46cf62fc00a73022f450ce80548416821790557fdb9f6e25389e98f1d815a8a15a40b0f65cc7e890ad47383eb07a49e76060668a8054841690911790557fdbdc9cf7e35fa8c28d9cea64360c8358ed9a787501f931cf52f5f61aaf39717d8054733723ddec18a8f59cfc2bed4aede5e5bebdf2171290841681179091557f0ecd79df815967b30788b35bebb1ebe8edab29fd2875ca30d602b89af588985d8054841690911790557f13d427987a78b1e1318d1a85c812710ca6950a1ef3c50b13cdd4347c3f82b44d8054734a90601b49605b3998a5339833763931d9bd491890841681179091557fc2bbece61d7b3cfbffc0210079479336f93d5cfd6e105ab23e24630bb2e091858054841690911790557f5c299858e1e7720269ca763d4765d1757e7c979875a3e051bc961909250f356d8054737358b3dd144332377c14d8a47844e05a1b6f50ac90841681179091557f195dde155e099722164a69448eb347a6d50ca87c7c02adc40d69bad70dd0b75280548416821790557f345adb5a655034e6a0ae40eca66ed9e8ac636118d1de2d4c6922298f2b18daf380548416821790557fe8c1340db2eb8652969c75d9cc6d92716aa2d8ccde296e6f93cd965d38464e4480548416821790557ff95a563cf47326dee76b2594679c9ea7920e0bc55226c38dbb16b00aa15a8c9b8054841690911790557f6c25ae536bf7d6eba5967f28e0987c69f60e87725cc2926684b639cf4595892c805473df3759cc2277adcdb0a97b8ac1469a6eddbc6a8d90841681179091557f43aef261ca8fb8dedc1e6d50e848d383f60a8ece87e19cfc35905008ab09a7ba80548416821790557f577be003fb1c1b7f8d54282f9247ec867e353bbaa6e95190d419fe2b3e729c318054841690911790557f959609e43a9e105cdc7481eccc5d92c842926ac4fdaadfb6b854c4211fdf1a2d805473e29fb0952a8fa002b353e255dd7ee4552708424090841681179091557fe00159e906d9224df38a699833d7fc9ea399c6b81f9f74c0eba86d7f2b2a51678054841690911790557ffd2d5771a7a0f6147d11ae09af5abd459d61e39f747dca07873dec23f6d4997c805473087e269f123f479ae3cf441657a8739236d36aee90841681179091557fad1b3d809ad8b24a9668bf3c43ddc0149eb241cb20491cd1ec6521ffb2455c898054841690911790557f250818527ecf915fbc954a98078173aeb6aa9b3ae99467ba945901b9363934aa80547360f444a38d8792eed42e6e091e64216f93ceeeb890841681179091557f83f964de5d106123e9dc2eaa8ff2471664c4f9b1225650b232ea8b6690687c3f8054841690911790557f2bba385da97adb9578bc4c4a39393b917f3b1f9b9249ad8463f8292290da9764805473386c2f5aab7392f86e5af3de097673b7bfc4ae6490841681179091557fb05e33284c7814771dc40b0aaf79cd8154f0707b9956380e7af6d5c300cf637780548416821790557f83f82b07e9313ea86e02b806529f2391ba32c7679a574f475a6b4252cd83422480548416821790557fc25fd33d4efc7c34d63abab2345b13c0af459a24b305b53bfece419db80afd6d80548416821790557f14cadb22ccd4efb1ffcb56220ab4a3057eea0c4d9def21870288ed1da2b14fa68054841690911790557f4f2e76487664fba6ca1811578990d2dee0c984d9d04b8efa67e0f31f37f8877880547362182a2ca7879e2440ca3f5c5c5e1ebdc4fc7c1790841681179091557fadba4b0b3d0b9c49dace3bb1f87cc9fd2dc6f78d61567689d32be4feafded5e88054841690911790557f9bffc7185a96413368c489b35e919ca2e2b46fd2cf7820e74fe30ac967529b008054738bf52d54578d06724a989906d47c7b021612e50290841681179091557f26a57a0a481f1b48802a0d0296176e0fedec80c092d75bfd166fed075dc6c5308054841690911790557f29f35a7cb1fd412a49fc9f13df9d479e9127a81946333fe6bf36c5caebcafd888054738eac156f7df9245f360ae39c47879c291931740290841681179091557feea13f79ea50e37ebf94aeb21d9984487e49c9edfcaa86fa5a01e9a3a616c46d8054841690911790557f976c9e67062917b1e4ddeb764ea6eb6bb1232cf21141896626c7df1d6d5ff22380547338c05b9b18f8b512cfdce9bcfd0e57030344f60290841681179091557f6cb04388f9f3927234d82ae10408f0775c3850154c388d9022f09b43da0521a48054841690911790557fb4178acc96fa862b0f48643583191a6745d120f7f872c321e34af8b1b174d8e7805473c15f55d4381473a51830196d0307c2987e9a39d990841681179091557f6e9891fff98c54a9dcdcdec27374c59920c5cb33d81c61cd5bf6c9bd698c1ed180548416821790557f1801fa97ccba570c88cf6bf6e021213296c0827302c105c439a6b09e1433f4b48054841690911790557f3696f62264c4a69cb027c935dc26c5a5ec08af438c8396148538e02a7a75a22e8054738951a87adf50b555034b47d103875a1613b003b690841681179091557febee356b0ac4a085eff8d9f4ee35274f881f2cc382184535eab64b1ab1cdc2aa8054841690911790557f57a78462a2594debaa89a6e5add6cfd29f96605b1f88f86400e2e67512d5964a8054734cb18005a1586f3a743b59bcac574a01b73b0a1890841681179091557f49a5885a350910d8cf696d3029d168cbf7f45629acb2ca670894878590048e188054841690911790557f7de521fc5adbf6e1c991bf2939a42051b9523e65d187b6a04eb7eb5266c72e768054738af0b9a9b751e086122bc340188bd9d99b8c7ec190841681179091557f527f1d66df49a71de66f20e5ce86e27ae6ff8097fefd2af0e5f933fb3ca311ee80548416821790557fb6662f5f0498a1da8fcd87f93860e8383e9d769730f056098bbede5f6d21a32780548416821790557f3c05e06fb0670a6537f2bc2142a6b50773fa82fc21f644d8d50ce6ed49f5180980548416821790557f4e830b5e27e14fc21b3442ddd842a596585f6cdd813b93fd03b8a88350ed20a380548416821790557fa31b0a943da556215be36e78549eaef47ccf676589df2e264173d21f7b57d35180548416821790557fa11ef6d5d75fbf8d77411e2ab4b0c7b59044f43670a0751fdb01843bf7cf7cb880548416821790557f67735020760e338d150354f411b91f89864176c1c31fec4758f78955404b68f780548416821790557fad94e044830432a31d5aea8c5860adbca562d1b6ee3ad3df2df81e8c56ab945f80548416821790557ff8fdf0f3ad0f8a0bb3b15c200798e628c8156b903c6590e39f560e407c399dd48054841690911790557fd18cd028c9ea5069b8d8d79dd6c77b8f2fdbb9d4ecf88302d0bbba8fdd7045a1805473eb77045939e3fafb19eca0389f343fb19a052dfe90841681179091557f9a6aa17a740bff9dc614558f0593662acdf021130fd59c6780adfefc52402fba8054841690911790557f911c1d9ee930a79b94f7075a52b9ae5267c0ebd98adf633d2e5a1832fcff31ac8054732a17068bc37705fa1710dc8bfd1ee49bc0b432b090841681179091557f2df701d75a890f6ea8ff977289fd125c0a463b44815493bd248a9dd4ce1f73ce80548416821790557f6d56e727194065c166eb2b802c7cd83b616de997b65a20efa42817ea3f77c7f280548416821790557faae1aa247f1db8952eb83dcd1218c5bcfab8e263de5c041b3c28a2dd4135b20680548416821790557f80b11b69eed3547e214e0bf3567b01f11cf65fb3bf3fa8a4c2d52bb442962dc18054841690911790557feddf30f9626a46508ec10b245aca18e0df8d9e1772027a2101aa7a451d464899805473554ddfabab2524a229070e01e9faad627e4ac51390841681179091557f8f1647f45f4bf115ba68740bd80b76f647d6206e8de497396f0b17883429de1580548416821790557f13cb0cb2e9671146e2a6164c4afc031ef3b1685f9ada23f50fc6507d2590af4980548416821790557f91f6ada8476071b4435705d8e04907da2e94e69d4beb3aed1b912ce52f7ca59f80548416821790557fec64444a1f37ff114f2733b15cabe1d705d5460c44a7c9846e9cf657b5f3d6ce8054841690911790557fa792e8beaaaf2250a56a5dd427e5be5e5f9a589afb0b11553f4059a04350b016805473bdf53fe485928d2f269cb344864d539c5862aeab90841681179091557fbc502d4eaa2306ca411103773857a419efd07d6b9a99ed4f0036250fdc7395348054841690911790557f9a94f6ec5680a0398a54d180a13c7404ecbccf58d72a6fea93a033de92f89c3780547303ccea443bf78e52bb01c737a00a793cdb7e53d890841681179091557f198788042f9559f3ec1231aafa5dea777cb27f613096dde4bd0757a8a8bca31d8054841690911790557fcebd3f04a6dae91cd9f39a153f64189fcff4ef8cb50b0710e6e33c5a4f9bad3a805473f6d4a41579bf6069a369ea56a72c29fb7d71066490841681179091557f5f4b86d5048402c324eada3afb08ce4b1e5f744e54061ff97fdc3053ba8e3ca78054841690911790557f4a8dbe517ca4b749dc60258fb498fcc8247321bf688ab9e2e7527eb604384b368054739309f2ed55de312fdf51368593db75de3936917390841681179091557f747f25ab2bab1f8b963df9964642e7c25042ca37bbc39a373c332b668224728c8054841690911790557f3e2401909805f475e211fa266f8e33ce36a8afbf47f630e43a67127af8b1885c805473e4324e43ae3e8a611e927df10795d3a20152ae4a90841681179091557fd923b1fce718ed62edd5008376e98efc5c2547412d851cd18fd99145ce0b79508054841690911790557f4c0011818c5ef8e643fb5ccf314567cf947b96f04612060c4842b57ee5364a46805473c992c764a5dd14dd5bd6f662a14377e1cf7e31df90841681179091557f946865ed84c7d02dc180bf51607cdcdaf5858dbd1450b0430d62db65aabd147f80548416821790557f9796831e9c371ba81564266fadcee3e650b74c1cf046194a82dc3c769c6adade80548416821790557f70b6b21c2505d4194a050f50f4e80a3c0056f780953769490a9e1ba110afd90980548416821790557ff64198177c11c1680f771989fee1f5181a826552838a35d6f83a60873c4eef438054841690911790557facb84d3f00dae8dad68e92e188e888e7bf2a322aabb11fb40423d157ee3a7ca280547301c9a2bbb109a24e86535bb41007cd15a0177c1190841681179091557f5cb5a47b12dc6666096992bc028a9a3401880a5217376b38ba51647f1baeabe680548416821790557f9646b019f5c9f6f7845e85b7dbf6f3b671c20181453b1ec688e3761e9b4dcade80548416821790557fe2abc38c41357d58c0c250492a4c1abb41d75a672a442a0a542a158a729128c4805473bcd8f6a884efde5da425a3dd5032b3681e3ec0d890851681179091557f296be936ce259fcdd4cb019c4ebcc9410a2ebf6bc26a416c70b50bd05a52def88054851690911790557f8ba6ed36c436135161b35d92640692d1c3fba67eb7ff8c2ae959ddfbb38a1dfa805473208eff61de4d585bf1983fdaa5ee9e6c0a92d93890851681179091557f34fc6997f94c78654d261b38438eeacfe50fe3c0282d7278a3fd3b84032939f38054851690911790557fd0b72983921e5710cade1ab31a48b7987ef7f07ec8c95b73af59ee65032e859a805473dd4127c80f8e59b2a8a9a64dc9d62dd7caa5c33990851681179091557f4df9101db66cd4321defb6e45b9a146899921931335766dd2e888a38f9989e1780548516821790557fd3105d4794aff913a9e63c13e83b064c218e9c7d962a26d4f5c5f0cac3e71df08054851690911790557f21d6803d946fde6ef9365f8a5bec50b8b54ff30834cd69535cab64ce814784fa8054738869583e848b60f934c84ab6bc157f9e02a65c4a90851681179091557f6b9416291a424aa356239e05c3363317634d4f4637442ba9ff22ab89155ec25b8054851690911790557fea3fb3286d7da723e95c77804300c041a09eda30dbd17cf93174008ea139f5108054724196e84c7320ebb2e90e8dc4e0a766d3aac8db90851681179091557f55fc619a6847b9e8490209d17f31b36b9bd7691e5e174e91628f6208aa23cedc8054851690911790557f44a216c2ffecef09bf971026362d54cf1b2f5cb4ba87051d8d991c932dee2045805473a27e6a2e557587e9ca321351ac6fa09892ec971e90851681179091557feb55ab743ebf7b734d4899d9bd83a86a722739a2d37a2ebc48ec70c3afda72f180548516821790557fab4a31dcc23697f14c018b6c96af569be1515efb37b9622f117955a4def0d9978054851690911790557fdb7bb48ef12a3282b5242aac1691451ee7f91190a47cc577f34d16d1f901898080548416821790557f3e904e32fd516dd57463955e16571748f2337f64916e251af2b1ff8a408280db8054841690911790557f8e9b96d7bebd5eb5b2bae8aa0f9aac131d7c863c8aa4718373de72938370bf3c80547387689c4e28200de1f0313a98080b4428490f72859084161790557fa235f91836b9e59a3e9ec547149505e142f4d038edd2359f8cf5b5616cf4f42c805473ede6d8113cf88bba583a905241abdf23089b312d90841681179091557fb65b255928594610a7381204952742fb2039c1fb1a84c4bff84bb29e041b23e48054841690911790557f0cf970625ea0beec261967081018216dad8023ad8605f71ee25ef412a4fb0bad805473d9fcbf56ad6793e10181c28b6e418208656f21c29084161790557f0f0b2ed10bdd3ce8fba710efb24e0da8d71d9d0c8baf9613bd6c8e343e4e2c8080547359dc8ee69a7e57b42d25cd13c0cd8d6665aa70b290841681179091557f52bed7b4e431526a698ecbbd28cfa85a76ac08440dba1ca9a7181aaa040b6a3a80548416821790557fa0ce7f6008ab5bf79d0064b9dde5476bb830a09e0e7eb33e1d30cbe19c67fbca80548416821790557f76095e50566e7d5532720df0f21aa931f28cea85cf244dbe0bb63b58c0d039ef80548416821790557f9e2f22ed683dce8ea4d1a7a0ea0b1ff5e9b8492e5b2c52054e79df7cbdf8ae9a80548416821790557f07d7b52b509a10e56f93d79eeef1e13dccf99163113bb24b650fa19546098ffe80548416821790557f426533965075cc7defd5caf1df5a6cf104e25a48bd9465cd1aa3ac5d89c8b2d580548416821790557fe808813d4cd7c4f336caea3c537017ef1325dc8043be487888aa5c471b649e0980548416821790557fa9e462fdc1ac5d7f51429e5d218675a1162832086d16611ed247e30ad603a79480548416821790557ff7ccf1e800dacb41c5558cbe724467e42c710464f0a20f87d766502b3ad5a9fc8054841690911790557fd9106f81cba0b1613061d201f3a4d620addc1b0a0bc8ec49e4d6e23ae7a1f5ab80548316841790557ffb31d4005ab27879d01813a069f4a5105b174a6bcd4997dad6ee289b08d74c6e80548316841790557f79cbae9c538406d5ea4bcefc397de1831d996c34a41f144dc2665a5e62421196805483169093179092557f4ff1441c3853df9a10d2659af267a3ded1078262a6b6d95ace80bcded8b1691680548216831790557f2af4f8f05325e47826c5833fdbf6c5a0806443facfb388065f5f3a82dadbcc6b80548216831790557f9d563cbb53cd2b7e93c1bdbe571e5ace25e0ffd9112769e50cbd3d12c2dadb2a80548216831790557fbfc4a172ce2c569e0e95b5d98eb1596f56425b35311d39162be15600bd34ab3680548216831790557fc64ebd56ffad552a2670ff2b9efb2e34603ff157cb45d8eb374a6d2cc11a0346805482169092179091557ff5f4358a09dbd3322abc69c812ae575369876220e84faf8b50b749f18ef62dc3805473298a8ff8128d8427781b44f7e64657548768e3d490831681179091557fa1e5e4d1b8d66d48a2d0097b03d009a4826928845f38b973aa13ee0473da1f6f80548316821790557fb69e1c6c591ae58828a93f3f73384970b0b06317e25e62f7fc4b658b35ca9d9880548316821790557f9661f0629ead24dc6b3147d2e287990da5328899cec47e667f07e5c416f56a3780548316821790557f43923bfd80e430dc42a4b5c26a6ec90c6e5461fc3220fbde86642c79922a0b718054831690911790557f788bf3d6c2f82fb7418799be67b5d26abc0c1e1dc7a21b82dad6fe1b6ace7822805473944266ac7c1bce8b0bf307a060d42a1b9baa6ca990831681179091557f4fde5e6961042e7f6dce2dd886951e39167a01434bce1e7093a964ddbf79640780548316821790557fd0d1249f82cc908bcc91729fa52eb36b00e6e889192aaf25cae48eea42b2727780548316821790557f80e678366e0fc7a07b7b019fd00402f85550155c018bce10777c6e08f1a19e748054831690911790557f51eec4275238feebf7bd18c298968b90304b91d339e97ee1d398bc23979dde9c8054736dfaea023567df25e4b1f0e05ef5443ac5c26ed990831681179091557fcbe8f4626994cff95b35292f7c3d46e96e1aa56592283322b91d5eedda4545b680548316821790557f75b10bb88d02082fceeaa4dbccde294db22167f982d1038f73173aa1fcf9a97580548316821790557f3ff7715c5a0cc3991e70f724c6f62ee88473979d564999d0c06968cd3be2d54780548316821790557f3d96d75cdfbf686e9ade317ae006b77478e78a657eaa636ac92c8999487bc781805483168217905561187860009081527f41a61e6d605dc631a2e19793c84912bdd378c77af05b07881aed09d136d4fe3480548416909217909155600f879055601196909655601086905560168054601780549093166001600160a01b039485161790925563ffffff01600160c01b0319909116640100000000939092169290920260ff19161760011763ffffff0019166301000100179055601491909155601255601381905560155567011c37937e08000060195566d529ae9e860000601a5562004ea1565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462004d5a9062004e64565b90600052602060002090601f01602090048101928262004d7e576000855562004dc9565b82601f1062004d9957805160ff191683800117855562004dc9565b8280016001018555821562004dc9579182015b8281111562004dc957825182559160200191906001019062004dac565b5062004dd792915062004ddb565b5090565b5b8082111562004dd7576000815560010162004ddc565b80516001600160a01b038116811462004e0a57600080fd5b919050565b600080600080600060a0868803121562004e2857600080fd5b85519450602086015193506040860151925062004e486060870162004df2565b915062004e586080870162004df2565b90509295509295909350565b600181811c9082168062004e7957607f821691505b6020821081141562004e9b57634e487b7160e01b600052602260045260246000fd5b50919050565b612e988062004eb16000396000f3fe6080604052600436106102935760003560e01c806364a99a8f1161015a578063aca8ffe7116100c1578063d1e9f3d51161007a578063d1e9f3d51461074e578063dc53fd9214610763578063dd0da04314610779578063e6cf59d91461078c578063e985e9c5146107a6578063f2fde38b146107ef57600080fd5b8063aca8ffe7146106ae578063b88d4fde146106ce578063bac15203146106ee578063bfa47fdc14610703578063c6a717ee14610719578063c87b56dd1461072e57600080fd5b80638da5cb5b116101135780638da5cb5b1461060e5780638da972c01461062c57806395d89b4114610642578063a162b5e914610657578063a22cb4651461066d578063aac4e9081461068d57600080fd5b806364a99a8f1461057b5780636b8a21fc1461058e5780636de9f32b146105a357806370a08231146105b9578063715018a6146105d9578063791a2519146105ee57600080fd5b806326202370116101fe5780634f5b7799116101b75780634f5b7799146104d05780634f6ccce7146104f05780635b25ed6a146105105780635c975abb1461052657806360659a92146105455780636352211e1461055b57600080fd5b8063262023701461043257806329303a4b146104525780632c4e9fc6146104655780632f745c591461047b57806342842e0e1461049b578063439766ce146104bb57600080fd5b8063095ea7b311610250578063095ea7b31461037e57806318160ddd1461039e5780632018ce16146103bd57806320b6939c146103dc57806323b872dd146103f257806324ac245d1461041257600080fd5b80630107e7661461029857806301ffc9a7146102ba578063052dd72e146102ef578063061799ec1461030457806306fdde0314610324578063081812fc14610346575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612838565b61080f565b005b3480156102c657600080fd5b506102da6102d5366004612910565b610880565b60405190151581526020015b60405180910390f35b3480156102fb57600080fd5b506102b8610891565b34801561031057600080fd5b506102b861031f36600461292d565b6108cf565b34801561033057600080fd5b50610339610968565b6040516102e691906129af565b34801561035257600080fd5b506103666103613660046129c2565b6109fa565b6040516001600160a01b0390911681526020016102e6565b34801561038a57600080fd5b506102b861039936600461292d565b610a8f565b3480156103aa57600080fd5b50600a545b6040519081526020016102e6565b3480156103c957600080fd5b506016546102da90610100900460ff1681565b3480156103e857600080fd5b506103af60125481565b3480156103fe57600080fd5b506102b861040d3660046129db565b610ba0565b34801561041e57600080fd5b506103af61042d3660046129c2565b610bd1565b34801561043e57600080fd5b506016546102da9062010000900460ff1681565b6102b861046036600461292d565b610c0b565b34801561047157600080fd5b506103af601a5481565b34801561048757600080fd5b506103af61049636600461292d565b610daa565b3480156104a757600080fd5b506102b86104b63660046129db565b610e40565b3480156104c757600080fd5b506102b8610e5b565b3480156104dc57600080fd5b506103af6104eb36600461292d565b610edc565b3480156104fc57600080fd5b506103af61050b3660046129c2565b61103b565b34801561051c57600080fd5b506103af600f5481565b34801561053257600080fd5b50600754600160a01b900460ff166102da565b34801561055157600080fd5b506103af60115481565b34801561056757600080fd5b506103666105763660046129c2565b6110ce565b6102b86105893660046129c2565b611145565b34801561059a57600080fd5b506102b86112d5565b3480156105af57600080fd5b506103af60105481565b3480156105c557600080fd5b506103af6105d4366004612a17565b61131e565b3480156105e557600080fd5b506102b86113a5565b3480156105fa57600080fd5b506103af6106093660046129c2565b6113d9565b34801561061a57600080fd5b506007546001600160a01b0316610366565b34801561063857600080fd5b506103af60145481565b34801561064e57600080fd5b5061033961140f565b34801561066357600080fd5b506103af60135481565b34801561067957600080fd5b506102b8610688366004612a32565b61141e565b34801561069957600080fd5b506016546102da906301000000900460ff1681565b3480156106ba57600080fd5b506103af6106c93660046129c2565b6114e3565b3480156106da57600080fd5b506102b86106e9366004612a6e565b61158d565b3480156106fa57600080fd5b506102b86115bf565b34801561070f57600080fd5b506103af60155481565b34801561072557600080fd5b506102b8611641565b34801561073a57600080fd5b506103396107493660046129c2565b61168c565b34801561075a57600080fd5b506102b8611697565b34801561076f57600080fd5b506103af60195481565b6102b861078736600461292d565b6116de565b34801561079857600080fd5b506016546102da9060ff1681565b3480156107b257600080fd5b506102da6107c1366004612b2e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107fb57600080fd5b506102b861080a366004612a17565b611818565b600a8211156108395760405162461bcd60e51b815260040161083090612b61565b60405180910390fd5b60005b8281101561087a576108678483838151811061085a5761085a612ba6565b6020026020010151610edc565b508061087281612bd2565b91505061083c565b50505050565b600061088b826118b3565b92915050565b6007546001600160a01b031633146108bb5760405162461bcd60e51b815260040161083090612bed565b6016805460ff19811660ff90911615179055565b6007546001600160a01b031633146108f95760405162461bcd60e51b815260040161083090612bed565b80601154101561091b5760405162461bcd60e51b815260040161083090612c22565b600a81111561093c5760405162461bcd60e51b815260040161083090612b61565b60005b8181101561096357610950836118d8565b508061095b81612bd2565b91505061093f565b505050565b60606000805461097790612c59565b80601f01602080910402602001604051908101604052809291908181526020018280546109a390612c59565b80156109f05780601f106109c5576101008083540402835291602001916109f0565b820191906000526020600020905b8154815290600101906020018083116109d357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a735760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610830565b506000908152600460205260409020546001600160a01b031690565b6000610a9a826110ce565b9050806001600160a01b0316836001600160a01b03161415610b085760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610830565b336001600160a01b0382161480610b245750610b2481336107c1565b610b965760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610830565b61096383836119d0565b610baa3382611a3e565b610bc65760405162461bcd60e51b815260040161083090612c94565b610963838383611b35565b6007546000906001600160a01b03163314610bfe5760405162461bcd60e51b815260040161083090612bed565b506014819055805b919050565b80601a54610c199190612ce5565b341015610c5e5760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b6044820152606401610830565b806011541015610c805760405162461bcd60e51b815260040161083090612c22565b60165460ff16610cde5760405162461bcd60e51b8152602060048201526024808201527f57686974656c697374206f6e65206973206e6f74206d696e74696e6720616e796044820152636d6f726560e01b6064820152608401610830565b6014546015541115610d435760405162461bcd60e51b815260206004820152602860248201527f416c6c2077686974656c69737420233120746f6b656e732068617665206265656044820152671b881b5a5b9d195960c21b6064820152608401610830565b600a811115610d645760405162461bcd60e51b815260040161083090612b61565b610d6d34611145565b60005b8181101561096357610d81836118d8565b5060158054906000610d9283612bd2565b91905055508080610da290612bd2565b915050610d70565b6000610db58361131e565b8210610e175760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610830565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6109638383836040518060200160405280600081525061158d565b6007546001600160a01b03163314610e855760405162461bcd60e51b815260040161083090612bed565b600754600160a01b900460ff1615610ed25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610830565b610eda611ce0565b565b6000610ee88284611d85565b610f345760405162461bcd60e51b815260206004820152601f60248201527f54686973206d696e74207061737320776173207573656420616c7265616479006044820152606401610830565b601654610100900460ff16610f8b5760405162461bcd60e51b815260206004820152601d60248201527f4d696e742070617373206d696e74696e672069732064697361626c65640000006044820152606401610830565b6012546013541115610ff55760405162461bcd60e51b815260206004820152602d60248201527f416c6c204d696e74205061737320746f6b656e73206861766520616c7265616460448201526c1e481899595b881b5a5b9d1959609a1b6064820152608401610830565b6000611000846118d8565b60138054919250600061101283612bd2565b90915550506000838152600c6020526040902080546001600160a01b03191690555b9392505050565b6000611046600a5490565b82106110a95760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610830565b600a82815481106110bc576110bc612ba6565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061088b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610830565b6000611152600283612d1a565b601654604051919250600091829164010000000090046001600160a01b03169084908381818185875af1925050503d80600081146111ac576040519150601f19603f3d011682016040523d82523d6000602084013e6111b1565b606091505b5060175460405192945090925060009182916001600160a01b03169086908381818185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b50915091508361126f5760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f2073656e6420457468657220746f205465616d2041646460448201526772657373204f6e6560c01b6064820152608401610830565b816112cd5760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f2073656e6420457468657220746f205465616d20416464604482015267726573732054776f60c01b6064820152608401610830565b505050505050565b6007546001600160a01b031633146112ff5760405162461bcd60e51b815260040161083090612bed565b6016805462ff0000198116620100009182900460ff1615909102179055565b60006001600160a01b0382166113895760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610830565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b031633146113cf5760405162461bcd60e51b815260040161083090612bed565b610eda6000611db7565b6007546000906001600160a01b031633146114065760405162461bcd60e51b815260040161083090612bed565b50601981905590565b60606001805461097790612c59565b6001600160a01b0382163314156114775760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610830565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546000906001600160a01b031633146115105760405162461bcd60e51b815260040161083090612bed565b6010548210156115705760405162461bcd60e51b815260206004820152602560248201527f43616e74207365742074686520636f6c6c656374696f6e2073697a652074686960448201526473206c6f7760d81b6064820152608401610830565b600f8290556010546115829083612d2e565b6011555050600f5490565b6115973383611a3e565b6115b35760405162461bcd60e51b815260040161083090612c94565b61087a84848484611e09565b6007546001600160a01b031633146115e95760405162461bcd60e51b815260040161083090612bed565b600754600160a01b900460ff166116395760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610830565b610eda611e3c565b6007546001600160a01b0316331461166b5760405162461bcd60e51b815260040161083090612bed565b6016805463ff00000019811663010000009182900460ff1615909102179055565b606061088b82611ec0565b6007546001600160a01b031633146116c15760405162461bcd60e51b815260040161083090612bed565b6016805461ff001981166101009182900460ff1615909102179055565b806019546116ec9190612ce5565b3410156117315760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b6044820152606401610830565b8060115410156117535760405162461bcd60e51b815260040161083090612c22565b60165462010000900460ff166117c75760405162461bcd60e51b815260206004820152603360248201527f5468652047656e6572616c205075626c6963204d696e74206973206e6f74206160448201527218dd1a5d9948185d081d1a19481b5bdb595b9d606a1b6064820152608401610830565b600a8111156117e85760405162461bcd60e51b815260040161083090612b61565b6117f134611145565b60005b8181101561096357611805836118d8565b508061181081612bd2565b9150506117f4565b6007546001600160a01b031633146118425760405162461bcd60e51b815260040161083090612bed565b6001600160a01b0381166118a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610830565b6118b081611db7565b50565b60006001600160e01b0319821663780e9d6360e01b148061088b575061088b82612064565b6000600160115410156118fd5760405162461bcd60e51b815260040161083090612c22565b6016546301000000900460ff1661194c5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610830565b61195a600d80546001019055565b6000611965600d5490565b905061197183826120b4565b6010819055600f54611984908290612d2e565b60118190556010546040517f1405fce6ad83aa279a144795060edcfcd25a9d69d6682193b693cf527508b42b926119c2928252602082015260400190565b60405180910390a192915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a05826110ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611ab75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610830565b6000611ac2836110ce565b9050806001600160a01b0316846001600160a01b03161480611afd5750836001600160a01b0316611af2846109fa565b6001600160a01b0316145b80611b2d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611b48826110ce565b6001600160a01b031614611bb05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610830565b6001600160a01b038216611c125760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610830565b611c1d838383612202565b611c286000826119d0565b6001600160a01b0383166000908152600360205260408120805460019290611c51908490612d2e565b90915550506001600160a01b0382166000908152600360205260408120805460019290611c7f908490612d45565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600754600160a01b900460ff1615611d2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610830565b6007805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d683390565b6040516001600160a01b03909116815260200160405180910390a1565b6000828152600c60205260408120546001600160a01b0383811691161415611daf5750600161088b565b50600061088b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611e14848484611b35565b611e208484848461227b565b61087a5760405162461bcd60e51b815260040161083090612d5d565b600754600160a01b900460ff16611e8c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610830565b6007805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611d68565b6000818152600260205260409020546060906001600160a01b0316611f415760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610830565b60008281526006602052604081208054611f5a90612c59565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8690612c59565b8015611fd35780601f10611fa857610100808354040283529160200191611fd3565b820191906000526020600020905b815481529060010190602001808311611fb657829003601f168201915b50505050509050600061201660408051808201909152601f81527f68747470733a2f2f6d6574612e77656172657361746f736869732e636f6d2f00602082015290565b9050805160001415612029575092915050565b81511561205b578082604051602001612043929190612daf565b60405160208183030381529060405292505050919050565b611b2d84612388565b60006001600160e01b031982166380ac58cd60e01b148061209557506001600160e01b03198216635b5e139f60e01b145b8061088b57506301ffc9a760e01b6001600160e01b031983161461088b565b6001600160a01b03821661210a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610830565b6000818152600260205260409020546001600160a01b03161561216f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610830565b61217b60008383612202565b6001600160a01b03821660009081526003602052604081208054600192906121a4908490612d45565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61220d838383612494565b600754600160a01b900460ff16156109635760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610830565b60006001600160a01b0384163b1561237d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122bf903390899088908890600401612dde565b602060405180830381600087803b1580156122d957600080fd5b505af1925050508015612309575060408051601f3d908101601f1916820190925261230691810190612e1b565b60015b612363573d808015612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b50805161235b5760405162461bcd60e51b815260040161083090612d5d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611b2d565b506001949350505050565b6000818152600260205260409020546060906001600160a01b03166124075760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610830565b600061244360408051808201909152601f81527f68747470733a2f2f6d6574612e77656172657361746f736869732e636f6d2f00602082015290565b905060008151116124635760405180602001604052806000815250611034565b8061246d8461254c565b60405160200161247e929190612daf565b6040516020818303038152906040529392505050565b6001600160a01b0383166124ef576124ea81600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612512565b816001600160a01b0316836001600160a01b03161461251257612512838261264a565b6001600160a01b03821661252957610963816126e7565b826001600160a01b0316826001600160a01b031614610963576109638282612796565b6060816125705750506040805180820190915260018152600360fc1b602082015290565b8160005b811561259a578061258481612bd2565b91506125939050600a83612d1a565b9150612574565b60008167ffffffffffffffff8111156125b5576125b56127f1565b6040519080825280601f01601f1916602001820160405280156125df576020820181803683370190505b5090505b8415611b2d576125f4600183612d2e565b9150612601600a86612e38565b61260c906030612d45565b60f81b81838151811061262157612621612ba6565b60200101906001600160f81b031916908160001a905350612643600a86612d1a565b94506125e3565b600060016126578461131e565b6126619190612d2e565b6000838152600960205260409020549091508082146126b4576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a546000906126f990600190612d2e565b6000838152600b6020526040812054600a805493945090928490811061272157612721612ba6565b9060005260206000200154905080600a838154811061274257612742612ba6565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061277a5761277a612e4c565b6001900381819060005260206000200160009055905550505050565b60006127a18361131e565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b80356001600160a01b0381168114610c0657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612830576128306127f1565b604052919050565b60008060006060848603121561284d57600080fd5b612856846127da565b92506020808501359250604085013567ffffffffffffffff8082111561287b57600080fd5b818701915087601f83011261288f57600080fd5b8135818111156128a1576128a16127f1565b8060051b91506128b2848301612807565b818152918301840191848101908a8411156128cc57600080fd5b938501935b838510156128ea578435825293850193908501906128d1565b8096505050505050509250925092565b6001600160e01b0319811681146118b057600080fd5b60006020828403121561292257600080fd5b8135611034816128fa565b6000806040838503121561294057600080fd5b612949836127da565b946020939093013593505050565b60005b8381101561297257818101518382015260200161295a565b8381111561087a5750506000910152565b6000815180845261299b816020860160208601612957565b601f01601f19169290920160200192915050565b6020815260006110346020830184612983565b6000602082840312156129d457600080fd5b5035919050565b6000806000606084860312156129f057600080fd5b6129f9846127da565b9250612a07602085016127da565b9150604084013590509250925092565b600060208284031215612a2957600080fd5b611034826127da565b60008060408385031215612a4557600080fd5b612a4e836127da565b915060208301358015158114612a6357600080fd5b809150509250929050565b60008060008060808587031215612a8457600080fd5b612a8d856127da565b93506020612a9c8187016127da565b935060408601359250606086013567ffffffffffffffff80821115612ac057600080fd5b818801915088601f830112612ad457600080fd5b813581811115612ae657612ae66127f1565b612af8601f8201601f19168501612807565b91508082528984828501011115612b0e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612b4157600080fd5b612b4a836127da565b9150612b58602084016127da565b90509250929050565b60208082526025908201527f43616e206e6f74206d696e742074686174206d616e7920746f6b656e73206174604082015264206f6e636560d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612be657612be6612bbc565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b600181811c90821680612c6d57607f821691505b60208210811415612c8e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000816000190483118215151615612cff57612cff612bbc565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612d2957612d29612d04565b500490565b600082821015612d4057612d40612bbc565b500390565b60008219821115612d5857612d58612bbc565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351612dc1818460208801612957565b835190830190612dd5818360208801612957565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e1190830184612983565b9695505050505050565b600060208284031215612e2d57600080fd5b8151611034816128fa565b600082612e4757612e47612d04565b500690565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203185317d02953a5481e52e7f227f498e1fdc1db4b1f4091fb5cf5747157cf40464736f6c6343000809003300000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000190000000000000000000000000805b86040e072124de4733b0ab1b1091cf602e6a0000000000000000000000004be4b37d9f75d3cc8fa50f91161998e5094fc89f

Deployed Bytecode

0x6080604052600436106102935760003560e01c806364a99a8f1161015a578063aca8ffe7116100c1578063d1e9f3d51161007a578063d1e9f3d51461074e578063dc53fd9214610763578063dd0da04314610779578063e6cf59d91461078c578063e985e9c5146107a6578063f2fde38b146107ef57600080fd5b8063aca8ffe7146106ae578063b88d4fde146106ce578063bac15203146106ee578063bfa47fdc14610703578063c6a717ee14610719578063c87b56dd1461072e57600080fd5b80638da5cb5b116101135780638da5cb5b1461060e5780638da972c01461062c57806395d89b4114610642578063a162b5e914610657578063a22cb4651461066d578063aac4e9081461068d57600080fd5b806364a99a8f1461057b5780636b8a21fc1461058e5780636de9f32b146105a357806370a08231146105b9578063715018a6146105d9578063791a2519146105ee57600080fd5b806326202370116101fe5780634f5b7799116101b75780634f5b7799146104d05780634f6ccce7146104f05780635b25ed6a146105105780635c975abb1461052657806360659a92146105455780636352211e1461055b57600080fd5b8063262023701461043257806329303a4b146104525780632c4e9fc6146104655780632f745c591461047b57806342842e0e1461049b578063439766ce146104bb57600080fd5b8063095ea7b311610250578063095ea7b31461037e57806318160ddd1461039e5780632018ce16146103bd57806320b6939c146103dc57806323b872dd146103f257806324ac245d1461041257600080fd5b80630107e7661461029857806301ffc9a7146102ba578063052dd72e146102ef578063061799ec1461030457806306fdde0314610324578063081812fc14610346575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612838565b61080f565b005b3480156102c657600080fd5b506102da6102d5366004612910565b610880565b60405190151581526020015b60405180910390f35b3480156102fb57600080fd5b506102b8610891565b34801561031057600080fd5b506102b861031f36600461292d565b6108cf565b34801561033057600080fd5b50610339610968565b6040516102e691906129af565b34801561035257600080fd5b506103666103613660046129c2565b6109fa565b6040516001600160a01b0390911681526020016102e6565b34801561038a57600080fd5b506102b861039936600461292d565b610a8f565b3480156103aa57600080fd5b50600a545b6040519081526020016102e6565b3480156103c957600080fd5b506016546102da90610100900460ff1681565b3480156103e857600080fd5b506103af60125481565b3480156103fe57600080fd5b506102b861040d3660046129db565b610ba0565b34801561041e57600080fd5b506103af61042d3660046129c2565b610bd1565b34801561043e57600080fd5b506016546102da9062010000900460ff1681565b6102b861046036600461292d565b610c0b565b34801561047157600080fd5b506103af601a5481565b34801561048757600080fd5b506103af61049636600461292d565b610daa565b3480156104a757600080fd5b506102b86104b63660046129db565b610e40565b3480156104c757600080fd5b506102b8610e5b565b3480156104dc57600080fd5b506103af6104eb36600461292d565b610edc565b3480156104fc57600080fd5b506103af61050b3660046129c2565b61103b565b34801561051c57600080fd5b506103af600f5481565b34801561053257600080fd5b50600754600160a01b900460ff166102da565b34801561055157600080fd5b506103af60115481565b34801561056757600080fd5b506103666105763660046129c2565b6110ce565b6102b86105893660046129c2565b611145565b34801561059a57600080fd5b506102b86112d5565b3480156105af57600080fd5b506103af60105481565b3480156105c557600080fd5b506103af6105d4366004612a17565b61131e565b3480156105e557600080fd5b506102b86113a5565b3480156105fa57600080fd5b506103af6106093660046129c2565b6113d9565b34801561061a57600080fd5b506007546001600160a01b0316610366565b34801561063857600080fd5b506103af60145481565b34801561064e57600080fd5b5061033961140f565b34801561066357600080fd5b506103af60135481565b34801561067957600080fd5b506102b8610688366004612a32565b61141e565b34801561069957600080fd5b506016546102da906301000000900460ff1681565b3480156106ba57600080fd5b506103af6106c93660046129c2565b6114e3565b3480156106da57600080fd5b506102b86106e9366004612a6e565b61158d565b3480156106fa57600080fd5b506102b86115bf565b34801561070f57600080fd5b506103af60155481565b34801561072557600080fd5b506102b8611641565b34801561073a57600080fd5b506103396107493660046129c2565b61168c565b34801561075a57600080fd5b506102b8611697565b34801561076f57600080fd5b506103af60195481565b6102b861078736600461292d565b6116de565b34801561079857600080fd5b506016546102da9060ff1681565b3480156107b257600080fd5b506102da6107c1366004612b2e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156107fb57600080fd5b506102b861080a366004612a17565b611818565b600a8211156108395760405162461bcd60e51b815260040161083090612b61565b60405180910390fd5b60005b8281101561087a576108678483838151811061085a5761085a612ba6565b6020026020010151610edc565b508061087281612bd2565b91505061083c565b50505050565b600061088b826118b3565b92915050565b6007546001600160a01b031633146108bb5760405162461bcd60e51b815260040161083090612bed565b6016805460ff19811660ff90911615179055565b6007546001600160a01b031633146108f95760405162461bcd60e51b815260040161083090612bed565b80601154101561091b5760405162461bcd60e51b815260040161083090612c22565b600a81111561093c5760405162461bcd60e51b815260040161083090612b61565b60005b8181101561096357610950836118d8565b508061095b81612bd2565b91505061093f565b505050565b60606000805461097790612c59565b80601f01602080910402602001604051908101604052809291908181526020018280546109a390612c59565b80156109f05780601f106109c5576101008083540402835291602001916109f0565b820191906000526020600020905b8154815290600101906020018083116109d357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a735760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610830565b506000908152600460205260409020546001600160a01b031690565b6000610a9a826110ce565b9050806001600160a01b0316836001600160a01b03161415610b085760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610830565b336001600160a01b0382161480610b245750610b2481336107c1565b610b965760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610830565b61096383836119d0565b610baa3382611a3e565b610bc65760405162461bcd60e51b815260040161083090612c94565b610963838383611b35565b6007546000906001600160a01b03163314610bfe5760405162461bcd60e51b815260040161083090612bed565b506014819055805b919050565b80601a54610c199190612ce5565b341015610c5e5760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b6044820152606401610830565b806011541015610c805760405162461bcd60e51b815260040161083090612c22565b60165460ff16610cde5760405162461bcd60e51b8152602060048201526024808201527f57686974656c697374206f6e65206973206e6f74206d696e74696e6720616e796044820152636d6f726560e01b6064820152608401610830565b6014546015541115610d435760405162461bcd60e51b815260206004820152602860248201527f416c6c2077686974656c69737420233120746f6b656e732068617665206265656044820152671b881b5a5b9d195960c21b6064820152608401610830565b600a811115610d645760405162461bcd60e51b815260040161083090612b61565b610d6d34611145565b60005b8181101561096357610d81836118d8565b5060158054906000610d9283612bd2565b91905055508080610da290612bd2565b915050610d70565b6000610db58361131e565b8210610e175760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610830565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6109638383836040518060200160405280600081525061158d565b6007546001600160a01b03163314610e855760405162461bcd60e51b815260040161083090612bed565b600754600160a01b900460ff1615610ed25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610830565b610eda611ce0565b565b6000610ee88284611d85565b610f345760405162461bcd60e51b815260206004820152601f60248201527f54686973206d696e74207061737320776173207573656420616c7265616479006044820152606401610830565b601654610100900460ff16610f8b5760405162461bcd60e51b815260206004820152601d60248201527f4d696e742070617373206d696e74696e672069732064697361626c65640000006044820152606401610830565b6012546013541115610ff55760405162461bcd60e51b815260206004820152602d60248201527f416c6c204d696e74205061737320746f6b656e73206861766520616c7265616460448201526c1e481899595b881b5a5b9d1959609a1b6064820152608401610830565b6000611000846118d8565b60138054919250600061101283612bd2565b90915550506000838152600c6020526040902080546001600160a01b03191690555b9392505050565b6000611046600a5490565b82106110a95760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610830565b600a82815481106110bc576110bc612ba6565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061088b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610830565b6000611152600283612d1a565b601654604051919250600091829164010000000090046001600160a01b03169084908381818185875af1925050503d80600081146111ac576040519150601f19603f3d011682016040523d82523d6000602084013e6111b1565b606091505b5060175460405192945090925060009182916001600160a01b03169086908381818185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b50915091508361126f5760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f2073656e6420457468657220746f205465616d2041646460448201526772657373204f6e6560c01b6064820152608401610830565b816112cd5760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f2073656e6420457468657220746f205465616d20416464604482015267726573732054776f60c01b6064820152608401610830565b505050505050565b6007546001600160a01b031633146112ff5760405162461bcd60e51b815260040161083090612bed565b6016805462ff0000198116620100009182900460ff1615909102179055565b60006001600160a01b0382166113895760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610830565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b031633146113cf5760405162461bcd60e51b815260040161083090612bed565b610eda6000611db7565b6007546000906001600160a01b031633146114065760405162461bcd60e51b815260040161083090612bed565b50601981905590565b60606001805461097790612c59565b6001600160a01b0382163314156114775760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610830565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546000906001600160a01b031633146115105760405162461bcd60e51b815260040161083090612bed565b6010548210156115705760405162461bcd60e51b815260206004820152602560248201527f43616e74207365742074686520636f6c6c656374696f6e2073697a652074686960448201526473206c6f7760d81b6064820152608401610830565b600f8290556010546115829083612d2e565b6011555050600f5490565b6115973383611a3e565b6115b35760405162461bcd60e51b815260040161083090612c94565b61087a84848484611e09565b6007546001600160a01b031633146115e95760405162461bcd60e51b815260040161083090612bed565b600754600160a01b900460ff166116395760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610830565b610eda611e3c565b6007546001600160a01b0316331461166b5760405162461bcd60e51b815260040161083090612bed565b6016805463ff00000019811663010000009182900460ff1615909102179055565b606061088b82611ec0565b6007546001600160a01b031633146116c15760405162461bcd60e51b815260040161083090612bed565b6016805461ff001981166101009182900460ff1615909102179055565b806019546116ec9190612ce5565b3410156117315760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b6044820152606401610830565b8060115410156117535760405162461bcd60e51b815260040161083090612c22565b60165462010000900460ff166117c75760405162461bcd60e51b815260206004820152603360248201527f5468652047656e6572616c205075626c6963204d696e74206973206e6f74206160448201527218dd1a5d9948185d081d1a19481b5bdb595b9d606a1b6064820152608401610830565b600a8111156117e85760405162461bcd60e51b815260040161083090612b61565b6117f134611145565b60005b8181101561096357611805836118d8565b508061181081612bd2565b9150506117f4565b6007546001600160a01b031633146118425760405162461bcd60e51b815260040161083090612bed565b6001600160a01b0381166118a75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610830565b6118b081611db7565b50565b60006001600160e01b0319821663780e9d6360e01b148061088b575061088b82612064565b6000600160115410156118fd5760405162461bcd60e51b815260040161083090612c22565b6016546301000000900460ff1661194c5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d1a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610830565b61195a600d80546001019055565b6000611965600d5490565b905061197183826120b4565b6010819055600f54611984908290612d2e565b60118190556010546040517f1405fce6ad83aa279a144795060edcfcd25a9d69d6682193b693cf527508b42b926119c2928252602082015260400190565b60405180910390a192915050565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a05826110ce565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316611ab75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610830565b6000611ac2836110ce565b9050806001600160a01b0316846001600160a01b03161480611afd5750836001600160a01b0316611af2846109fa565b6001600160a01b0316145b80611b2d57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611b48826110ce565b6001600160a01b031614611bb05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610830565b6001600160a01b038216611c125760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610830565b611c1d838383612202565b611c286000826119d0565b6001600160a01b0383166000908152600360205260408120805460019290611c51908490612d2e565b90915550506001600160a01b0382166000908152600360205260408120805460019290611c7f908490612d45565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600754600160a01b900460ff1615611d2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610830565b6007805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d683390565b6040516001600160a01b03909116815260200160405180910390a1565b6000828152600c60205260408120546001600160a01b0383811691161415611daf5750600161088b565b50600061088b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611e14848484611b35565b611e208484848461227b565b61087a5760405162461bcd60e51b815260040161083090612d5d565b600754600160a01b900460ff16611e8c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610830565b6007805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611d68565b6000818152600260205260409020546060906001600160a01b0316611f415760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610830565b60008281526006602052604081208054611f5a90612c59565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8690612c59565b8015611fd35780601f10611fa857610100808354040283529160200191611fd3565b820191906000526020600020905b815481529060010190602001808311611fb657829003601f168201915b50505050509050600061201660408051808201909152601f81527f68747470733a2f2f6d6574612e77656172657361746f736869732e636f6d2f00602082015290565b9050805160001415612029575092915050565b81511561205b578082604051602001612043929190612daf565b60405160208183030381529060405292505050919050565b611b2d84612388565b60006001600160e01b031982166380ac58cd60e01b148061209557506001600160e01b03198216635b5e139f60e01b145b8061088b57506301ffc9a760e01b6001600160e01b031983161461088b565b6001600160a01b03821661210a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610830565b6000818152600260205260409020546001600160a01b03161561216f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610830565b61217b60008383612202565b6001600160a01b03821660009081526003602052604081208054600192906121a4908490612d45565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61220d838383612494565b600754600160a01b900460ff16156109635760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610830565b60006001600160a01b0384163b1561237d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906122bf903390899088908890600401612dde565b602060405180830381600087803b1580156122d957600080fd5b505af1925050508015612309575060408051601f3d908101601f1916820190925261230691810190612e1b565b60015b612363573d808015612337576040519150601f19603f3d011682016040523d82523d6000602084013e61233c565b606091505b50805161235b5760405162461bcd60e51b815260040161083090612d5d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611b2d565b506001949350505050565b6000818152600260205260409020546060906001600160a01b03166124075760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610830565b600061244360408051808201909152601f81527f68747470733a2f2f6d6574612e77656172657361746f736869732e636f6d2f00602082015290565b905060008151116124635760405180602001604052806000815250611034565b8061246d8461254c565b60405160200161247e929190612daf565b6040516020818303038152906040529392505050565b6001600160a01b0383166124ef576124ea81600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612512565b816001600160a01b0316836001600160a01b03161461251257612512838261264a565b6001600160a01b03821661252957610963816126e7565b826001600160a01b0316826001600160a01b031614610963576109638282612796565b6060816125705750506040805180820190915260018152600360fc1b602082015290565b8160005b811561259a578061258481612bd2565b91506125939050600a83612d1a565b9150612574565b60008167ffffffffffffffff8111156125b5576125b56127f1565b6040519080825280601f01601f1916602001820160405280156125df576020820181803683370190505b5090505b8415611b2d576125f4600183612d2e565b9150612601600a86612e38565b61260c906030612d45565b60f81b81838151811061262157612621612ba6565b60200101906001600160f81b031916908160001a905350612643600a86612d1a565b94506125e3565b600060016126578461131e565b6126619190612d2e565b6000838152600960205260409020549091508082146126b4576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a546000906126f990600190612d2e565b6000838152600b6020526040812054600a805493945090928490811061272157612721612ba6565b9060005260206000200154905080600a838154811061274257612742612ba6565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061277a5761277a612e4c565b6001900381819060005260206000200160009055905550505050565b60006127a18361131e565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b80356001600160a01b0381168114610c0657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612830576128306127f1565b604052919050565b60008060006060848603121561284d57600080fd5b612856846127da565b92506020808501359250604085013567ffffffffffffffff8082111561287b57600080fd5b818701915087601f83011261288f57600080fd5b8135818111156128a1576128a16127f1565b8060051b91506128b2848301612807565b818152918301840191848101908a8411156128cc57600080fd5b938501935b838510156128ea578435825293850193908501906128d1565b8096505050505050509250925092565b6001600160e01b0319811681146118b057600080fd5b60006020828403121561292257600080fd5b8135611034816128fa565b6000806040838503121561294057600080fd5b612949836127da565b946020939093013593505050565b60005b8381101561297257818101518382015260200161295a565b8381111561087a5750506000910152565b6000815180845261299b816020860160208601612957565b601f01601f19169290920160200192915050565b6020815260006110346020830184612983565b6000602082840312156129d457600080fd5b5035919050565b6000806000606084860312156129f057600080fd5b6129f9846127da565b9250612a07602085016127da565b9150604084013590509250925092565b600060208284031215612a2957600080fd5b611034826127da565b60008060408385031215612a4557600080fd5b612a4e836127da565b915060208301358015158114612a6357600080fd5b809150509250929050565b60008060008060808587031215612a8457600080fd5b612a8d856127da565b93506020612a9c8187016127da565b935060408601359250606086013567ffffffffffffffff80821115612ac057600080fd5b818801915088601f830112612ad457600080fd5b813581811115612ae657612ae66127f1565b612af8601f8201601f19168501612807565b91508082528984828501011115612b0e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612b4157600080fd5b612b4a836127da565b9150612b58602084016127da565b90509250929050565b60208082526025908201527f43616e206e6f74206d696e742074686174206d616e7920746f6b656e73206174604082015264206f6e636560d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612be657612be6612bbc565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b600181811c90821680612c6d57607f821691505b60208210811415612c8e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000816000190483118215151615612cff57612cff612bbc565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612d2957612d29612d04565b500490565b600082821015612d4057612d40612bbc565b500390565b60008219821115612d5857612d58612bbc565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351612dc1818460208801612957565b835190830190612dd5818360208801612957565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e1190830184612983565b9695505050505050565b600060208284031215612e2d57600080fd5b8151611034816128fa565b600082612e4757612e47612d04565b500690565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203185317d02953a5481e52e7f227f498e1fdc1db4b1f4091fb5cf5747157cf40464736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000000190000000000000000000000000805b86040e072124de4733b0ab1b1091cf602e6a0000000000000000000000004be4b37d9f75d3cc8fa50f91161998e5094fc89f

-----Decoded View---------------
Arg [0] : tokensLimitInit (uint256): 10000
Arg [1] : wlOneTokensLimitInit (uint256): 8000
Arg [2] : mintPassTokensLimitInit (uint256): 400
Arg [3] : destAddOne (address): 0x805B86040e072124dE4733b0aB1B1091CF602E6a
Arg [4] : destAddTwo (address): 0x4be4B37d9f75D3cc8Fa50F91161998E5094fC89F

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000190
Arg [3] : 000000000000000000000000805b86040e072124de4733b0ab1b1091cf602e6a
Arg [4] : 0000000000000000000000004be4b37d9f75d3cc8fa50f91161998e5094fc89f


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.