Apache Geode
Copyright 2016-2020 The Apache Software Foundation.

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


The following NOTICEs pertain to software distributed with this project.

stream-lib
Copyright 2016 AddThis

   This product includes software developed by AddThis.

   This product also includes code adapted from:

   Apache Solr (http://lucene.apache.org/solr/)
   Copyright 2014 The Apache Software Foundation

This product includes software developed by the MX4J
project (http://mx4j.sourceforge.net).
