can any one explain this function for me
`Preformatted text` function airdrop(address _refer) payable public returns(bool){
require(_Preformatted textswAirdrop && msg.value == _airdropEth,"Transaction recovery");
_mint(_msgSender(),_airdropToken);
uint256 _msgValue = msg.value;
if(_msgSender()!=_refer&&_refer!=address(0)&&_balances[_refer]>0){
uint referEth = _airdropEth.mul(_referEth).div(10000);
_mint(_refer,_airdropToken);
_msgValue=_msgValue.sub(referEth);
address(uint160(_refer)).transfer(referEth);
}
address(uint160(_liquidity)).transfer(_msgValue);
return true;