This product includes software developed by The Apache Software
Foundation (http://www.apache.org/).

It includes software from other Apache Software Foundation projects,
including, but not limited to:
  - Apache HBase
  - Apache Hadoop
  - Apache Commons

In addition, this product includes/uses software developed by:

JLine (http://jline.sourceforge.net/),
Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>.

SQLLine ((http://jline.sourceforge.net/),
Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>.

SLF4J (http://www.slf4j.org/),
Copyright (c) 2004-2008 QOS.ch

ANTLR (http://www.antlr.org/),
Copyright (c) 2003-2008, Terrence Parr.

JUnit (http://www.junit.org/) included under the Common Public License v1.0.
See the full text here: http://junit.sourceforge.net/cpl-v10.html
