function _playerRollDice(uint _rollUnder, TKN _tkn, uint userDivRate) private
    gameIsActive
    betIsValid(_tkn.value, _rollUnder, userDivRate)
  {
    require(_tkn.value < ((2 ** 192) - 1));   
    require(block.number < ((2 ** 48) - 1));  
    require(userDivRate < (2 ** 8 - 1)); 
    
    

    playerRoll memory roll = playerRolls[_tkn.sender];

    
    require(block.number != roll.blockn);

    
    if (roll.blockn != 0) {
      _finishBet(_tkn.sender);
    }

    
    roll.blockn = uint48(block.number);
    roll.tokenValue = uint192(_tkn.value);
    roll.rollUnder = uint8(_rollUnder);
    roll.divRate = uint8(userDivRate);

    
    playerRolls[_tkn.sender] = roll;

    
    emit LogBet(_tkn.sender, _tkn.value, _rollUnder);
                 
    
    totalBets += 1;

    
    totalZTHWagered += _tkn.value;
    
    
    if(canMining && roll.tokenValue >= minBetMining){
        uint miningAmout = SafeMath.div(SafeMath.mul(roll.tokenValue, miningProfit) , 10000);
        RequestBankrollPayment(_tkn.sender, miningAmout, roll.divRate);
    }
  }