Apache Hive
Copyright 2008-2016 The Apache Software Foundation

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

This product includes Jersey (https://jersey.java.net/)
Copyright (c) 2010-2014 Oracle and/or its affiliates.

This project includes software copyrighted by Microsoft Corporation and
licensed under the Apache License, Version 2.0.

This project includes software copyrighted by Dell SecureWorks and
licensed under the Apache License, Version 2.0.
