Apache Flink
Copyright 2014-2021 The Apache Software Foundation

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

This project bundles the following dependencies under the MIT license.
See bundled license files for details.

- jQuery v3.5.1 | (c) JS Foundation and other contributors
	-> in "docs/page/js/jquery.min.js"
- AnchorJS v3.1.0 (https://github.com/bryanbraun/anchorjs) Copyright (c) 2016 Bryan Braun
    -> in "docs/page/js/anchor.min.js"
- Bootstrap v3.3.4 (http://getbootstrap.com) Copyright 2011-2015 Twitter, Inc.
    -> css in "docs/page/css/bootstrap.min.css"
    -> js in "docs/page/js/bootstrap.min.js"
    -> fonts in "docs/page/fonts"

Note: The "docs/page/fonts/glyphicons-halflings*" fonts are included in Bootstrap, and licensed under the same license as Boostrap.
See https://glyphicons.com/old/license.html#old-halflings-bootstrap for more information.

This project bundles the following dependencies under the BSD license.
See bundled license files for details.

- cloudpickle:1.2.2
- net.sf.py4j:py4j:0.10.8.1

This project bundles the following dependencies under SIL OFL 1.1 license (https://opensource.org/licenses/OFL-1.1).
See bundled license files for details.

- font-awesome:4.5.0 (Font) (http://fortawesome.github.io/Font-Awesome/) - Created by Dave Gandy
    -> fonts in "docs/page/font-awesome/fonts"

The Apache Flink project contains or reuses code that is licensed under the ISC license from the following projects.

- simplejmx (http://256stuff.com/sources/simplejmx/) Copyright (c) - Gray Watson

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby
granted, provided that this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
USE OR PERFORMANCE OF THIS SOFTWARE.

The Apache Flink project contains or reuses code that is licensed under the Apache 2.0 license from the following projects:
- Google Cloud Client Library for Java (https://github.com/googleapis/google-cloud-java) Copyright 2017 Google LLC

  See: flink-end-to-end-tests/flink-connector-gcp-pubsub-emulator-tests/src/test/java/org/apache/flink/streaming/connectors/gcp/pubsub/emulator/PubsubHelper.java
