bool CSymbolEngineTableLimits::EvaluateSymbol(const char *name, double *result, bool log /* = false */) {
  FAST_EXIT_ON_OPENPPL_SYMBOLS(name);
	if (memcmp(name, "bet", 3)==0)	{
		if (memcmp(name, "bet", 3)==0 && strlen(name)==3) {
			*result = bet();
      return true;
		}	else if (memcmp(name, "bet", 3)==0 && strlen(name)==4) {
      char betround = name[3];
      if ((betround >= '1') && (betround <= '4')) {
			  *result = bet(name[3]-'0');
        return true;
      }
		}
    // Invalid symbol
		return false;
	}
	if (memcmp(name, "bblind", 6)==0 && strlen(name)==6) {
		*result = bblind();
	}	else if (memcmp(name, "sblind", 6)==0 && strlen(name)==6)	{
		*result = sblind();
	}	else if (memcmp(name, "ante", 4)==0 && strlen(name)==4)	{
		*result = ante();
	}	else if (memcmp(name, "buyin", 5)==0 && strlen(name)==5) {
		*result = buyin();
  }	else {
		// Symbol of a different symbol-engine
		return false;
	}
	// Valid symbol
	return true;
}
void CSymbolEngineTableLimits::ResetOnHeartbeat() {
	write_log(preferences.debug_table_limits(), 
    "[CSymbolEngineTableLimits] ResetOnHeartbeat()\n");
  if (TableLimitsNeedToBeComputed()) {
    CBlindGuesser _blind_guesser;
    _blind_guesser.Guess(&tablelimit_best_guess.sblind,
      &tablelimit_best_guess.bblind,
      &tablelimit_best_guess.bbet);
    if (p_table_state->_s_limit_info.ante() > 0) {
      if (p_table_state->_s_limit_info.ante() >= sblind()) {
        write_log(preferences.debug_table_limits(), 
          "[CSymbolEngineTableLimits] ERROR: ante larger than small blind\n");
        _ante = kUndefinedZero;
      } else {
        _ante = p_table_state->_s_limit_info.ante();
      }
    }
    AutoLockBlinds();
  }
}