Apache Jena - module Fuseki
Copyright 2011-2018 The Apache Software Foundation

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

Portions of this software were originally based on the following:
  - Copyright 2005, 2006, 2007, 2008, 2009 Hewlett-Packard Development Company, LP
  - Copyright 2010, 2011 Epimorphics Ltd.
  - Copyright 2010, 2011 Talis Systems Ltd.
These have been licensed to the Apache Software Foundation under a software grant.

- - - - - - - - - - - - - - - - - - - - - - - 

Portions of this software include software from  Mort Bay Consulting Pty. Ltd.
 - Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
