docs: @Override
  	public ITraceEvent createEvent(String rawEventText, int sourceLineNumber) throws IntraceException {
  		
  		if (rawEventText==null){
  			return null;
  		}
  		String parts[] = rawEventText.split("~");
  		rawEventText = parts[0];
  		StackTraceElement[] stackTrace = null;
  		if (parts.length==2) {
  			stackTrace = parseStackTrace(parts[1]);
  		}
  
  		int indexOfLastColon = rawEventText.lastIndexOf(TOKEN_COLON);
  		if (indexOfLastColon==-1) {
  			throw new RuntimeException("1000 Major exception.  To separate parts of a date, there should be multiple colons in this event text, but found zero [" + rawEventText + "]");
  		}
  		sourceLineNumber = -1; //Input sourceLineNumber is ignored.  -1 is default used if trace event doesn't have line number, which probably means agent wasn't configured to provide it.
  		
  		//If the character to the left of the last colon is a curly, 
  		//then the text to the right of the last colon is the source line number.
  		char isCurlyBrace = rawEventText.charAt(indexOfLastColon-1);
  		if (isCurlyBrace==ENTRY_MARKER || isCurlyBrace==EXIT_MARKER) {
  			sourceLineNumber = Integer.parseInt(rawEventText.substring(indexOfLastColon+1));	
  		} else { // then there is no line number at the end of the line, so see if there is a curly at the end of the line.
  			isCurlyBrace = rawEventText.charAt(rawEventText.length()-1);
  		}
  		
  		ITraceEvent event = null;
  		if (isCurlyBrace==ENTRY_MARKER) {
  			event = m_entryExitParser.createEvent(rawEventText, sourceLineNumber);
  			event.setEventType(EventType.ENTRY );
  		} else if (isCurlyBrace==EXIT_MARKER) {
  			event = m_entryExitParser.createEvent(rawEventText, sourceLineNumber);
  			event.setEventType(EventType.EXIT );
  		} else {
  			event = m_otherParser.createEvent(rawEventText, sourceLineNumber);
  		}
  		
  		event.setStackTrace(stackTrace);
  		return event;
  	}