Apache UIMA Ruta
Copyright 2006, 2013 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

Portions of UIMA Ruta were originally developed by
the Universität Würzburg.
Copyright (c) 2006, 2011 Universität Würzburg.

This product contains icons developed by the Mark James 
(http://www.famfamfam.com/lab/icons/silk/), licensed under the 
Creative Commons Attribution 3.0 License.
