code: @SuppressWarnings("unchecked")
  	public static <T> NFAFactory<T> compileFactory(
  		final Pattern<T, ?> pattern,
  		boolean timeoutHandling) {
  		if (pattern == null) {
  			// return a factory for empty NFAs
  			return new NFAFactoryImpl<>(0, Collections.<State<T>>emptyList(), timeoutHandling);
  		} else {
  			final NFAFactoryCompiler<T> nfaFactoryCompiler = new NFAFactoryCompiler<>(pattern);
  			nfaFactoryCompiler.compileFactory();
  			return new NFAFactoryImpl<>(nfaFactoryCompiler.getWindowTime(), nfaFactoryCompiler.getStates(), timeoutHandling);
  		}
  	}
docs: Compiles the given pattern into a {@link NFAFactory}. The NFA factory can be used to create
  multiple NFAs.
  
  @param pattern Definition of sequence pattern
  @param timeoutHandling True if the NFA shall return timed out event patterns
  @param <T> Type of the input events
  @return Factory for NFAs corresponding to the given pattern