function buyTPT(uint256 _TPTprice,
                    uint256 _expiration,
                    uint8 _v,
                    bytes32 _r,
                    bytes32 _s
                   ) payable external {
        
        require(_expiration >= block.timestamp);

        
        address signer = ecrecover(keccak256(_TPTprice, _expiration), _v, _r, _s);
        require(signer == neverdieSigner);

        uint256 a = SafeMath.div(msg.value, _TPTprice);
        assert(tpt.transfer(msg.sender, a));

        
        BuyTPT(msg.sender, _TPTprice, msg.value, a);
    }