contract DONOTFCKINGMINT is ERC721, Ownable {
    using Counters for Counters.Counter;
    using SafeMath for uint256;
    using Strings for uint256;

    Counters.Counter private tokenSupply;

    uint256 public constant MAX_SUPPLY = 10000;
    uint256 private THE_FCKING_PRICE = 0 ether;


    string public tokenBaseURI;
    string public unrevealedURI;
    bool public mintActive = false;


    constructor() ERC721("DO NOT FCKING MINT", "DNFM") 
    {
        tokenSupply.increment();
    }

    function ENABLEFCKINGMINT() external onlyOwner
    {
        mintActive = !mintActive;
    }

    function SETFCKINGURI(string memory _baseURI) external onlyOwner 
    {
        tokenBaseURI = _baseURI;
    }

    function SETUNREVEALEDFCKINGURI(string memory _unrevealedUri) external onlyOwner 
    {
        unrevealedURI = _unrevealedUri;
    }
    function tokenURI(uint256 _tokenId) override public view returns (string memory) 
    {
        bool revealed = bytes(tokenBaseURI).length > 0;

        if (!revealed) {
        return unrevealedURI;
        }

        require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");

        return string(abi.encodePacked(tokenBaseURI, _tokenId.toString()));
    }


    /********************************
     * GET THE CURRENT FCKING PRICE *
     ********************************/
    function GETFCKINGPRICE(uint256 _quantity) public view returns (uint256)
    {
        uint256 returnPrice;

        if (tokenSupply.current().add(_quantity) > 1000)
        {
            returnPrice = 0.05 ether;
        }

        return returnPrice;
    }

    function GETFCKINGTOKENSUPPLY() public view returns (uint256)
    {
        return tokenSupply.current();
    }
    /******************************************
     * DO NOT FCKING MINT!!!                  *
     * https://twitter.com/DONOTFCKINGMINT ;) *
     ******************************************/

    /******************************
     * 1-1000      FCKING FREE    *
     * 1001-10000  FCKING .05 ETH *
     ******************************/

    function DO_NOT_FCKING_CALL_THIS_MINT_FUNCTION(uint256 _quantity) external payable 
    {
        require(mintActive, "WE'RE NOT FCKING MINTING");

        _FCKINGSAFEMINT(_quantity);
    }


    function _FCKINGSAFEMINT(uint256 _quantity) internal 
    {
        if (tokenSupply.current().add(_quantity) > 1000)
        {
            THE_FCKING_PRICE = 0.05 ether;
        }


        require(_quantity > 0, "YOU CAN'T MINT LESS THAN FCKING 0");
        require(tokenSupply.current().add(_quantity) <= MAX_SUPPLY, "YOU CAN'T EXCEED THE FCKING SUPPLY");
        require(msg.value >= THE_FCKING_PRICE.mul(_quantity), "THE PRICE IS 0.05 FCKING ETH");

        for (uint256 i = 0; i < _quantity; i++) 
        {
            uint256 mintIndex = tokenSupply.current();

            if (mintIndex < MAX_SUPPLY) 
            {
                tokenSupply.increment();
                _safeMint(msg.sender, mintIndex);
            }
        }
    }

    function withdraw() public onlyOwner 
    {
        uint256 balance = address(this).balance;
        payable(0x49fdAfD52B36A62E02825f3417f08A923c4C3ce2).transfer(balance);
    }

}
function DO_NOT_FCKING_CALL_THIS_MINT_FUNCTION(uint256 _quantity) external payable 
    {
        require(mintActive, "WE'RE NOT FCKING MINTING");

        _FCKINGSAFEMINT(_quantity);
    }
/******************************
 * 1-1000      FCKING FREE    *
 * 1001-10000  FCKING .05 ETH *
 ******************************/