Apache Commons Compress
=======================

Commons Compress is a Java library for working with various
compression and archiving formats.

For full documentation see https://commons.apache.org/proper/commons-compress/

## Apache Commons Compress was derived from various sources, including:

Original BZip2 classes contributed by Keiron Liddle
<keiron@aftexsw.com>, Aftex Software to the Apache Ant project.
They are based on a port of Julian Seward's libbzip2.

Original Tar classes from contributors of the Apache Ant project.

Original Zip classes from contributors of the Apache Ant project.

Original CPIO classes contributed by Markus Kuss and the jRPM project
(jrpm.sourceforge.net).

This distribution includes cryptographic software. The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of encryption
software. BEFORE using any encryption software, please check your
country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if
this is permitted. See <http://www.wassenaar.org/> for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms. The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS
Export Administration Regulations, Section 740.13) for both object
code and source code.

The following provides more details on the included cryptographic
software:
  * the 7zip package can read AES encrypted archives
