Apache Bigtop
Copyright 2014, The Apache Software Foundation
Portions Copyright 2015-2016 Canonical Ltd.

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

In addition, this product includes files licensed under:

* The FreeBSD Documentation License
  https://www.freebsd.org/copyright/freebsd-doc-license.html

* The MIT License
  https://opensource.org/licenses/MIT
