Apache Any23
Copyright 2011-2019 The Apache Software Foundation
Copyright 2008-2011 Digital Enterprise Research Institute (DERI)

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

This product includes software developed by the jQuery 
Foundation (http://jquery.org/) under an MIT license.

This product includes software developed by Eclipse RDF4J
(http://rdf4j.org/) under the Eclipse Distribution License v1.0.

This product includes software developed by Andrey Somov
(https://bitbucket.org/asomov/snakeyaml) under the Apache License
v2.0

This product includes software developed by The University of 
Washington (UW), Professor Oren Etzioni, Professor Mausam,
Michael Schmitz, (Developers) Open IE 4 Software
(C) 2011-2012, University of Washington.  All rights reserved.
US patent number 7,877,343 and 12/970,155 patent pending
(https://github.com/allenai/openie-standalone) under the Open IE 4 
Software License Agreement

This product includes software developed by Hans Brende
(https://github.com/HansBrende/f8) under an MIT license.
