[SCM] juce/master: Imported Upstream version 4.1.0+repack

umlaeute at users.alioth.debian.org umlaeute at users.alioth.debian.org
Thu Jan 21 21:11:11 UTC 2016


The following commit has been merged in the master branch:
commit 161d4487f153b32889613dafe84031afe67ca2bf
Author: IOhannes m zmölnig <zmoelnig at umlautQ.umlaeute.mur.at>
Date:   Thu Jan 21 20:43:34 2016 +0100

    Imported Upstream version 4.1.0+repack

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index d192e26..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,51 +0,0 @@
-._*
-*.mode1v3
-*.pbxuser
-*.perspectivev3
-*.user
-*.ncb
-*.suo
-*.ilk
-*.pch
-*.pdb
-*.dep
-*.idb
-*.manifest
-*.manifest.res
-*.o
-*.d
-*.sdf
-*.opensdf
-xcuserdata
-*.xccheckout
-contents.xcworkspacedata
-.DS_Store
-.svn
-profile
-**/MacOSX/build
-**/iOS/build
-**/Linux/build
-**/VisualStudio2005/Debug
-**/VisualStudio2005/Release
-**/VisualStudio2008/Debug
-**/VisualStudio2008/Release
-**/VisualStudio2010/Debug
-**/VisualStudio2010/Release
-**/VisualStudio2012/Debug
-**/VisualStudio2012/Release
-**/VisualStudio2013/Debug
-**/VisualStudio2013/Release
-**/VisualStudio2013/x64
-**/VisualStudio2015/Debug
-**/VisualStudio2015/Release
-**/VisualStudio2015/x64
-**/Android/bin
-**/Android/libs
-**/Android/gen
-**/Android/obj
-**/CodeBlocks/bin
-**/CodeBlocks/obj
-**/CodeBlocks/*.depend
-**/CodeBlocks/*.layout
-**/Builds/AndroidStudio
-doxygen/doc
diff --git a/modules/juce_audio_formats/codecs/flac/Flac Licence.txt b/modules/juce_audio_formats/codecs/flac/Flac Licence.txt
deleted file mode 100644
index 39992bd..0000000
--- a/modules/juce_audio_formats/codecs/flac/Flac Licence.txt	
+++ /dev/null
@@ -1,49 +0,0 @@
-
-=====================================================================
-
-I've incorporated FLAC directly into the Juce codebase because it makes
-things much easier than having to make all your builds link correctly to
-the appropriate libraries on every different platform.
-
-I've made minimal changes to the FLAC code - just tweaked a few include paths 
-to make it build smoothly, added some headers to allow you to turn off FLAC 
-compilation, and commented-out a couple of unused bits of code.
-
-=====================================================================
-
-
-The following license is the BSD-style license that comes with the
-Flac distribution, and which applies just to the files I've
-included in this directory. For more info, and to get the rest of the
-distribution, visit the Flac homepage: flac.sourceforge.net
-
-=====================================================================
-
-Copyright (C) 2000,2001,2002,2003,2004,2005,2006 Josh Coalson
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-- Neither the name of the Xiph.org Foundation nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/modules/juce_audio_formats/codecs/flac/all.h b/modules/juce_audio_formats/codecs/flac/all.h
deleted file mode 100644
index c7f3032..0000000
--- a/modules/juce_audio_formats/codecs/flac/all.h
+++ /dev/null
@@ -1,371 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__ALL_H
-#define FLAC__ALL_H
-
-#include "export.h"
-
-#include "assert.h"
-#include "callback.h"
-#include "format.h"
-#include "metadata.h"
-#include "ordinals.h"
-#include "stream_decoder.h"
-#include "stream_encoder.h"
-
-/** \mainpage
- *
- * \section intro Introduction
- *
- * This is the documentation for the FLAC C and C++ APIs.  It is
- * highly interconnected; this introduction should give you a top
- * level idea of the structure and how to find the information you
- * need.  As a prerequisite you should have at least a basic
- * knowledge of the FLAC format, documented
- * <A HREF="../format.html">here</A>.
- *
- * \section c_api FLAC C API
- *
- * The FLAC C API is the interface to libFLAC, a set of structures
- * describing the components of FLAC streams, and functions for
- * encoding and decoding streams, as well as manipulating FLAC
- * metadata in files.  The public include files will be installed
- * in your include area (for example /usr/include/FLAC/...).
- *
- * By writing a little code and linking against libFLAC, it is
- * relatively easy to add FLAC support to another program.  The
- * library is licensed under <A HREF="../license.html">Xiph's BSD license</A>.
- * Complete source code of libFLAC as well as the command-line
- * encoder and plugins is available and is a useful source of
- * examples.
- *
- * Aside from encoders and decoders, libFLAC provides a powerful
- * metadata interface for manipulating metadata in FLAC files.  It
- * allows the user to add, delete, and modify FLAC metadata blocks
- * and it can automatically take advantage of PADDING blocks to avoid
- * rewriting the entire FLAC file when changing the size of the
- * metadata.
- *
- * libFLAC usually only requires the standard C library and C math
- * library. In particular, threading is not used so there is no
- * dependency on a thread library. However, libFLAC does not use
- * global variables and should be thread-safe.
- *
- * libFLAC also supports encoding to and decoding from Ogg FLAC.
- * However the metadata editing interfaces currently have limited
- * read-only support for Ogg FLAC files.
- *
- * \section cpp_api FLAC C++ API
- *
- * The FLAC C++ API is a set of classes that encapsulate the
- * structures and functions in libFLAC.  They provide slightly more
- * functionality with respect to metadata but are otherwise
- * equivalent.  For the most part, they share the same usage as
- * their counterparts in libFLAC, and the FLAC C API documentation
- * can be used as a supplement.  The public include files
- * for the C++ API will be installed in your include area (for
- * example /usr/include/FLAC++/...).
- *
- * libFLAC++ is also licensed under
- * <A HREF="../license.html">Xiph's BSD license</A>.
- *
- * \section getting_started Getting Started
- *
- * A good starting point for learning the API is to browse through
- * the <A HREF="modules.html">modules</A>.  Modules are logical
- * groupings of related functions or classes, which correspond roughly
- * to header files or sections of header files.  Each module includes a
- * detailed description of the general usage of its functions or
- * classes.
- *
- * From there you can go on to look at the documentation of
- * individual functions.  You can see different views of the individual
- * functions through the links in top bar across this page.
- *
- * If you prefer a more hands-on approach, you can jump right to some
- * <A HREF="../documentation_example_code.html">example code</A>.
- *
- * \section porting_guide Porting Guide
- *
- * Starting with FLAC 1.1.3 a \link porting Porting Guide \endlink
- * has been introduced which gives detailed instructions on how to
- * port your code to newer versions of FLAC.
- *
- * \section embedded_developers Embedded Developers
- *
- * libFLAC has grown larger over time as more functionality has been
- * included, but much of it may be unnecessary for a particular embedded
- * implementation.  Unused parts may be pruned by some simple editing of
- * src/libFLAC/Makefile.am.  In general, the decoders, encoders, and
- * metadata interface are all independent from each other.
- *
- * It is easiest to just describe the dependencies:
- *
- * - All modules depend on the \link flac_format Format \endlink module.
- * - The decoders and encoders depend on the bitbuffer.
- * - The decoder is independent of the encoder.  The encoder uses the
- *   decoder because of the verify feature, but this can be removed if
- *   not needed.
- * - Parts of the metadata interface require the stream decoder (but not
- *   the encoder).
- * - Ogg support is selectable through the compile time macro
- *   \c FLAC__HAS_OGG.
- *
- * For example, if your application only requires the stream decoder, no
- * encoder, and no metadata interface, you can remove the stream encoder
- * and the metadata interface, which will greatly reduce the size of the
- * library.
- *
- * Also, there are several places in the libFLAC code with comments marked
- * with "OPT:" where a #define can be changed to enable code that might be
- * faster on a specific platform.  Experimenting with these can yield faster
- * binaries.
- */
-
-/** \defgroup porting Porting Guide for New Versions
- *
- * This module describes differences in the library interfaces from
- * version to version.  It assists in the porting of code that uses
- * the libraries to newer versions of FLAC.
- *
- * One simple facility for making porting easier that has been added
- * in FLAC 1.1.3 is a set of \c #defines in \c export.h of each
- * library's includes (e.g. \c include/FLAC/export.h).  The
- * \c #defines mirror the libraries'
- * <A HREF="http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning">libtool version numbers</A>,
- * e.g. in libFLAC there are \c FLAC_API_VERSION_CURRENT,
- * \c FLAC_API_VERSION_REVISION, and \c FLAC_API_VERSION_AGE.
- * These can be used to support multiple versions of an API during the
- * transition phase, e.g.
- *
- * \code
- * #if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7
- *   legacy code
- * #else
- *   new code
- * #endif
- * \endcode
- *
- * The the source will work for multiple versions and the legacy code can
- * easily be removed when the transition is complete.
- *
- * Another available symbol is FLAC_API_SUPPORTS_OGG_FLAC (defined in
- * include/FLAC/export.h), which can be used to determine whether or not
- * the library has been compiled with support for Ogg FLAC.  This is
- * simpler than trying to call an Ogg init function and catching the
- * error.
- */
-
-/** \defgroup porting_1_1_2_to_1_1_3 Porting from FLAC 1.1.2 to 1.1.3
- *  \ingroup porting
- *
- *  \brief
- *  This module describes porting from FLAC 1.1.2 to FLAC 1.1.3.
- *
- * The main change between the APIs in 1.1.2 and 1.1.3 is that they have
- * been simplified.  First, libOggFLAC has been merged into libFLAC and
- * libOggFLAC++ has been merged into libFLAC++.  Second, both the three
- * decoding layers and three encoding layers have been merged into a
- * single stream decoder and stream encoder.  That is, the functionality
- * of FLAC__SeekableStreamDecoder and FLAC__FileDecoder has been merged
- * into FLAC__StreamDecoder, and FLAC__SeekableStreamEncoder and
- * FLAC__FileEncoder into FLAC__StreamEncoder.  Only the
- * FLAC__StreamDecoder and FLAC__StreamEncoder remain.  What this means
- * is there is now a single API that can be used to encode or decode
- * streams to/from native FLAC or Ogg FLAC and the single API can work
- * on both seekable and non-seekable streams.
- *
- * Instead of creating an encoder or decoder of a certain layer, now the
- * client will always create a FLAC__StreamEncoder or
- * FLAC__StreamDecoder.  The old layers are now differentiated by the
- * initialization function.  For example, for the decoder,
- * FLAC__stream_decoder_init() has been replaced by
- * FLAC__stream_decoder_init_stream().  This init function takes
- * callbacks for the I/O, and the seeking callbacks are optional.  This
- * allows the client to use the same object for seekable and
- * non-seekable streams.  For decoding a FLAC file directly, the client
- * can use FLAC__stream_decoder_init_file() and pass just a filename
- * and fewer callbacks; most of the other callbacks are supplied
- * internally.  For situations where fopen()ing by filename is not
- * possible (e.g. Unicode filenames on Windows) the client can instead
- * open the file itself and supply the FILE* to
- * FLAC__stream_decoder_init_FILE().  The init functions now returns a
- * FLAC__StreamDecoderInitStatus instead of FLAC__StreamDecoderState.
- * Since the callbacks and client data are now passed to the init
- * function, the FLAC__stream_decoder_set_*_callback() functions and
- * FLAC__stream_decoder_set_client_data() are no longer needed.  The
- * rest of the calls to the decoder are the same as before.
- *
- * There are counterpart init functions for Ogg FLAC, e.g.
- * FLAC__stream_decoder_init_ogg_stream().  All the rest of the calls
- * and callbacks are the same as for native FLAC.
- *
- * As an example, in FLAC 1.1.2 a seekable stream decoder would have
- * been set up like so:
- *
- * \code
- * FLAC__SeekableStreamDecoder *decoder = FLAC__seekable_stream_decoder_new();
- * if(decoder == NULL) do_something;
- * FLAC__seekable_stream_decoder_set_md5_checking(decoder, true);
- * [... other settings ...]
- * FLAC__seekable_stream_decoder_set_read_callback(decoder, my_read_callback);
- * FLAC__seekable_stream_decoder_set_seek_callback(decoder, my_seek_callback);
- * FLAC__seekable_stream_decoder_set_tell_callback(decoder, my_tell_callback);
- * FLAC__seekable_stream_decoder_set_length_callback(decoder, my_length_callback);
- * FLAC__seekable_stream_decoder_set_eof_callback(decoder, my_eof_callback);
- * FLAC__seekable_stream_decoder_set_write_callback(decoder, my_write_callback);
- * FLAC__seekable_stream_decoder_set_metadata_callback(decoder, my_metadata_callback);
- * FLAC__seekable_stream_decoder_set_error_callback(decoder, my_error_callback);
- * FLAC__seekable_stream_decoder_set_client_data(decoder, my_client_data);
- * if(FLAC__seekable_stream_decoder_init(decoder) != FLAC__SEEKABLE_STREAM_DECODER_OK) do_something;
- * \endcode
- *
- * In FLAC 1.1.3 it is like this:
- *
- * \code
- * FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new();
- * if(decoder == NULL) do_something;
- * FLAC__stream_decoder_set_md5_checking(decoder, true);
- * [... other settings ...]
- * if(FLAC__stream_decoder_init_stream(
- *   decoder,
- *   my_read_callback,
- *   my_seek_callback,      // or NULL
- *   my_tell_callback,      // or NULL
- *   my_length_callback,    // or NULL
- *   my_eof_callback,       // or NULL
- *   my_write_callback,
- *   my_metadata_callback,  // or NULL
- *   my_error_callback,
- *   my_client_data
- * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something;
- * \endcode
- *
- * or you could do;
- *
- * \code
- * [...]
- * FILE *file = fopen("somefile.flac","rb");
- * if(file == NULL) do_somthing;
- * if(FLAC__stream_decoder_init_FILE(
- *   decoder,
- *   file,
- *   my_write_callback,
- *   my_metadata_callback,  // or NULL
- *   my_error_callback,
- *   my_client_data
- * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something;
- * \endcode
- *
- * or just:
- *
- * \code
- * [...]
- * if(FLAC__stream_decoder_init_file(
- *   decoder,
- *   "somefile.flac",
- *   my_write_callback,
- *   my_metadata_callback,  // or NULL
- *   my_error_callback,
- *   my_client_data
- * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something;
- * \endcode
- *
- * Another small change to the decoder is in how it handles unparseable
- * streams.  Before, when the decoder found an unparseable stream
- * (reserved for when the decoder encounters a stream from a future
- * encoder that it can't parse), it changed the state to
- * \c FLAC__STREAM_DECODER_UNPARSEABLE_STREAM.  Now the decoder instead
- * drops sync and calls the error callback with a new error code
- * \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM.  This is
- * more robust.  If your error callback does not discriminate on the the
- * error state, your code does not need to be changed.
- *
- * The encoder now has a new setting:
- * FLAC__stream_encoder_set_apodization().  This is for setting the
- * method used to window the data before LPC analysis.  You only need to
- * add a call to this function if the default is not suitable.   There
- * are also two new convenience functions that may be useful:
- * FLAC__metadata_object_cuesheet_calculate_cddb_id() and
- * FLAC__metadata_get_cuesheet().
- *
- * The \a bytes parameter to FLAC__StreamDecoderReadCallback,
- * FLAC__StreamEncoderReadCallback, and FLAC__StreamEncoderWriteCallback
- * is now \c size_t instead of \c unsigned.
- */
-
-/** \defgroup porting_1_1_3_to_1_1_4 Porting from FLAC 1.1.3 to 1.1.4
- *  \ingroup porting
- *
- *  \brief
- *  This module describes porting from FLAC 1.1.3 to FLAC 1.1.4.
- *
- * There were no changes to any of the interfaces from 1.1.3 to 1.1.4.
- * There was a slight change in the implementation of
- * FLAC__stream_encoder_set_metadata(); the function now makes a copy
- * of the \a metadata array of pointers so the client no longer needs
- * to maintain it after the call.  The objects themselves that are
- * pointed to by the array are still not copied though and must be
- * maintained until the call to FLAC__stream_encoder_finish().
- */
-
-/** \defgroup porting_1_1_4_to_1_2_0 Porting from FLAC 1.1.4 to 1.2.0
- *  \ingroup porting
- *
- *  \brief
- *  This module describes porting from FLAC 1.1.4 to FLAC 1.2.0.
- *
- * There were only very minor changes to the interfaces from 1.1.4 to 1.2.0.
- * In libFLAC, \c FLAC__format_sample_rate_is_subset() was added.
- * In libFLAC++, \c FLAC::Decoder::Stream::get_decode_position() was added.
- *
- * Finally, value of the constant \c FLAC__FRAME_HEADER_RESERVED_LEN
- * has changed to reflect the conversion of one of the reserved bits
- * into active use.  It used to be \c 2 and now is \c 1.  However the
- * FLAC frame header length has not changed, so to skip the proper
- * number of bits, use \c FLAC__FRAME_HEADER_RESERVED_LEN +
- * \c FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN
- */
-
-/** \defgroup flac FLAC C API
- *
- * The FLAC C API is the interface to libFLAC, a set of structures
- * describing the components of FLAC streams, and functions for
- * encoding and decoding streams, as well as manipulating FLAC
- * metadata in files.
- *
- * You should start with the format components as all other modules
- * are dependent on it.
- */
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/alloc.h b/modules/juce_audio_formats/codecs/flac/alloc.h
deleted file mode 100644
index 3aab81c..0000000
--- a/modules/juce_audio_formats/codecs/flac/alloc.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/* alloc - Convenience routines for safely allocating memory
- * Copyright (C) 2007-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__SHARE__ALLOC_H
-#define FLAC__SHARE__ALLOC_H
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-/* WATCHOUT: for c++ you may have to #define __STDC_LIMIT_MACROS 1 real early
- * before #including this file,  otherwise SIZE_MAX might not be defined
- */
-
-#include <limits.h> /* for SIZE_MAX */
-#if HAVE_STDINT_H
-#include <stdint.h> /* for SIZE_MAX in case limits.h didn't get it */
-#endif
-#include <stdlib.h> /* for size_t, malloc(), etc */
-#include "compat.h"
-
-#ifndef SIZE_MAX
-# ifndef SIZE_T_MAX
-#  ifdef _MSC_VER
-#   ifdef _WIN64
-#    define SIZE_T_MAX 0xffffffffffffffffui64
-#   else
-#    define SIZE_T_MAX 0xffffffff
-#   endif
-#  else
-#   error
-#  endif
-# endif
-# define SIZE_MAX SIZE_T_MAX
-#endif
-
-/* avoid malloc()ing 0 bytes, see:
- * https://www.securecoding.cert.org/confluence/display/seccode/MEM04-A.+Do+not+make+assumptions+about+the+result+of+allocating+0+bytes?focusedCommentId=5407003
-*/
-static inline void *safe_malloc_(size_t size)
-{
-	/* malloc(0) is undefined; FLAC src convention is to always allocate */
-	if(!size)
-		size++;
-	return malloc(size);
-}
-
-static inline void *safe_calloc_(size_t nmemb, size_t size)
-{
-	if(!nmemb || !size)
-		return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */
-	return calloc(nmemb, size);
-}
-
-/*@@@@ there's probably a better way to prevent overflows when allocating untrusted sums but this works for now */
-
-static inline void *safe_malloc_add_2op_(size_t size1, size_t size2)
-{
-	size2 += size1;
-	if(size2 < size1)
-		return 0;
-	return safe_malloc_(size2);
-}
-
-static inline void *safe_malloc_add_3op_(size_t size1, size_t size2, size_t size3)
-{
-	size2 += size1;
-	if(size2 < size1)
-		return 0;
-	size3 += size2;
-	if(size3 < size2)
-		return 0;
-	return safe_malloc_(size3);
-}
-
-static inline void *safe_malloc_add_4op_(size_t size1, size_t size2, size_t size3, size_t size4)
-{
-	size2 += size1;
-	if(size2 < size1)
-		return 0;
-	size3 += size2;
-	if(size3 < size2)
-		return 0;
-	size4 += size3;
-	if(size4 < size3)
-		return 0;
-	return safe_malloc_(size4);
-}
-
-void *safe_malloc_mul_2op_(size_t size1, size_t size2) ;
-
-static inline void *safe_malloc_mul_3op_(size_t size1, size_t size2, size_t size3)
-{
-	if(!size1 || !size2 || !size3)
-		return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */
-	if(size1 > SIZE_MAX / size2)
-		return 0;
-	size1 *= size2;
-	if(size1 > SIZE_MAX / size3)
-		return 0;
-	return malloc(size1*size3);
-}
-
-/* size1*size2 + size3 */
-static inline void *safe_malloc_mul2add_(size_t size1, size_t size2, size_t size3)
-{
-	if(!size1 || !size2)
-		return safe_malloc_(size3);
-	if(size1 > SIZE_MAX / size2)
-		return 0;
-	return safe_malloc_add_2op_(size1*size2, size3);
-}
-
-/* size1 * (size2 + size3) */
-static inline void *safe_malloc_muladd2_(size_t size1, size_t size2, size_t size3)
-{
-	if(!size1 || (!size2 && !size3))
-		return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */
-	size2 += size3;
-	if(size2 < size3)
-		return 0;
-	if(size1 > SIZE_MAX / size2)
-		return 0;
-	return malloc(size1*size2);
-}
-
-static inline void *safe_realloc_add_2op_(void *ptr, size_t size1, size_t size2)
-{
-	size2 += size1;
-	if(size2 < size1)
-		return 0;
-	return realloc(ptr, size2);
-}
-
-static inline void *safe_realloc_add_3op_(void *ptr, size_t size1, size_t size2, size_t size3)
-{
-	size2 += size1;
-	if(size2 < size1)
-		return 0;
-	size3 += size2;
-	if(size3 < size2)
-		return 0;
-	return realloc(ptr, size3);
-}
-
-static inline void *safe_realloc_add_4op_(void *ptr, size_t size1, size_t size2, size_t size3, size_t size4)
-{
-	size2 += size1;
-	if(size2 < size1)
-		return 0;
-	size3 += size2;
-	if(size3 < size2)
-		return 0;
-	size4 += size3;
-	if(size4 < size3)
-		return 0;
-	return realloc(ptr, size4);
-}
-
-static inline void *safe_realloc_mul_2op_(void *ptr, size_t size1, size_t size2)
-{
-	if(!size1 || !size2)
-		return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */
-	if(size1 > SIZE_MAX / size2)
-		return 0;
-	return realloc(ptr, size1*size2);
-}
-
-/* size1 * (size2 + size3) */
-static inline void *safe_realloc_muladd2_(void *ptr, size_t size1, size_t size2, size_t size3)
-{
-	if(!size1 || (!size2 && !size3))
-		return realloc(ptr, 0); /* preserve POSIX realloc(ptr, 0) semantics */
-	size2 += size3;
-	if(size2 < size3)
-		return 0;
-	return safe_realloc_mul_2op_(ptr, size1, size2);
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/assert.h b/modules/juce_audio_formats/codecs/flac/assert.h
deleted file mode 100644
index f02aeac..0000000
--- a/modules/juce_audio_formats/codecs/flac/assert.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__ASSERT_H
-#define FLAC__ASSERT_H
-
-/* we need this since some compilers (like MSVC) leave assert()s on release code (and we don't want to use their ASSERT) */
-#ifdef DEBUG
-#include <assert.h>
-#define FLAC__ASSERT(x) assert(x)
-#define FLAC__ASSERT_DECLARATION(x) x
-#else
-#define FLAC__ASSERT(x)
-#define FLAC__ASSERT_DECLARATION(x)
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/callback.h b/modules/juce_audio_formats/codecs/flac/callback.h
deleted file mode 100644
index 9928843..0000000
--- a/modules/juce_audio_formats/codecs/flac/callback.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2004-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__CALLBACK_H
-#define FLAC__CALLBACK_H
-
-#include "ordinals.h"
-#include <stdlib.h> /* for size_t */
-
-/** \file include/FLAC/callback.h
- *
- *  \brief
- *  This module defines the structures for describing I/O callbacks
- *  to the other FLAC interfaces.
- *
- *  See the detailed documentation for callbacks in the
- *  \link flac_callbacks callbacks \endlink module.
- */
-
-/** \defgroup flac_callbacks FLAC/callback.h: I/O callback structures
- *  \ingroup flac
- *
- *  \brief
- *  This module defines the structures for describing I/O callbacks
- *  to the other FLAC interfaces.
- *
- *  The purpose of the I/O callback functions is to create a common way
- *  for the metadata interfaces to handle I/O.
- *
- *  Originally the metadata interfaces required filenames as the way of
- *  specifying FLAC files to operate on.  This is problematic in some
- *  environments so there is an additional option to specify a set of
- *  callbacks for doing I/O on the FLAC file, instead of the filename.
- *
- *  In addition to the callbacks, a FLAC__IOHandle type is defined as an
- *  opaque structure for a data source.
- *
- *  The callback function prototypes are similar (but not identical) to the
- *  stdio functions fread, fwrite, fseek, ftell, feof, and fclose.  If you use
- *  stdio streams to implement the callbacks, you can pass fread, fwrite, and
- *  fclose anywhere a FLAC__IOCallback_Read, FLAC__IOCallback_Write, or
- *  FLAC__IOCallback_Close is required, and a FILE* anywhere a FLAC__IOHandle
- *  is required.  \warning You generally CANNOT directly use fseek or ftell
- *  for FLAC__IOCallback_Seek or FLAC__IOCallback_Tell since on most systems
- *  these use 32-bit offsets and FLAC requires 64-bit offsets to deal with
- *  large files.  You will have to find an equivalent function (e.g. ftello),
- *  or write a wrapper.  The same is true for feof() since this is usually
- *  implemented as a macro, not as a function whose address can be taken.
- *
- * \{
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** This is the opaque handle type used by the callbacks.  Typically
- *  this is a \c FILE* or address of a file descriptor.
- */
-typedef void* FLAC__IOHandle;
-
-/** Signature for the read callback.
- *  The signature and semantics match POSIX fread() implementations
- *  and can generally be used interchangeably.
- *
- * \param  ptr      The address of the read buffer.
- * \param  size     The size of the records to be read.
- * \param  nmemb    The number of records to be read.
- * \param  handle   The handle to the data source.
- * \retval size_t
- *    The number of records read.
- */
-typedef size_t (*FLAC__IOCallback_Read) (void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle);
-
-/** Signature for the write callback.
- *  The signature and semantics match POSIX fwrite() implementations
- *  and can generally be used interchangeably.
- *
- * \param  ptr      The address of the write buffer.
- * \param  size     The size of the records to be written.
- * \param  nmemb    The number of records to be written.
- * \param  handle   The handle to the data source.
- * \retval size_t
- *    The number of records written.
- */
-typedef size_t (*FLAC__IOCallback_Write) (const void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle);
-
-/** Signature for the seek callback.
- *  The signature and semantics mostly match POSIX fseek() WITH ONE IMPORTANT
- *  EXCEPTION: the offset is a 64-bit type whereas fseek() is generally 'long'
- *  and 32-bits wide.
- *
- * \param  handle   The handle to the data source.
- * \param  offset   The new position, relative to \a whence
- * \param  whence   \c SEEK_SET, \c SEEK_CUR, or \c SEEK_END
- * \retval int
- *    \c 0 on success, \c -1 on error.
- */
-typedef int (*FLAC__IOCallback_Seek) (FLAC__IOHandle handle, FLAC__int64 offset, int whence);
-
-/** Signature for the tell callback.
- *  The signature and semantics mostly match POSIX ftell() WITH ONE IMPORTANT
- *  EXCEPTION: the offset is a 64-bit type whereas ftell() is generally 'long'
- *  and 32-bits wide.
- *
- * \param  handle   The handle to the data source.
- * \retval FLAC__int64
- *    The current position on success, \c -1 on error.
- */
-typedef FLAC__int64 (*FLAC__IOCallback_Tell) (FLAC__IOHandle handle);
-
-/** Signature for the EOF callback.
- *  The signature and semantics mostly match POSIX feof() but WATCHOUT:
- *  on many systems, feof() is a macro, so in this case a wrapper function
- *  must be provided instead.
- *
- * \param  handle   The handle to the data source.
- * \retval int
- *    \c 0 if not at end of file, nonzero if at end of file.
- */
-typedef int (*FLAC__IOCallback_Eof) (FLAC__IOHandle handle);
-
-/** Signature for the close callback.
- *  The signature and semantics match POSIX fclose() implementations
- *  and can generally be used interchangeably.
- *
- * \param  handle   The handle to the data source.
- * \retval int
- *    \c 0 on success, \c EOF on error.
- */
-typedef int (*FLAC__IOCallback_Close) (FLAC__IOHandle handle);
-
-/** A structure for holding a set of callbacks.
- *  Each FLAC interface that requires a FLAC__IOCallbacks structure will
- *  describe which of the callbacks are required.  The ones that are not
- *  required may be set to NULL.
- *
- *  If the seek requirement for an interface is optional, you can signify that
- *  a data sorce is not seekable by setting the \a seek field to \c NULL.
- */
-typedef struct {
-	FLAC__IOCallback_Read read;
-	FLAC__IOCallback_Write write;
-	FLAC__IOCallback_Seek seek;
-	FLAC__IOCallback_Tell tell;
-	FLAC__IOCallback_Eof eof;
-	FLAC__IOCallback_Close close;
-} FLAC__IOCallbacks;
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/compat.h b/modules/juce_audio_formats/codecs/flac/compat.h
deleted file mode 100644
index a3dc7c7..0000000
--- a/modules/juce_audio_formats/codecs/flac/compat.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2012-2014  Xiph.org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* This is the prefered location of all CPP hackery to make $random_compiler
- * work like something approaching a C99 (or maybe more accurately GNU99)
- * compiler.
- *
- * It is assumed that this header will be included after "config.h".
- */
-
-#ifndef FLAC__SHARE__COMPAT_H
-#define FLAC__SHARE__COMPAT_H
-
-#if defined _WIN32 && !defined __CYGWIN__
-/* where MSVC puts unlink() */
-# include <io.h>
-#else
-# include <unistd.h>
-#endif
-
-#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__
-#include <sys/types.h> /* for off_t */
-#define FLAC__off_t __int64 /* use this instead of off_t to fix the 2 GB limit */
-#if !defined __MINGW32__
-#define fseeko _fseeki64
-#define ftello _ftelli64
-#else /* MinGW */
-#if !defined(HAVE_FSEEKO)
-#define fseeko fseeko64
-#define ftello ftello64
-#endif
-#endif
-#else
-#define FLAC__off_t off_t
-#endif
-
-#if HAVE_INTTYPES_H
-#define __STDC_FORMAT_MACROS
-#include <inttypes.h>
-#endif
-
-#if defined(_MSC_VER)
-#define strtoll _strtoi64
-#define strtoull _strtoui64
-#endif
-
-#if defined(_MSC_VER)
-#define inline __inline
-#endif
-
-#if defined __INTEL_COMPILER || (defined _MSC_VER && defined _WIN64)
-/* MSVS generates VERY slow 32-bit code with __restrict */
-#define flac_restrict __restrict
-#elif defined __GNUC__
-#define flac_restrict __restrict__
-#else
-#define flac_restrict
-#endif
-
-#define FLAC__U64L(x) x##ULL
-
-#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__
-#define FLAC__STRCASECMP stricmp
-#define FLAC__STRNCASECMP strnicmp
-#else
-#define FLAC__STRCASECMP strcasecmp
-#define FLAC__STRNCASECMP strncasecmp
-#endif
-
-#if defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ || defined __EMX__
-#include <io.h> /* for _setmode(), chmod() */
-#include <fcntl.h> /* for _O_BINARY */
-#else
-#include <unistd.h> /* for chown(), unlink() */
-#endif
-
-#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__
-#if defined __BORLANDC__
-#include <utime.h> /* for utime() */
-#else
-#include <sys/utime.h> /* for utime() */
-#endif
-#else
-#include <sys/types.h> /* some flavors of BSD (like OS X) require this to get time_t */
-#include <utime.h> /* for utime() */
-#endif
-
-#if defined _MSC_VER
-#  if _MSC_VER >= 1600
-/* Visual Studio 2010 has decent C99 support */
-#    include <stdint.h>
-#    define PRIu64 "llu"
-#    define PRId64 "lld"
-#    define PRIx64 "llx"
-#  else
-#    include <limits.h>
-#    ifndef UINT32_MAX
-#      define UINT32_MAX _UI32_MAX
-#    endif
-     typedef unsigned __int64 uint64_t;
-     typedef unsigned __int32 uint32_t;
-     typedef unsigned __int16 uint16_t;
-     typedef unsigned __int8 uint8_t;
-     typedef __int64 int64_t;
-     typedef __int32 int32_t;
-     typedef __int16 int16_t;
-     typedef __int8  int8_t;
-#    define PRIu64 "I64u"
-#    define PRId64 "I64d"
-#    define PRIx64 "I64x"
-#  endif
-#endif /* defined _MSC_VER */
-
-#ifdef _WIN32
-/* All char* strings are in UTF-8 format. Added to support Unicode files on Windows */
-#include "win_utf8_io.h"
-
-#define flac_printf printf_utf8
-#define flac_fprintf fprintf_utf8
-#define flac_vfprintf vfprintf_utf8
-#define flac_fopen fopen_utf8
-#define flac_chmod chmod_utf8
-#define flac_utime utime_utf8
-#define flac_unlink unlink_utf8
-#define flac_rename rename_utf8
-#define flac_stat _stat64_utf8
-
-#else
-
-#define flac_printf printf
-#define flac_fprintf fprintf
-#define flac_vfprintf vfprintf
-#define flac_fopen fopen
-#define flac_chmod chmod
-#define flac_utime utime
-#define flac_unlink unlink
-#define flac_rename rename
-#define flac_stat stat
-
-#endif
-
-#ifdef _WIN32
-#define flac_stat_s __stat64 /* stat struct */
-#define flac_fstat _fstat64
-#else
-#define flac_stat_s stat /* stat struct */
-#define flac_fstat fstat
-#endif
-
-#ifndef M_LN2
-#define M_LN2 0.69314718055994530942
-#endif
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-/* FLAC needs to compile and work correctly on systems with a normal ISO C99
- * snprintf as well as Microsoft Visual Studio which has an non-standards
- * conformant snprint_s function.
- *
- * This function wraps the MS version to behave more like the the ISO version.
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-int flac_snprintf(char *str, size_t size, const char *fmt, ...);
-int flac_vsnprintf(char *str, size_t size, const char *fmt, va_list va);
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* FLAC__SHARE__COMPAT_H */
diff --git a/modules/juce_audio_formats/codecs/flac/endswap.h b/modules/juce_audio_formats/codecs/flac/endswap.h
deleted file mode 100644
index b2a7e85..0000000
--- a/modules/juce_audio_formats/codecs/flac/endswap.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2012-2014  Xiph.org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* It is assumed that this header will be included after "config.h". */
-
-#if HAVE_BSWAP32			/* GCC and Clang */
-
-/* GCC prior to 4.8 didn't provide bswap16 on x86_64 */
-#if ! HAVE_BSWAP16
-static inline unsigned short __builtin_bswap16(unsigned short a)
-{
-	return (a<<8)|(a>>8);
-}
-#endif
-
-#define	ENDSWAP_16(x)		(__builtin_bswap16 (x))
-#define	ENDSWAP_32(x)		(__builtin_bswap32 (x))
-
-#elif defined _MSC_VER		/* Windows. Apparently in <stdlib.h>. */
-
-#define	ENDSWAP_16(x)		(_byteswap_ushort (x))
-#define	ENDSWAP_32(x)		(_byteswap_ulong (x))
-
-#elif defined HAVE_BYTESWAP_H		/* Linux */
-
-#include <byteswap.h>
-
-#define	ENDSWAP_16(x)		(bswap_16 (x))
-#define	ENDSWAP_32(x)		(bswap_32 (x))
-
-#else
-
-#define	ENDSWAP_16(x)		((((x) >> 8) & 0xFF) | (((x) & 0xFF) << 8))
-#define	ENDSWAP_32(x)		((((x) >> 24) & 0xFF) | (((x) >> 8) & 0xFF00) | (((x) & 0xFF00) << 8) | (((x) & 0xFF) << 24))
-
-#endif
-
-
-/* Host to little-endian byte swapping. */
-#if CPU_IS_BIG_ENDIAN
-
-#define H2LE_16(x)		ENDSWAP_16 (x)
-#define H2LE_32(x)		ENDSWAP_32 (x)
-
-#else
-
-#define H2LE_16(x)		(x)
-#define H2LE_32(x)		(x)
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/export.h b/modules/juce_audio_formats/codecs/flac/export.h
deleted file mode 100644
index 30f018b..0000000
--- a/modules/juce_audio_formats/codecs/flac/export.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__EXPORT_H
-#define FLAC__EXPORT_H
-
-/** \file include/FLAC/export.h
- *
- *  \brief
- *  This module contains #defines and symbols for exporting function
- *  calls, and providing version information and compiled-in features.
- *
- *  See the \link flac_export export \endlink module.
- */
-
-/** \defgroup flac_export FLAC/export.h: export symbols
- *  \ingroup flac
- *
- *  \brief
- *  This module contains #defines and symbols for exporting function
- *  calls, and providing version information and compiled-in features.
- *
- *  If you are compiling with MSVC and will link to the static library
- *  (libFLAC.lib) you should define FLAC__NO_DLL in your project to
- *  make sure the symbols are exported properly.
- *
- * \{
- */
-
-#if defined(FLAC__NO_DLL)
-#define FLAC_API
-
-#elif defined(_MSC_VER)
-#ifdef FLAC_API_EXPORTS
-#define	FLAC_API __declspec(dllexport)
-#else
-#define FLAC_API __declspec(dllimport)
-#endif
-
-#elif defined(FLAC__USE_VISIBILITY_ATTR)
-#define FLAC_API __attribute__ ((visibility ("default")))
-
-#else
-#define FLAC_API
-
-#endif
-
-/** These #defines will mirror the libtool-based library version number, see
- * http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning
- */
-#define FLAC_API_VERSION_CURRENT 11
-#define FLAC_API_VERSION_REVISION 0 /**< see above */
-#define FLAC_API_VERSION_AGE 3 /**< see above */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \c 1 if the library has been compiled with support for Ogg FLAC, else \c 0. */
-extern FLAC_API int FLAC_API_SUPPORTS_OGG_FLAC;
-
-#ifdef __cplusplus
-}
-#endif
-
-/* \} */
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/format.h b/modules/juce_audio_formats/codecs/flac/format.h
deleted file mode 100644
index a151b67..0000000
--- a/modules/juce_audio_formats/codecs/flac/format.h
+++ /dev/null
@@ -1,1025 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__FORMAT_H
-#define FLAC__FORMAT_H
-
-#include "export.h"
-#include "ordinals.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \file include/FLAC/format.h
- *
- *  \brief
- *  This module contains structure definitions for the representation
- *  of FLAC format components in memory.  These are the basic
- *  structures used by the rest of the interfaces.
- *
- *  See the detailed documentation in the
- *  \link flac_format format \endlink module.
- */
-
-/** \defgroup flac_format FLAC/format.h: format components
- *  \ingroup flac
- *
- *  \brief
- *  This module contains structure definitions for the representation
- *  of FLAC format components in memory.  These are the basic
- *  structures used by the rest of the interfaces.
- *
- *  First, you should be familiar with the
- *  <A HREF="../format.html">FLAC format</A>.  Many of the values here
- *  follow directly from the specification.  As a user of libFLAC, the
- *  interesting parts really are the structures that describe the frame
- *  header and metadata blocks.
- *
- *  The format structures here are very primitive, designed to store
- *  information in an efficient way.  Reading information from the
- *  structures is easy but creating or modifying them directly is
- *  more complex.  For the most part, as a user of a library, editing
- *  is not necessary; however, for metadata blocks it is, so there are
- *  convenience functions provided in the \link flac_metadata metadata
- *  module \endlink to simplify the manipulation of metadata blocks.
- *
- * \note
- * It's not the best convention, but symbols ending in _LEN are in bits
- * and _LENGTH are in bytes.  _LENGTH symbols are \#defines instead of
- * global variables because they are usually used when declaring byte
- * arrays and some compilers require compile-time knowledge of array
- * sizes when declared on the stack.
- *
- * \{
- */
-
-
-/*
-	Most of the values described in this file are defined by the FLAC
-	format specification.  There is nothing to tune here.
-*/
-
-/** The largest legal metadata type code. */
-#define FLAC__MAX_METADATA_TYPE_CODE (126u)
-
-/** The minimum block size, in samples, permitted by the format. */
-#define FLAC__MIN_BLOCK_SIZE (16u)
-
-/** The maximum block size, in samples, permitted by the format. */
-#define FLAC__MAX_BLOCK_SIZE (65535u)
-
-/** The maximum block size, in samples, permitted by the FLAC subset for
- *  sample rates up to 48kHz. */
-#define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u)
-
-/** The maximum number of channels permitted by the format. */
-#define FLAC__MAX_CHANNELS (8u)
-
-/** The minimum sample resolution permitted by the format. */
-#define FLAC__MIN_BITS_PER_SAMPLE (4u)
-
-/** The maximum sample resolution permitted by the format. */
-#define FLAC__MAX_BITS_PER_SAMPLE (32u)
-
-/** The maximum sample resolution permitted by libFLAC.
- *
- * \warning
- * FLAC__MAX_BITS_PER_SAMPLE is the limit of the FLAC format.  However,
- * the reference encoder/decoder is currently limited to 24 bits because
- * of prevalent 32-bit math, so make sure and use this value when
- * appropriate.
- */
-#define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u)
-
-/** The maximum sample rate permitted by the format.  The value is
- *  ((2 ^ 16) - 1) * 10; see <A HREF="../format.html">FLAC format</A>
- *  as to why.
- */
-#define FLAC__MAX_SAMPLE_RATE (655350u)
-
-/** The maximum LPC order permitted by the format. */
-#define FLAC__MAX_LPC_ORDER (32u)
-
-/** The maximum LPC order permitted by the FLAC subset for sample rates
- *  up to 48kHz. */
-#define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u)
-
-/** The minimum quantized linear predictor coefficient precision
- *  permitted by the format.
- */
-#define FLAC__MIN_QLP_COEFF_PRECISION (5u)
-
-/** The maximum quantized linear predictor coefficient precision
- *  permitted by the format.
- */
-#define FLAC__MAX_QLP_COEFF_PRECISION (15u)
-
-/** The maximum order of the fixed predictors permitted by the format. */
-#define FLAC__MAX_FIXED_ORDER (4u)
-
-/** The maximum Rice partition order permitted by the format. */
-#define FLAC__MAX_RICE_PARTITION_ORDER (15u)
-
-/** The maximum Rice partition order permitted by the FLAC Subset. */
-#define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u)
-
-/** The version string of the release, stamped onto the libraries and binaries.
- *
- * \note
- * This does not correspond to the shared library version number, which
- * is used to determine binary compatibility.
- */
-extern FLAC_API const char *FLAC__VERSION_STRING;
-
-/** The vendor string inserted by the encoder into the VORBIS_COMMENT block.
- *  This is a NUL-terminated ASCII string; when inserted into the
- *  VORBIS_COMMENT the trailing null is stripped.
- */
-extern FLAC_API const char *FLAC__VENDOR_STRING;
-
-/** The byte string representation of the beginning of a FLAC stream. */
-extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4]; /* = "fLaC" */
-
-/** The 32-bit integer big-endian representation of the beginning of
- *  a FLAC stream.
- */
-extern FLAC_API const unsigned FLAC__STREAM_SYNC; /* = 0x664C6143 */
-
-/** The length of the FLAC signature in bits. */
-extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN; /* = 32 bits */
-
-/** The length of the FLAC signature in bytes. */
-#define FLAC__STREAM_SYNC_LENGTH (4u)
-
-
-/*****************************************************************************
- *
- * Subframe structures
- *
- *****************************************************************************/
-
-/*****************************************************************************/
-
-/** An enumeration of the available entropy coding methods. */
-typedef enum {
-	FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0,
-	/**< Residual is coded by partitioning into contexts, each with it's own
-	 * 4-bit Rice parameter. */
-
-	FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1
-	/**< Residual is coded by partitioning into contexts, each with it's own
-	 * 5-bit Rice parameter. */
-} FLAC__EntropyCodingMethodType;
-
-/** Maps a FLAC__EntropyCodingMethodType to a C string.
- *
- *  Using a FLAC__EntropyCodingMethodType as the index to this array will
- *  give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[];
-
-
-/** Contents of a Rice partitioned residual
- */
-typedef struct {
-
-	unsigned *parameters;
-	/**< The Rice parameters for each context. */
-
-	unsigned *raw_bits;
-	/**< Widths for escape-coded partitions.  Will be non-zero for escaped
-	 * partitions and zero for unescaped partitions.
-	 */
-
-	unsigned capacity_by_order;
-	/**< The capacity of the \a parameters and \a raw_bits arrays
-	 * specified as an order, i.e. the number of array elements
-	 * allocated is 2 ^ \a capacity_by_order.
-	 */
-} FLAC__EntropyCodingMethod_PartitionedRiceContents;
-
-/** Header for a Rice partitioned residual.  (c.f. <A HREF="../format.html#partitioned_rice">format specification</A>)
- */
-typedef struct {
-
-	unsigned order;
-	/**< The partition order, i.e. # of contexts = 2 ^ \a order. */
-
-	const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents;
-	/**< The context's Rice parameters and/or raw bits. */
-
-} FLAC__EntropyCodingMethod_PartitionedRice;
-
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; /**< == 4 (bits) */
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; /**< == 4 (bits) */
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN; /**< == 5 (bits) */
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN; /**< == 5 (bits) */
-
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
-/**< == (1<<FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN)-1 */
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER;
-/**< == (1<<FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN)-1 */
-
-/** Header for the entropy coding method.  (c.f. <A HREF="../format.html#residual">format specification</A>)
- */
-typedef struct {
-	FLAC__EntropyCodingMethodType type;
-	union {
-		FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice;
-	} data;
-} FLAC__EntropyCodingMethod;
-
-extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN; /**< == 2 (bits) */
-
-/*****************************************************************************/
-
-/** An enumeration of the available subframe types. */
-typedef enum {
-	FLAC__SUBFRAME_TYPE_CONSTANT = 0, /**< constant signal */
-	FLAC__SUBFRAME_TYPE_VERBATIM = 1, /**< uncompressed signal */
-	FLAC__SUBFRAME_TYPE_FIXED = 2, /**< fixed polynomial prediction */
-	FLAC__SUBFRAME_TYPE_LPC = 3 /**< linear prediction */
-} FLAC__SubframeType;
-
-/** Maps a FLAC__SubframeType to a C string.
- *
- *  Using a FLAC__SubframeType as the index to this array will
- *  give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__SubframeTypeString[];
-
-
-/** CONSTANT subframe.  (c.f. <A HREF="../format.html#subframe_constant">format specification</A>)
- */
-typedef struct {
-	FLAC__int32 value; /**< The constant signal value. */
-} FLAC__Subframe_Constant;
-
-
-/** VERBATIM subframe.  (c.f. <A HREF="../format.html#subframe_verbatim">format specification</A>)
- */
-typedef struct {
-	const FLAC__int32 *data; /**< A pointer to verbatim signal. */
-} FLAC__Subframe_Verbatim;
-
-
-/** FIXED subframe.  (c.f. <A HREF="../format.html#subframe_fixed">format specification</A>)
- */
-typedef struct {
-	FLAC__EntropyCodingMethod entropy_coding_method;
-	/**< The residual coding method. */
-
-	unsigned order;
-	/**< The polynomial order. */
-
-	FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER];
-	/**< Warmup samples to prime the predictor, length == order. */
-
-	const FLAC__int32 *residual;
-	/**< The residual signal, length == (blocksize minus order) samples. */
-} FLAC__Subframe_Fixed;
-
-
-/** LPC subframe.  (c.f. <A HREF="../format.html#subframe_lpc">format specification</A>)
- */
-typedef struct {
-	FLAC__EntropyCodingMethod entropy_coding_method;
-	/**< The residual coding method. */
-
-	unsigned order;
-	/**< The FIR order. */
-
-	unsigned qlp_coeff_precision;
-	/**< Quantized FIR filter coefficient precision in bits. */
-
-	int quantization_level;
-	/**< The qlp coeff shift needed. */
-
-	FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER];
-	/**< FIR filter coefficients. */
-
-	FLAC__int32 warmup[FLAC__MAX_LPC_ORDER];
-	/**< Warmup samples to prime the predictor, length == order. */
-
-	const FLAC__int32 *residual;
-	/**< The residual signal, length == (blocksize minus order) samples. */
-} FLAC__Subframe_LPC;
-
-extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN; /**< == 4 (bits) */
-extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN; /**< == 5 (bits) */
-
-
-/** FLAC subframe structure.  (c.f. <A HREF="../format.html#subframe">format specification</A>)
- */
-typedef struct {
-	FLAC__SubframeType type;
-	union {
-		FLAC__Subframe_Constant constant;
-		FLAC__Subframe_Fixed fixed;
-		FLAC__Subframe_LPC lpc;
-		FLAC__Subframe_Verbatim verbatim;
-	} data;
-	unsigned wasted_bits;
-} FLAC__Subframe;
-
-/** == 1 (bit)
- *
- * This used to be a zero-padding bit (hence the name
- * FLAC__SUBFRAME_ZERO_PAD_LEN) but is now a reserved bit.  It still has a
- * mandatory value of \c 0 but in the future may take on the value \c 0 or \c 1
- * to mean something else.
- */
-extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN;
-extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN; /**< == 6 (bits) */
-extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN; /**< == 1 (bit) */
-
-extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK; /**< = 0x00 */
-extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK; /**< = 0x02 */
-extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK; /**< = 0x10 */
-extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK; /**< = 0x40 */
-
-/*****************************************************************************/
-
-
-/*****************************************************************************
- *
- * Frame structures
- *
- *****************************************************************************/
-
-/** An enumeration of the available channel assignments. */
-typedef enum {
-	FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, /**< independent channels */
-	FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, /**< left+side stereo */
-	FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, /**< right+side stereo */
-	FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 /**< mid+side stereo */
-} FLAC__ChannelAssignment;
-
-/** Maps a FLAC__ChannelAssignment to a C string.
- *
- *  Using a FLAC__ChannelAssignment as the index to this array will
- *  give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__ChannelAssignmentString[];
-
-/** An enumeration of the possible frame numbering methods. */
-typedef enum {
-	FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER, /**< number contains the frame number */
-	FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER /**< number contains the sample number of first sample in frame */
-} FLAC__FrameNumberType;
-
-/** Maps a FLAC__FrameNumberType to a C string.
- *
- *  Using a FLAC__FrameNumberType as the index to this array will
- *  give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__FrameNumberTypeString[];
-
-
-/** FLAC frame header structure.  (c.f. <A HREF="../format.html#frame_header">format specification</A>)
- */
-typedef struct {
-	unsigned blocksize;
-	/**< The number of samples per subframe. */
-
-	unsigned sample_rate;
-	/**< The sample rate in Hz. */
-
-	unsigned channels;
-	/**< The number of channels (== number of subframes). */
-
-	FLAC__ChannelAssignment channel_assignment;
-	/**< The channel assignment for the frame. */
-
-	unsigned bits_per_sample;
-	/**< The sample resolution. */
-
-	FLAC__FrameNumberType number_type;
-	/**< The numbering scheme used for the frame.  As a convenience, the
-	 * decoder will always convert a frame number to a sample number because
-	 * the rules are complex. */
-
-	union {
-		FLAC__uint32 frame_number;
-		FLAC__uint64 sample_number;
-	} number;
-	/**< The frame number or sample number of first sample in frame;
-	 * use the \a number_type value to determine which to use. */
-
-	FLAC__uint8 crc;
-	/**< CRC-8 (polynomial = x^8 + x^2 + x^1 + x^0, initialized with 0)
-	 * of the raw frame header bytes, meaning everything before the CRC byte
-	 * including the sync code.
-	 */
-} FLAC__FrameHeader;
-
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC; /**< == 0x3ffe; the frame header sync code */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN; /**< == 14 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN; /**< == 1 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN; /**< == 1 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN; /**< == 4 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN; /**< == 4 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN; /**< == 4 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN; /**< == 3 (bits) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN; /**< == 1 (bit) */
-extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN; /**< == 8 (bits) */
-
-
-/** FLAC frame footer structure.  (c.f. <A HREF="../format.html#frame_footer">format specification</A>)
- */
-typedef struct {
-	FLAC__uint16 crc;
-	/**< CRC-16 (polynomial = x^16 + x^15 + x^2 + x^0, initialized with
-	 * 0) of the bytes before the crc, back to and including the frame header
-	 * sync code.
-	 */
-} FLAC__FrameFooter;
-
-extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN; /**< == 16 (bits) */
-
-
-/** FLAC frame structure.  (c.f. <A HREF="../format.html#frame">format specification</A>)
- */
-typedef struct {
-	FLAC__FrameHeader header;
-	FLAC__Subframe subframes[FLAC__MAX_CHANNELS];
-	FLAC__FrameFooter footer;
-} FLAC__Frame;
-
-/*****************************************************************************/
-
-
-/*****************************************************************************
- *
- * Meta-data structures
- *
- *****************************************************************************/
-
-/** An enumeration of the available metadata block types. */
-typedef enum {
-
-	FLAC__METADATA_TYPE_STREAMINFO = 0,
-	/**< <A HREF="../format.html#metadata_block_streaminfo">STREAMINFO</A> block */
-
-	FLAC__METADATA_TYPE_PADDING = 1,
-	/**< <A HREF="../format.html#metadata_block_padding">PADDING</A> block */
-
-	FLAC__METADATA_TYPE_APPLICATION = 2,
-	/**< <A HREF="../format.html#metadata_block_application">APPLICATION</A> block */
-
-	FLAC__METADATA_TYPE_SEEKTABLE = 3,
-	/**< <A HREF="../format.html#metadata_block_seektable">SEEKTABLE</A> block */
-
-	FLAC__METADATA_TYPE_VORBIS_COMMENT = 4,
-	/**< <A HREF="../format.html#metadata_block_vorbis_comment">VORBISCOMMENT</A> block (a.k.a. FLAC tags) */
-
-	FLAC__METADATA_TYPE_CUESHEET = 5,
-	/**< <A HREF="../format.html#metadata_block_cuesheet">CUESHEET</A> block */
-
-	FLAC__METADATA_TYPE_PICTURE = 6,
-	/**< <A HREF="../format.html#metadata_block_picture">PICTURE</A> block */
-
-	FLAC__METADATA_TYPE_UNDEFINED = 7,
-	/**< marker to denote beginning of undefined type range; this number will increase as new metadata types are added */
-
-    FLAC__MAX_METADATA_TYPE = FLAC__MAX_METADATA_TYPE_CODE,
-    /**< No type will ever be greater than this. There is not enough room in the protocol block. */
-} FLAC__MetadataType;
-
-/** Maps a FLAC__MetadataType to a C string.
- *
- *  Using a FLAC__MetadataType as the index to this array will
- *  give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__MetadataTypeString[];
-
-
-/** FLAC STREAMINFO structure.  (c.f. <A HREF="../format.html#metadata_block_streaminfo">format specification</A>)
- */
-typedef struct {
-	unsigned min_blocksize, max_blocksize;
-	unsigned min_framesize, max_framesize;
-	unsigned sample_rate;
-	unsigned channels;
-	unsigned bits_per_sample;
-	FLAC__uint64 total_samples;
-	FLAC__byte md5sum[16];
-} FLAC__StreamMetadata_StreamInfo;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; /**< == 16 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; /**< == 16 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; /**< == 24 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; /**< == 24 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; /**< == 20 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; /**< == 3 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; /**< == 5 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; /**< == 36 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN; /**< == 128 (bits) */
-
-/** The total stream length of the STREAMINFO block in bytes. */
-#define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u)
-
-/** FLAC PADDING structure.  (c.f. <A HREF="../format.html#metadata_block_padding">format specification</A>)
- */
-typedef struct {
-	int dummy;
-	/**< Conceptually this is an empty struct since we don't store the
-	 * padding bytes.  Empty structs are not allowed by some C compilers,
-	 * hence the dummy.
-	 */
-} FLAC__StreamMetadata_Padding;
-
-
-/** FLAC APPLICATION structure.  (c.f. <A HREF="../format.html#metadata_block_application">format specification</A>)
- */
-typedef struct {
-	FLAC__byte id[4];
-	FLAC__byte *data;
-} FLAC__StreamMetadata_Application;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN; /**< == 32 (bits) */
-
-/** SeekPoint structure used in SEEKTABLE blocks.  (c.f. <A HREF="../format.html#seekpoint">format specification</A>)
- */
-typedef struct {
-	FLAC__uint64 sample_number;
-	/**<  The sample number of the target frame. */
-
-	FLAC__uint64 stream_offset;
-	/**< The offset, in bytes, of the target frame with respect to
-	 * beginning of the first frame. */
-
-	unsigned frame_samples;
-	/**< The number of samples in the target frame. */
-} FLAC__StreamMetadata_SeekPoint;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN; /**< == 64 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN; /**< == 64 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN; /**< == 16 (bits) */
-
-/** The total stream length of a seek point in bytes. */
-#define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u)
-
-/** The value used in the \a sample_number field of
- *  FLAC__StreamMetadataSeekPoint used to indicate a placeholder
- *  point (== 0xffffffffffffffff).
- */
-extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
-
-
-/** FLAC SEEKTABLE structure.  (c.f. <A HREF="../format.html#metadata_block_seektable">format specification</A>)
- *
- * \note From the format specification:
- * - The seek points must be sorted by ascending sample number.
- * - Each seek point's sample number must be the first sample of the
- *   target frame.
- * - Each seek point's sample number must be unique within the table.
- * - Existence of a SEEKTABLE block implies a correct setting of
- *   total_samples in the stream_info block.
- * - Behavior is undefined when more than one SEEKTABLE block is
- *   present in a stream.
- */
-typedef struct {
-	unsigned num_points;
-	FLAC__StreamMetadata_SeekPoint *points;
-} FLAC__StreamMetadata_SeekTable;
-
-
-/** Vorbis comment entry structure used in VORBIS_COMMENT blocks.  (c.f. <A HREF="../format.html#metadata_block_vorbis_comment">format specification</A>)
- *
- *  For convenience, the APIs maintain a trailing NUL character at the end of
- *  \a entry which is not counted toward \a length, i.e.
- *  \code strlen(entry) == length \endcode
- */
-typedef struct {
-	FLAC__uint32 length;
-	FLAC__byte *entry;
-} FLAC__StreamMetadata_VorbisComment_Entry;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN; /**< == 32 (bits) */
-
-
-/** FLAC VORBIS_COMMENT structure.  (c.f. <A HREF="../format.html#metadata_block_vorbis_comment">format specification</A>)
- */
-typedef struct {
-	FLAC__StreamMetadata_VorbisComment_Entry vendor_string;
-	FLAC__uint32 num_comments;
-	FLAC__StreamMetadata_VorbisComment_Entry *comments;
-} FLAC__StreamMetadata_VorbisComment;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN; /**< == 32 (bits) */
-
-
-/** FLAC CUESHEET track index structure.  (See the
- * <A HREF="../format.html#cuesheet_track_index">format specification</A> for
- * the full description of each field.)
- */
-typedef struct {
-	FLAC__uint64 offset;
-	/**< Offset in samples, relative to the track offset, of the index
-	 * point.
-	 */
-
-	FLAC__byte number;
-	/**< The index point number. */
-} FLAC__StreamMetadata_CueSheet_Index;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN; /**< == 64 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN; /**< == 8 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN; /**< == 3*8 (bits) */
-
-
-/** FLAC CUESHEET track structure.  (See the
- * <A HREF="../format.html#cuesheet_track">format specification</A> for
- * the full description of each field.)
- */
-typedef struct {
-	FLAC__uint64 offset;
-	/**< Track offset in samples, relative to the beginning of the FLAC audio stream. */
-
-	FLAC__byte number;
-	/**< The track number. */
-
-	char isrc[13];
-	/**< Track ISRC.  This is a 12-digit alphanumeric code plus a trailing \c NUL byte */
-
-	unsigned type:1;
-	/**< The track type: 0 for audio, 1 for non-audio. */
-
-	unsigned pre_emphasis:1;
-	/**< The pre-emphasis flag: 0 for no pre-emphasis, 1 for pre-emphasis. */
-
-	FLAC__byte num_indices;
-	/**< The number of track index points. */
-
-	FLAC__StreamMetadata_CueSheet_Index *indices;
-	/**< NULL if num_indices == 0, else pointer to array of index points. */
-
-} FLAC__StreamMetadata_CueSheet_Track;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN; /**< == 64 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN; /**< == 8 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN; /**< == 12*8 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN; /**< == 1 (bit) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN; /**< == 1 (bit) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN; /**< == 6+13*8 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN; /**< == 8 (bits) */
-
-
-/** FLAC CUESHEET structure.  (See the
- * <A HREF="../format.html#metadata_block_cuesheet">format specification</A>
- * for the full description of each field.)
- */
-typedef struct {
-	char media_catalog_number[129];
-	/**< Media catalog number, in ASCII printable characters 0x20-0x7e.  In
-	 * general, the media catalog number may be 0 to 128 bytes long; any
-	 * unused characters should be right-padded with NUL characters.
-	 */
-
-	FLAC__uint64 lead_in;
-	/**< The number of lead-in samples. */
-
-	FLAC__bool is_cd;
-	/**< \c true if CUESHEET corresponds to a Compact Disc, else \c false. */
-
-	unsigned num_tracks;
-	/**< The number of tracks. */
-
-	FLAC__StreamMetadata_CueSheet_Track *tracks;
-	/**< NULL if num_tracks == 0, else pointer to array of tracks. */
-
-} FLAC__StreamMetadata_CueSheet;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; /**< == 128*8 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; /**< == 64 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN; /**< == 1 (bit) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; /**< == 7+258*8 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; /**< == 8 (bits) */
-
-
-/** An enumeration of the PICTURE types (see FLAC__StreamMetadataPicture and id3 v2.4 APIC tag). */
-typedef enum {
-	FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0, /**< Other */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1, /**< 32x32 pixels 'file icon' (PNG only) */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2, /**< Other file icon */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3, /**< Cover (front) */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4, /**< Cover (back) */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5, /**< Leaflet page */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6, /**< Media (e.g. label side of CD) */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7, /**< Lead artist/lead performer/soloist */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8, /**< Artist/performer */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9, /**< Conductor */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10, /**< Band/Orchestra */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11, /**< Composer */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12, /**< Lyricist/text writer */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13, /**< Recording Location */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14, /**< During recording */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15, /**< During performance */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16, /**< Movie/video screen capture */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17, /**< A bright coloured fish */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18, /**< Illustration */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19, /**< Band/artist logotype */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20, /**< Publisher/Studio logotype */
-	FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED
-} FLAC__StreamMetadata_Picture_Type;
-
-/** Maps a FLAC__StreamMetadata_Picture_Type to a C string.
- *
- *  Using a FLAC__StreamMetadata_Picture_Type as the index to this array
- *  will give the string equivalent.  The contents should not be
- *  modified.
- */
-extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[];
-
-/** FLAC PICTURE structure.  (See the
- * <A HREF="../format.html#metadata_block_picture">format specification</A>
- * for the full description of each field.)
- */
-typedef struct {
-	FLAC__StreamMetadata_Picture_Type type;
-	/**< The kind of picture stored. */
-
-	char *mime_type;
-	/**< Picture data's MIME type, in ASCII printable characters
-	 * 0x20-0x7e, NUL terminated.  For best compatibility with players,
-	 * use picture data of MIME type \c image/jpeg or \c image/png.  A
-	 * MIME type of '-->' is also allowed, in which case the picture
-	 * data should be a complete URL.  In file storage, the MIME type is
-	 * stored as a 32-bit length followed by the ASCII string with no NUL
-	 * terminator, but is converted to a plain C string in this structure
-	 * for convenience.
-	 */
-
-	FLAC__byte *description;
-	/**< Picture's description in UTF-8, NUL terminated.  In file storage,
-	 * the description is stored as a 32-bit length followed by the UTF-8
-	 * string with no NUL terminator, but is converted to a plain C string
-	 * in this structure for convenience.
-	 */
-
-	FLAC__uint32 width;
-	/**< Picture's width in pixels. */
-
-	FLAC__uint32 height;
-	/**< Picture's height in pixels. */
-
-	FLAC__uint32 depth;
-	/**< Picture's color depth in bits-per-pixel. */
-
-	FLAC__uint32 colors;
-	/**< For indexed palettes (like GIF), picture's number of colors (the
-	 * number of palette entries), or \c 0 for non-indexed (i.e. 2^depth).
-	 */
-
-	FLAC__uint32 data_length;
-	/**< Length of binary picture data in bytes. */
-
-	FLAC__byte *data;
-	/**< Binary picture data. */
-
-} FLAC__StreamMetadata_Picture;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN; /**< == 32 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN; /**< == 32 (bits) */
-
-
-/** Structure that is used when a metadata block of unknown type is loaded.
- *  The contents are opaque.  The structure is used only internally to
- *  correctly handle unknown metadata.
- */
-typedef struct {
-	FLAC__byte *data;
-} FLAC__StreamMetadata_Unknown;
-
-
-/** FLAC metadata block structure.  (c.f. <A HREF="../format.html#metadata_block">format specification</A>)
- */
-typedef struct {
-	FLAC__MetadataType type;
-	/**< The type of the metadata block; used determine which member of the
-	 * \a data union to dereference.  If type >= FLAC__METADATA_TYPE_UNDEFINED
-	 * then \a data.unknown must be used. */
-
-	FLAC__bool is_last;
-	/**< \c true if this metadata block is the last, else \a false */
-
-	unsigned length;
-	/**< Length, in bytes, of the block data as it appears in the stream. */
-
-	union {
-		FLAC__StreamMetadata_StreamInfo stream_info;
-		FLAC__StreamMetadata_Padding padding;
-		FLAC__StreamMetadata_Application application;
-		FLAC__StreamMetadata_SeekTable seek_table;
-		FLAC__StreamMetadata_VorbisComment vorbis_comment;
-		FLAC__StreamMetadata_CueSheet cue_sheet;
-		FLAC__StreamMetadata_Picture picture;
-		FLAC__StreamMetadata_Unknown unknown;
-	} data;
-	/**< Polymorphic block data; use the \a type value to determine which
-	 * to use. */
-} FLAC__StreamMetadata;
-
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN; /**< == 1 (bit) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN; /**< == 7 (bits) */
-extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN; /**< == 24 (bits) */
-
-/** The total stream length of a metadata block header in bytes. */
-#define FLAC__STREAM_METADATA_HEADER_LENGTH (4u)
-
-/*****************************************************************************/
-
-
-/*****************************************************************************
- *
- * Utility functions
- *
- *****************************************************************************/
-
-/** Tests that a sample rate is valid for FLAC.
- *
- * \param sample_rate  The sample rate to test for compliance.
- * \retval FLAC__bool
- *    \c true if the given sample rate conforms to the specification, else
- *    \c false.
- */
-FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate);
-
-/** Tests that a blocksize at the given sample rate is valid for the FLAC
- *  subset.
- *
- * \param blocksize    The blocksize to test for compliance.
- * \param sample_rate  The sample rate is needed, since the valid subset
- *                     blocksize depends on the sample rate.
- * \retval FLAC__bool
- *    \c true if the given blocksize conforms to the specification for the
- *    subset at the given sample rate, else \c false.
- */
-FLAC_API FLAC__bool FLAC__format_blocksize_is_subset(unsigned blocksize, unsigned sample_rate);
-
-/** Tests that a sample rate is valid for the FLAC subset.  The subset rules
- *  for valid sample rates are slightly more complex since the rate has to
- *  be expressible completely in the frame header.
- *
- * \param sample_rate  The sample rate to test for compliance.
- * \retval FLAC__bool
- *    \c true if the given sample rate conforms to the specification for the
- *    subset, else \c false.
- */
-FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate);
-
-/** Check a Vorbis comment entry name to see if it conforms to the Vorbis
- *  comment specification.
- *
- *  Vorbis comment names must be composed only of characters from
- *  [0x20-0x3C,0x3E-0x7D].
- *
- * \param name       A NUL-terminated string to be checked.
- * \assert
- *    \code name != NULL \endcode
- * \retval FLAC__bool
- *    \c false if entry name is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name);
-
-/** Check a Vorbis comment entry value to see if it conforms to the Vorbis
- *  comment specification.
- *
- *  Vorbis comment values must be valid UTF-8 sequences.
- *
- * \param value      A string to be checked.
- * \param length     A the length of \a value in bytes.  May be
- *                   \c (unsigned)(-1) to indicate that \a value is a plain
- *                   UTF-8 NUL-terminated string.
- * \assert
- *    \code value != NULL \endcode
- * \retval FLAC__bool
- *    \c false if entry name is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length);
-
-/** Check a Vorbis comment entry to see if it conforms to the Vorbis
- *  comment specification.
- *
- *  Vorbis comment entries must be of the form 'name=value', and 'name' and
- *  'value' must be legal according to
- *  FLAC__format_vorbiscomment_entry_name_is_legal() and
- *  FLAC__format_vorbiscomment_entry_value_is_legal() respectively.
- *
- * \param entry      An entry to be checked.
- * \param length     The length of \a entry in bytes.
- * \assert
- *    \code value != NULL \endcode
- * \retval FLAC__bool
- *    \c false if entry name is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length);
-
-/** Check a seek table to see if it conforms to the FLAC specification.
- *  See the format specification for limits on the contents of the
- *  seek table.
- *
- * \param seek_table  A pointer to a seek table to be checked.
- * \assert
- *    \code seek_table != NULL \endcode
- * \retval FLAC__bool
- *    \c false if seek table is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table);
-
-/** Sort a seek table's seek points according to the format specification.
- *  This includes a "unique-ification" step to remove duplicates, i.e.
- *  seek points with identical \a sample_number values.  Duplicate seek
- *  points are converted into placeholder points and sorted to the end of
- *  the table.
- *
- * \param seek_table  A pointer to a seek table to be sorted.
- * \assert
- *    \code seek_table != NULL \endcode
- * \retval unsigned
- *    The number of duplicate seek points converted into placeholders.
- */
-FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table);
-
-/** Check a cue sheet to see if it conforms to the FLAC specification.
- *  See the format specification for limits on the contents of the
- *  cue sheet.
- *
- * \param cue_sheet  A pointer to an existing cue sheet to be checked.
- * \param check_cd_da_subset  If \c true, check CUESHEET against more
- *                   stringent requirements for a CD-DA (audio) disc.
- * \param violation  Address of a pointer to a string.  If there is a
- *                   violation, a pointer to a string explanation of the
- *                   violation will be returned here. \a violation may be
- *                   \c NULL if you don't need the returned string.  Do not
- *                   free the returned string; it will always point to static
- *                   data.
- * \assert
- *    \code cue_sheet != NULL \endcode
- * \retval FLAC__bool
- *    \c false if cue sheet is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation);
-
-/** Check picture data to see if it conforms to the FLAC specification.
- *  See the format specification for limits on the contents of the
- *  PICTURE block.
- *
- * \param picture    A pointer to existing picture data to be checked.
- * \param violation  Address of a pointer to a string.  If there is a
- *                   violation, a pointer to a string explanation of the
- *                   violation will be returned here. \a violation may be
- *                   \c NULL if you don't need the returned string.  Do not
- *                   free the returned string; it will always point to static
- *                   data.
- * \assert
- *    \code picture != NULL \endcode
- * \retval FLAC__bool
- *    \c false if picture data is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation);
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c b/modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c
deleted file mode 100644
index e011f84..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/bitmath.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "include/private/bitmath.h"
-
-/* An example of what FLAC__bitmath_silog2() computes:
- *
- * silog2(-10) = 5
- * silog2(- 9) = 5
- * silog2(- 8) = 4
- * silog2(- 7) = 4
- * silog2(- 6) = 4
- * silog2(- 5) = 4
- * silog2(- 4) = 3
- * silog2(- 3) = 3
- * silog2(- 2) = 2
- * silog2(- 1) = 2
- * silog2(  0) = 0
- * silog2(  1) = 2
- * silog2(  2) = 3
- * silog2(  3) = 3
- * silog2(  4) = 4
- * silog2(  5) = 4
- * silog2(  6) = 4
- * silog2(  7) = 4
- * silog2(  8) = 5
- * silog2(  9) = 5
- * silog2( 10) = 5
- */
-unsigned FLAC__bitmath_silog2(int v)
-{
-	while(1) {
-		if(v == 0) {
-			return 0;
-		}
-		else if(v > 0) {
-			unsigned l = 0;
-			while(v) {
-				l++;
-				v >>= 1;
-			}
-			return l+1;
-		}
-		else if(v == -1) {
-			return 2;
-		}
-		else {
-			v++;
-			v = -v;
-		}
-	}
-}
-
-unsigned FLAC__bitmath_silog2_wide(FLAC__int64 v)
-{
-	while(1) {
-		if(v == 0) {
-			return 0;
-		}
-		else if(v > 0) {
-			unsigned l = 0;
-			while(v) {
-				l++;
-				v >>= 1;
-			}
-			return l+1;
-		}
-		else if(v == -1) {
-			return 2;
-		}
-		else {
-			v++;
-			v = -v;
-		}
-	}
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c b/modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c
deleted file mode 100644
index a4632e3..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c
+++ /dev/null
@@ -1,1058 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "include/private/bitmath.h"
-#include "include/private/bitreader.h"
-#include "include/private/crc.h"
-#include "../assert.h"
-#include "../compat.h"
-#include "../endswap.h"
-
-/* Things should be fastest when this matches the machine word size */
-/* WATCHOUT: if you change this you must also change the following #defines down to FLAC__clz_uint32 below to match */
-/* WATCHOUT: there are a few places where the code will not work unless uint32_t is >= 32 bits wide */
-/*           also, some sections currently only have fast versions for 4 or 8 bytes per word */
-#define FLAC__BYTES_PER_WORD 4		/* sizeof uint32_t */
-#define FLAC__BITS_PER_WORD (8 * FLAC__BYTES_PER_WORD)
-#define FLAC__WORD_ALL_ONES ((FLAC__uint32)0xffffffff)
-/* SWAP_BE_WORD_TO_HOST swaps bytes in a uint32_t (which is always big-endian) if necessary to match host byte order */
-#if WORDS_BIGENDIAN
-#define SWAP_BE_WORD_TO_HOST(x) (x)
-#else
-#define SWAP_BE_WORD_TO_HOST(x) ENDSWAP_32(x)
-#endif
-
-/*
- * This should be at least twice as large as the largest number of words
- * required to represent any 'number' (in any encoding) you are going to
- * read.  With FLAC this is on the order of maybe a few hundred bits.
- * If the buffer is smaller than that, the decoder won't be able to read
- * in a whole number that is in a variable length encoding (e.g. Rice).
- * But to be practical it should be at least 1K bytes.
- *
- * Increase this number to decrease the number of read callbacks, at the
- * expense of using more memory.  Or decrease for the reverse effect,
- * keeping in mind the limit from the first paragraph.  The optimal size
- * also depends on the CPU cache size and other factors; some twiddling
- * may be necessary to squeeze out the best performance.
- */
-static const unsigned FLAC__BITREADER_DEFAULT_CAPACITY = 65536u / FLAC__BITS_PER_WORD; /* in words */
-
-struct FLAC__BitReader {
-	/* any partially-consumed word at the head will stay right-justified as bits are consumed from the left */
-	/* any incomplete word at the tail will be left-justified, and bytes from the read callback are added on the right */
-	uint32_t *buffer;
-	unsigned capacity; /* in words */
-	unsigned words; /* # of completed words in buffer */
-	unsigned bytes; /* # of bytes in incomplete word at buffer[words] */
-	unsigned consumed_words; /* #words ... */
-	unsigned consumed_bits; /* ... + (#bits of head word) already consumed from the front of buffer */
-	unsigned read_crc16; /* the running frame CRC */
-	unsigned crc16_align; /* the number of bits in the current consumed word that should not be CRC'd */
-	FLAC__BitReaderReadCallback read_callback;
-	void *client_data;
-};
-
-static inline void crc16_update_word_(FLAC__BitReader *br, uint32_t word)
-{
-	register unsigned crc = br->read_crc16;
-#if FLAC__BYTES_PER_WORD == 4
-	switch(br->crc16_align) {
-		case  0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 24), crc);
-		case  8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc);
-		case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
-		case 24: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
-	}
-#elif FLAC__BYTES_PER_WORD == 8
-	switch(br->crc16_align) {
-		case  0: crc = FLAC__CRC16_UPDATE((unsigned)(word >> 56), crc);
-		case  8: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 48) & 0xff), crc);
-		case 16: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 40) & 0xff), crc);
-		case 24: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 32) & 0xff), crc);
-		case 32: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 24) & 0xff), crc);
-		case 40: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 16) & 0xff), crc);
-		case 48: crc = FLAC__CRC16_UPDATE((unsigned)((word >> 8) & 0xff), crc);
-		case 56: br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)(word & 0xff), crc);
-	}
-#else
-	for( ; br->crc16_align < FLAC__BITS_PER_WORD; br->crc16_align += 8)
-		crc = FLAC__CRC16_UPDATE((unsigned)((word >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), crc);
-	br->read_crc16 = crc;
-#endif
-	br->crc16_align = 0;
-}
-
-static FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br)
-{
-	unsigned start, end;
-	size_t bytes;
-	FLAC__byte *target;
-
-	/* first shift the unconsumed buffer data toward the front as much as possible */
-	if(br->consumed_words > 0) {
-		start = br->consumed_words;
-		end = br->words + (br->bytes? 1:0);
-		memmove(br->buffer, br->buffer+start, FLAC__BYTES_PER_WORD * (end - start));
-
-		br->words -= start;
-		br->consumed_words = 0;
-	}
-
-	/*
-	 * set the target for reading, taking into account word alignment and endianness
-	 */
-	bytes = (br->capacity - br->words) * FLAC__BYTES_PER_WORD - br->bytes;
-	if(bytes == 0)
-		return false; /* no space left, buffer is too small; see note for FLAC__BITREADER_DEFAULT_CAPACITY  */
-	target = ((FLAC__byte*)(br->buffer+br->words)) + br->bytes;
-
-	/* before reading, if the existing reader looks like this (say uint32_t is 32 bits wide)
-	 *   bitstream :  11 22 33 44 55            br->words=1 br->bytes=1 (partial tail word is left-justified)
-	 *   buffer[BE]:  11 22 33 44 55 ?? ?? ??   (shown layed out as bytes sequentially in memory)
-	 *   buffer[LE]:  44 33 22 11 ?? ?? ?? 55   (?? being don't-care)
-	 *                               ^^-------target, bytes=3
-	 * on LE machines, have to byteswap the odd tail word so nothing is
-	 * overwritten:
-	 */
-#if WORDS_BIGENDIAN
-#else
-	if(br->bytes)
-		br->buffer[br->words] = SWAP_BE_WORD_TO_HOST(br->buffer[br->words]);
-#endif
-
-	/* now it looks like:
-	 *   bitstream :  11 22 33 44 55            br->words=1 br->bytes=1
-	 *   buffer[BE]:  11 22 33 44 55 ?? ?? ??
-	 *   buffer[LE]:  44 33 22 11 55 ?? ?? ??
-	 *                               ^^-------target, bytes=3
-	 */
-
-	/* read in the data; note that the callback may return a smaller number of bytes */
-	if(!br->read_callback(target, &bytes, br->client_data))
-		return false;
-
-	/* after reading bytes 66 77 88 99 AA BB CC DD EE FF from the client:
-	 *   bitstream :  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
-	 *   buffer[BE]:  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ??
-	 *   buffer[LE]:  44 33 22 11 55 66 77 88 99 AA BB CC DD EE FF ??
-	 * now have to byteswap on LE machines:
-	 */
-#if WORDS_BIGENDIAN
-#else
-	end = (br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes + (FLAC__BYTES_PER_WORD-1)) / FLAC__BYTES_PER_WORD;
-	for(start = br->words; start < end; start++)
-		br->buffer[start] = SWAP_BE_WORD_TO_HOST(br->buffer[start]);
-#endif
-
-	/* now it looks like:
-	 *   bitstream :  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF
-	 *   buffer[BE]:  11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ??
-	 *   buffer[LE]:  44 33 22 11 88 77 66 55 CC BB AA 99 ?? FF EE DD
-	 * finally we'll update the reader values:
-	 */
-	end = br->words*FLAC__BYTES_PER_WORD + br->bytes + bytes;
-	br->words = end / FLAC__BYTES_PER_WORD;
-	br->bytes = end % FLAC__BYTES_PER_WORD;
-
-	return true;
-}
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-
-FLAC__BitReader *FLAC__bitreader_new(void)
-{
-	FLAC__BitReader *br = (FLAC__BitReader*) calloc(1, sizeof(FLAC__BitReader));
-
-	/* calloc() implies:
-		memset(br, 0, sizeof(FLAC__BitReader));
-		br->buffer = 0;
-		br->capacity = 0;
-		br->words = br->bytes = 0;
-		br->consumed_words = br->consumed_bits = 0;
-		br->read_callback = 0;
-		br->client_data = 0;
-	*/
-	return br;
-}
-
-void FLAC__bitreader_delete(FLAC__BitReader *br)
-{
-	FLAC__ASSERT(0 != br);
-
-	FLAC__bitreader_free(br);
-	free(br);
-}
-
-/***********************************************************************
- *
- * Public class methods
- *
- ***********************************************************************/
-
-FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__BitReaderReadCallback rcb, void *cd)
-{
-	FLAC__ASSERT(0 != br);
-
-	br->words = br->bytes = 0;
-	br->consumed_words = br->consumed_bits = 0;
-	br->capacity = FLAC__BITREADER_DEFAULT_CAPACITY;
-	br->buffer = (uint32_t*) malloc(sizeof(uint32_t) * br->capacity);
-	if(br->buffer == 0)
-		return false;
-	br->read_callback = rcb;
-	br->client_data = cd;
-
-	return true;
-}
-
-void FLAC__bitreader_free(FLAC__BitReader *br)
-{
-	FLAC__ASSERT(0 != br);
-
-	if(0 != br->buffer)
-		free(br->buffer);
-	br->buffer = 0;
-	br->capacity = 0;
-	br->words = br->bytes = 0;
-	br->consumed_words = br->consumed_bits = 0;
-	br->read_callback = 0;
-	br->client_data = 0;
-}
-
-FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br)
-{
-	br->words = br->bytes = 0;
-	br->consumed_words = br->consumed_bits = 0;
-	return true;
-}
-
-void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out)
-{
-	unsigned i, j;
-	if(br == 0) {
-		fprintf(out, "bitreader is NULL\n");
-	}
-	else {
-		fprintf(out, "bitreader: capacity=%u words=%u bytes=%u consumed: words=%u, bits=%u\n", br->capacity, br->words, br->bytes, br->consumed_words, br->consumed_bits);
-
-		for(i = 0; i < br->words; i++) {
-			fprintf(out, "%08X: ", i);
-			for(j = 0; j < FLAC__BITS_PER_WORD; j++)
-				if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
-					fprintf(out, ".");
-				else
-					fprintf(out, "%01u", br->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0);
-			fprintf(out, "\n");
-		}
-		if(br->bytes > 0) {
-			fprintf(out, "%08X: ", i);
-			for(j = 0; j < br->bytes*8; j++)
-				if(i < br->consumed_words || (i == br->consumed_words && j < br->consumed_bits))
-					fprintf(out, ".");
-				else
-					fprintf(out, "%01u", br->buffer[i] & (1 << (br->bytes*8-j-1)) ? 1:0);
-			fprintf(out, "\n");
-		}
-	}
-}
-
-void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed)
-{
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-	FLAC__ASSERT((br->consumed_bits & 7) == 0);
-
-	br->read_crc16 = (unsigned)seed;
-	br->crc16_align = br->consumed_bits;
-}
-
-FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br)
-{
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-	FLAC__ASSERT((br->consumed_bits & 7) == 0);
-	FLAC__ASSERT(br->crc16_align <= br->consumed_bits);
-
-	/* CRC any tail bytes in a partially-consumed word */
-	if(br->consumed_bits) {
-		const uint32_t tail = br->buffer[br->consumed_words];
-		for( ; br->crc16_align < br->consumed_bits; br->crc16_align += 8)
-			br->read_crc16 = FLAC__CRC16_UPDATE((unsigned)((tail >> (FLAC__BITS_PER_WORD-8-br->crc16_align)) & 0xff), br->read_crc16);
-	}
-	return br->read_crc16;
-}
-
-inline FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br)
-{
-	return ((br->consumed_bits & 7) == 0);
-}
-
-inline unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br)
-{
-	return 8 - (br->consumed_bits & 7);
-}
-
-inline unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br)
-{
-	return (br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits;
-}
-
-FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits)
-{
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-
-	FLAC__ASSERT(bits <= 32);
-	FLAC__ASSERT((br->capacity*FLAC__BITS_PER_WORD) * 2 >= bits);
-	FLAC__ASSERT(br->consumed_words <= br->words);
-
-	/* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
-	FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
-
-	if(bits == 0) { /* OPT: investigate if this can ever happen, maybe change to assertion */
-		*val = 0;
-		return true;
-	}
-
-	while((br->words-br->consumed_words)*FLAC__BITS_PER_WORD + br->bytes*8 - br->consumed_bits < bits) {
-		if(!bitreader_read_from_client_(br))
-			return false;
-	}
-	if(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
-		/* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */
-		if(br->consumed_bits) {
-			/* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
-			const unsigned n = FLAC__BITS_PER_WORD - br->consumed_bits;
-			const uint32_t word = br->buffer[br->consumed_words];
-			if(bits < n) {
-				*val = (word & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (n-bits);
-				br->consumed_bits += bits;
-				return true;
-			}
-			*val = word & (FLAC__WORD_ALL_ONES >> br->consumed_bits);
-			bits -= n;
-			crc16_update_word_(br, word);
-			br->consumed_words++;
-			br->consumed_bits = 0;
-			if(bits) { /* if there are still bits left to read, there have to be less than 32 so they will all be in the next word */
-				*val <<= bits;
-				*val |= (br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits));
-				br->consumed_bits = bits;
-			}
-			return true;
-		}
-		else {
-			const uint32_t word = br->buffer[br->consumed_words];
-			if(bits < FLAC__BITS_PER_WORD) {
-				*val = word >> (FLAC__BITS_PER_WORD-bits);
-				br->consumed_bits = bits;
-				return true;
-			}
-			/* at this point 'bits' must be == FLAC__BITS_PER_WORD; because of previous assertions, it can't be larger */
-			*val = word;
-			crc16_update_word_(br, word);
-			br->consumed_words++;
-			return true;
-		}
-	}
-	else {
-		/* in this case we're starting our read at a partial tail word;
-		 * the reader has guaranteed that we have at least 'bits' bits
-		 * available to read, which makes this case simpler.
-		 */
-		/* OPT: taking out the consumed_bits==0 "else" case below might make things faster if less code allows the compiler to inline this function */
-		if(br->consumed_bits) {
-			/* this also works when consumed_bits==0, it's just a little slower than necessary for that case */
-			FLAC__ASSERT(br->consumed_bits + bits <= br->bytes*8);
-			*val = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES >> br->consumed_bits)) >> (FLAC__BITS_PER_WORD-br->consumed_bits-bits);
-			br->consumed_bits += bits;
-			return true;
-		}
-		else {
-			*val = br->buffer[br->consumed_words] >> (FLAC__BITS_PER_WORD-bits);
-			br->consumed_bits += bits;
-			return true;
-		}
-	}
-}
-
-FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits)
-{
-	/* OPT: inline raw uint32 code here, or make into a macro if possible in the .h file */
-	if(!FLAC__bitreader_read_raw_uint32(br, (FLAC__uint32*)val, bits))
-		return false;
-	/* sign-extend: */
-	*val <<= (32-bits);
-	*val >>= (32-bits);
-	return true;
-}
-
-FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits)
-{
-	FLAC__uint32 hi, lo;
-
-	if(bits > 32) {
-		if(!FLAC__bitreader_read_raw_uint32(br, &hi, bits-32))
-			return false;
-		if(!FLAC__bitreader_read_raw_uint32(br, &lo, 32))
-			return false;
-		*val = hi;
-		*val <<= 32;
-		*val |= lo;
-	}
-	else {
-		if(!FLAC__bitreader_read_raw_uint32(br, &lo, bits))
-			return false;
-		*val = lo;
-	}
-	return true;
-}
-
-inline FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val)
-{
-	FLAC__uint32 x8, x32 = 0;
-
-	/* this doesn't need to be that fast as currently it is only used for vorbis comments */
-
-	if(!FLAC__bitreader_read_raw_uint32(br, &x32, 8))
-		return false;
-
-	if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
-		return false;
-	x32 |= (x8 << 8);
-
-	if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
-		return false;
-	x32 |= (x8 << 16);
-
-	if(!FLAC__bitreader_read_raw_uint32(br, &x8, 8))
-		return false;
-	x32 |= (x8 << 24);
-
-	*val = x32;
-	return true;
-}
-
-FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits)
-{
-	/*
-	 * OPT: a faster implementation is possible but probably not that useful
-	 * since this is only called a couple of times in the metadata readers.
-	 */
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-
-	if(bits > 0) {
-		const unsigned n = br->consumed_bits & 7;
-		unsigned m;
-		FLAC__uint32 x;
-
-		if(n != 0) {
-			m = flac_min(8-n, bits);
-			if(!FLAC__bitreader_read_raw_uint32(br, &x, m))
-				return false;
-			bits -= m;
-		}
-		m = bits / 8;
-		if(m > 0) {
-			if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(br, m))
-				return false;
-			bits %= 8;
-		}
-		if(bits > 0) {
-			if(!FLAC__bitreader_read_raw_uint32(br, &x, bits))
-				return false;
-		}
-	}
-
-	return true;
-}
-
-FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals)
-{
-	FLAC__uint32 x;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
-
-	/* step 1: skip over partial head word to get word aligned */
-	while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
-		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-			return false;
-		nvals--;
-	}
-	if(0 == nvals)
-		return true;
-	/* step 2: skip whole words in chunks */
-	while(nvals >= FLAC__BYTES_PER_WORD) {
-		if(br->consumed_words < br->words) {
-			br->consumed_words++;
-			nvals -= FLAC__BYTES_PER_WORD;
-		}
-		else if(!bitreader_read_from_client_(br))
-			return false;
-	}
-	/* step 3: skip any remainder from partial tail bytes */
-	while(nvals) {
-		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-			return false;
-		nvals--;
-	}
-
-	return true;
-}
-
-FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals)
-{
-	FLAC__uint32 x;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(br));
-
-	/* step 1: read from partial head word to get word aligned */
-	while(nvals && br->consumed_bits) { /* i.e. run until we read 'nvals' bytes or we hit the end of the head word */
-		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-			return false;
-		*val++ = (FLAC__byte)x;
-		nvals--;
-	}
-	if(0 == nvals)
-		return true;
-	/* step 2: read whole words in chunks */
-	while(nvals >= FLAC__BYTES_PER_WORD) {
-		if(br->consumed_words < br->words) {
-			const uint32_t word = br->buffer[br->consumed_words++];
-#if FLAC__BYTES_PER_WORD == 4
-			val[0] = (FLAC__byte)(word >> 24);
-			val[1] = (FLAC__byte)(word >> 16);
-			val[2] = (FLAC__byte)(word >> 8);
-			val[3] = (FLAC__byte)word;
-#elif FLAC__BYTES_PER_WORD == 8
-			val[0] = (FLAC__byte)(word >> 56);
-			val[1] = (FLAC__byte)(word >> 48);
-			val[2] = (FLAC__byte)(word >> 40);
-			val[3] = (FLAC__byte)(word >> 32);
-			val[4] = (FLAC__byte)(word >> 24);
-			val[5] = (FLAC__byte)(word >> 16);
-			val[6] = (FLAC__byte)(word >> 8);
-			val[7] = (FLAC__byte)word;
-#else
-			for(x = 0; x < FLAC__BYTES_PER_WORD; x++)
-				val[x] = (FLAC__byte)(word >> (8*(FLAC__BYTES_PER_WORD-x-1)));
-#endif
-			val += FLAC__BYTES_PER_WORD;
-			nvals -= FLAC__BYTES_PER_WORD;
-		}
-		else if(!bitreader_read_from_client_(br))
-			return false;
-	}
-	/* step 3: read any remainder from partial tail bytes */
-	while(nvals) {
-		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-			return false;
-		*val++ = (FLAC__byte)x;
-		nvals--;
-	}
-
-	return true;
-}
-
-FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val)
-#if 0 /* slow but readable version */
-{
-	unsigned bit;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-
-	*val = 0;
-	while(1) {
-		if(!FLAC__bitreader_read_bit(br, &bit))
-			return false;
-		if(bit)
-			break;
-		else
-			*val++;
-	}
-	return true;
-}
-#else
-{
-	unsigned i;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-
-	*val = 0;
-	while(1) {
-		while(br->consumed_words < br->words) { /* if we've not consumed up to a partial tail word... */
-			uint32_t b = br->buffer[br->consumed_words] << br->consumed_bits;
-			if(b) {
-				i = FLAC__clz_uint32(b);
-				*val += i;
-				i++;
-				br->consumed_bits += i;
-				if(br->consumed_bits >= FLAC__BITS_PER_WORD) { /* faster way of testing if(br->consumed_bits == FLAC__BITS_PER_WORD) */
-					crc16_update_word_(br, br->buffer[br->consumed_words]);
-					br->consumed_words++;
-					br->consumed_bits = 0;
-				}
-				return true;
-			}
-			else {
-				*val += FLAC__BITS_PER_WORD - br->consumed_bits;
-				crc16_update_word_(br, br->buffer[br->consumed_words]);
-				br->consumed_words++;
-				br->consumed_bits = 0;
-				/* didn't find stop bit yet, have to keep going... */
-			}
-		}
-		/* at this point we've eaten up all the whole words; have to try
-		 * reading through any tail bytes before calling the read callback.
-		 * this is a repeat of the above logic adjusted for the fact we
-		 * don't have a whole word.  note though if the client is feeding
-		 * us data a byte at a time (unlikely), br->consumed_bits may not
-		 * be zero.
-		 */
-		if(br->bytes*8 > br->consumed_bits) {
-			const unsigned end = br->bytes * 8;
-			uint32_t b = (br->buffer[br->consumed_words] & (FLAC__WORD_ALL_ONES << (FLAC__BITS_PER_WORD-end))) << br->consumed_bits;
-			if(b) {
-				i = FLAC__clz_uint32(b);
-				*val += i;
-				i++;
-				br->consumed_bits += i;
-				FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
-				return true;
-			}
-			else {
-				*val += end - br->consumed_bits;
-				br->consumed_bits = end;
-				FLAC__ASSERT(br->consumed_bits < FLAC__BITS_PER_WORD);
-				/* didn't find stop bit yet, have to keep going... */
-			}
-		}
-		if(!bitreader_read_from_client_(br))
-			return false;
-	}
-}
-#endif
-
-FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter)
-{
-	FLAC__uint32 lsbs = 0, msbs = 0;
-	unsigned uval;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-	FLAC__ASSERT(parameter <= 31);
-
-	/* read the unary MSBs and end bit */
-	if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
-		return false;
-
-	/* read the binary LSBs */
-	if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter))
-		return false;
-
-	/* compose the value */
-	uval = (msbs << parameter) | lsbs;
-	if(uval & 1)
-		*val = -((int)(uval >> 1)) - 1;
-	else
-		*val = (int)(uval >> 1);
-
-	return true;
-}
-
-/* this is by far the most heavily used reader call.  it ain't pretty but it's fast */
-FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter)
-{
-	/* try and get br->consumed_words and br->consumed_bits into register;
-	 * must remember to flush them back to *br before calling other
-	 * bitreader functions that use them, and before returning */
-	unsigned cwords, words, lsbs, msbs, x, y;
-	unsigned ucbits; /* keep track of the number of unconsumed bits in word */
-	uint32_t b;
-	int *val, *end;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-	/* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
-	FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
-	FLAC__ASSERT(parameter < 32);
-	/* the above two asserts also guarantee that the binary part never straddles more than 2 words, so we don't have to loop to read it */
-
-	val = vals;
-	end = vals + nvals;
-
-	if(parameter == 0) {
-		while(val < end) {
-			/* read the unary MSBs and end bit */
-			if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
-				return false;
-
-			*val++ = (int)(msbs >> 1) ^ -(int)(msbs & 1);
-		}
-
-		return true;
-	}
-
-	FLAC__ASSERT(parameter > 0);
-
-	cwords = br->consumed_words;
-	words = br->words;
-
-	/* if we've not consumed up to a partial tail word... */
-	if(cwords >= words) {
-		x = 0;
-		goto process_tail;
-	}
-
-	ucbits = FLAC__BITS_PER_WORD - br->consumed_bits;
-	b = br->buffer[cwords] << br->consumed_bits;  /* keep unconsumed bits aligned to left */
-
-	while(val < end) {
-		/* read the unary MSBs and end bit */
-		x = y = FLAC__clz2_uint32(b);
-		if(x == FLAC__BITS_PER_WORD) {
-			x = ucbits;
-			do {
-				/* didn't find stop bit yet, have to keep going... */
-				crc16_update_word_(br, br->buffer[cwords++]);
-				if (cwords >= words)
-					goto incomplete_msbs;
-				b = br->buffer[cwords];
-				y = FLAC__clz2_uint32(b);
-				x += y;
-			} while(y == FLAC__BITS_PER_WORD);
-		}
-		b <<= y;
-		b <<= 1; /* account for stop bit */
-		ucbits = (ucbits - x - 1) % FLAC__BITS_PER_WORD;
-		msbs = x;
-
-		/* read the binary LSBs */
-		x = b >> (FLAC__BITS_PER_WORD - parameter);
-		if(parameter <= ucbits) {
-			ucbits -= parameter;
-			b <<= parameter;
-		} else {
-			/* there are still bits left to read, they will all be in the next word */
-			crc16_update_word_(br, br->buffer[cwords++]);
-			if (cwords >= words)
-				goto incomplete_lsbs;
-			b = br->buffer[cwords];
-			ucbits += FLAC__BITS_PER_WORD - parameter;
-			x |= b >> ucbits;
-			b <<= FLAC__BITS_PER_WORD - ucbits;
-		}
-		lsbs = x;
-
-		/* compose the value */
-		x = (msbs << parameter) | lsbs;
-		*val++ = (int)(x >> 1) ^ -(int)(x & 1);
-
-		continue;
-
-		/* at this point we've eaten up all the whole words */
-process_tail:
-		do {
-			if(0) {
-incomplete_msbs:
-				br->consumed_bits = 0;
-				br->consumed_words = cwords;
-			}
-
-			/* read the unary MSBs and end bit */
-			if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
-				return false;
-			msbs += x;
-			x = ucbits = 0;
-
-			if(0) {
-incomplete_lsbs:
-				br->consumed_bits = 0;
-				br->consumed_words = cwords;
-			}
-
-			/* read the binary LSBs */
-			if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, parameter - ucbits))
-				return false;
-			lsbs = x | lsbs;
-
-			/* compose the value */
-			x = (msbs << parameter) | lsbs;
-			*val++ = (int)(x >> 1) ^ -(int)(x & 1);
-			x = 0;
-
-			cwords = br->consumed_words;
-			words = br->words;
-			ucbits = FLAC__BITS_PER_WORD - br->consumed_bits;
-			b = br->buffer[cwords] << br->consumed_bits;
-		} while(cwords >= words && val < end);
-	}
-
-	if(ucbits == 0 && cwords < words) {
-		/* don't leave the head word with no unconsumed bits */
-		crc16_update_word_(br, br->buffer[cwords++]);
-		ucbits = FLAC__BITS_PER_WORD;
-	}
-
-	br->consumed_bits = FLAC__BITS_PER_WORD - ucbits;
-	br->consumed_words = cwords;
-
-	return true;
-}
-
-#if 0 /* UNUSED */
-FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter)
-{
-	FLAC__uint32 lsbs = 0, msbs = 0;
-	unsigned bit, uval, k;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-
-	k = FLAC__bitmath_ilog2(parameter);
-
-	/* read the unary MSBs and end bit */
-	if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
-		return false;
-
-	/* read the binary LSBs */
-	if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
-		return false;
-
-	if(parameter == 1u<<k) {
-		/* compose the value */
-		uval = (msbs << k) | lsbs;
-	}
-	else {
-		unsigned d = (1 << (k+1)) - parameter;
-		if(lsbs >= d) {
-			if(!FLAC__bitreader_read_bit(br, &bit))
-				return false;
-			lsbs <<= 1;
-			lsbs |= bit;
-			lsbs -= d;
-		}
-		/* compose the value */
-		uval = msbs * parameter + lsbs;
-	}
-
-	/* unfold unsigned to signed */
-	if(uval & 1)
-		*val = -((int)(uval >> 1)) - 1;
-	else
-		*val = (int)(uval >> 1);
-
-	return true;
-}
-
-FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter)
-{
-	FLAC__uint32 lsbs, msbs = 0;
-	unsigned bit, k;
-
-	FLAC__ASSERT(0 != br);
-	FLAC__ASSERT(0 != br->buffer);
-
-	k = FLAC__bitmath_ilog2(parameter);
-
-	/* read the unary MSBs and end bit */
-	if(!FLAC__bitreader_read_unary_unsigned(br, &msbs))
-		return false;
-
-	/* read the binary LSBs */
-	if(!FLAC__bitreader_read_raw_uint32(br, &lsbs, k))
-		return false;
-
-	if(parameter == 1u<<k) {
-		/* compose the value */
-		*val = (msbs << k) | lsbs;
-	}
-	else {
-		unsigned d = (1 << (k+1)) - parameter;
-		if(lsbs >= d) {
-			if(!FLAC__bitreader_read_bit(br, &bit))
-				return false;
-			lsbs <<= 1;
-			lsbs |= bit;
-			lsbs -= d;
-		}
-		/* compose the value */
-		*val = msbs * parameter + lsbs;
-	}
-
-	return true;
-}
-#endif /* UNUSED */
-
-/* on return, if *val == 0xffffffff then the utf-8 sequence was invalid, but the return value will be true */
-FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen)
-{
-	FLAC__uint32 v = 0;
-	FLAC__uint32 x;
-	unsigned i;
-
-	if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-		return false;
-	if(raw)
-		raw[(*rawlen)++] = (FLAC__byte)x;
-	if(!(x & 0x80)) { /* 0xxxxxxx */
-		v = x;
-		i = 0;
-	}
-	else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
-		v = x & 0x1F;
-		i = 1;
-	}
-	else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
-		v = x & 0x0F;
-		i = 2;
-	}
-	else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
-		v = x & 0x07;
-		i = 3;
-	}
-	else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
-		v = x & 0x03;
-		i = 4;
-	}
-	else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
-		v = x & 0x01;
-		i = 5;
-	}
-	else {
-		*val = 0xffffffff;
-		return true;
-	}
-	for( ; i; i--) {
-		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-			return false;
-		if(raw)
-			raw[(*rawlen)++] = (FLAC__byte)x;
-		if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */
-			*val = 0xffffffff;
-			return true;
-		}
-		v <<= 6;
-		v |= (x & 0x3F);
-	}
-	*val = v;
-	return true;
-}
-
-/* on return, if *val == 0xffffffffffffffff then the utf-8 sequence was invalid, but the return value will be true */
-FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen)
-{
-	FLAC__uint64 v = 0;
-	FLAC__uint32 x;
-	unsigned i;
-
-	if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-		return false;
-	if(raw)
-		raw[(*rawlen)++] = (FLAC__byte)x;
-	if(!(x & 0x80)) { /* 0xxxxxxx */
-		v = x;
-		i = 0;
-	}
-	else if(x & 0xC0 && !(x & 0x20)) { /* 110xxxxx */
-		v = x & 0x1F;
-		i = 1;
-	}
-	else if(x & 0xE0 && !(x & 0x10)) { /* 1110xxxx */
-		v = x & 0x0F;
-		i = 2;
-	}
-	else if(x & 0xF0 && !(x & 0x08)) { /* 11110xxx */
-		v = x & 0x07;
-		i = 3;
-	}
-	else if(x & 0xF8 && !(x & 0x04)) { /* 111110xx */
-		v = x & 0x03;
-		i = 4;
-	}
-	else if(x & 0xFC && !(x & 0x02)) { /* 1111110x */
-		v = x & 0x01;
-		i = 5;
-	}
-	else if(x & 0xFE && !(x & 0x01)) { /* 11111110 */
-		v = 0;
-		i = 6;
-	}
-	else {
-		*val = FLAC__U64L(0xffffffffffffffff);
-		return true;
-	}
-	for( ; i; i--) {
-		if(!FLAC__bitreader_read_raw_uint32(br, &x, 8))
-			return false;
-		if(raw)
-			raw[(*rawlen)++] = (FLAC__byte)x;
-		if(!(x & 0x80) || (x & 0x40)) { /* 10xxxxxx */
-			*val = FLAC__U64L(0xffffffffffffffff);
-			return true;
-		}
-		v <<= 6;
-		v |= (x & 0x3F);
-	}
-	*val = v;
-	return true;
-}
-
-/* These functions are declared inline in this file but are also callable as
- * externs from elsewhere.
- * According to the C99 spec, section 6.7.4, simply providing a function
- * prototype in a header file without 'inline' and making the function inline
- * in this file should be sufficient.
- * Unfortunately, the Microsoft VS compiler doesn't pick them up externally. To
- * fix that we add extern declarations here.
- */
-extern FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br);
-extern unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br);
-extern unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br);
-extern FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val);
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/bitwriter.c b/modules/juce_audio_formats/codecs/flac/libFLAC/bitwriter.c
deleted file mode 100644
index 565fbcd..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/bitwriter.c
+++ /dev/null
@@ -1,842 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include "include/private/bitwriter.h"
-#include "include/private/crc.h"
-#include "../assert.h"
-#include "../alloc.h"
-#include "../compat.h"
-#include "../endswap.h"
-
-/* Things should be fastest when this matches the machine word size */
-/* WATCHOUT: if you change this you must also change the following #defines down to SWAP_BE_WORD_TO_HOST below to match */
-/* WATCHOUT: there are a few places where the code will not work unless uint32_t is >= 32 bits wide */
-#define FLAC__BYTES_PER_WORD 4
-#define FLAC__BITS_PER_WORD (8 * FLAC__BYTES_PER_WORD)
-#define FLAC__WORD_ALL_ONES ((FLAC__uint32)0xffffffff)
-/* SWAP_BE_WORD_TO_HOST swaps bytes in a uint32_t (which is always big-endian) if necessary to match host byte order */
-#if WORDS_BIGENDIAN
-#define SWAP_BE_WORD_TO_HOST(x) (x)
-#else
-#define SWAP_BE_WORD_TO_HOST(x) ENDSWAP_32(x)
-#endif
-
-/*
- * The default capacity here doesn't matter too much.  The buffer always grows
- * to hold whatever is written to it.  Usually the encoder will stop adding at
- * a frame or metadata block, then write that out and clear the buffer for the
- * next one.
- */
-static const unsigned FLAC__BITWRITER_DEFAULT_CAPACITY = 32768u / sizeof(uint32_t); /* size in words */
-/* When growing, increment 4K at a time */
-static const unsigned FLAC__BITWRITER_DEFAULT_INCREMENT = 4096u / sizeof(uint32_t); /* size in words */
-
-#define FLAC__WORDS_TO_BITS(words) ((words) * FLAC__BITS_PER_WORD)
-#define FLAC__TOTAL_BITS(bw) (FLAC__WORDS_TO_BITS((bw)->words) + (bw)->bits)
-
-struct FLAC__BitWriter {
-	uint32_t *buffer;
-	uint32_t accum; /* accumulator; bits are right-justified; when full, accum is appended to buffer */
-	unsigned capacity; /* capacity of buffer in words */
-	unsigned words; /* # of complete words in buffer */
-	unsigned bits; /* # of used bits in accum */
-};
-
-/* * WATCHOUT: The current implementation only grows the buffer. */
-#ifndef __SUNPRO_C
-static
-#endif
-FLAC__bool bitwriter_grow_(FLAC__BitWriter *bw, unsigned bits_to_add)
-{
-	unsigned new_capacity;
-	uint32_t *new_buffer;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-
-	/* calculate total words needed to store 'bits_to_add' additional bits */
-	new_capacity = bw->words + ((bw->bits + bits_to_add + FLAC__BITS_PER_WORD - 1) / FLAC__BITS_PER_WORD);
-
-	/* it's possible (due to pessimism in the growth estimation that
-	 * leads to this call) that we don't actually need to grow
-	 */
-	if(bw->capacity >= new_capacity)
-		return true;
-
-	/* round up capacity increase to the nearest FLAC__BITWRITER_DEFAULT_INCREMENT */
-	if((new_capacity - bw->capacity) % FLAC__BITWRITER_DEFAULT_INCREMENT)
-		new_capacity += FLAC__BITWRITER_DEFAULT_INCREMENT - ((new_capacity - bw->capacity) % FLAC__BITWRITER_DEFAULT_INCREMENT);
-	/* make sure we got everything right */
-	FLAC__ASSERT(0 == (new_capacity - bw->capacity) % FLAC__BITWRITER_DEFAULT_INCREMENT);
-	FLAC__ASSERT(new_capacity > bw->capacity);
-	FLAC__ASSERT(new_capacity >= bw->words + ((bw->bits + bits_to_add + FLAC__BITS_PER_WORD - 1) / FLAC__BITS_PER_WORD));
-
-	new_buffer = (uint32_t*) safe_realloc_mul_2op_(bw->buffer, sizeof(uint32_t), /*times*/new_capacity);
-	if(new_buffer == 0)
-		return false;
-	bw->buffer = new_buffer;
-	bw->capacity = new_capacity;
-	return true;
-}
-
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-
-FLAC__BitWriter *FLAC__bitwriter_new(void)
-{
-	FLAC__BitWriter *bw = (FLAC__BitWriter*) calloc(1, sizeof(FLAC__BitWriter));
-	/* note that calloc() sets all members to 0 for us */
-	return bw;
-}
-
-void FLAC__bitwriter_delete(FLAC__BitWriter *bw)
-{
-	FLAC__ASSERT(0 != bw);
-
-	FLAC__bitwriter_free(bw);
-	free(bw);
-}
-
-/***********************************************************************
- *
- * Public class methods
- *
- ***********************************************************************/
-
-FLAC__bool FLAC__bitwriter_init(FLAC__BitWriter *bw)
-{
-	FLAC__ASSERT(0 != bw);
-
-	bw->words = bw->bits = 0;
-	bw->capacity = FLAC__BITWRITER_DEFAULT_CAPACITY;
-	bw->buffer = (uint32_t*) malloc(sizeof(uint32_t) * bw->capacity);
-	if(bw->buffer == 0)
-		return false;
-
-	return true;
-}
-
-void FLAC__bitwriter_free(FLAC__BitWriter *bw)
-{
-	FLAC__ASSERT(0 != bw);
-
-	if(0 != bw->buffer)
-		free(bw->buffer);
-	bw->buffer = 0;
-	bw->capacity = 0;
-	bw->words = bw->bits = 0;
-}
-
-void FLAC__bitwriter_clear(FLAC__BitWriter *bw)
-{
-	bw->words = bw->bits = 0;
-}
-
-void FLAC__bitwriter_dump(const FLAC__BitWriter *bw, FILE *out)
-{
-	unsigned i, j;
-	if(bw == 0) {
-		fprintf(out, "bitwriter is NULL\n");
-	}
-	else {
-		fprintf(out, "bitwriter: capacity=%u words=%u bits=%u total_bits=%u\n", bw->capacity, bw->words, bw->bits, FLAC__TOTAL_BITS(bw));
-
-		for(i = 0; i < bw->words; i++) {
-			fprintf(out, "%08X: ", i);
-			for(j = 0; j < FLAC__BITS_PER_WORD; j++)
-				fprintf(out, "%01u", bw->buffer[i] & (1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0);
-			fprintf(out, "\n");
-		}
-		if(bw->bits > 0) {
-			fprintf(out, "%08X: ", i);
-			for(j = 0; j < bw->bits; j++)
-				fprintf(out, "%01u", bw->accum & (1 << (bw->bits-j-1)) ? 1:0);
-			fprintf(out, "\n");
-		}
-	}
-}
-
-FLAC__bool FLAC__bitwriter_get_write_crc16(FLAC__BitWriter *bw, FLAC__uint16 *crc)
-{
-	const FLAC__byte *buffer;
-	size_t bytes;
-
-	FLAC__ASSERT((bw->bits & 7) == 0); /* assert that we're byte-aligned */
-
-	if(!FLAC__bitwriter_get_buffer(bw, &buffer, &bytes))
-		return false;
-
-	*crc = (FLAC__uint16)FLAC__crc16(buffer, bytes);
-	FLAC__bitwriter_release_buffer(bw);
-	return true;
-}
-
-FLAC__bool FLAC__bitwriter_get_write_crc8(FLAC__BitWriter *bw, FLAC__byte *crc)
-{
-	const FLAC__byte *buffer;
-	size_t bytes;
-
-	FLAC__ASSERT((bw->bits & 7) == 0); /* assert that we're byte-aligned */
-
-	if(!FLAC__bitwriter_get_buffer(bw, &buffer, &bytes))
-		return false;
-
-	*crc = FLAC__crc8(buffer, bytes);
-	FLAC__bitwriter_release_buffer(bw);
-	return true;
-}
-
-FLAC__bool FLAC__bitwriter_is_byte_aligned(const FLAC__BitWriter *bw)
-{
-	return ((bw->bits & 7) == 0);
-}
-
-unsigned FLAC__bitwriter_get_input_bits_unconsumed(const FLAC__BitWriter *bw)
-{
-	return FLAC__TOTAL_BITS(bw);
-}
-
-FLAC__bool FLAC__bitwriter_get_buffer(FLAC__BitWriter *bw, const FLAC__byte **buffer, size_t *bytes)
-{
-	FLAC__ASSERT((bw->bits & 7) == 0);
-	/* double protection */
-	if(bw->bits & 7)
-		return false;
-	/* if we have bits in the accumulator we have to flush those to the buffer first */
-	if(bw->bits) {
-		FLAC__ASSERT(bw->words <= bw->capacity);
-		if(bw->words == bw->capacity && !bitwriter_grow_(bw, FLAC__BITS_PER_WORD))
-			return false;
-		/* append bits as complete word to buffer, but don't change bw->accum or bw->bits */
-		bw->buffer[bw->words] = SWAP_BE_WORD_TO_HOST(bw->accum << (FLAC__BITS_PER_WORD-bw->bits));
-	}
-	/* now we can just return what we have */
-	*buffer = (FLAC__byte*)bw->buffer;
-	*bytes = (FLAC__BYTES_PER_WORD * bw->words) + (bw->bits >> 3);
-	return true;
-}
-
-void FLAC__bitwriter_release_buffer(FLAC__BitWriter *bw)
-{
-	/* nothing to do.  in the future, strict checking of a 'writer-is-in-
-	 * get-mode' flag could be added everywhere and then cleared here
-	 */
-	(void)bw;
-}
-
-inline FLAC__bool FLAC__bitwriter_write_zeroes(FLAC__BitWriter *bw, unsigned bits)
-{
-	unsigned n;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-
-	if(bits == 0)
-		return true;
-	/* slightly pessimistic size check but faster than "<= bw->words + (bw->bits+bits+FLAC__BITS_PER_WORD-1)/FLAC__BITS_PER_WORD" */
-	if(bw->capacity <= bw->words + bits && !bitwriter_grow_(bw, bits))
-		return false;
-	/* first part gets to word alignment */
-	if(bw->bits) {
-		n = flac_min(FLAC__BITS_PER_WORD - bw->bits, bits);
-		bw->accum <<= n;
-		bits -= n;
-		bw->bits += n;
-		if(bw->bits == FLAC__BITS_PER_WORD) {
-			bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum);
-			bw->bits = 0;
-		}
-		else
-			return true;
-	}
-	/* do whole words */
-	while(bits >= FLAC__BITS_PER_WORD) {
-		bw->buffer[bw->words++] = 0;
-		bits -= FLAC__BITS_PER_WORD;
-	}
-	/* do any leftovers */
-	if(bits > 0) {
-		bw->accum = 0;
-		bw->bits = bits;
-	}
-	return true;
-}
-
-inline FLAC__bool FLAC__bitwriter_write_raw_uint32(FLAC__BitWriter *bw, FLAC__uint32 val, unsigned bits)
-{
-	register unsigned left;
-
-	/* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
-	FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-
-	FLAC__ASSERT(bits <= 32);
-	if(bits == 0)
-		return true;
-
-	/* slightly pessimistic size check but faster than "<= bw->words + (bw->bits+bits+FLAC__BITS_PER_WORD-1)/FLAC__BITS_PER_WORD" */
-	if(bw->capacity <= bw->words + bits && !bitwriter_grow_(bw, bits))
-		return false;
-
-	left = FLAC__BITS_PER_WORD - bw->bits;
-	if(bits < left) {
-		bw->accum <<= bits;
-		bw->accum |= val;
-		bw->bits += bits;
-	}
-	else if(bw->bits) { /* WATCHOUT: if bw->bits == 0, left==FLAC__BITS_PER_WORD and bw->accum<<=left is a NOP instead of setting to 0 */
-		bw->accum <<= left;
-		bw->accum |= val >> (bw->bits = bits - left);
-		bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum);
-		bw->accum = val;
-	}
-	else {
-		bw->accum = val;
-		bw->bits = 0;
-		bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(val);
-	}
-
-	return true;
-}
-
-inline FLAC__bool FLAC__bitwriter_write_raw_int32(FLAC__BitWriter *bw, FLAC__int32 val, unsigned bits)
-{
-	/* zero-out unused bits */
-	if(bits < 32)
-		val &= (~(0xffffffff << bits));
-
-	return FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, bits);
-}
-
-inline FLAC__bool FLAC__bitwriter_write_raw_uint64(FLAC__BitWriter *bw, FLAC__uint64 val, unsigned bits)
-{
-	/* this could be a little faster but it's not used for much */
-	if(bits > 32) {
-		return
-			FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)(val>>32), bits-32) &&
-			FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, 32);
-	}
-	else
-		return FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, bits);
-}
-
-inline FLAC__bool FLAC__bitwriter_write_raw_uint32_little_endian(FLAC__BitWriter *bw, FLAC__uint32 val)
-{
-	/* this doesn't need to be that fast as currently it is only used for vorbis comments */
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, val & 0xff, 8))
-		return false;
-	if(!FLAC__bitwriter_write_raw_uint32(bw, (val>>8) & 0xff, 8))
-		return false;
-	if(!FLAC__bitwriter_write_raw_uint32(bw, (val>>16) & 0xff, 8))
-		return false;
-	if(!FLAC__bitwriter_write_raw_uint32(bw, val>>24, 8))
-		return false;
-
-	return true;
-}
-
-inline FLAC__bool FLAC__bitwriter_write_byte_block(FLAC__BitWriter *bw, const FLAC__byte vals[], unsigned nvals)
-{
-	unsigned i;
-
-	/* this could be faster but currently we don't need it to be since it's only used for writing metadata */
-	for(i = 0; i < nvals; i++) {
-		if(!FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)(vals[i]), 8))
-			return false;
-	}
-
-	return true;
-}
-
-FLAC__bool FLAC__bitwriter_write_unary_unsigned(FLAC__BitWriter *bw, unsigned val)
-{
-	if(val < 32)
-		return FLAC__bitwriter_write_raw_uint32(bw, 1, ++val);
-	else
-		return
-			FLAC__bitwriter_write_zeroes(bw, val) &&
-			FLAC__bitwriter_write_raw_uint32(bw, 1, 1);
-}
-
-unsigned FLAC__bitwriter_rice_bits(FLAC__int32 val, unsigned parameter)
-{
-	FLAC__uint32 uval;
-
-	FLAC__ASSERT(parameter < sizeof(unsigned)*8);
-
-	/* fold signed to unsigned; actual formula is: negative(v)? -2v-1 : 2v */
-	uval = (val<<1) ^ (val>>31);
-
-	return 1 + parameter + (uval >> parameter);
-}
-
-#if 0 /* UNUSED */
-unsigned FLAC__bitwriter_golomb_bits_signed(int val, unsigned parameter)
-{
-	unsigned bits, msbs, uval;
-	unsigned k;
-
-	FLAC__ASSERT(parameter > 0);
-
-	/* fold signed to unsigned */
-	if(val < 0)
-		uval = (unsigned)(((-(++val)) << 1) + 1);
-	else
-		uval = (unsigned)(val << 1);
-
-	k = FLAC__bitmath_ilog2(parameter);
-	if(parameter == 1u<<k) {
-		FLAC__ASSERT(k <= 30);
-
-		msbs = uval >> k;
-		bits = 1 + k + msbs;
-	}
-	else {
-		unsigned q, r, d;
-
-		d = (1 << (k+1)) - parameter;
-		q = uval / parameter;
-		r = uval - (q * parameter);
-
-		bits = 1 + q + k;
-		if(r >= d)
-			bits++;
-	}
-	return bits;
-}
-
-unsigned FLAC__bitwriter_golomb_bits_unsigned(unsigned uval, unsigned parameter)
-{
-	unsigned bits, msbs;
-	unsigned k;
-
-	FLAC__ASSERT(parameter > 0);
-
-	k = FLAC__bitmath_ilog2(parameter);
-	if(parameter == 1u<<k) {
-		FLAC__ASSERT(k <= 30);
-
-		msbs = uval >> k;
-		bits = 1 + k + msbs;
-	}
-	else {
-		unsigned q, r, d;
-
-		d = (1 << (k+1)) - parameter;
-		q = uval / parameter;
-		r = uval - (q * parameter);
-
-		bits = 1 + q + k;
-		if(r >= d)
-			bits++;
-	}
-	return bits;
-}
-#endif /* UNUSED */
-
-FLAC__bool FLAC__bitwriter_write_rice_signed(FLAC__BitWriter *bw, FLAC__int32 val, unsigned parameter)
-{
-	unsigned total_bits, interesting_bits, msbs;
-	FLAC__uint32 uval, pattern;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-	FLAC__ASSERT(parameter < 8*sizeof(uval));
-
-	/* fold signed to unsigned; actual formula is: negative(v)? -2v-1 : 2v */
-	uval = (val<<1) ^ (val>>31);
-
-	msbs = uval >> parameter;
-	interesting_bits = 1 + parameter;
-	total_bits = interesting_bits + msbs;
-	pattern = 1 << parameter; /* the unary end bit */
-	pattern |= (uval & ((1<<parameter)-1)); /* the binary LSBs */
-
-	if(total_bits <= 32)
-		return FLAC__bitwriter_write_raw_uint32(bw, pattern, total_bits);
-	else
-		return
-			FLAC__bitwriter_write_zeroes(bw, msbs) && /* write the unary MSBs */
-			FLAC__bitwriter_write_raw_uint32(bw, pattern, interesting_bits); /* write the unary end bit and binary LSBs */
-}
-
-FLAC__bool FLAC__bitwriter_write_rice_signed_block(FLAC__BitWriter *bw, const FLAC__int32 *vals, unsigned nvals, unsigned parameter)
-{
-	const FLAC__uint32 mask1 = FLAC__WORD_ALL_ONES << parameter; /* we val|=mask1 to set the stop bit above it... */
-	const FLAC__uint32 mask2 = FLAC__WORD_ALL_ONES >> (31-parameter); /* ...then mask off the bits above the stop bit with val&=mask2*/
-	FLAC__uint32 uval;
-	unsigned left;
-	const unsigned lsbits = 1 + parameter;
-	unsigned msbits;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-	FLAC__ASSERT(parameter < 8*sizeof(uint32_t)-1);
-	/* WATCHOUT: code does not work with <32bit words; we can make things much faster with this assertion */
-	FLAC__ASSERT(FLAC__BITS_PER_WORD >= 32);
-
-	while(nvals) {
-		/* fold signed to unsigned; actual formula is: negative(v)? -2v-1 : 2v */
-		uval = (*vals<<1) ^ (*vals>>31);
-
-		msbits = uval >> parameter;
-
-		if(bw->bits && bw->bits + msbits + lsbits < FLAC__BITS_PER_WORD) { /* i.e. if the whole thing fits in the current uint32_t */
-			/* ^^^ if bw->bits is 0 then we may have filled the buffer and have no free uint32_t to work in */
-			bw->bits = bw->bits + msbits + lsbits;
-			uval |= mask1; /* set stop bit */
-			uval &= mask2; /* mask off unused top bits */
-			bw->accum <<= msbits + lsbits;
-			bw->accum |= uval;
-		}
-		else {
-			/* slightly pessimistic size check but faster than "<= bw->words + (bw->bits+msbits+lsbits+FLAC__BITS_PER_WORD-1)/FLAC__BITS_PER_WORD" */
-			/* OPT: pessimism may cause flurry of false calls to grow_ which eat up all savings before it */
-			if(bw->capacity <= bw->words + bw->bits + msbits + 1/*lsbits always fit in 1 uint32_t*/ && !bitwriter_grow_(bw, msbits+lsbits))
-				return false;
-
-			if(msbits) {
-				/* first part gets to word alignment */
-				if(bw->bits) {
-					left = FLAC__BITS_PER_WORD - bw->bits;
-					if(msbits < left) {
-						bw->accum <<= msbits;
-						bw->bits += msbits;
-						goto break1;
-					}
-					else {
-						bw->accum <<= left;
-						msbits -= left;
-						bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum);
-						bw->bits = 0;
-					}
-				}
-				/* do whole words */
-				while(msbits >= FLAC__BITS_PER_WORD) {
-					bw->buffer[bw->words++] = 0;
-					msbits -= FLAC__BITS_PER_WORD;
-				}
-				/* do any leftovers */
-				if(msbits > 0) {
-					bw->accum = 0;
-					bw->bits = msbits;
-				}
-			}
-break1:
-			uval |= mask1; /* set stop bit */
-			uval &= mask2; /* mask off unused top bits */
-
-			left = FLAC__BITS_PER_WORD - bw->bits;
-			if(lsbits < left) {
-				bw->accum <<= lsbits;
-				bw->accum |= uval;
-				bw->bits += lsbits;
-			}
-			else {
-				/* if bw->bits == 0, left==FLAC__BITS_PER_WORD which will always
-				 * be > lsbits (because of previous assertions) so it would have
-				 * triggered the (lsbits<left) case above.
-				 */
-				FLAC__ASSERT(bw->bits);
-				FLAC__ASSERT(left < FLAC__BITS_PER_WORD);
-				bw->accum <<= left;
-				bw->accum |= uval >> (bw->bits = lsbits - left);
-				bw->buffer[bw->words++] = SWAP_BE_WORD_TO_HOST(bw->accum);
-				bw->accum = uval;
-			}
-		}
-		vals++;
-		nvals--;
-	}
-	return true;
-}
-
-#if 0 /* UNUSED */
-FLAC__bool FLAC__bitwriter_write_golomb_signed(FLAC__BitWriter *bw, int val, unsigned parameter)
-{
-	unsigned total_bits, msbs, uval;
-	unsigned k;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-	FLAC__ASSERT(parameter > 0);
-
-	/* fold signed to unsigned */
-	if(val < 0)
-		uval = (unsigned)(((-(++val)) << 1) + 1);
-	else
-		uval = (unsigned)(val << 1);
-
-	k = FLAC__bitmath_ilog2(parameter);
-	if(parameter == 1u<<k) {
-		unsigned pattern;
-
-		FLAC__ASSERT(k <= 30);
-
-		msbs = uval >> k;
-		total_bits = 1 + k + msbs;
-		pattern = 1 << k; /* the unary end bit */
-		pattern |= (uval & ((1u<<k)-1)); /* the binary LSBs */
-
-		if(total_bits <= 32) {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, pattern, total_bits))
-				return false;
-		}
-		else {
-			/* write the unary MSBs */
-			if(!FLAC__bitwriter_write_zeroes(bw, msbs))
-				return false;
-			/* write the unary end bit and binary LSBs */
-			if(!FLAC__bitwriter_write_raw_uint32(bw, pattern, k+1))
-				return false;
-		}
-	}
-	else {
-		unsigned q, r, d;
-
-		d = (1 << (k+1)) - parameter;
-		q = uval / parameter;
-		r = uval - (q * parameter);
-		/* write the unary MSBs */
-		if(!FLAC__bitwriter_write_zeroes(bw, q))
-			return false;
-		/* write the unary end bit */
-		if(!FLAC__bitwriter_write_raw_uint32(bw, 1, 1))
-			return false;
-		/* write the binary LSBs */
-		if(r >= d) {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, r+d, k+1))
-				return false;
-		}
-		else {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, r, k))
-				return false;
-		}
-	}
-	return true;
-}
-
-FLAC__bool FLAC__bitwriter_write_golomb_unsigned(FLAC__BitWriter *bw, unsigned uval, unsigned parameter)
-{
-	unsigned total_bits, msbs;
-	unsigned k;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-	FLAC__ASSERT(parameter > 0);
-
-	k = FLAC__bitmath_ilog2(parameter);
-	if(parameter == 1u<<k) {
-		unsigned pattern;
-
-		FLAC__ASSERT(k <= 30);
-
-		msbs = uval >> k;
-		total_bits = 1 + k + msbs;
-		pattern = 1 << k; /* the unary end bit */
-		pattern |= (uval & ((1u<<k)-1)); /* the binary LSBs */
-
-		if(total_bits <= 32) {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, pattern, total_bits))
-				return false;
-		}
-		else {
-			/* write the unary MSBs */
-			if(!FLAC__bitwriter_write_zeroes(bw, msbs))
-				return false;
-			/* write the unary end bit and binary LSBs */
-			if(!FLAC__bitwriter_write_raw_uint32(bw, pattern, k+1))
-				return false;
-		}
-	}
-	else {
-		unsigned q, r, d;
-
-		d = (1 << (k+1)) - parameter;
-		q = uval / parameter;
-		r = uval - (q * parameter);
-		/* write the unary MSBs */
-		if(!FLAC__bitwriter_write_zeroes(bw, q))
-			return false;
-		/* write the unary end bit */
-		if(!FLAC__bitwriter_write_raw_uint32(bw, 1, 1))
-			return false;
-		/* write the binary LSBs */
-		if(r >= d) {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, r+d, k+1))
-				return false;
-		}
-		else {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, r, k))
-				return false;
-		}
-	}
-	return true;
-}
-#endif /* UNUSED */
-
-FLAC__bool FLAC__bitwriter_write_utf8_uint32(FLAC__BitWriter *bw, FLAC__uint32 val)
-{
-	FLAC__bool ok = 1;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-
-	FLAC__ASSERT(!(val & 0x80000000)); /* this version only handles 31 bits */
-
-	if(val < 0x80) {
-		return FLAC__bitwriter_write_raw_uint32(bw, val, 8);
-	}
-	else if(val < 0x800) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xC0 | (val>>6), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8);
-	}
-	else if(val < 0x10000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xE0 | (val>>12), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8);
-	}
-	else if(val < 0x200000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF0 | (val>>18), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8);
-	}
-	else if(val < 0x4000000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF8 | (val>>24), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>18)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8);
-	}
-	else {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xFC | (val>>30), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>24)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>18)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | ((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (val&0x3F), 8);
-	}
-
-	return ok;
-}
-
-FLAC__bool FLAC__bitwriter_write_utf8_uint64(FLAC__BitWriter *bw, FLAC__uint64 val)
-{
-	FLAC__bool ok = 1;
-
-	FLAC__ASSERT(0 != bw);
-	FLAC__ASSERT(0 != bw->buffer);
-
-	FLAC__ASSERT(!(val & FLAC__U64L(0xFFFFFFF000000000))); /* this version only handles 36 bits */
-
-	if(val < 0x80) {
-		return FLAC__bitwriter_write_raw_uint32(bw, (FLAC__uint32)val, 8);
-	}
-	else if(val < 0x800) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xC0 | (FLAC__uint32)(val>>6), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8);
-	}
-	else if(val < 0x10000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xE0 | (FLAC__uint32)(val>>12), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8);
-	}
-	else if(val < 0x200000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF0 | (FLAC__uint32)(val>>18), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8);
-	}
-	else if(val < 0x4000000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xF8 | (FLAC__uint32)(val>>24), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>18)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8);
-	}
-	else if(val < 0x80000000) {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xFC | (FLAC__uint32)(val>>30), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>24)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>18)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8);
-	}
-	else {
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0xFE, 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>30)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>24)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>18)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>12)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)((val>>6)&0x3F), 8);
-		ok &= FLAC__bitwriter_write_raw_uint32(bw, 0x80 | (FLAC__uint32)(val&0x3F), 8);
-	}
-
-	return ok;
-}
-
-FLAC__bool FLAC__bitwriter_zero_pad_to_byte_boundary(FLAC__BitWriter *bw)
-{
-	/* 0-pad to byte boundary */
-	if(bw->bits & 7u)
-		return FLAC__bitwriter_write_zeroes(bw, 8 - (bw->bits & 7u));
-	else
-		return true;
-}
-
-/* These functions are declared inline in this file but are also callable as
- * externs from elsewhere.
- * According to the C99 spec, section 6.7.4, simply providing a function
- * prototype in a header file without 'inline' and making the function inline
- * in this file should be sufficient.
- * Unfortunately, the Microsoft VS compiler doesn't pick them up externally. To
- * fix that we add extern declarations here.
- */
-extern FLAC__bool FLAC__bitwriter_write_zeroes(FLAC__BitWriter *bw, unsigned bits);
-extern FLAC__bool FLAC__bitwriter_write_raw_int32(FLAC__BitWriter *bw, FLAC__int32 val, unsigned bits);
-extern FLAC__bool FLAC__bitwriter_write_raw_uint64(FLAC__BitWriter *bw, FLAC__uint64 val, unsigned bits);
-extern FLAC__bool FLAC__bitwriter_write_raw_uint32_little_endian(FLAC__BitWriter *bw, FLAC__uint32 val);
-extern FLAC__bool FLAC__bitwriter_write_byte_block(FLAC__BitWriter *bw, const FLAC__byte vals[], unsigned nvals);
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c b/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c
deleted file mode 100644
index 4eac42e..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "include/private/cpu.h"
-
-#if 0
- #include <stdlib.h>
- #include <memory.h>
- #include <stdio.h>
-#endif
-
-#if defined FLAC__CPU_IA32
-# include <signal.h>
-
-static void disable_sse(FLAC__CPUInfo *info)
-{
-	info->ia32.sse   = false;
-	info->ia32.sse2  = false;
-	info->ia32.sse3  = false;
-	info->ia32.ssse3 = false;
-	info->ia32.sse41 = false;
-	info->ia32.sse42 = false;
-}
-
-static void disable_avx(FLAC__CPUInfo *info)
-{
-	info->ia32.avx     = false;
-	info->ia32.avx2    = false;
-	info->ia32.fma     = false;
-}
-
-#elif defined FLAC__CPU_X86_64
-
-static void disable_avx(FLAC__CPUInfo *info)
-{
-	info->x86.avx     = false;
-	info->x86.avx2    = false;
-	info->x86.fma     = false;
-}
-#endif
-
-#if defined (__NetBSD__) || defined(__OpenBSD__)
-#include <sys/param.h>
-#include <sys/sysctl.h>
-#include <machine/cpu.h>
-#endif
-
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
-#include <sys/types.h>
-#include <sys/sysctl.h>
-#endif
-
-#if defined(__APPLE__)
-/* how to get sysctlbyname()? */
-#endif
-
-#ifdef FLAC__CPU_IA32
-/* these are flags in EDX of CPUID AX=00000001 */
-static const unsigned FLAC__CPUINFO_IA32_CPUID_CMOV = 0x00008000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_MMX = 0x00800000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_FXSR = 0x01000000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE = 0x02000000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE2 = 0x04000000;
-#endif
-
-/* these are flags in ECX of CPUID AX=00000001 */
-static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE3 = 0x00000001;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_SSSE3 = 0x00000200;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE41 = 0x00080000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_SSE42 = 0x00100000;
-
-#if defined FLAC__AVX_SUPPORTED
-/* these are flags in ECX of CPUID AX=00000001 */
-static const unsigned FLAC__CPUINFO_IA32_CPUID_OSXSAVE = 0x08000000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_AVX = 0x10000000;
-static const unsigned FLAC__CPUINFO_IA32_CPUID_FMA = 0x00001000;
-/* these are flags in EBX of CPUID AX=00000007 */
-static const unsigned FLAC__CPUINFO_IA32_CPUID_AVX2 = 0x00000020;
-#endif
-
-/*
- * Extra stuff needed for detection of OS support for SSE on IA-32
- */
-#if defined(FLAC__CPU_IA32) && !defined FLAC__NO_ASM && (defined FLAC__HAS_NASM || defined FLAC__HAS_X86INTRIN) && !defined FLAC__NO_SSE_OS && !defined FLAC__SSE_OS
-# if defined(__linux__)
-/*
- * If the OS doesn't support SSE, we will get here with a SIGILL.  We
- * modify the return address to jump over the offending SSE instruction
- * and also the operation following it that indicates the instruction
- * executed successfully.  In this way we use no global variables and
- * stay thread-safe.
- *
- * 3 + 3 + 6:
- *   3 bytes for "xorps xmm0,xmm0"
- *   3 bytes for estimate of how long the follwing "inc var" instruction is
- *   6 bytes extra in case our estimate is wrong
- * 12 bytes puts us in the NOP "landing zone"
- */
-#   include <sys/ucontext.h>
-	static void sigill_handler_sse_os(int signal, siginfo_t *si, void *uc)
-	{
-		(void)signal, (void)si;
-		((ucontext_t*)uc)->uc_mcontext.gregs[14/*REG_EIP*/] += 3 + 3 + 6;
-	}
-# elif defined(_MSC_VER)
-#  include <windows.h>
-# endif
-#endif
-
-
-void FLAC__cpu_info(FLAC__CPUInfo *info)
-{
-/*
- * IA32-specific
- */
-#ifdef FLAC__CPU_IA32
-	FLAC__bool ia32_fxsr = false;
-	FLAC__bool ia32_osxsave = false;
-	(void) ia32_fxsr; (void) ia32_osxsave; /* to avoid warnings about unused variables */
-	memset(info, 0, sizeof(*info));
-	info->type = FLAC__CPUINFO_TYPE_IA32;
-#if !defined FLAC__NO_ASM && (defined FLAC__HAS_NASM || defined FLAC__HAS_X86INTRIN)
-	info->use_asm = true; /* we assume a minimum of 80386 with FLAC__CPU_IA32 */
-#ifdef FLAC__HAS_X86INTRIN
-	if(!FLAC__cpu_have_cpuid_x86())
-		return;
-#else
-	if(!FLAC__cpu_have_cpuid_asm_ia32())
-		return;
-#endif
-	{
-		/* http://www.sandpile.org/x86/cpuid.htm */
-#ifdef FLAC__HAS_X86INTRIN
-		FLAC__uint32 flags_eax, flags_ebx, flags_ecx, flags_edx;
-		FLAC__cpu_info_x86(1, &flags_eax, &flags_ebx, &flags_ecx, &flags_edx);
-#else
-		FLAC__uint32 flags_ecx, flags_edx;
-		FLAC__cpu_info_asm_ia32(&flags_edx, &flags_ecx);
-#endif
-		info->ia32.cmov  = (flags_edx & FLAC__CPUINFO_IA32_CPUID_CMOV )? true : false;
-		info->ia32.mmx   = (flags_edx & FLAC__CPUINFO_IA32_CPUID_MMX  )? true : false;
-		      ia32_fxsr  = (flags_edx & FLAC__CPUINFO_IA32_CPUID_FXSR )? true : false;
-		info->ia32.sse   = (flags_edx & FLAC__CPUINFO_IA32_CPUID_SSE  )? true : false;
-		info->ia32.sse2  = (flags_edx & FLAC__CPUINFO_IA32_CPUID_SSE2 )? true : false;
-		info->ia32.sse3  = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE3 )? true : false;
-		info->ia32.ssse3 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSSE3)? true : false;
-		info->ia32.sse41 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE41)? true : false;
-		info->ia32.sse42 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE42)? true : false;
-#if defined FLAC__HAS_X86INTRIN && defined FLAC__AVX_SUPPORTED
-		    ia32_osxsave = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_OSXSAVE)? true : false;
-		info->ia32.avx   = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_AVX    )? true : false;
-		info->ia32.fma   = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_FMA    )? true : false;
-		FLAC__cpu_info_x86(7, &flags_eax, &flags_ebx, &flags_ecx, &flags_edx);
-		info->ia32.avx2  = (flags_ebx & FLAC__CPUINFO_IA32_CPUID_AVX2   )? true : false;
-#endif
-	}
-
-#ifdef DEBUG
-	fprintf(stderr, "CPU info (IA-32):\n");
-	fprintf(stderr, "  CMOV ....... %c\n", info->ia32.cmov    ? 'Y' : 'n');
-	fprintf(stderr, "  MMX ........ %c\n", info->ia32.mmx     ? 'Y' : 'n');
-	fprintf(stderr, "  SSE ........ %c\n", info->ia32.sse     ? 'Y' : 'n');
-	fprintf(stderr, "  SSE2 ....... %c\n", info->ia32.sse2    ? 'Y' : 'n');
-	fprintf(stderr, "  SSE3 ....... %c\n", info->ia32.sse3    ? 'Y' : 'n');
-	fprintf(stderr, "  SSSE3 ...... %c\n", info->ia32.ssse3   ? 'Y' : 'n');
-	fprintf(stderr, "  SSE41 ...... %c\n", info->ia32.sse41   ? 'Y' : 'n');
-	fprintf(stderr, "  SSE42 ...... %c\n", info->ia32.sse42   ? 'Y' : 'n');
-# if defined FLAC__HAS_X86INTRIN && defined FLAC__AVX_SUPPORTED
-	fprintf(stderr, "  AVX ........ %c\n", info->ia32.avx     ? 'Y' : 'n');
-	fprintf(stderr, "  FMA ........ %c\n", info->ia32.fma     ? 'Y' : 'n');
-	fprintf(stderr, "  AVX2 ....... %c\n", info->ia32.avx2    ? 'Y' : 'n');
-# endif
-#endif
-
-	/*
-	 * now have to check for OS support of SSE instructions
-	 */
-	if(info->ia32.sse) {
-#if defined FLAC__NO_SSE_OS
-		/* assume user knows better than us; turn it off */
-		disable_sse(info);
-#elif defined FLAC__SSE_OS
-		/* assume user knows better than us; leave as detected above */
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
-		int sse = 0;
-		size_t len;
-		/* at least one of these must work: */
-		len = sizeof(sse); sse = sse || (sysctlbyname("hw.instruction_sse", &sse, &len, NULL, 0) == 0 && sse);
-		len = sizeof(sse); sse = sse || (sysctlbyname("hw.optional.sse"   , &sse, &len, NULL, 0) == 0 && sse); /* __APPLE__ ? */
-		if(!sse)
-			disable_sse(info);
-#elif defined(__NetBSD__) || defined (__OpenBSD__)
-# if __NetBSD_Version__ >= 105250000 || (defined __OpenBSD__)
-		int val = 0, mib[2] = { CTL_MACHDEP, CPU_SSE };
-		size_t len = sizeof(val);
-		if(sysctl(mib, 2, &val, &len, NULL, 0) < 0 || !val)
-			disable_sse(info);
-		else { /* double-check SSE2 */
-			mib[1] = CPU_SSE2;
-			len = sizeof(val);
-			if(sysctl(mib, 2, &val, &len, NULL, 0) < 0 || !val) {
-				disable_sse(info);
-				info->ia32.sse = true;
-			}
-		}
-# else
-		disable_sse(info);
-# endif
-#elif defined(__linux__)
-		int sse = 0;
-		struct sigaction sigill_save;
-		struct sigaction sigill_sse;
-		sigill_sse.sa_sigaction = sigill_handler_sse_os;
-      #ifdef __ANDROID__
-        sigemptyset (&sigill_sse.sa_mask);
-      #else
-		__sigemptyset(&sigill_sse.sa_mask);
-      #endif
-		sigill_sse.sa_flags = SA_SIGINFO | SA_RESETHAND; /* SA_RESETHAND just in case our SIGILL return jump breaks, so we don't get stuck in a loop */
-		if(0 == sigaction(SIGILL, &sigill_sse, &sigill_save))
-		{
-			/* http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html */
-			/* see sigill_handler_sse_os() for an explanation of the following: */
-			asm volatile (
-				"xorps %%xmm0,%%xmm0\n\t" /* will cause SIGILL if unsupported by OS */
-				"incl %0\n\t"             /* SIGILL handler will jump over this */
-				/* landing zone */
-				"nop\n\t" /* SIGILL jump lands here if "inc" is 9 bytes */
-				"nop\n\t"
-				"nop\n\t"
-				"nop\n\t"
-				"nop\n\t"
-				"nop\n\t"
-				"nop\n\t" /* SIGILL jump lands here if "inc" is 3 bytes (expected) */
-				"nop\n\t"
-				"nop"     /* SIGILL jump lands here if "inc" is 1 byte */
-				: "=r"(sse)
-				: "0"(sse)
-			);
-
-			sigaction(SIGILL, &sigill_save, NULL);
-		}
-
-		if(!sse)
-			disable_sse(info);
-#elif defined(_MSC_VER)
-		__try {
-			__asm {
-				xorps xmm0,xmm0
-			}
-		}
-		__except(EXCEPTION_EXECUTE_HANDLER) {
-			if (_exception_code() == STATUS_ILLEGAL_INSTRUCTION)
-				disable_sse(info);
-		}
-#elif defined(__GNUC__) /* MinGW goes here */
-		int sse = 0;
-		/* Based on the idea described in Agner Fog's manual "Optimizing subroutines in assembly language" */
-		/* In theory, not guaranteed to detect lack of OS SSE support on some future Intel CPUs, but in practice works (see the aforementioned manual) */
-		if (ia32_fxsr) {
-			struct {
-				FLAC__uint32 buff[128];
-			} __attribute__((aligned(16))) fxsr;
-			FLAC__uint32 old_val, new_val;
-
-			asm volatile ("fxsave %0"  : "=m" (fxsr) : "m" (fxsr));
-			old_val = fxsr.buff[50];
-			fxsr.buff[50] ^= 0x0013c0de;                             /* change value in the buffer */
-			asm volatile ("fxrstor %0" : "=m" (fxsr) : "m" (fxsr));  /* try to change SSE register */
-			fxsr.buff[50] = old_val;                                 /* restore old value in the buffer */
-			asm volatile ("fxsave %0 " : "=m" (fxsr) : "m" (fxsr));  /* old value will be overwritten if SSE register was changed */
-			new_val = fxsr.buff[50];                                 /* == old_val if FXRSTOR didn't change SSE register and (old_val ^ 0x0013c0de) otherwise */
-			fxsr.buff[50] = old_val;                                 /* again restore old value in the buffer */
-			asm volatile ("fxrstor %0" : "=m" (fxsr) : "m" (fxsr));  /* restore old values of registers */
-
-			if ((old_val^new_val) == 0x0013c0de)
-				sse = 1;
-		}
-		if(!sse)
-			disable_sse(info);
-#else
-		/* no way to test, disable to be safe */
-		disable_sse(info);
-#endif
-#ifdef DEBUG
-		fprintf(stderr, "  SSE OS sup . %c\n", info->ia32.sse ? 'Y' : 'n');
-#endif
-	}
-	else /* info->ia32.sse == false */
-		disable_sse(info);
-
-	/*
-	 * now have to check for OS support of AVX instructions
-	 */
-	if(info->ia32.avx && ia32_osxsave) {
-		FLAC__uint32 ecr = FLAC__cpu_xgetbv_x86();
-		if ((ecr & 0x6) != 0x6)
-			disable_avx(info);
-#ifdef DEBUG
-		fprintf(stderr, "  AVX OS sup . %c\n", info->ia32.avx ? 'Y' : 'n');
-#endif
-	}
-	else /* no OS AVX support*/
-		disable_avx(info);
-#else
-	info->use_asm = false;
-#endif
-
-/*
- * x86-64-specific
- */
-#elif defined FLAC__CPU_X86_64
-	FLAC__bool x86_osxsave = false;
-	(void) x86_osxsave; /* to avoid warnings about unused variables */
-	memset(info, 0, sizeof(*info));
-	info->type = FLAC__CPUINFO_TYPE_X86_64;
-#if !defined FLAC__NO_ASM && defined FLAC__HAS_X86INTRIN
-	info->use_asm = true;
-	{
-		/* http://www.sandpile.org/x86/cpuid.htm */
-		FLAC__uint32 flags_eax, flags_ebx, flags_ecx, flags_edx;
-		FLAC__cpu_info_x86(1, &flags_eax, &flags_ebx, &flags_ecx, &flags_edx);
-		info->x86.sse3  = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE3 )? true : false;
-		info->x86.ssse3 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSSE3)? true : false;
-		info->x86.sse41 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE41)? true : false;
-		info->x86.sse42 = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_SSE42)? true : false;
-#if defined FLAC__AVX_SUPPORTED
-		    x86_osxsave = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_OSXSAVE)? true : false;
-		info->x86.avx   = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_AVX    )? true : false;
-		info->x86.fma   = (flags_ecx & FLAC__CPUINFO_IA32_CPUID_FMA    )? true : false;
-		FLAC__cpu_info_x86(7, &flags_eax, &flags_ebx, &flags_ecx, &flags_edx);
-		info->x86.avx2  = (flags_ebx & FLAC__CPUINFO_IA32_CPUID_AVX2   )? true : false;
-#endif
-	}
-#ifdef DEBUG
-	fprintf(stderr, "CPU info (x86-64):\n");
-	fprintf(stderr, "  SSE3 ....... %c\n", info->x86.sse3  ? 'Y' : 'n');
-	fprintf(stderr, "  SSSE3 ...... %c\n", info->x86.ssse3 ? 'Y' : 'n');
-	fprintf(stderr, "  SSE41 ...... %c\n", info->x86.sse41 ? 'Y' : 'n');
-	fprintf(stderr, "  SSE42 ...... %c\n", info->x86.sse42 ? 'Y' : 'n');
-# if defined FLAC__AVX_SUPPORTED
-	fprintf(stderr, "  AVX ........ %c\n", info->x86.avx   ? 'Y' : 'n');
-	fprintf(stderr, "  FMA ........ %c\n", info->x86.fma   ? 'Y' : 'n');
-	fprintf(stderr, "  AVX2 ....... %c\n", info->x86.avx2  ? 'Y' : 'n');
-# endif
-#endif
-
-	/*
-	 * now have to check for OS support of AVX instructions
-	 */
-	if(info->x86.avx && x86_osxsave) {
-		FLAC__uint32 ecr = FLAC__cpu_xgetbv_x86();
-		if ((ecr & 0x6) != 0x6)
-			disable_avx(info);
-#ifdef DEBUG
-		fprintf(stderr, "  AVX OS sup . %c\n", info->x86.avx ? 'Y' : 'n');
-#endif
-	}
-	else /* no OS AVX support*/
-		disable_avx(info);
-#else
-	info->use_asm = false;
-#endif
-
-/*
- * unknown CPU
- */
-#else
-	info->type = FLAC__CPUINFO_TYPE_UNKNOWN;
-	info->use_asm = false;
-#endif
-}
-
-#if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-
-#if defined _MSC_VER
-#include <intrin.h> /* for __cpuid() and _xgetbv() */
-#elif defined __GNUC__ && defined HAVE_CPUID_H
-#include <cpuid.h> /* for __get_cpuid() and __get_cpuid_max() */
-#endif
-
-FLAC__uint32 FLAC__cpu_have_cpuid_x86(void)
-{
-#ifdef FLAC__CPU_X86_64
-	return 1;
-#else
-# if defined _MSC_VER || defined __INTEL_COMPILER /* Do they support CPUs w/o CPUID support (or OSes that work on those CPUs)? */
-	FLAC__uint32 flags1, flags2;
-	__asm {
-		pushfd
-		pushfd
-		pop		eax
-		mov		flags1, eax
-		xor		eax, 0x200000
-		push	eax
-		popfd
-		pushfd
-		pop		eax
-		mov		flags2, eax
-		popfd
-	}
-	if (((flags1^flags2) & 0x200000) != 0)
-		return 1;
-	else
-		return 0;
-# elif defined __GNUC__ && defined HAVE_CPUID_H
-	if (__get_cpuid_max(0, 0) != 0)
-		return 1;
-	else
-		return 0;
-# else
-	return 0;
-# endif
-#endif
-}
-
-void FLAC__cpu_info_x86(FLAC__uint32 level, FLAC__uint32 *eax, FLAC__uint32 *ebx, FLAC__uint32 *ecx, FLAC__uint32 *edx)
-{
-    (void) level;
-
-#if defined _MSC_VER || defined __INTEL_COMPILER
-	int cpuinfo[4];
-	int ext = level & 0x80000000;
-	__cpuid(cpuinfo, ext);
-	if((unsigned)cpuinfo[0] < level) {
-		*eax = *ebx = *ecx = *edx = 0;
-		return;
-	}
-#if defined FLAC__AVX_SUPPORTED
-	__cpuidex(cpuinfo, level, 0); /* for AVX2 detection */
-#else
-	__cpuid(cpuinfo, level); /* some old compilers don't support __cpuidex */
-#endif
-	*eax = cpuinfo[0]; *ebx = cpuinfo[1]; *ecx = cpuinfo[2]; *edx = cpuinfo[3];
-#elif defined __GNUC__ && defined HAVE_CPUID_H
-	FLAC__uint32 ext = level & 0x80000000;
-	__cpuid(ext, *eax, *ebx, *ecx, *edx);
-	if (*eax < level) {
-		*eax = *ebx = *ecx = *edx = 0;
-		return;
-	}
-	__cpuid_count(level, 0, *eax, *ebx, *ecx, *edx);
-#else
-	*eax = *ebx = *ecx = *edx = 0;
-#endif
-}
-
-FLAC__uint32 FLAC__cpu_xgetbv_x86(void)
-{
-#if (defined _MSC_VER || defined __INTEL_COMPILER) && defined FLAC__AVX_SUPPORTED
-	return (FLAC__uint32)_xgetbv(0);
-#elif defined __GNUC__
-	FLAC__uint32 lo, hi;
-	asm volatile (".byte 0x0f, 0x01, 0xd0" : "=a"(lo), "=d"(hi) : "c" (0));
-	return lo;
-#else
-	return 0;
-#endif
-}
-
-#endif /* (FLAC__CPU_IA32 || FLAC__CPU_X86_64) && FLAC__HAS_X86INTRIN */
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/crc.c b/modules/juce_audio_formats/codecs/flac/libFLAC/crc.c
deleted file mode 100644
index f58e7be..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/crc.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "include/private/crc.h"
-
-/* CRC-8, poly = x^8 + x^2 + x^1 + x^0, init = 0 */
-
-FLAC__byte const FLAC__crc8_table[256] = {
-	0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
-	0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
-	0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
-	0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
-	0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
-	0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
-	0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
-	0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
-	0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
-	0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
-	0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
-	0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
-	0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
-	0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
-	0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
-	0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
-	0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
-	0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
-	0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
-	0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
-	0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
-	0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
-	0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
-	0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
-	0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
-	0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
-	0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
-	0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
-	0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
-	0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
-	0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
-	0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
-};
-
-/* CRC-16, poly = x^16 + x^15 + x^2 + x^0, init = 0 */
-
-unsigned const FLAC__crc16_table[256] = {
-	0x0000,  0x8005,  0x800f,  0x000a,  0x801b,  0x001e,  0x0014,  0x8011,
-	0x8033,  0x0036,  0x003c,  0x8039,  0x0028,  0x802d,  0x8027,  0x0022,
-	0x8063,  0x0066,  0x006c,  0x8069,  0x0078,  0x807d,  0x8077,  0x0072,
-	0x0050,  0x8055,  0x805f,  0x005a,  0x804b,  0x004e,  0x0044,  0x8041,
-	0x80c3,  0x00c6,  0x00cc,  0x80c9,  0x00d8,  0x80dd,  0x80d7,  0x00d2,
-	0x00f0,  0x80f5,  0x80ff,  0x00fa,  0x80eb,  0x00ee,  0x00e4,  0x80e1,
-	0x00a0,  0x80a5,  0x80af,  0x00aa,  0x80bb,  0x00be,  0x00b4,  0x80b1,
-	0x8093,  0x0096,  0x009c,  0x8099,  0x0088,  0x808d,  0x8087,  0x0082,
-	0x8183,  0x0186,  0x018c,  0x8189,  0x0198,  0x819d,  0x8197,  0x0192,
-	0x01b0,  0x81b5,  0x81bf,  0x01ba,  0x81ab,  0x01ae,  0x01a4,  0x81a1,
-	0x01e0,  0x81e5,  0x81ef,  0x01ea,  0x81fb,  0x01fe,  0x01f4,  0x81f1,
-	0x81d3,  0x01d6,  0x01dc,  0x81d9,  0x01c8,  0x81cd,  0x81c7,  0x01c2,
-	0x0140,  0x8145,  0x814f,  0x014a,  0x815b,  0x015e,  0x0154,  0x8151,
-	0x8173,  0x0176,  0x017c,  0x8179,  0x0168,  0x816d,  0x8167,  0x0162,
-	0x8123,  0x0126,  0x012c,  0x8129,  0x0138,  0x813d,  0x8137,  0x0132,
-	0x0110,  0x8115,  0x811f,  0x011a,  0x810b,  0x010e,  0x0104,  0x8101,
-	0x8303,  0x0306,  0x030c,  0x8309,  0x0318,  0x831d,  0x8317,  0x0312,
-	0x0330,  0x8335,  0x833f,  0x033a,  0x832b,  0x032e,  0x0324,  0x8321,
-	0x0360,  0x8365,  0x836f,  0x036a,  0x837b,  0x037e,  0x0374,  0x8371,
-	0x8353,  0x0356,  0x035c,  0x8359,  0x0348,  0x834d,  0x8347,  0x0342,
-	0x03c0,  0x83c5,  0x83cf,  0x03ca,  0x83db,  0x03de,  0x03d4,  0x83d1,
-	0x83f3,  0x03f6,  0x03fc,  0x83f9,  0x03e8,  0x83ed,  0x83e7,  0x03e2,
-	0x83a3,  0x03a6,  0x03ac,  0x83a9,  0x03b8,  0x83bd,  0x83b7,  0x03b2,
-	0x0390,  0x8395,  0x839f,  0x039a,  0x838b,  0x038e,  0x0384,  0x8381,
-	0x0280,  0x8285,  0x828f,  0x028a,  0x829b,  0x029e,  0x0294,  0x8291,
-	0x82b3,  0x02b6,  0x02bc,  0x82b9,  0x02a8,  0x82ad,  0x82a7,  0x02a2,
-	0x82e3,  0x02e6,  0x02ec,  0x82e9,  0x02f8,  0x82fd,  0x82f7,  0x02f2,
-	0x02d0,  0x82d5,  0x82df,  0x02da,  0x82cb,  0x02ce,  0x02c4,  0x82c1,
-	0x8243,  0x0246,  0x024c,  0x8249,  0x0258,  0x825d,  0x8257,  0x0252,
-	0x0270,  0x8275,  0x827f,  0x027a,  0x826b,  0x026e,  0x0264,  0x8261,
-	0x0220,  0x8225,  0x822f,  0x022a,  0x823b,  0x023e,  0x0234,  0x8231,
-	0x8213,  0x0216,  0x021c,  0x8219,  0x0208,  0x820d,  0x8207,  0x0202
-};
-
-
-void FLAC__crc8_update(const FLAC__byte data, FLAC__uint8 *crc)
-{
-	*crc = FLAC__crc8_table[*crc ^ data];
-}
-
-void FLAC__crc8_update_block(const FLAC__byte *data, unsigned len, FLAC__uint8 *crc)
-{
-	while(len--)
-		*crc = FLAC__crc8_table[*crc ^ *data++];
-}
-
-FLAC__uint8 FLAC__crc8(const FLAC__byte *data, unsigned len)
-{
-	FLAC__uint8 crc = 0;
-
-	while(len--)
-		crc = FLAC__crc8_table[crc ^ *data++];
-
-	return crc;
-}
-
-unsigned FLAC__crc16(const FLAC__byte *data, unsigned len)
-{
-	unsigned crc = 0;
-
-	while(len--)
-		crc = ((crc<<8) ^ FLAC__crc16_table[(crc>>8) ^ *data++]) & 0xffff;
-
-	return crc;
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c b/modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c
deleted file mode 100644
index 78a9ec0..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <math.h>
-#include <string.h>
-#include "../compat.h"
-#include "include/private/bitmath.h"
-#include "include/private/fixed.h"
-#include "../assert.h"
-
-#ifdef local_abs
-#undef local_abs
-#endif
-#define local_abs(x) ((unsigned)((x)<0? -(x) : (x)))
-
-#ifdef FLAC__INTEGER_ONLY_LIBRARY
-/* rbps stands for residual bits per sample
- *
- *             (ln(2) * err)
- * rbps = log  (-----------)
- *           2 (     n     )
- */
-static FLAC__fixedpoint local__compute_rbps_integerized(FLAC__uint32 err, FLAC__uint32 n)
-{
-	FLAC__uint32 rbps;
-	unsigned bits; /* the number of bits required to represent a number */
-	int fracbits; /* the number of bits of rbps that comprise the fractional part */
-
-	FLAC__ASSERT(sizeof(rbps) == sizeof(FLAC__fixedpoint));
-	FLAC__ASSERT(err > 0);
-	FLAC__ASSERT(n > 0);
-
-	FLAC__ASSERT(n <= FLAC__MAX_BLOCK_SIZE);
-	if(err <= n)
-		return 0;
-	/*
-	 * The above two things tell us 1) n fits in 16 bits; 2) err/n > 1.
-	 * These allow us later to know we won't lose too much precision in the
-	 * fixed-point division (err<<fracbits)/n.
-	 */
-
-	fracbits = (8*sizeof(err)) - (FLAC__bitmath_ilog2(err)+1);
-
-	err <<= fracbits;
-	err /= n;
-	/* err now holds err/n with fracbits fractional bits */
-
-	/*
-	 * Whittle err down to 16 bits max.  16 significant bits is enough for
-	 * our purposes.
-	 */
-	FLAC__ASSERT(err > 0);
-	bits = FLAC__bitmath_ilog2(err)+1;
-	if(bits > 16) {
-		err >>= (bits-16);
-		fracbits -= (bits-16);
-	}
-	rbps = (FLAC__uint32)err;
-
-	/* Multiply by fixed-point version of ln(2), with 16 fractional bits */
-	rbps *= FLAC__FP_LN2;
-	fracbits += 16;
-	FLAC__ASSERT(fracbits >= 0);
-
-	/* FLAC__fixedpoint_log2 requires fracbits%4 to be 0 */
-	{
-		const int f = fracbits & 3;
-		if(f) {
-			rbps >>= f;
-			fracbits -= f;
-		}
-	}
-
-	rbps = FLAC__fixedpoint_log2(rbps, fracbits, (unsigned)(-1));
-
-	if(rbps == 0)
-		return 0;
-
-	/*
-	 * The return value must have 16 fractional bits.  Since the whole part
-	 * of the base-2 log of a 32 bit number must fit in 5 bits, and fracbits
-	 * must be >= -3, these assertion allows us to be able to shift rbps
-	 * left if necessary to get 16 fracbits without losing any bits of the
-	 * whole part of rbps.
-	 *
-	 * There is a slight chance due to accumulated error that the whole part
-	 * will require 6 bits, so we use 6 in the assertion.  Really though as
-	 * long as it fits in 13 bits (32 - (16 - (-3))) we are fine.
-	 */
-	FLAC__ASSERT((int)FLAC__bitmath_ilog2(rbps)+1 <= fracbits + 6);
-	FLAC__ASSERT(fracbits >= -3);
-
-	/* now shift the decimal point into place */
-	if(fracbits < 16)
-		return rbps << (16-fracbits);
-	else if(fracbits > 16)
-		return rbps >> (fracbits-16);
-	else
-		return rbps;
-}
-
-static FLAC__fixedpoint local__compute_rbps_wide_integerized(FLAC__uint64 err, FLAC__uint32 n)
-{
-	FLAC__uint32 rbps;
-	unsigned bits; /* the number of bits required to represent a number */
-	int fracbits; /* the number of bits of rbps that comprise the fractional part */
-
-	FLAC__ASSERT(sizeof(rbps) == sizeof(FLAC__fixedpoint));
-	FLAC__ASSERT(err > 0);
-	FLAC__ASSERT(n > 0);
-
-	FLAC__ASSERT(n <= FLAC__MAX_BLOCK_SIZE);
-	if(err <= n)
-		return 0;
-	/*
-	 * The above two things tell us 1) n fits in 16 bits; 2) err/n > 1.
-	 * These allow us later to know we won't lose too much precision in the
-	 * fixed-point division (err<<fracbits)/n.
-	 */
-
-	fracbits = (8*sizeof(err)) - (FLAC__bitmath_ilog2_wide(err)+1);
-
-	err <<= fracbits;
-	err /= n;
-	/* err now holds err/n with fracbits fractional bits */
-
-	/*
-	 * Whittle err down to 16 bits max.  16 significant bits is enough for
-	 * our purposes.
-	 */
-	FLAC__ASSERT(err > 0);
-	bits = FLAC__bitmath_ilog2_wide(err)+1;
-	if(bits > 16) {
-		err >>= (bits-16);
-		fracbits -= (bits-16);
-	}
-	rbps = (FLAC__uint32)err;
-
-	/* Multiply by fixed-point version of ln(2), with 16 fractional bits */
-	rbps *= FLAC__FP_LN2;
-	fracbits += 16;
-	FLAC__ASSERT(fracbits >= 0);
-
-	/* FLAC__fixedpoint_log2 requires fracbits%4 to be 0 */
-	{
-		const int f = fracbits & 3;
-		if(f) {
-			rbps >>= f;
-			fracbits -= f;
-		}
-	}
-
-	rbps = FLAC__fixedpoint_log2(rbps, fracbits, (unsigned)(-1));
-
-	if(rbps == 0)
-		return 0;
-
-	/*
-	 * The return value must have 16 fractional bits.  Since the whole part
-	 * of the base-2 log of a 32 bit number must fit in 5 bits, and fracbits
-	 * must be >= -3, these assertion allows us to be able to shift rbps
-	 * left if necessary to get 16 fracbits without losing any bits of the
-	 * whole part of rbps.
-	 *
-	 * There is a slight chance due to accumulated error that the whole part
-	 * will require 6 bits, so we use 6 in the assertion.  Really though as
-	 * long as it fits in 13 bits (32 - (16 - (-3))) we are fine.
-	 */
-	FLAC__ASSERT((int)FLAC__bitmath_ilog2(rbps)+1 <= fracbits + 6);
-	FLAC__ASSERT(fracbits >= -3);
-
-	/* now shift the decimal point into place */
-	if(fracbits < 16)
-		return rbps << (16-fracbits);
-	else if(fracbits > 16)
-		return rbps >> (fracbits-16);
-	else
-		return rbps;
-}
-#endif
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1])
-#else
-unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1])
-#endif
-{
-	FLAC__int32 last_error_0 = data[-1];
-	FLAC__int32 last_error_1 = data[-1] - data[-2];
-	FLAC__int32 last_error_2 = last_error_1 - (data[-2] - data[-3]);
-	FLAC__int32 last_error_3 = last_error_2 - (data[-2] - 2*data[-3] + data[-4]);
-	FLAC__int32 error, save;
-	FLAC__uint32 total_error_0 = 0, total_error_1 = 0, total_error_2 = 0, total_error_3 = 0, total_error_4 = 0;
-	unsigned i, order;
-
-	for(i = 0; i < data_len; i++) {
-		error  = data[i]     ; total_error_0 += local_abs(error);                      save = error;
-		error -= last_error_0; total_error_1 += local_abs(error); last_error_0 = save; save = error;
-		error -= last_error_1; total_error_2 += local_abs(error); last_error_1 = save; save = error;
-		error -= last_error_2; total_error_3 += local_abs(error); last_error_2 = save; save = error;
-		error -= last_error_3; total_error_4 += local_abs(error); last_error_3 = save;
-	}
-
-	if(total_error_0 < flac_min(flac_min(flac_min(total_error_1, total_error_2), total_error_3), total_error_4))
-		order = 0;
-	else if(total_error_1 < flac_min(flac_min(total_error_2, total_error_3), total_error_4))
-		order = 1;
-	else if(total_error_2 < flac_min(total_error_3, total_error_4))
-		order = 2;
-	else if(total_error_3 < total_error_4)
-		order = 3;
-	else
-		order = 4;
-
-	/* Estimate the expected number of bits per residual signal sample. */
-	/* 'total_error*' is linearly related to the variance of the residual */
-	/* signal, so we use it directly to compute E(|x|) */
-	FLAC__ASSERT(data_len > 0 || total_error_0 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_1 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_2 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_3 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_4 == 0);
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0);
-#else
-	residual_bits_per_sample[0] = (total_error_0 > 0) ? local__compute_rbps_integerized(total_error_0, data_len) : 0;
-	residual_bits_per_sample[1] = (total_error_1 > 0) ? local__compute_rbps_integerized(total_error_1, data_len) : 0;
-	residual_bits_per_sample[2] = (total_error_2 > 0) ? local__compute_rbps_integerized(total_error_2, data_len) : 0;
-	residual_bits_per_sample[3] = (total_error_3 > 0) ? local__compute_rbps_integerized(total_error_3, data_len) : 0;
-	residual_bits_per_sample[4] = (total_error_4 > 0) ? local__compute_rbps_integerized(total_error_4, data_len) : 0;
-#endif
-
-	return order;
-}
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1])
-#else
-unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1])
-#endif
-{
-	FLAC__int32 last_error_0 = data[-1];
-	FLAC__int32 last_error_1 = data[-1] - data[-2];
-	FLAC__int32 last_error_2 = last_error_1 - (data[-2] - data[-3]);
-	FLAC__int32 last_error_3 = last_error_2 - (data[-2] - 2*data[-3] + data[-4]);
-	FLAC__int32 error, save;
-	/* total_error_* are 64-bits to avoid overflow when encoding
-	 * erratic signals when the bits-per-sample and blocksize are
-	 * large.
-	 */
-	FLAC__uint64 total_error_0 = 0, total_error_1 = 0, total_error_2 = 0, total_error_3 = 0, total_error_4 = 0;
-	unsigned i, order;
-
-	for(i = 0; i < data_len; i++) {
-		error  = data[i]     ; total_error_0 += local_abs(error);                      save = error;
-		error -= last_error_0; total_error_1 += local_abs(error); last_error_0 = save; save = error;
-		error -= last_error_1; total_error_2 += local_abs(error); last_error_1 = save; save = error;
-		error -= last_error_2; total_error_3 += local_abs(error); last_error_2 = save; save = error;
-		error -= last_error_3; total_error_4 += local_abs(error); last_error_3 = save;
-	}
-
-	if(total_error_0 < flac_min(flac_min(flac_min(total_error_1, total_error_2), total_error_3), total_error_4))
-		order = 0;
-	else if(total_error_1 < flac_min(flac_min(total_error_2, total_error_3), total_error_4))
-		order = 1;
-	else if(total_error_2 < flac_min(total_error_3, total_error_4))
-		order = 2;
-	else if(total_error_3 < total_error_4)
-		order = 3;
-	else
-		order = 4;
-
-	/* Estimate the expected number of bits per residual signal sample. */
-	/* 'total_error*' is linearly related to the variance of the residual */
-	/* signal, so we use it directly to compute E(|x|) */
-	FLAC__ASSERT(data_len > 0 || total_error_0 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_1 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_2 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_3 == 0);
-	FLAC__ASSERT(data_len > 0 || total_error_4 == 0);
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	residual_bits_per_sample[0] = (FLAC__float)((total_error_0 > 0) ? log(M_LN2 * (FLAC__double)total_error_0 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[1] = (FLAC__float)((total_error_1 > 0) ? log(M_LN2 * (FLAC__double)total_error_1 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[2] = (FLAC__float)((total_error_2 > 0) ? log(M_LN2 * (FLAC__double)total_error_2 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[3] = (FLAC__float)((total_error_3 > 0) ? log(M_LN2 * (FLAC__double)total_error_3 / (FLAC__double)data_len) / M_LN2 : 0.0);
-	residual_bits_per_sample[4] = (FLAC__float)((total_error_4 > 0) ? log(M_LN2 * (FLAC__double)total_error_4 / (FLAC__double)data_len) / M_LN2 : 0.0);
-#else
-	residual_bits_per_sample[0] = (total_error_0 > 0) ? local__compute_rbps_wide_integerized(total_error_0, data_len) : 0;
-	residual_bits_per_sample[1] = (total_error_1 > 0) ? local__compute_rbps_wide_integerized(total_error_1, data_len) : 0;
-	residual_bits_per_sample[2] = (total_error_2 > 0) ? local__compute_rbps_wide_integerized(total_error_2, data_len) : 0;
-	residual_bits_per_sample[3] = (total_error_3 > 0) ? local__compute_rbps_wide_integerized(total_error_3, data_len) : 0;
-	residual_bits_per_sample[4] = (total_error_4 > 0) ? local__compute_rbps_wide_integerized(total_error_4, data_len) : 0;
-#endif
-
-	return order;
-}
-
-void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[])
-{
-	const int idata_len = (int)data_len;
-	int i;
-
-	switch(order) {
-		case 0:
-			FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0]));
-			memcpy(residual, data, sizeof(residual[0])*data_len);
-			break;
-		case 1:
-			for(i = 0; i < idata_len; i++)
-				residual[i] = data[i] - data[i-1];
-			break;
-		case 2:
-			for(i = 0; i < idata_len; i++)
-#if 1 /* OPT: may be faster with some compilers on some systems */
-				residual[i] = data[i] - (data[i-1] << 1) + data[i-2];
-#else
-				residual[i] = data[i] - 2*data[i-1] + data[i-2];
-#endif
-			break;
-		case 3:
-			for(i = 0; i < idata_len; i++)
-#if 1 /* OPT: may be faster with some compilers on some systems */
-				residual[i] = data[i] - (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) - data[i-3];
-#else
-				residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3];
-#endif
-			break;
-		case 4:
-			for(i = 0; i < idata_len; i++)
-#if 1 /* OPT: may be faster with some compilers on some systems */
-				residual[i] = data[i] - ((data[i-1]+data[i-3])<<2) + ((data[i-2]<<2) + (data[i-2]<<1)) + data[i-4];
-#else
-				residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4];
-#endif
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-}
-
-void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len, unsigned order, FLAC__int32 data[])
-{
-	int i, idata_len = (int)data_len;
-
-	switch(order) {
-		case 0:
-			FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0]));
-			memcpy(data, residual, sizeof(residual[0])*data_len);
-			break;
-		case 1:
-			for(i = 0; i < idata_len; i++)
-				data[i] = residual[i] + data[i-1];
-			break;
-		case 2:
-			for(i = 0; i < idata_len; i++)
-#if 1 /* OPT: may be faster with some compilers on some systems */
-				data[i] = residual[i] + (data[i-1]<<1) - data[i-2];
-#else
-				data[i] = residual[i] + 2*data[i-1] - data[i-2];
-#endif
-			break;
-		case 3:
-			for(i = 0; i < idata_len; i++)
-#if 1 /* OPT: may be faster with some compilers on some systems */
-				data[i] = residual[i] + (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) + data[i-3];
-#else
-				data[i] = residual[i] + 3*data[i-1] - 3*data[i-2] + data[i-3];
-#endif
-			break;
-		case 4:
-			for(i = 0; i < idata_len; i++)
-#if 1 /* OPT: may be faster with some compilers on some systems */
-				data[i] = residual[i] + ((data[i-1]+data[i-3])<<2) - ((data[i-2]<<2) + (data[i-2]<<1)) - data[i-4];
-#else
-				data[i] = residual[i] + 4*data[i-1] - 6*data[i-2] + 4*data[i-3] - data[i-4];
-#endif
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/float.c b/modules/juce_audio_formats/codecs/flac/libFLAC/float.c
deleted file mode 100644
index 1c16a2b..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/float.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2004-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "../assert.h"
-#include "../compat.h"
-#include "include/private/float.h"
-
-#ifdef FLAC__INTEGER_ONLY_LIBRARY
-
-const FLAC__fixedpoint FLAC__FP_ZERO = 0;
-const FLAC__fixedpoint FLAC__FP_ONE_HALF = 0x00008000;
-const FLAC__fixedpoint FLAC__FP_ONE = 0x00010000;
-const FLAC__fixedpoint FLAC__FP_LN2 = 45426;
-const FLAC__fixedpoint FLAC__FP_E = 178145;
-
-/* Lookup tables for Knuth's logarithm algorithm */
-#define LOG2_LOOKUP_PRECISION 16
-static const FLAC__uint32 log2_lookup[][LOG2_LOOKUP_PRECISION] = {
-	{
-		/*
-		 * 0 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x00000001,
-		/* lg(4/3) = */ 0x00000000,
-		/* lg(8/7) = */ 0x00000000,
-		/* lg(16/15) = */ 0x00000000,
-		/* lg(32/31) = */ 0x00000000,
-		/* lg(64/63) = */ 0x00000000,
-		/* lg(128/127) = */ 0x00000000,
-		/* lg(256/255) = */ 0x00000000,
-		/* lg(512/511) = */ 0x00000000,
-		/* lg(1024/1023) = */ 0x00000000,
-		/* lg(2048/2047) = */ 0x00000000,
-		/* lg(4096/4095) = */ 0x00000000,
-		/* lg(8192/8191) = */ 0x00000000,
-		/* lg(16384/16383) = */ 0x00000000,
-		/* lg(32768/32767) = */ 0x00000000
-	},
-	{
-		/*
-		 * 4 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x00000010,
-		/* lg(4/3) = */ 0x00000007,
-		/* lg(8/7) = */ 0x00000003,
-		/* lg(16/15) = */ 0x00000001,
-		/* lg(32/31) = */ 0x00000001,
-		/* lg(64/63) = */ 0x00000000,
-		/* lg(128/127) = */ 0x00000000,
-		/* lg(256/255) = */ 0x00000000,
-		/* lg(512/511) = */ 0x00000000,
-		/* lg(1024/1023) = */ 0x00000000,
-		/* lg(2048/2047) = */ 0x00000000,
-		/* lg(4096/4095) = */ 0x00000000,
-		/* lg(8192/8191) = */ 0x00000000,
-		/* lg(16384/16383) = */ 0x00000000,
-		/* lg(32768/32767) = */ 0x00000000
-	},
-	{
-		/*
-		 * 8 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x00000100,
-		/* lg(4/3) = */ 0x0000006a,
-		/* lg(8/7) = */ 0x00000031,
-		/* lg(16/15) = */ 0x00000018,
-		/* lg(32/31) = */ 0x0000000c,
-		/* lg(64/63) = */ 0x00000006,
-		/* lg(128/127) = */ 0x00000003,
-		/* lg(256/255) = */ 0x00000001,
-		/* lg(512/511) = */ 0x00000001,
-		/* lg(1024/1023) = */ 0x00000000,
-		/* lg(2048/2047) = */ 0x00000000,
-		/* lg(4096/4095) = */ 0x00000000,
-		/* lg(8192/8191) = */ 0x00000000,
-		/* lg(16384/16383) = */ 0x00000000,
-		/* lg(32768/32767) = */ 0x00000000
-	},
-	{
-		/*
-		 * 12 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x00001000,
-		/* lg(4/3) = */ 0x000006a4,
-		/* lg(8/7) = */ 0x00000315,
-		/* lg(16/15) = */ 0x0000017d,
-		/* lg(32/31) = */ 0x000000bc,
-		/* lg(64/63) = */ 0x0000005d,
-		/* lg(128/127) = */ 0x0000002e,
-		/* lg(256/255) = */ 0x00000017,
-		/* lg(512/511) = */ 0x0000000c,
-		/* lg(1024/1023) = */ 0x00000006,
-		/* lg(2048/2047) = */ 0x00000003,
-		/* lg(4096/4095) = */ 0x00000001,
-		/* lg(8192/8191) = */ 0x00000001,
-		/* lg(16384/16383) = */ 0x00000000,
-		/* lg(32768/32767) = */ 0x00000000
-	},
-	{
-		/*
-		 * 16 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x00010000,
-		/* lg(4/3) = */ 0x00006a40,
-		/* lg(8/7) = */ 0x00003151,
-		/* lg(16/15) = */ 0x000017d6,
-		/* lg(32/31) = */ 0x00000bba,
-		/* lg(64/63) = */ 0x000005d1,
-		/* lg(128/127) = */ 0x000002e6,
-		/* lg(256/255) = */ 0x00000172,
-		/* lg(512/511) = */ 0x000000b9,
-		/* lg(1024/1023) = */ 0x0000005c,
-		/* lg(2048/2047) = */ 0x0000002e,
-		/* lg(4096/4095) = */ 0x00000017,
-		/* lg(8192/8191) = */ 0x0000000c,
-		/* lg(16384/16383) = */ 0x00000006,
-		/* lg(32768/32767) = */ 0x00000003
-	},
-	{
-		/*
-		 * 20 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x00100000,
-		/* lg(4/3) = */ 0x0006a3fe,
-		/* lg(8/7) = */ 0x00031513,
-		/* lg(16/15) = */ 0x00017d60,
-		/* lg(32/31) = */ 0x0000bb9d,
-		/* lg(64/63) = */ 0x00005d10,
-		/* lg(128/127) = */ 0x00002e59,
-		/* lg(256/255) = */ 0x00001721,
-		/* lg(512/511) = */ 0x00000b8e,
-		/* lg(1024/1023) = */ 0x000005c6,
-		/* lg(2048/2047) = */ 0x000002e3,
-		/* lg(4096/4095) = */ 0x00000171,
-		/* lg(8192/8191) = */ 0x000000b9,
-		/* lg(16384/16383) = */ 0x0000005c,
-		/* lg(32768/32767) = */ 0x0000002e
-	},
-	{
-		/*
-		 * 24 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x01000000,
-		/* lg(4/3) = */ 0x006a3fe6,
-		/* lg(8/7) = */ 0x00315130,
-		/* lg(16/15) = */ 0x0017d605,
-		/* lg(32/31) = */ 0x000bb9ca,
-		/* lg(64/63) = */ 0x0005d0fc,
-		/* lg(128/127) = */ 0x0002e58f,
-		/* lg(256/255) = */ 0x0001720e,
-		/* lg(512/511) = */ 0x0000b8d8,
-		/* lg(1024/1023) = */ 0x00005c61,
-		/* lg(2048/2047) = */ 0x00002e2d,
-		/* lg(4096/4095) = */ 0x00001716,
-		/* lg(8192/8191) = */ 0x00000b8b,
-		/* lg(16384/16383) = */ 0x000005c5,
-		/* lg(32768/32767) = */ 0x000002e3
-	},
-	{
-		/*
-		 * 28 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ 0x10000000,
-		/* lg(4/3) = */ 0x06a3fe5c,
-		/* lg(8/7) = */ 0x03151301,
-		/* lg(16/15) = */ 0x017d6049,
-		/* lg(32/31) = */ 0x00bb9ca6,
-		/* lg(64/63) = */ 0x005d0fba,
-		/* lg(128/127) = */ 0x002e58f7,
-		/* lg(256/255) = */ 0x001720da,
-		/* lg(512/511) = */ 0x000b8d87,
-		/* lg(1024/1023) = */ 0x0005c60b,
-		/* lg(2048/2047) = */ 0x0002e2d7,
-		/* lg(4096/4095) = */ 0x00017160,
-		/* lg(8192/8191) = */ 0x0000b8ad,
-		/* lg(16384/16383) = */ 0x00005c56,
-		/* lg(32768/32767) = */ 0x00002e2b
-	}
-};
-
-#if 0
-static const FLAC__uint64 log2_lookup_wide[] = {
-	{
-		/*
-		 * 32 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ FLAC__U64L(0x100000000),
-		/* lg(4/3) = */ FLAC__U64L(0x6a3fe5c6),
-		/* lg(8/7) = */ FLAC__U64L(0x31513015),
-		/* lg(16/15) = */ FLAC__U64L(0x17d60497),
-		/* lg(32/31) = */ FLAC__U64L(0x0bb9ca65),
-		/* lg(64/63) = */ FLAC__U64L(0x05d0fba2),
-		/* lg(128/127) = */ FLAC__U64L(0x02e58f74),
-		/* lg(256/255) = */ FLAC__U64L(0x01720d9c),
-		/* lg(512/511) = */ FLAC__U64L(0x00b8d875),
-		/* lg(1024/1023) = */ FLAC__U64L(0x005c60aa),
-		/* lg(2048/2047) = */ FLAC__U64L(0x002e2d72),
-		/* lg(4096/4095) = */ FLAC__U64L(0x00171600),
-		/* lg(8192/8191) = */ FLAC__U64L(0x000b8ad2),
-		/* lg(16384/16383) = */ FLAC__U64L(0x0005c55d),
-		/* lg(32768/32767) = */ FLAC__U64L(0x0002e2ac)
-	},
-	{
-		/*
-		 * 48 fraction bits
-		 */
-		/* undefined */ 0x00000000,
-		/* lg(2/1) = */ FLAC__U64L(0x1000000000000),
-		/* lg(4/3) = */ FLAC__U64L(0x6a3fe5c60429),
-		/* lg(8/7) = */ FLAC__U64L(0x315130157f7a),
-		/* lg(16/15) = */ FLAC__U64L(0x17d60496cfbb),
-		/* lg(32/31) = */ FLAC__U64L(0xbb9ca64ecac),
-		/* lg(64/63) = */ FLAC__U64L(0x5d0fba187cd),
-		/* lg(128/127) = */ FLAC__U64L(0x2e58f7441ee),
-		/* lg(256/255) = */ FLAC__U64L(0x1720d9c06a8),
-		/* lg(512/511) = */ FLAC__U64L(0xb8d8752173),
-		/* lg(1024/1023) = */ FLAC__U64L(0x5c60aa252e),
-		/* lg(2048/2047) = */ FLAC__U64L(0x2e2d71b0d8),
-		/* lg(4096/4095) = */ FLAC__U64L(0x1716001719),
-		/* lg(8192/8191) = */ FLAC__U64L(0xb8ad1de1b),
-		/* lg(16384/16383) = */ FLAC__U64L(0x5c55d640d),
-		/* lg(32768/32767) = */ FLAC__U64L(0x2e2abcf52)
-	}
-};
-#endif
-
-FLAC__uint32 FLAC__fixedpoint_log2(FLAC__uint32 x, unsigned fracbits, unsigned precision)
-{
-	const FLAC__uint32 ONE = (1u << fracbits);
-	const FLAC__uint32 *table = log2_lookup[fracbits >> 2];
-
-	FLAC__ASSERT(fracbits < 32);
-	FLAC__ASSERT((fracbits & 0x3) == 0);
-
-	if(x < ONE)
-		return 0;
-
-	if(precision > LOG2_LOOKUP_PRECISION)
-		precision = LOG2_LOOKUP_PRECISION;
-
-	/* Knuth's algorithm for computing logarithms, optimized for base-2 with lookup tables */
-	{
-		FLAC__uint32 y = 0;
-		FLAC__uint32 z = x >> 1, k = 1;
-		while (x > ONE && k < precision) {
-			if (x - z >= ONE) {
-				x -= z;
-				z = x >> k;
-				y += table[k];
-			}
-			else {
-				z >>= 1;
-				k++;
-			}
-		}
-		return y;
-	}
-}
-
-#endif /* defined FLAC__INTEGER_ONLY_LIBRARY */
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/format.c b/modules/juce_audio_formats/codecs/flac/libFLAC/format.c
deleted file mode 100644
index eb8f56f..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/format.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h> /* for qsort() */
-#include <string.h> /* for memset() */
-#include "../assert.h"
-#include "../format.h"
-#include "../compat.h"
-#include "include/private/format.h"
-
-/* VERSION should come from configure */
-FLAC_API const char *FLAC__VERSION_STRING = VERSION;
-
-FLAC_API const char *FLAC__VENDOR_STRING = "reference libFLAC " VERSION " 20141125";
-
-FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4] = { 'f','L','a','C' };
-FLAC_API const unsigned FLAC__STREAM_SYNC = 0x664C6143;
-FLAC_API const unsigned FLAC__STREAM_SYNC_LEN = 32; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN = 16; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN = 16; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN = 24; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN = 24; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN = 20; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN = 3; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN = 5; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN = 36; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN = 128; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN = 32; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN = 64; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN = 64; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN = 16; /* bits */
-
-FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER = FLAC__U64L(0xffffffffffffffff);
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN = 32; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN = 64; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN = 8; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN = 3*8; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN = 64; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN = 8; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN = 12*8; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN = 1; /* bit */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN = 1; /* bit */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN = 6+13*8; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN = 8; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN = 128*8; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN = 64; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN = 1; /* bit */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN = 7+258*8; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN = 8; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN = 32; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN = 32; /* bits */
-
-FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN = 1; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN = 7; /* bits */
-FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN = 24; /* bits */
-
-FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC = 0x3ffe;
-FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN = 14; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN = 1; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN = 1; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN = 4; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN = 4; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN = 4; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN = 3; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN = 1; /* bits */
-FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN = 8; /* bits */
-
-FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN = 16; /* bits */
-
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN = 2; /* bits */
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN = 4; /* bits */
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN = 4; /* bits */
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN = 5; /* bits */
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN = 5; /* bits */
-
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER = 15; /* == (1<<FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN)-1 */
-FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER = 31; /* == (1<<FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN)-1 */
-
-FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[] = {
-	"PARTITIONED_RICE",
-	"PARTITIONED_RICE2"
-};
-
-FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN = 4; /* bits */
-FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN = 5; /* bits */
-
-FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN = 1; /* bits */
-FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN = 6; /* bits */
-FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN = 1; /* bits */
-
-FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK = 0x00;
-FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK = 0x02;
-FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK = 0x10;
-FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK = 0x40;
-
-FLAC_API const char * const FLAC__SubframeTypeString[] = {
-	"CONSTANT",
-	"VERBATIM",
-	"FIXED",
-	"LPC"
-};
-
-FLAC_API const char * const FLAC__ChannelAssignmentString[] = {
-	"INDEPENDENT",
-	"LEFT_SIDE",
-	"RIGHT_SIDE",
-	"MID_SIDE"
-};
-
-FLAC_API const char * const FLAC__FrameNumberTypeString[] = {
-	"FRAME_NUMBER_TYPE_FRAME_NUMBER",
-	"FRAME_NUMBER_TYPE_SAMPLE_NUMBER"
-};
-
-FLAC_API const char * const FLAC__MetadataTypeString[] = {
-	"STREAMINFO",
-	"PADDING",
-	"APPLICATION",
-	"SEEKTABLE",
-	"VORBIS_COMMENT",
-	"CUESHEET",
-	"PICTURE"
-};
-
-FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[] = {
-	"Other",
-	"32x32 pixels 'file icon' (PNG only)",
-	"Other file icon",
-	"Cover (front)",
-	"Cover (back)",
-	"Leaflet page",
-	"Media (e.g. label side of CD)",
-	"Lead artist/lead performer/soloist",
-	"Artist/performer",
-	"Conductor",
-	"Band/Orchestra",
-	"Composer",
-	"Lyricist/text writer",
-	"Recording Location",
-	"During recording",
-	"During performance",
-	"Movie/video screen capture",
-	"A bright coloured fish",
-	"Illustration",
-	"Band/artist logotype",
-	"Publisher/Studio logotype"
-};
-
-FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate)
-{
-	if(sample_rate == 0 || sample_rate > FLAC__MAX_SAMPLE_RATE) {
-		return false;
-	}
-	else
-		return true;
-}
-
-FLAC_API FLAC__bool FLAC__format_blocksize_is_subset(unsigned blocksize, unsigned sample_rate)
-{
-	if(blocksize > 16384)
-		return false;
-	else if(sample_rate <= 48000 && blocksize > 4608)
-		return false;
-	else
-		return true;
-}
-
-FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate)
-{
-	if(
-		!FLAC__format_sample_rate_is_valid(sample_rate) ||
-		(
-			sample_rate >= (1u << 16) &&
-			!(sample_rate % 1000 == 0 || sample_rate % 10 == 0)
-		)
-	) {
-		return false;
-	}
-	else
-		return true;
-}
-
-/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
-FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table)
-{
-	unsigned i;
-	FLAC__uint64 prev_sample_number = 0;
-	FLAC__bool got_prev = false;
-
-	FLAC__ASSERT(0 != seek_table);
-
-	for(i = 0; i < seek_table->num_points; i++) {
-		if(got_prev) {
-			if(
-				seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER &&
-				seek_table->points[i].sample_number <= prev_sample_number
-			)
-				return false;
-		}
-		prev_sample_number = seek_table->points[i].sample_number;
-		got_prev = true;
-	}
-
-	return true;
-}
-
-/* used as the sort predicate for qsort() */
-static int seekpoint_compare_(const FLAC__StreamMetadata_SeekPoint *l, const FLAC__StreamMetadata_SeekPoint *r)
-{
-	/* we don't just 'return l->sample_number - r->sample_number' since the result (FLAC__int64) might overflow an 'int' */
-	if(l->sample_number == r->sample_number)
-		return 0;
-	else if(l->sample_number < r->sample_number)
-		return -1;
-	else
-		return 1;
-}
-
-/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
-FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table)
-{
-	unsigned i, j;
-	FLAC__bool first;
-
-	FLAC__ASSERT(0 != seek_table);
-
-	/* sort the seekpoints */
-	qsort(seek_table->points, seek_table->num_points, sizeof(FLAC__StreamMetadata_SeekPoint), (int (*)(const void *, const void *))seekpoint_compare_);
-
-	/* uniquify the seekpoints */
-	first = true;
-	for(i = j = 0; i < seek_table->num_points; i++) {
-		if(seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER) {
-			if(!first) {
-				if(seek_table->points[i].sample_number == seek_table->points[j-1].sample_number)
-					continue;
-			}
-		}
-		first = false;
-		seek_table->points[j++] = seek_table->points[i];
-	}
-
-	for(i = j; i < seek_table->num_points; i++) {
-		seek_table->points[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
-		seek_table->points[i].stream_offset = 0;
-		seek_table->points[i].frame_samples = 0;
-	}
-
-	return j;
-}
-
-/*
- * also disallows non-shortest-form encodings, c.f.
- *   http://www.unicode.org/versions/corrigendum1.html
- * and a more clear explanation at the end of this section:
- *   http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- */
-static unsigned utf8len_(const FLAC__byte *utf8)
-{
-	FLAC__ASSERT(0 != utf8);
-	if ((utf8[0] & 0x80) == 0) {
-		return 1;
-	}
-	else if ((utf8[0] & 0xE0) == 0xC0 && (utf8[1] & 0xC0) == 0x80) {
-		if ((utf8[0] & 0xFE) == 0xC0) /* overlong sequence check */
-			return 0;
-		return 2;
-	}
-	else if ((utf8[0] & 0xF0) == 0xE0 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80) {
-		if (utf8[0] == 0xE0 && (utf8[1] & 0xE0) == 0x80) /* overlong sequence check */
-			return 0;
-		/* illegal surrogates check (U+D800...U+DFFF and U+FFFE...U+FFFF) */
-		if (utf8[0] == 0xED && (utf8[1] & 0xE0) == 0xA0) /* D800-DFFF */
-			return 0;
-		if (utf8[0] == 0xEF && utf8[1] == 0xBF && (utf8[2] & 0xFE) == 0xBE) /* FFFE-FFFF */
-			return 0;
-		return 3;
-	}
-	else if ((utf8[0] & 0xF8) == 0xF0 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80) {
-		if (utf8[0] == 0xF0 && (utf8[1] & 0xF0) == 0x80) /* overlong sequence check */
-			return 0;
-		return 4;
-	}
-	else if ((utf8[0] & 0xFC) == 0xF8 && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80) {
-		if (utf8[0] == 0xF8 && (utf8[1] & 0xF8) == 0x80) /* overlong sequence check */
-			return 0;
-		return 5;
-	}
-	else if ((utf8[0] & 0xFE) == 0xFC && (utf8[1] & 0xC0) == 0x80 && (utf8[2] & 0xC0) == 0x80 && (utf8[3] & 0xC0) == 0x80 && (utf8[4] & 0xC0) == 0x80 && (utf8[5] & 0xC0) == 0x80) {
-		if (utf8[0] == 0xFC && (utf8[1] & 0xFC) == 0x80) /* overlong sequence check */
-			return 0;
-		return 6;
-	}
-	else {
-		return 0;
-	}
-}
-
-FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name)
-{
-	char c;
-	for(c = *name; c; c = *(++name))
-		if(c < 0x20 || c == 0x3d || c > 0x7d)
-			return false;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length)
-{
-	if(length == (unsigned)(-1)) {
-		while(*value) {
-			unsigned n = utf8len_(value);
-			if(n == 0)
-				return false;
-			value += n;
-		}
-	}
-	else {
-		const FLAC__byte *end = value + length;
-		while(value < end) {
-			unsigned n = utf8len_(value);
-			if(n == 0)
-				return false;
-			value += n;
-		}
-		if(value != end)
-			return false;
-	}
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length)
-{
-	const FLAC__byte *s, *end;
-
-	for(s = entry, end = s + length; s < end && *s != '='; s++) {
-		if(*s < 0x20 || *s > 0x7D)
-			return false;
-	}
-	if(s == end)
-		return false;
-
-	s++; /* skip '=' */
-
-	while(s < end) {
-		unsigned n = utf8len_(s);
-		if(n == 0)
-			return false;
-		s += n;
-	}
-	if(s != end)
-		return false;
-
-	return true;
-}
-
-/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
-FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation)
-{
-	unsigned i, j;
-
-	if(check_cd_da_subset) {
-		if(cue_sheet->lead_in < 2 * 44100) {
-			if(violation) *violation = "CD-DA cue sheet must have a lead-in length of at least 2 seconds";
-			return false;
-		}
-		if(cue_sheet->lead_in % 588 != 0) {
-			if(violation) *violation = "CD-DA cue sheet lead-in length must be evenly divisible by 588 samples";
-			return false;
-		}
-	}
-
-	if(cue_sheet->num_tracks == 0) {
-		if(violation) *violation = "cue sheet must have at least one track (the lead-out)";
-		return false;
-	}
-
-	if(check_cd_da_subset && cue_sheet->tracks[cue_sheet->num_tracks-1].number != 170) {
-		if(violation) *violation = "CD-DA cue sheet must have a lead-out track number 170 (0xAA)";
-		return false;
-	}
-
-	for(i = 0; i < cue_sheet->num_tracks; i++) {
-		if(cue_sheet->tracks[i].number == 0) {
-			if(violation) *violation = "cue sheet may not have a track number 0";
-			return false;
-		}
-
-		if(check_cd_da_subset) {
-			if(!((cue_sheet->tracks[i].number >= 1 && cue_sheet->tracks[i].number <= 99) || cue_sheet->tracks[i].number == 170)) {
-				if(violation) *violation = "CD-DA cue sheet track number must be 1-99 or 170";
-				return false;
-			}
-		}
-
-		if(check_cd_da_subset && cue_sheet->tracks[i].offset % 588 != 0) {
-			if(violation) {
-				if(i == cue_sheet->num_tracks-1) /* the lead-out track... */
-					*violation = "CD-DA cue sheet lead-out offset must be evenly divisible by 588 samples";
-				else
-					*violation = "CD-DA cue sheet track offset must be evenly divisible by 588 samples";
-			}
-			return false;
-		}
-
-		if(i < cue_sheet->num_tracks - 1) {
-			if(cue_sheet->tracks[i].num_indices == 0) {
-				if(violation) *violation = "cue sheet track must have at least one index point";
-				return false;
-			}
-
-			if(cue_sheet->tracks[i].indices[0].number > 1) {
-				if(violation) *violation = "cue sheet track's first index number must be 0 or 1";
-				return false;
-			}
-		}
-
-		for(j = 0; j < cue_sheet->tracks[i].num_indices; j++) {
-			if(check_cd_da_subset && cue_sheet->tracks[i].indices[j].offset % 588 != 0) {
-				if(violation) *violation = "CD-DA cue sheet track index offset must be evenly divisible by 588 samples";
-				return false;
-			}
-
-			if(j > 0) {
-				if(cue_sheet->tracks[i].indices[j].number != cue_sheet->tracks[i].indices[j-1].number + 1) {
-					if(violation) *violation = "cue sheet track index numbers must increase by 1";
-					return false;
-				}
-			}
-		}
-	}
-
-	return true;
-}
-
-/* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
-FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation)
-{
-	char *p;
-	FLAC__byte *b;
-
-	for(p = picture->mime_type; *p; p++) {
-		if(*p < 0x20 || *p > 0x7e) {
-			if(violation) *violation = "MIME type string must contain only printable ASCII characters (0x20-0x7e)";
-			return false;
-		}
-	}
-
-	for(b = picture->description; *b; ) {
-		unsigned n = utf8len_(b);
-		if(n == 0) {
-			if(violation) *violation = "description string must be valid UTF-8";
-			return false;
-		}
-		b += n;
-	}
-
-	return true;
-}
-
-/*
- * These routines are private to libFLAC
- */
-unsigned FLAC__format_get_max_rice_partition_order(unsigned blocksize, unsigned predictor_order)
-{
-	return
-		FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(
-			FLAC__format_get_max_rice_partition_order_from_blocksize(blocksize),
-			blocksize,
-			predictor_order
-		);
-}
-
-unsigned FLAC__format_get_max_rice_partition_order_from_blocksize(unsigned blocksize)
-{
-	unsigned max_rice_partition_order = 0;
-	while(!(blocksize & 1)) {
-		max_rice_partition_order++;
-		blocksize >>= 1;
-	}
-	return flac_min(FLAC__MAX_RICE_PARTITION_ORDER, max_rice_partition_order);
-}
-
-unsigned FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(unsigned limit, unsigned blocksize, unsigned predictor_order)
-{
-	unsigned max_rice_partition_order = limit;
-
-	while(max_rice_partition_order > 0 && (blocksize >> max_rice_partition_order) <= predictor_order)
-		max_rice_partition_order--;
-
-	FLAC__ASSERT(
-		(max_rice_partition_order == 0 && blocksize >= predictor_order) ||
-		(max_rice_partition_order > 0 && blocksize >> max_rice_partition_order > predictor_order)
-	);
-
-	return max_rice_partition_order;
-}
-
-void FLAC__format_entropy_coding_method_partitioned_rice_contents_init(FLAC__EntropyCodingMethod_PartitionedRiceContents *object)
-{
-	FLAC__ASSERT(0 != object);
-
-	object->parameters = 0;
-	object->raw_bits = 0;
-	object->capacity_by_order = 0;
-}
-
-void FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(FLAC__EntropyCodingMethod_PartitionedRiceContents *object)
-{
-	FLAC__ASSERT(0 != object);
-
-	if(0 != object->parameters)
-		free(object->parameters);
-	if(0 != object->raw_bits)
-		free(object->raw_bits);
-	FLAC__format_entropy_coding_method_partitioned_rice_contents_init(object);
-}
-
-FLAC__bool FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(FLAC__EntropyCodingMethod_PartitionedRiceContents *object, unsigned max_partition_order)
-{
-	FLAC__ASSERT(0 != object);
-
-	FLAC__ASSERT(object->capacity_by_order > 0 || (0 == object->parameters && 0 == object->raw_bits));
-
-	if(object->capacity_by_order < max_partition_order) {
-		if(0 == (object->parameters = (unsigned int*) realloc(object->parameters, sizeof(unsigned)*(1 << max_partition_order))))
-			return false;
-		if(0 == (object->raw_bits = (unsigned int*) realloc(object->raw_bits, sizeof(unsigned)*(1 << max_partition_order))))
-			return false;
-		memset(object->raw_bits, 0, sizeof(unsigned)*(1 << max_partition_order));
-		object->capacity_by_order = max_partition_order;
-	}
-
-	return true;
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h
deleted file mode 100644
index a526071..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__ALL_H
-#define FLAC__PRIVATE__ALL_H
-
-#include "bitmath.h"
-#include "bitreader.h"
-#include "bitwriter.h"
-#include "cpu.h"
-#include "crc.h"
-#include "fixed.h"
-#include "float.h"
-#include "format.h"
-#include "lpc.h"
-#include "md5.h"
-#include "memory.h"
-#include "metadata.h"
-#include "stream_encoder_framing.h"
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h
deleted file mode 100644
index 9ca9ec3..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__BITMATH_H
-#define FLAC__PRIVATE__BITMATH_H
-
-#include "../../../ordinals.h"
-#include "../../../assert.h"
-
-/* for CHAR_BIT */
-#include <limits.h>
-#include "../../../compat.h"
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#include <intrin.h> /* for _BitScanReverse* */
-#endif
-
-/* Will never be emitted for MSVC, GCC, Intel compilers */
-static inline unsigned int FLAC__clz_soft_uint32(unsigned int word)
-{
-    static const unsigned char byte_to_unary_table[] = {
-    8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
-    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    };
-
-    return (word) > 0xffffff ? byte_to_unary_table[(word) >> 24] :
-    (word) > 0xffff ? byte_to_unary_table[(word) >> 16] + 8 :
-    (word) > 0xff ? byte_to_unary_table[(word) >> 8] + 16 :
-    byte_to_unary_table[(word)] + 24;
-}
-
-static inline unsigned int FLAC__clz_uint32(FLAC__uint32 v)
-{
-/* Never used with input 0 */
-    FLAC__ASSERT(v > 0);
-#if defined(__INTEL_COMPILER)
-    return _bit_scan_reverse(v) ^ 31U;
-#elif defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-/* This will translate either to (bsr ^ 31U), clz , ctlz, cntlz, lzcnt depending on
- * -march= setting or to a software routine in exotic machines. */
-    return __builtin_clz(v);
-#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
-    {
-        unsigned long idx;
-        _BitScanReverse(&idx, v);
-        return idx ^ 31U;
-    }
-#else
-    return FLAC__clz_soft_uint32(v);
-#endif
-}
-
-/* This one works with input 0 */
-static inline unsigned int FLAC__clz2_uint32(FLAC__uint32 v)
-{
-    if (!v)
-        return 32;
-    return FLAC__clz_uint32(v);
-}
-
-/* An example of what FLAC__bitmath_ilog2() computes:
- *
- * ilog2( 0) = assertion failure
- * ilog2( 1) = 0
- * ilog2( 2) = 1
- * ilog2( 3) = 1
- * ilog2( 4) = 2
- * ilog2( 5) = 2
- * ilog2( 6) = 2
- * ilog2( 7) = 2
- * ilog2( 8) = 3
- * ilog2( 9) = 3
- * ilog2(10) = 3
- * ilog2(11) = 3
- * ilog2(12) = 3
- * ilog2(13) = 3
- * ilog2(14) = 3
- * ilog2(15) = 3
- * ilog2(16) = 4
- * ilog2(17) = 4
- * ilog2(18) = 4
- */
-
-static inline unsigned FLAC__bitmath_ilog2(FLAC__uint32 v)
-{
-    FLAC__ASSERT(v > 0);
-#if defined(__INTEL_COMPILER)
-    return _bit_scan_reverse(v);
-#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
-    {
-        unsigned long idx;
-        _BitScanReverse(&idx, v);
-        return idx;
-    }
-#else
-    return sizeof(FLAC__uint32) * CHAR_BIT  - 1 - FLAC__clz_uint32(v);
-#endif
-}
-
-
-#ifdef FLAC__INTEGER_ONLY_LIBRARY /* Unused otherwise */
-
-static inline unsigned FLAC__bitmath_ilog2_wide(FLAC__uint64 v)
-{
-    FLAC__ASSERT(v > 0);
-#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-    return sizeof(FLAC__uint64) * CHAR_BIT - 1 - __builtin_clzll(v);
-/* Sorry, only supported in x64/Itanium.. and both have fast FPU which makes integer-only encoder pointless */
-#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && (defined(_M_IA64) || defined(_M_X64))
-    {
-        unsigned long idx;
-        _BitScanReverse64(&idx, v);
-        return idx;
-    }
-#else
-/*  Brain-damaged compilers will use the fastest possible way that is,
-    de Bruijn sequences (http://supertech.csail.mit.edu/papers/debruijn.pdf)
-    (C) Timothy B. Terriberry (tterribe at xiph.org) 2001-2009 CC0 (Public domain).
-*/
-    {
-        static const unsigned char DEBRUIJN_IDX64[64]={
-            0, 1, 2, 7, 3,13, 8,19, 4,25,14,28, 9,34,20,40,
-            5,17,26,38,15,46,29,48,10,31,35,54,21,50,41,57,
-            63, 6,12,18,24,27,33,39,16,37,45,47,30,53,49,56,
-            62,11,23,32,36,44,52,55,61,22,43,51,60,42,59,58
-        };
-        v|= v>>1;
-        v|= v>>2;
-        v|= v>>4;
-        v|= v>>8;
-        v|= v>>16;
-        v|= v>>32;
-        v= (v>>1)+1;
-        return DEBRUIJN_IDX64[v*0x218A392CD3D5DBF>>58&0x3F];
-    }
-#endif
-}
-#endif
-
-unsigned FLAC__bitmath_silog2(int v);
-unsigned FLAC__bitmath_silog2_wide(FLAC__int64 v);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h
deleted file mode 100644
index 83f8361..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__BITREADER_H
-#define FLAC__PRIVATE__BITREADER_H
-
-#include <stdio.h> /* for FILE */
-#include "../../../ordinals.h"
-#include "cpu.h"
-
-/*
- * opaque structure definition
- */
-struct FLAC__BitReader;
-typedef struct FLAC__BitReader FLAC__BitReader;
-
-typedef FLAC__bool (*FLAC__BitReaderReadCallback)(FLAC__byte buffer[], size_t *bytes, void *client_data);
-
-/*
- * construction, deletion, initialization, etc functions
- */
-FLAC__BitReader *FLAC__bitreader_new(void);
-void FLAC__bitreader_delete(FLAC__BitReader *br);
-FLAC__bool FLAC__bitreader_init(FLAC__BitReader *br, FLAC__BitReaderReadCallback rcb, void *cd);
-void FLAC__bitreader_free(FLAC__BitReader *br); /* does not 'free(br)' */
-FLAC__bool FLAC__bitreader_clear(FLAC__BitReader *br);
-void FLAC__bitreader_dump(const FLAC__BitReader *br, FILE *out);
-
-/*
- * CRC functions
- */
-void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed);
-FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br);
-
-/*
- * info functions
- */
-FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br);
-unsigned FLAC__bitreader_bits_left_for_byte_alignment(const FLAC__BitReader *br);
-unsigned FLAC__bitreader_get_input_bits_unconsumed(const FLAC__BitReader *br);
-
-/*
- * read functions
- */
-
-FLAC__bool FLAC__bitreader_read_raw_uint32(FLAC__BitReader *br, FLAC__uint32 *val, unsigned bits);
-FLAC__bool FLAC__bitreader_read_raw_int32(FLAC__BitReader *br, FLAC__int32 *val, unsigned bits);
-FLAC__bool FLAC__bitreader_read_raw_uint64(FLAC__BitReader *br, FLAC__uint64 *val, unsigned bits);
-FLAC__bool FLAC__bitreader_read_uint32_little_endian(FLAC__BitReader *br, FLAC__uint32 *val); /*only for bits=32*/
-FLAC__bool FLAC__bitreader_skip_bits_no_crc(FLAC__BitReader *br, unsigned bits); /* WATCHOUT: does not CRC the skipped data! */ /*@@@@ add to unit tests */
-FLAC__bool FLAC__bitreader_skip_byte_block_aligned_no_crc(FLAC__BitReader *br, unsigned nvals); /* WATCHOUT: does not CRC the read data! */
-FLAC__bool FLAC__bitreader_read_byte_block_aligned_no_crc(FLAC__BitReader *br, FLAC__byte *val, unsigned nvals); /* WATCHOUT: does not CRC the read data! */
-FLAC__bool FLAC__bitreader_read_unary_unsigned(FLAC__BitReader *br, unsigned *val);
-FLAC__bool FLAC__bitreader_read_rice_signed(FLAC__BitReader *br, int *val, unsigned parameter);
-FLAC__bool FLAC__bitreader_read_rice_signed_block(FLAC__BitReader *br, int vals[], unsigned nvals, unsigned parameter);
-#if 0 /* UNUSED */
-FLAC__bool FLAC__bitreader_read_golomb_signed(FLAC__BitReader *br, int *val, unsigned parameter);
-FLAC__bool FLAC__bitreader_read_golomb_unsigned(FLAC__BitReader *br, unsigned *val, unsigned parameter);
-#endif
-FLAC__bool FLAC__bitreader_read_utf8_uint32(FLAC__BitReader *br, FLAC__uint32 *val, FLAC__byte *raw, unsigned *rawlen);
-FLAC__bool FLAC__bitreader_read_utf8_uint64(FLAC__BitReader *br, FLAC__uint64 *val, FLAC__byte *raw, unsigned *rawlen);
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h
deleted file mode 100644
index 1e23efe..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__BITWRITER_H
-#define FLAC__PRIVATE__BITWRITER_H
-
-#include <stdio.h> /* for FILE */
-#include "../../../ordinals.h"
-
-/*
- * opaque structure definition
- */
-struct FLAC__BitWriter;
-typedef struct FLAC__BitWriter FLAC__BitWriter;
-
-/*
- * construction, deletion, initialization, etc functions
- */
-FLAC__BitWriter *FLAC__bitwriter_new(void);
-void FLAC__bitwriter_delete(FLAC__BitWriter *bw);
-FLAC__bool FLAC__bitwriter_init(FLAC__BitWriter *bw);
-void FLAC__bitwriter_free(FLAC__BitWriter *bw); /* does not 'free(buffer)' */
-void FLAC__bitwriter_clear(FLAC__BitWriter *bw);
-void FLAC__bitwriter_dump(const FLAC__BitWriter *bw, FILE *out);
-
-/*
- * CRC functions
- *
- * non-const *bw because they have to cal FLAC__bitwriter_get_buffer()
- */
-FLAC__bool FLAC__bitwriter_get_write_crc16(FLAC__BitWriter *bw, FLAC__uint16 *crc);
-FLAC__bool FLAC__bitwriter_get_write_crc8(FLAC__BitWriter *bw, FLAC__byte *crc);
-
-/*
- * info functions
- */
-FLAC__bool FLAC__bitwriter_is_byte_aligned(const FLAC__BitWriter *bw);
-unsigned FLAC__bitwriter_get_input_bits_unconsumed(const FLAC__BitWriter *bw); /* can be called anytime, returns total # of bits unconsumed */
-
-/*
- * direct buffer access
- *
- * there may be no calls on the bitwriter between get and release.
- * the bitwriter continues to own the returned buffer.
- * before get, bitwriter MUST be byte aligned: check with FLAC__bitwriter_is_byte_aligned()
- */
-FLAC__bool FLAC__bitwriter_get_buffer(FLAC__BitWriter *bw, const FLAC__byte **buffer, size_t *bytes);
-void FLAC__bitwriter_release_buffer(FLAC__BitWriter *bw);
-
-/*
- * write functions
- */
-FLAC__bool FLAC__bitwriter_write_zeroes(FLAC__BitWriter *bw, unsigned bits);
-FLAC__bool FLAC__bitwriter_write_raw_uint32(FLAC__BitWriter *bw, FLAC__uint32 val, unsigned bits);
-FLAC__bool FLAC__bitwriter_write_raw_int32(FLAC__BitWriter *bw, FLAC__int32 val, unsigned bits);
-FLAC__bool FLAC__bitwriter_write_raw_uint64(FLAC__BitWriter *bw, FLAC__uint64 val, unsigned bits);
-FLAC__bool FLAC__bitwriter_write_raw_uint32_little_endian(FLAC__BitWriter *bw, FLAC__uint32 val); /*only for bits=32*/
-FLAC__bool FLAC__bitwriter_write_byte_block(FLAC__BitWriter *bw, const FLAC__byte vals[], unsigned nvals);
-FLAC__bool FLAC__bitwriter_write_unary_unsigned(FLAC__BitWriter *bw, unsigned val);
-unsigned FLAC__bitwriter_rice_bits(FLAC__int32 val, unsigned parameter);
-#if 0 /* UNUSED */
-unsigned FLAC__bitwriter_golomb_bits_signed(int val, unsigned parameter);
-unsigned FLAC__bitwriter_golomb_bits_unsigned(unsigned val, unsigned parameter);
-#endif
-FLAC__bool FLAC__bitwriter_write_rice_signed(FLAC__BitWriter *bw, FLAC__int32 val, unsigned parameter);
-FLAC__bool FLAC__bitwriter_write_rice_signed_block(FLAC__BitWriter *bw, const FLAC__int32 *vals, unsigned nvals, unsigned parameter);
-#if 0 /* UNUSED */
-FLAC__bool FLAC__bitwriter_write_golomb_signed(FLAC__BitWriter *bw, int val, unsigned parameter);
-FLAC__bool FLAC__bitwriter_write_golomb_unsigned(FLAC__BitWriter *bw, unsigned val, unsigned parameter);
-#endif
-FLAC__bool FLAC__bitwriter_write_utf8_uint32(FLAC__BitWriter *bw, FLAC__uint32 val);
-FLAC__bool FLAC__bitwriter_write_utf8_uint64(FLAC__BitWriter *bw, FLAC__uint64 val);
-FLAC__bool FLAC__bitwriter_zero_pad_to_byte_boundary(FLAC__BitWriter *bw);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h
deleted file mode 100644
index 655800e..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__CPU_H
-#define FLAC__PRIVATE__CPU_H
-
-#include "../../../ordinals.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-typedef enum {
-	FLAC__CPUINFO_TYPE_IA32,
-	FLAC__CPUINFO_TYPE_X86_64,
-	FLAC__CPUINFO_TYPE_UNKNOWN
-} FLAC__CPUInfo_Type;
-
-#if defined FLAC__CPU_IA32
-typedef struct {
-	FLAC__bool cmov;
-	FLAC__bool mmx;
-	FLAC__bool sse;
-	FLAC__bool sse2;
-
-	FLAC__bool sse3;
-	FLAC__bool ssse3;
-	FLAC__bool sse41;
-	FLAC__bool sse42;
-	FLAC__bool avx;
-	FLAC__bool avx2;
-	FLAC__bool fma;
-} FLAC__CPUInfo_IA32;
-#elif defined FLAC__CPU_X86_64
-typedef struct {
-	FLAC__bool sse3;
-	FLAC__bool ssse3;
-	FLAC__bool sse41;
-	FLAC__bool sse42;
-	FLAC__bool avx;
-	FLAC__bool avx2;
-	FLAC__bool fma;
-} FLAC__CPUInfo_x86;
-#endif
-
-typedef struct {
-	FLAC__bool use_asm;
-	FLAC__CPUInfo_Type type;
-#if defined FLAC__CPU_IA32
-	FLAC__CPUInfo_IA32 ia32;
-#elif defined FLAC__CPU_X86_64
-	FLAC__CPUInfo_x86 x86;
-#endif
-} FLAC__CPUInfo;
-
-void FLAC__cpu_info(FLAC__CPUInfo *info);
-
-#ifndef FLAC__NO_ASM
-# if defined FLAC__CPU_IA32 && defined FLAC__HAS_NASM
-FLAC__uint32 FLAC__cpu_have_cpuid_asm_ia32(void);
-void         FLAC__cpu_info_asm_ia32(FLAC__uint32 *flags_edx, FLAC__uint32 *flags_ecx);
-# endif
-# if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-FLAC__uint32 FLAC__cpu_have_cpuid_x86(void);
-void         FLAC__cpu_info_x86(FLAC__uint32 level, FLAC__uint32 *eax, FLAC__uint32 *ebx, FLAC__uint32 *ecx, FLAC__uint32 *edx);
-FLAC__uint32 FLAC__cpu_xgetbv_x86(void);
-# endif
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h
deleted file mode 100644
index 8ebe5c8..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/crc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__CRC_H
-#define FLAC__PRIVATE__CRC_H
-
-#include "../../../ordinals.h"
-
-/* 8 bit CRC generator, MSB shifted first
-** polynomial = x^8 + x^2 + x^1 + x^0
-** init = 0
-*/
-extern FLAC__byte const FLAC__crc8_table[256];
-#define FLAC__CRC8_UPDATE(data, crc) (crc) = FLAC__crc8_table[(crc) ^ (data)];
-void FLAC__crc8_update(const FLAC__byte data, FLAC__uint8 *crc);
-void FLAC__crc8_update_block(const FLAC__byte *data, unsigned len, FLAC__uint8 *crc);
-FLAC__uint8 FLAC__crc8(const FLAC__byte *data, unsigned len);
-
-/* 16 bit CRC generator, MSB shifted first
-** polynomial = x^16 + x^15 + x^2 + x^0
-** init = 0
-*/
-extern unsigned const FLAC__crc16_table[256];
-
-#define FLAC__CRC16_UPDATE(data, crc) ((((crc)<<8) & 0xffff) ^ FLAC__crc16_table[((crc)>>8) ^ (data)])
-/* this alternate may be faster on some systems/compilers */
-#if 0
-#define FLAC__CRC16_UPDATE(data, crc) ((((crc)<<8) ^ FLAC__crc16_table[((crc)>>8) ^ (data)]) & 0xffff)
-#endif
-
-unsigned FLAC__crc16(const FLAC__byte *data, unsigned len);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h
deleted file mode 100644
index e4c044b..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__FIXED_H
-#define FLAC__PRIVATE__FIXED_H
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "cpu.h"
-#include "float.h"
-#include "../../../format.h"
-
-/*
- *	FLAC__fixed_compute_best_predictor()
- *	--------------------------------------------------------------------
- *	Compute the best fixed predictor and the expected bits-per-sample
- *  of the residual signal for each order.  The _wide() version uses
- *  64-bit integers which is statistically necessary when bits-per-
- *  sample + log2(blocksize) > 30
- *
- *	IN data[0,data_len-1]
- *	IN data_len
- *	OUT residual_bits_per_sample[0,FLAC__MAX_FIXED_ORDER]
- */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-# ifndef FLAC__NO_ASM
-#  if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-#   ifdef FLAC__SSE2_SUPPORTED
-unsigned FLAC__fixed_compute_best_predictor_intrin_sse2(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER + 1]);
-unsigned FLAC__fixed_compute_best_predictor_wide_intrin_sse2(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER + 1]);
-#   endif
-#   ifdef FLAC__SSSE3_SUPPORTED
-unsigned FLAC__fixed_compute_best_predictor_intrin_ssse3(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-unsigned FLAC__fixed_compute_best_predictor_wide_intrin_ssse3(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER + 1]);
-#   endif
-#  endif
-#  if defined FLAC__CPU_IA32 && defined FLAC__HAS_NASM
-unsigned FLAC__fixed_compute_best_predictor_asm_ia32_mmx_cmov(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-#  endif
-# endif
-#else
-unsigned FLAC__fixed_compute_best_predictor(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-unsigned FLAC__fixed_compute_best_predictor_wide(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-#endif
-
-/*
- *	FLAC__fixed_compute_residual()
- *	--------------------------------------------------------------------
- *	Compute the residual signal obtained from sutracting the predicted
- *	signal from the original.
- *
- *	IN data[-order,data_len-1]        original signal (NOTE THE INDICES!)
- *	IN data_len                       length of original signal
- *	IN order <= FLAC__MAX_FIXED_ORDER fixed-predictor order
- *	OUT residual[0,data_len-1]        residual signal
- */
-void FLAC__fixed_compute_residual(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]);
-
-/*
- *	FLAC__fixed_restore_signal()
- *	--------------------------------------------------------------------
- *	Restore the original signal by summing the residual and the
- *	predictor.
- *
- *	IN residual[0,data_len-1]         residual signal
- *	IN data_len                       length of original signal
- *	IN order <= FLAC__MAX_FIXED_ORDER fixed-predictor order
- *	*** IMPORTANT: the caller must pass in the historical samples:
- *	IN  data[-order,-1]               previously-reconstructed historical samples
- *	OUT data[0,data_len-1]            original signal
- */
-void FLAC__fixed_restore_signal(const FLAC__int32 residual[], unsigned data_len, unsigned order, FLAC__int32 data[]);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h
deleted file mode 100644
index af09336..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/float.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2004-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__FLOAT_H
-#define FLAC__PRIVATE__FLOAT_H
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "../../../ordinals.h"
-
-/*
- * These typedefs make it easier to ensure that integer versions of
- * the library really only contain integer operations.  All the code
- * in libFLAC should use FLAC__float and FLAC__double in place of
- * float and double, and be protected by checks of the macro
- * FLAC__INTEGER_ONLY_LIBRARY.
- *
- * FLAC__real is the basic floating point type used in LPC analysis.
- */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-typedef double FLAC__double;
-typedef float FLAC__float;
-/*
- * WATCHOUT: changing FLAC__real will change the signatures of many
- * functions that have assembly language equivalents and break them.
- */
-typedef float FLAC__real;
-#else
-/*
- * The convention for FLAC__fixedpoint is to use the upper 16 bits
- * for the integer part and lower 16 bits for the fractional part.
- */
-typedef FLAC__int32 FLAC__fixedpoint;
-extern const FLAC__fixedpoint FLAC__FP_ZERO;
-extern const FLAC__fixedpoint FLAC__FP_ONE_HALF;
-extern const FLAC__fixedpoint FLAC__FP_ONE;
-extern const FLAC__fixedpoint FLAC__FP_LN2;
-extern const FLAC__fixedpoint FLAC__FP_E;
-
-#define FLAC__fixedpoint_trunc(x) ((x)>>16)
-
-#define FLAC__fixedpoint_mul(x, y) ( (FLAC__fixedpoint) ( ((FLAC__int64)(x)*(FLAC__int64)(y)) >> 16 ) )
-
-#define FLAC__fixedpoint_div(x, y) ( (FLAC__fixedpoint) ( ( ((FLAC__int64)(x)<<32) / (FLAC__int64)(y) ) >> 16 ) )
-
-/*
- *	FLAC__fixedpoint_log2()
- *	--------------------------------------------------------------------
- *	Returns the base-2 logarithm of the fixed-point number 'x' using an
- *	algorithm by Knuth for x >= 1.0
- *
- *	'fracbits' is the number of fractional bits of 'x'.  'fracbits' must
- *	be < 32 and evenly divisible by 4 (0 is OK but not very precise).
- *
- *	'precision' roughly limits the number of iterations that are done;
- *	use (unsigned)(-1) for maximum precision.
- *
- *	If 'x' is less than one -- that is, x < (1<<fracbits) -- then this
- *	function will punt and return 0.
- *
- *	The return value will also have 'fracbits' fractional bits.
- */
-FLAC__uint32 FLAC__fixedpoint_log2(FLAC__uint32 x, unsigned fracbits, unsigned precision);
-
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h
deleted file mode 100644
index 87fb9e1..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__FORMAT_H
-#define FLAC__PRIVATE__FORMAT_H
-
-#include "../../../format.h"
-
-unsigned FLAC__format_get_max_rice_partition_order(unsigned blocksize, unsigned predictor_order);
-unsigned FLAC__format_get_max_rice_partition_order_from_blocksize(unsigned blocksize);
-unsigned FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(unsigned limit, unsigned blocksize, unsigned predictor_order);
-void FLAC__format_entropy_coding_method_partitioned_rice_contents_init(FLAC__EntropyCodingMethod_PartitionedRiceContents *object);
-void FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(FLAC__EntropyCodingMethod_PartitionedRiceContents *object);
-FLAC__bool FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(FLAC__EntropyCodingMethod_PartitionedRiceContents *object, unsigned max_partition_order);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/lpc.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/lpc.h
deleted file mode 100644
index d97c26b..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/lpc.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__LPC_H
-#define FLAC__PRIVATE__LPC_H
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "cpu.h"
-#include "float.h"
-#include "../../../format.h"
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-/*
- *	FLAC__lpc_window_data()
- *	--------------------------------------------------------------------
- *	Applies the given window to the data.
- *  OPT: asm implementation
- *
- *	IN in[0,data_len-1]
- *	IN window[0,data_len-1]
- *	OUT out[0,lag-1]
- *	IN data_len
- */
-void FLAC__lpc_window_data(const FLAC__int32 in[], const FLAC__real window[], FLAC__real out[], unsigned data_len);
-
-/*
- *	FLAC__lpc_compute_autocorrelation()
- *	--------------------------------------------------------------------
- *	Compute the autocorrelation for lags between 0 and lag-1.
- *	Assumes data[] outside of [0,data_len-1] == 0.
- *	Asserts that lag > 0.
- *
- *	IN data[0,data_len-1]
- *	IN data_len
- *	IN 0 < lag <= data_len
- *	OUT autoc[0,lag-1]
- */
-void FLAC__lpc_compute_autocorrelation(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-#ifndef FLAC__NO_ASM
-#  ifdef FLAC__CPU_IA32
-#    ifdef FLAC__HAS_NASM
-void FLAC__lpc_compute_autocorrelation_asm_ia32(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_4(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_8(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_12(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_16(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-#    endif
-#  endif
-#  if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-#    ifdef FLAC__SSE_SUPPORTED
-void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_4(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_8(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_12(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_16(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-#    endif
-#  endif
-#endif
-
-/*
- *	FLAC__lpc_compute_lp_coefficients()
- *	--------------------------------------------------------------------
- *	Computes LP coefficients for orders 1..max_order.
- *	Do not call if autoc[0] == 0.0.  This means the signal is zero
- *	and there is no point in calculating a predictor.
- *
- *	IN autoc[0,max_order]                      autocorrelation values
- *	IN 0 < max_order <= FLAC__MAX_LPC_ORDER    max LP order to compute
- *	OUT lp_coeff[0,max_order-1][0,max_order-1] LP coefficients for each order
- *	*** IMPORTANT:
- *	*** lp_coeff[0,max_order-1][max_order,FLAC__MAX_LPC_ORDER-1] are untouched
- *	OUT error[0,max_order-1]                   error for each order (more
- *	                                           specifically, the variance of
- *	                                           the error signal times # of
- *	                                           samples in the signal)
- *
- *	Example: if max_order is 9, the LP coefficients for order 9 will be
- *	         in lp_coeff[8][0,8], the LP coefficients for order 8 will be
- *			 in lp_coeff[7][0,7], etc.
- */
-void FLAC__lpc_compute_lp_coefficients(const FLAC__real autoc[], unsigned *max_order, FLAC__real lp_coeff[][FLAC__MAX_LPC_ORDER], FLAC__double error[]);
-
-/*
- *	FLAC__lpc_quantize_coefficients()
- *	--------------------------------------------------------------------
- *	Quantizes the LP coefficients.  NOTE: precision + bits_per_sample
- *	must be less than 32 (sizeof(FLAC__int32)*8).
- *
- *	IN lp_coeff[0,order-1]    LP coefficients
- *	IN order                  LP order
- *	IN FLAC__MIN_QLP_COEFF_PRECISION < precision
- *	                          desired precision (in bits, including sign
- *	                          bit) of largest coefficient
- *	OUT qlp_coeff[0,order-1]  quantized coefficients
- *	OUT shift                 # of bits to shift right to get approximated
- *	                          LP coefficients.  NOTE: could be negative.
- *	RETURN 0 => quantization OK
- *	       1 => coefficients require too much shifting for *shift to
- *              fit in the LPC subframe header.  'shift' is unset.
- *         2 => coefficients are all zero, which is bad.  'shift' is
- *              unset.
- */
-int FLAC__lpc_quantize_coefficients(const FLAC__real lp_coeff[], unsigned order, unsigned precision, FLAC__int32 qlp_coeff[], int *shift);
-
-/*
- *	FLAC__lpc_compute_residual_from_qlp_coefficients()
- *	--------------------------------------------------------------------
- *	Compute the residual signal obtained from sutracting the predicted
- *	signal from the original.
- *
- *	IN data[-order,data_len-1] original signal (NOTE THE INDICES!)
- *	IN data_len                length of original signal
- *	IN qlp_coeff[0,order-1]    quantized LP coefficients
- *	IN order > 0               LP order
- *	IN lp_quantization         quantization of LP coefficients in bits
- *	OUT residual[0,data_len-1] residual signal
- */
-void FLAC__lpc_compute_residual_from_qlp_coefficients(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_wide(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-#ifndef FLAC__NO_ASM
-#  ifdef FLAC__CPU_IA32
-#    ifdef FLAC__HAS_NASM
-void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_wide_asm_ia32(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-#    endif
-#  endif
-#  if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-#    ifdef FLAC__SSE2_SUPPORTED
-void FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_sse2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-#    endif
-#    ifdef FLAC__SSE4_1_SUPPORTED
-void FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse41(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_sse41(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-#    endif
-#    ifdef FLAC__AVX2_SUPPORTED
-void FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_avx2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_avx2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-void FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_avx2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-#    endif
-#  endif
-#endif
-
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
-
-/*
- *	FLAC__lpc_restore_signal()
- *	--------------------------------------------------------------------
- *	Restore the original signal by summing the residual and the
- *	predictor.
- *
- *	IN residual[0,data_len-1]  residual signal
- *	IN data_len                length of original signal
- *	IN qlp_coeff[0,order-1]    quantized LP coefficients
- *	IN order > 0               LP order
- *	IN lp_quantization         quantization of LP coefficients in bits
- *	*** IMPORTANT: the caller must pass in the historical samples:
- *	IN  data[-order,-1]        previously-reconstructed historical samples
- *	OUT data[0,data_len-1]     original signal
- */
-void FLAC__lpc_restore_signal(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-void FLAC__lpc_restore_signal_wide(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-#ifndef FLAC__NO_ASM
-#  ifdef FLAC__CPU_IA32
-#    ifdef FLAC__HAS_NASM
-void FLAC__lpc_restore_signal_asm_ia32(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-void FLAC__lpc_restore_signal_asm_ia32_mmx(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-void FLAC__lpc_restore_signal_wide_asm_ia32(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-#    endif /* FLAC__HAS_NASM */
-#  endif /* FLAC__CPU_IA32 */
-#  if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-#    ifdef FLAC__SSE2_SUPPORTED
-void FLAC__lpc_restore_signal_16_intrin_sse2(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-#    endif
-#    ifdef FLAC__SSE4_1_SUPPORTED
-void FLAC__lpc_restore_signal_wide_intrin_sse41(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-#    endif
-#  endif
-#endif /* FLAC__NO_ASM */
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-/*
- *	FLAC__lpc_compute_expected_bits_per_residual_sample()
- *	--------------------------------------------------------------------
- *	Compute the expected number of bits per residual signal sample
- *	based on the LP error (which is related to the residual variance).
- *
- *	IN lpc_error >= 0.0   error returned from calculating LP coefficients
- *	IN total_samples > 0  # of samples in residual signal
- *	RETURN                expected bits per sample
- */
-FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample(FLAC__double lpc_error, unsigned total_samples);
-FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(FLAC__double lpc_error, FLAC__double error_scale);
-
-/*
- *	FLAC__lpc_compute_best_order()
- *	--------------------------------------------------------------------
- *	Compute the best order from the array of signal errors returned
- *	during coefficient computation.
- *
- *	IN lpc_error[0,max_order-1] >= 0.0  error returned from calculating LP coefficients
- *	IN max_order > 0                    max LP order
- *	IN total_samples > 0                # of samples in residual signal
- *	IN overhead_bits_per_order          # of bits overhead for each increased LP order
- *	                                    (includes warmup sample size and quantized LP coefficient)
- *	RETURN [1,max_order]                best order
- */
-unsigned FLAC__lpc_compute_best_order(const FLAC__double lpc_error[], unsigned max_order, unsigned total_samples, unsigned overhead_bits_per_order);
-
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h
deleted file mode 100644
index b1324a9..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef FLAC__PRIVATE__MD5_H
-#define FLAC__PRIVATE__MD5_H
-
-/*
- * This is the header file for the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- *
- * Changed so as no longer to depend on Colin Plumb's `usual.h'
- * header definitions; now uses stuff from dpkg's config.h
- *  - Ian Jackson <ijackson at nyx.cs.du.edu>.
- * Still in the public domain.
- *
- * Josh Coalson: made some changes to integrate with libFLAC.
- * Still in the public domain, with no warranty.
- */
-
-#include "../../../ordinals.h"
-
-typedef union {
-	FLAC__byte *p8;
-	FLAC__int16 *p16;
-	FLAC__int32 *p32;
-} FLAC__multibyte;
-
-typedef struct {
-	FLAC__uint32 in[16];
-	FLAC__uint32 buf[4];
-	FLAC__uint32 bytes[2];
-	FLAC__multibyte internal_buf;
-	size_t capacity;
-} FLAC__MD5Context;
-
-void FLAC__MD5Init(FLAC__MD5Context *context);
-void FLAC__MD5Final(FLAC__byte digest[16], FLAC__MD5Context *context);
-
-FLAC__bool FLAC__MD5Accumulate(FLAC__MD5Context *ctx, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h
deleted file mode 100644
index c387ea6..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__MEMORY_H
-#define FLAC__PRIVATE__MEMORY_H
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h> /* for size_t */
-
-#include "float.h"
-#include "../../../ordinals.h" /* for FLAC__bool */
-
-/* Returns the unaligned address returned by malloc.
- * Use free() on this address to deallocate.
- */
-void *FLAC__memory_alloc_aligned(size_t bytes, void **aligned_address);
-FLAC__bool FLAC__memory_alloc_aligned_int32_array(size_t elements, FLAC__int32 **unaligned_pointer, FLAC__int32 **aligned_pointer);
-FLAC__bool FLAC__memory_alloc_aligned_uint32_array(size_t elements, FLAC__uint32 **unaligned_pointer, FLAC__uint32 **aligned_pointer);
-FLAC__bool FLAC__memory_alloc_aligned_uint64_array(size_t elements, FLAC__uint64 **unaligned_pointer, FLAC__uint64 **aligned_pointer);
-FLAC__bool FLAC__memory_alloc_aligned_unsigned_array(size_t elements, unsigned **unaligned_pointer, unsigned **aligned_pointer);
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-FLAC__bool FLAC__memory_alloc_aligned_real_array(size_t elements, FLAC__real **unaligned_pointer, FLAC__real **aligned_pointer);
-#endif
-void *safe_malloc_mul_2op_p(size_t size1, size_t size2);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/metadata.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/metadata.h
deleted file mode 100644
index 29c73e0..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/metadata.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2002-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__METADATA_H
-#define FLAC__PRIVATE__METADATA_H
-
-#include "FLAC/metadata.h"
-
-/* WATCHOUT: all malloc()ed data in the block is free()ed; this may not
- * be a consistent state (e.g. PICTURE) or equivalent to the initial
- * state after FLAC__metadata_object_new()
- */
-void FLAC__metadata_object_delete_data(FLAC__StreamMetadata *object);
-
-void FLAC__metadata_object_cuesheet_track_delete_data(FLAC__StreamMetadata_CueSheet_Track *object);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder.h
deleted file mode 100644
index 3ba6dd2..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__STREAM_ENCODER_H
-#define FLAC__PRIVATE__STREAM_ENCODER_H
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-/*
- * This is used to avoid overflow with unusual signals in 32-bit
- * accumulator in the *precompute_partition_info_sums_* functions.
- */
-#define FLAC__MAX_EXTRA_RESIDUAL_BPS 4
-
-#if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN
-#include "cpu.h"
-#include "../../../format.h"
-
-#ifdef FLAC__SSE2_SUPPORTED
-extern void FLAC__precompute_partition_info_sums_intrin_sse2(const FLAC__int32 residual[], FLAC__uint64 abs_residual_partition_sums[],
-			unsigned residual_samples, unsigned predictor_order, unsigned min_partition_order, unsigned max_partition_order, unsigned bps);
-#endif
-
-#ifdef FLAC__SSSE3_SUPPORTED
-extern void FLAC__precompute_partition_info_sums_intrin_ssse3(const FLAC__int32 residual[], FLAC__uint64 abs_residual_partition_sums[],
-			unsigned residual_samples, unsigned predictor_order, unsigned min_partition_order, unsigned max_partition_order, unsigned bps);
-#endif
-
-#ifdef FLAC__AVX2_SUPPORTED
-extern void FLAC__precompute_partition_info_sums_intrin_avx2(const FLAC__int32 residual[], FLAC__uint64 abs_residual_partition_sums[],
-			unsigned residual_samples, unsigned predictor_order, unsigned min_partition_order, unsigned max_partition_order, unsigned bps);
-#endif
-
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder_framing.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder_framing.h
deleted file mode 100644
index eaa9958..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/stream_encoder_framing.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__STREAM_ENCODER_FRAMING_H
-#define FLAC__PRIVATE__STREAM_ENCODER_FRAMING_H
-
-#include "../../../format.h"
-#include "bitwriter.h"
-
-FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitWriter *bw);
-FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__BitWriter *bw);
-FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
-FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
-FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
-FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h
deleted file mode 100644
index 8464d22..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/private/window.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2006-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PRIVATE__WINDOW_H
-#define FLAC__PRIVATE__WINDOW_H
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "float.h"
-#include "../../../format.h"
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-/*
- *	FLAC__window_*()
- *	--------------------------------------------------------------------
- *	Calculates window coefficients according to different apodization
- *	functions.
- *
- *	OUT window[0,L-1]
- *	IN L (number of points in window)
- */
-void FLAC__window_bartlett(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_bartlett_hann(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_blackman(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_blackman_harris_4term_92db_sidelobe(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_connes(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_flattop(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_gauss(FLAC__real *window, const FLAC__int32 L, const FLAC__real stddev); /* 0.0 < stddev <= 0.5 */
-void FLAC__window_hamming(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_hann(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_kaiser_bessel(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_nuttall(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_rectangle(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_triangle(FLAC__real *window, const FLAC__int32 L);
-void FLAC__window_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p);
-void FLAC__window_partial_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p, const FLAC__real start, const FLAC__real end);
-void FLAC__window_punchout_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p, const FLAC__real start, const FLAC__real end);
-void FLAC__window_welch(FLAC__real *window, const FLAC__int32 L);
-
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/all.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/all.h
deleted file mode 100644
index b852c2b..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/all.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PROTECTED__ALL_H
-#define FLAC__PROTECTED__ALL_H
-
-#include "stream_decoder.h"
-#include "stream_encoder.h"
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h
deleted file mode 100644
index d8a3e61..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_decoder.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PROTECTED__STREAM_DECODER_H
-#define FLAC__PROTECTED__STREAM_DECODER_H
-
-#include "../../../stream_decoder.h"
-#if FLAC__HAS_OGG
-#include "../private/ogg_decoder_aspect.h"
-#endif
-
-typedef struct FLAC__StreamDecoderProtected {
-	FLAC__StreamDecoderState state;
-	FLAC__StreamDecoderInitStatus initstate;
-	unsigned channels;
-	FLAC__ChannelAssignment channel_assignment;
-	unsigned bits_per_sample;
-	unsigned sample_rate; /* in Hz */
-	unsigned blocksize; /* in samples (per channel) */
-	FLAC__bool md5_checking; /* if true, generate MD5 signature of decoded data and compare against signature in the STREAMINFO metadata block */
-#if FLAC__HAS_OGG
-	FLAC__OggDecoderAspect ogg_decoder_aspect;
-#endif
-} FLAC__StreamDecoderProtected;
-
-/*
- * return the number of input bytes consumed
- */
-unsigned FLAC__stream_decoder_get_input_bytes_unconsumed(const FLAC__StreamDecoder *decoder);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h b/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h
deleted file mode 100644
index bd0cf25..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__PROTECTED__STREAM_ENCODER_H
-#define FLAC__PROTECTED__STREAM_ENCODER_H
-
-#include "../../../stream_encoder.h"
-#if FLAC__HAS_OGG
-#include "../private/ogg_encoder_aspect.h"
-#endif
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-#include "../private/float.h"
-
-#define FLAC__MAX_APODIZATION_FUNCTIONS 32
-
-typedef enum {
-	FLAC__APODIZATION_BARTLETT,
-	FLAC__APODIZATION_BARTLETT_HANN,
-	FLAC__APODIZATION_BLACKMAN,
-	FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE,
-	FLAC__APODIZATION_CONNES,
-	FLAC__APODIZATION_FLATTOP,
-	FLAC__APODIZATION_GAUSS,
-	FLAC__APODIZATION_HAMMING,
-	FLAC__APODIZATION_HANN,
-	FLAC__APODIZATION_KAISER_BESSEL,
-	FLAC__APODIZATION_NUTTALL,
-	FLAC__APODIZATION_RECTANGLE,
-	FLAC__APODIZATION_TRIANGLE,
-	FLAC__APODIZATION_TUKEY,
-	FLAC__APODIZATION_PARTIAL_TUKEY,
-	FLAC__APODIZATION_PUNCHOUT_TUKEY,
-	FLAC__APODIZATION_WELCH
-} FLAC__ApodizationFunction;
-
-typedef struct {
-	FLAC__ApodizationFunction type;
-	union {
-		struct {
-			FLAC__real stddev;
-		} gauss;
-		struct {
-			FLAC__real p;
-		} tukey;
-		struct {
-			FLAC__real p;
-			FLAC__real start;
-			FLAC__real end;
-		} multiple_tukey;
-	} parameters;
-} FLAC__ApodizationSpecification;
-
-#endif // #ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-typedef struct FLAC__StreamEncoderProtected {
-	FLAC__StreamEncoderState state;
-	FLAC__bool verify;
-	FLAC__bool streamable_subset;
-	FLAC__bool do_md5;
-	FLAC__bool do_mid_side_stereo;
-	FLAC__bool loose_mid_side_stereo;
-	unsigned channels;
-	unsigned bits_per_sample;
-	unsigned sample_rate;
-	unsigned blocksize;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	unsigned num_apodizations;
-	FLAC__ApodizationSpecification apodizations[FLAC__MAX_APODIZATION_FUNCTIONS];
-#endif
-	unsigned max_lpc_order;
-	unsigned qlp_coeff_precision;
-	FLAC__bool do_qlp_coeff_prec_search;
-	FLAC__bool do_exhaustive_model_search;
-	FLAC__bool do_escape_coding;
-	unsigned min_residual_partition_order;
-	unsigned max_residual_partition_order;
-	unsigned rice_parameter_search_dist;
-	FLAC__uint64 total_samples_estimate;
-	FLAC__StreamMetadata **metadata;
-	unsigned num_metadata_blocks;
-	FLAC__uint64 streaminfo_offset, seektable_offset, audio_offset;
-#if FLAC__HAS_OGG
-	FLAC__OggEncoderAspect ogg_encoder_aspect;
-#endif
-} FLAC__StreamEncoderProtected;
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c b/modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c
deleted file mode 100644
index 87e2321..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/lpc_flac.c
+++ /dev/null
@@ -1,1356 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <math.h>
-
-#include "../assert.h"
-#include "../format.h"
-#include "../compat.h"
-#include "include/private/bitmath.h"
-#include "include/private/lpc.h"
-#if defined DEBUG || defined FLAC__OVERFLOW_DETECT || defined FLAC__OVERFLOW_DETECT_VERBOSE
-#include <stdio.h>
-#endif
-
-/* OPT: #undef'ing this may improve the speed on some architectures */
-#define FLAC__LPC_UNROLLED_FILTER_LOOPS
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-#if !defined(HAVE_LROUND)
-#if defined(_MSC_VER)
-#include <float.h>
-#define copysign _copysign
-#elif defined(__GNUC__)
-#define copysign __builtin_copysign
-#endif
-static inline long int lround(double x) {
-    return (long)(x + copysign (0.5, x));
-}
-/* If this fails, we are in the presence of a mid 90's compiler, move along... */
-#endif
-
-void FLAC__lpc_window_data(const FLAC__int32 in[], const FLAC__real window[], FLAC__real out[], unsigned data_len)
-{
-	unsigned i;
-	for(i = 0; i < data_len; i++)
-		out[i] = in[i] * window[i];
-}
-
-void FLAC__lpc_compute_autocorrelation(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[])
-{
-	/* a readable, but slower, version */
-#if 0
-	FLAC__real d;
-	unsigned i;
-
-	FLAC__ASSERT(lag > 0);
-	FLAC__ASSERT(lag <= data_len);
-
-	/*
-	 * Technically we should subtract the mean first like so:
-	 *   for(i = 0; i < data_len; i++)
-	 *     data[i] -= mean;
-	 * but it appears not to make enough of a difference to matter, and
-	 * most signals are already closely centered around zero
-	 */
-	while(lag--) {
-		for(i = lag, d = 0.0; i < data_len; i++)
-			d += data[i] * data[i - lag];
-		autoc[lag] = d;
-	}
-#endif
-
-	/*
-	 * this version tends to run faster because of better data locality
-	 * ('data_len' is usually much larger than 'lag')
-	 */
-	FLAC__real d;
-	unsigned sample, coeff;
-	const unsigned limit = data_len - lag;
-
-	FLAC__ASSERT(lag > 0);
-	FLAC__ASSERT(lag <= data_len);
-
-	for(coeff = 0; coeff < lag; coeff++)
-		autoc[coeff] = 0.0;
-	for(sample = 0; sample <= limit; sample++) {
-		d = data[sample];
-		for(coeff = 0; coeff < lag; coeff++)
-			autoc[coeff] += d * data[sample+coeff];
-	}
-	for(; sample < data_len; sample++) {
-		d = data[sample];
-		for(coeff = 0; coeff < data_len - sample; coeff++)
-			autoc[coeff] += d * data[sample+coeff];
-	}
-}
-
-void FLAC__lpc_compute_lp_coefficients(const FLAC__real autoc[], unsigned *max_order, FLAC__real lp_coeff[][FLAC__MAX_LPC_ORDER], FLAC__double error[])
-{
-	unsigned i, j;
-	FLAC__double r, err, lpc[FLAC__MAX_LPC_ORDER];
-
-	FLAC__ASSERT(0 != max_order);
-	FLAC__ASSERT(0 < *max_order);
-	FLAC__ASSERT(*max_order <= FLAC__MAX_LPC_ORDER);
-	FLAC__ASSERT(autoc[0] != 0.0);
-
-	err = autoc[0];
-
-	for(i = 0; i < *max_order; i++) {
-		/* Sum up this iteration's reflection coefficient. */
-		r = -autoc[i+1];
-		for(j = 0; j < i; j++)
-			r -= lpc[j] * autoc[i-j];
-		r /= err;
-
-		/* Update LPC coefficients and total error. */
-		lpc[i]=r;
-		for(j = 0; j < (i>>1); j++) {
-			FLAC__double tmp = lpc[j];
-			lpc[j] += r * lpc[i-1-j];
-			lpc[i-1-j] += r * tmp;
-		}
-		if(i & 1)
-			lpc[j] += lpc[j] * r;
-
-		err *= (1.0 - r * r);
-
-		/* save this order */
-		for(j = 0; j <= i; j++)
-			lp_coeff[i][j] = (FLAC__real)(-lpc[j]); /* negate FIR filter coeff to get predictor coeff */
-		error[i] = err;
-
-		/* see SF bug https://sourceforge.net/p/flac/bugs/234/ */
-		if(err == 0.0) {
-			*max_order = i+1;
-			return;
-		}
-	}
-}
-
-int FLAC__lpc_quantize_coefficients(const FLAC__real lp_coeff[], unsigned order, unsigned precision, FLAC__int32 qlp_coeff[], int *shift)
-{
-	unsigned i;
-	FLAC__double cmax;
-	FLAC__int32 qmax, qmin;
-
-	FLAC__ASSERT(precision > 0);
-	FLAC__ASSERT(precision >= FLAC__MIN_QLP_COEFF_PRECISION);
-
-	/* drop one bit for the sign; from here on out we consider only |lp_coeff[i]| */
-	precision--;
-	qmax = 1 << precision;
-	qmin = -qmax;
-	qmax--;
-
-	/* calc cmax = max( |lp_coeff[i]| ) */
-	cmax = 0.0;
-	for(i = 0; i < order; i++) {
-		const FLAC__double d = fabs(lp_coeff[i]);
-		if(d > cmax)
-			cmax = d;
-	}
-
-	if(cmax <= 0.0) {
-		/* => coefficients are all 0, which means our constant-detect didn't work */
-		return 2;
-	}
-	else {
-		const int max_shiftlimit = (1 << (FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN-1)) - 1;
-		const int min_shiftlimit = -max_shiftlimit - 1;
-		int log2cmax;
-
-		(void)frexp(cmax, &log2cmax);
-		log2cmax--;
-		*shift = (int)precision - log2cmax - 1;
-
-		if(*shift > max_shiftlimit)
-			*shift = max_shiftlimit;
-		else if(*shift < min_shiftlimit)
-			return 1;
-	}
-
-	if(*shift >= 0) {
-		FLAC__double error = 0.0;
-		FLAC__int32 q;
-		for(i = 0; i < order; i++) {
-			error += lp_coeff[i] * (1 << *shift);
-			q = lround(error);
-
-#ifdef FLAC__OVERFLOW_DETECT
-			if(q > qmax+1) /* we expect q==qmax+1 occasionally due to rounding */
-				fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q>qmax %d>%d shift=%d cmax=%f precision=%u lpc[%u]=%f\n",q,qmax,*shift,cmax,precision+1,i,lp_coeff[i]);
-			else if(q < qmin)
-				fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q<qmin %d<%d shift=%d cmax=%f precision=%u lpc[%u]=%f\n",q,qmin,*shift,cmax,precision+1,i,lp_coeff[i]);
-#endif
-			if(q > qmax)
-				q = qmax;
-			else if(q < qmin)
-				q = qmin;
-			error -= q;
-			qlp_coeff[i] = q;
-		}
-	}
-	/* negative shift is very rare but due to design flaw, negative shift is
-	 * a NOP in the decoder, so it must be handled specially by scaling down
-	 * coeffs
-	 */
-	else {
-		const int nshift = -(*shift);
-		FLAC__double error = 0.0;
-		FLAC__int32 q;
-#ifdef DEBUG
-		fprintf(stderr,"FLAC__lpc_quantize_coefficients: negative shift=%d order=%u cmax=%f\n", *shift, order, cmax);
-#endif
-		for(i = 0; i < order; i++) {
-			error += lp_coeff[i] / (1 << nshift);
-			q = lround(error);
-#ifdef FLAC__OVERFLOW_DETECT
-			if(q > qmax+1) /* we expect q==qmax+1 occasionally due to rounding */
-				fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q>qmax %d>%d shift=%d cmax=%f precision=%u lpc[%u]=%f\n",q,qmax,*shift,cmax,precision+1,i,lp_coeff[i]);
-			else if(q < qmin)
-				fprintf(stderr,"FLAC__lpc_quantize_coefficients: quantizer overflow: q<qmin %d<%d shift=%d cmax=%f precision=%u lpc[%u]=%f\n",q,qmin,*shift,cmax,precision+1,i,lp_coeff[i]);
-#endif
-			if(q > qmax)
-				q = qmax;
-			else if(q < qmin)
-				q = qmin;
-			error -= q;
-			qlp_coeff[i] = q;
-		}
-		*shift = 0;
-	}
-
-	return 0;
-}
-
-#if defined(_MSC_VER)
-// silence MSVC warnings about __restrict modifier
-#pragma warning ( disable : 4028 )
-#endif
-
-void FLAC__lpc_compute_residual_from_qlp_coefficients(const FLAC__int32 * flac_restrict data, unsigned data_len, const FLAC__int32 * flac_restrict qlp_coeff, unsigned order, int lp_quantization, FLAC__int32 * flac_restrict residual)
-#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS)
-{
-	FLAC__int64 sumo;
-	unsigned i, j;
-	FLAC__int32 sum;
-	const FLAC__int32 *history;
-
-#ifdef FLAC__OVERFLOW_DETECT_VERBOSE
-	fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization);
-	for(i=0;i<order;i++)
-		fprintf(stderr,", q[%u]=%d",i,qlp_coeff[i]);
-	fprintf(stderr,"\n");
-#endif
-	FLAC__ASSERT(order > 0);
-
-	for(i = 0; i < data_len; i++) {
-		sumo = 0;
-		sum = 0;
-		history = data;
-		for(j = 0; j < order; j++) {
-			sum += qlp_coeff[j] * (*(--history));
-			sumo += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*history);
-				fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients: OVERFLOW, i=%u, j=%u, c=%d, d=%d, sumo=%" PRId64 "\n",i,j,qlp_coeff[j],*history,sumo);
-		}
-		*(residual++) = *(data++) - (sum >> lp_quantization);
-	}
-
-	/* Here's a slower but clearer version:
-	for(i = 0; i < data_len; i++) {
-		sum = 0;
-		for(j = 0; j < order; j++)
-			sum += qlp_coeff[j] * data[i-j-1];
-		residual[i] = data[i] - (sum >> lp_quantization);
-	}
-	*/
-}
-#else /* fully unrolled version for normal use */
-{
-	int i;
-	FLAC__int32 sum;
-
-	FLAC__ASSERT(order > 0);
-	FLAC__ASSERT(order <= 32);
-
-	/*
-	 * We do unique versions up to 12th order since that's the subset limit.
-	 * Also they are roughly ordered to match frequency of occurrence to
-	 * minimize branching.
-	 */
-	if(order <= 12) {
-		if(order > 8) {
-			if(order > 10) {
-				if(order == 12) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[11] * data[i-12];
-						sum += qlp_coeff[10] * data[i-11];
-						sum += qlp_coeff[9] * data[i-10];
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 11 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[10] * data[i-11];
-						sum += qlp_coeff[9] * data[i-10];
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 10) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[9] * data[i-10];
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 9 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else if(order > 4) {
-			if(order > 6) {
-				if(order == 8) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 7 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 6) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 5 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else {
-			if(order > 2) {
-				if(order == 4) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 3 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 2) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						residual[i] = data[i] - (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 1 */
-					for(i = 0; i < (int)data_len; i++)
-						residual[i] = data[i] - ((qlp_coeff[0] * data[i-1]) >> lp_quantization);
-				}
-			}
-		}
-	}
-	else { /* order > 12 */
-		for(i = 0; i < (int)data_len; i++) {
-			sum = 0;
-			switch(order) {
-				case 32: sum += qlp_coeff[31] * data[i-32];
-				case 31: sum += qlp_coeff[30] * data[i-31];
-				case 30: sum += qlp_coeff[29] * data[i-30];
-				case 29: sum += qlp_coeff[28] * data[i-29];
-				case 28: sum += qlp_coeff[27] * data[i-28];
-				case 27: sum += qlp_coeff[26] * data[i-27];
-				case 26: sum += qlp_coeff[25] * data[i-26];
-				case 25: sum += qlp_coeff[24] * data[i-25];
-				case 24: sum += qlp_coeff[23] * data[i-24];
-				case 23: sum += qlp_coeff[22] * data[i-23];
-				case 22: sum += qlp_coeff[21] * data[i-22];
-				case 21: sum += qlp_coeff[20] * data[i-21];
-				case 20: sum += qlp_coeff[19] * data[i-20];
-				case 19: sum += qlp_coeff[18] * data[i-19];
-				case 18: sum += qlp_coeff[17] * data[i-18];
-				case 17: sum += qlp_coeff[16] * data[i-17];
-				case 16: sum += qlp_coeff[15] * data[i-16];
-				case 15: sum += qlp_coeff[14] * data[i-15];
-				case 14: sum += qlp_coeff[13] * data[i-14];
-				case 13: sum += qlp_coeff[12] * data[i-13];
-				         sum += qlp_coeff[11] * data[i-12];
-				         sum += qlp_coeff[10] * data[i-11];
-				         sum += qlp_coeff[ 9] * data[i-10];
-				         sum += qlp_coeff[ 8] * data[i- 9];
-				         sum += qlp_coeff[ 7] * data[i- 8];
-				         sum += qlp_coeff[ 6] * data[i- 7];
-				         sum += qlp_coeff[ 5] * data[i- 6];
-				         sum += qlp_coeff[ 4] * data[i- 5];
-				         sum += qlp_coeff[ 3] * data[i- 4];
-				         sum += qlp_coeff[ 2] * data[i- 3];
-				         sum += qlp_coeff[ 1] * data[i- 2];
-				         sum += qlp_coeff[ 0] * data[i- 1];
-			}
-			residual[i] = data[i] - (sum >> lp_quantization);
-		}
-	}
-}
-#endif
-
-void FLAC__lpc_compute_residual_from_qlp_coefficients_wide(const FLAC__int32 * flac_restrict data, unsigned data_len, const FLAC__int32 * flac_restrict qlp_coeff, unsigned order, int lp_quantization, FLAC__int32 * flac_restrict residual)
-#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS)
-{
-	unsigned i, j;
-	FLAC__int64 sum;
-	const FLAC__int32 *history;
-
-#ifdef FLAC__OVERFLOW_DETECT_VERBOSE
-	fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization);
-	for(i=0;i<order;i++)
-		fprintf(stderr,", q[%u]=%d",i,qlp_coeff[i]);
-	fprintf(stderr,"\n");
-#endif
-	FLAC__ASSERT(order > 0);
-
-	for(i = 0; i < data_len; i++) {
-		sum = 0;
-		history = data;
-		for(j = 0; j < order; j++)
-			sum += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*(--history));
-		if(FLAC__bitmath_silog2_wide(sum >> lp_quantization) > 32) {
-			fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: OVERFLOW, i=%u, sum=%" PRId64 "\n", i, (sum >> lp_quantization));
-			break;
-		}
-		if(FLAC__bitmath_silog2_wide((FLAC__int64)(*data) - (sum >> lp_quantization)) > 32) {
-			fprintf(stderr,"FLAC__lpc_compute_residual_from_qlp_coefficients_wide: OVERFLOW, i=%u, data=%d, sum=%" PRId64 ", residual=%" PRId64 "\n", i, *data, (long long)(sum >> lp_quantization), ((FLAC__int64)(*data) - (sum >> lp_quantization)));
-			break;
-		}
-		*(residual++) = *(data++) - (FLAC__int32)(sum >> lp_quantization);
-	}
-}
-#else /* fully unrolled version for normal use */
-{
-	int i;
-	FLAC__int64 sum;
-
-	FLAC__ASSERT(order > 0);
-	FLAC__ASSERT(order <= 32);
-
-	/*
-	 * We do unique versions up to 12th order since that's the subset limit.
-	 * Also they are roughly ordered to match frequency of occurrence to
-	 * minimize branching.
-	 */
-	if(order <= 12) {
-		if(order > 8) {
-			if(order > 10) {
-				if(order == 12) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[11] * (FLAC__int64)data[i-12];
-						sum += qlp_coeff[10] * (FLAC__int64)data[i-11];
-						sum += qlp_coeff[9] * (FLAC__int64)data[i-10];
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 11 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[10] * (FLAC__int64)data[i-11];
-						sum += qlp_coeff[9] * (FLAC__int64)data[i-10];
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 10) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[9] * (FLAC__int64)data[i-10];
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 9 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else if(order > 4) {
-			if(order > 6) {
-				if(order == 8) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 7 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 6) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 5 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else {
-			if(order > 2) {
-				if(order == 4) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 3 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 2) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 1 */
-					for(i = 0; i < (int)data_len; i++)
-						residual[i] = data[i] - (FLAC__int32)((qlp_coeff[0] * (FLAC__int64)data[i-1]) >> lp_quantization);
-				}
-			}
-		}
-	}
-	else { /* order > 12 */
-		for(i = 0; i < (int)data_len; i++) {
-			sum = 0;
-			switch(order) {
-				case 32: sum += qlp_coeff[31] * (FLAC__int64)data[i-32];
-				case 31: sum += qlp_coeff[30] * (FLAC__int64)data[i-31];
-				case 30: sum += qlp_coeff[29] * (FLAC__int64)data[i-30];
-				case 29: sum += qlp_coeff[28] * (FLAC__int64)data[i-29];
-				case 28: sum += qlp_coeff[27] * (FLAC__int64)data[i-28];
-				case 27: sum += qlp_coeff[26] * (FLAC__int64)data[i-27];
-				case 26: sum += qlp_coeff[25] * (FLAC__int64)data[i-26];
-				case 25: sum += qlp_coeff[24] * (FLAC__int64)data[i-25];
-				case 24: sum += qlp_coeff[23] * (FLAC__int64)data[i-24];
-				case 23: sum += qlp_coeff[22] * (FLAC__int64)data[i-23];
-				case 22: sum += qlp_coeff[21] * (FLAC__int64)data[i-22];
-				case 21: sum += qlp_coeff[20] * (FLAC__int64)data[i-21];
-				case 20: sum += qlp_coeff[19] * (FLAC__int64)data[i-20];
-				case 19: sum += qlp_coeff[18] * (FLAC__int64)data[i-19];
-				case 18: sum += qlp_coeff[17] * (FLAC__int64)data[i-18];
-				case 17: sum += qlp_coeff[16] * (FLAC__int64)data[i-17];
-				case 16: sum += qlp_coeff[15] * (FLAC__int64)data[i-16];
-				case 15: sum += qlp_coeff[14] * (FLAC__int64)data[i-15];
-				case 14: sum += qlp_coeff[13] * (FLAC__int64)data[i-14];
-				case 13: sum += qlp_coeff[12] * (FLAC__int64)data[i-13];
-				         sum += qlp_coeff[11] * (FLAC__int64)data[i-12];
-				         sum += qlp_coeff[10] * (FLAC__int64)data[i-11];
-				         sum += qlp_coeff[ 9] * (FLAC__int64)data[i-10];
-				         sum += qlp_coeff[ 8] * (FLAC__int64)data[i- 9];
-				         sum += qlp_coeff[ 7] * (FLAC__int64)data[i- 8];
-				         sum += qlp_coeff[ 6] * (FLAC__int64)data[i- 7];
-				         sum += qlp_coeff[ 5] * (FLAC__int64)data[i- 6];
-				         sum += qlp_coeff[ 4] * (FLAC__int64)data[i- 5];
-				         sum += qlp_coeff[ 3] * (FLAC__int64)data[i- 4];
-				         sum += qlp_coeff[ 2] * (FLAC__int64)data[i- 3];
-				         sum += qlp_coeff[ 1] * (FLAC__int64)data[i- 2];
-				         sum += qlp_coeff[ 0] * (FLAC__int64)data[i- 1];
-			}
-			residual[i] = data[i] - (FLAC__int32)(sum >> lp_quantization);
-		}
-	}
-}
-#endif
-
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
-
-void FLAC__lpc_restore_signal(const FLAC__int32 * flac_restrict residual, unsigned data_len, const FLAC__int32 * flac_restrict qlp_coeff, unsigned order, int lp_quantization, FLAC__int32 * flac_restrict data)
-#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS)
-{
-	FLAC__int64 sumo;
-	unsigned i, j;
-	FLAC__int32 sum;
-	const FLAC__int32 *r = residual, *history;
-
-#ifdef FLAC__OVERFLOW_DETECT_VERBOSE
-	fprintf(stderr,"FLAC__lpc_restore_signal: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization);
-	for(i=0;i<order;i++)
-		fprintf(stderr,", q[%u]=%d",i,qlp_coeff[i]);
-	fprintf(stderr,"\n");
-#endif
-	FLAC__ASSERT(order > 0);
-
-	for(i = 0; i < data_len; i++) {
-		sumo = 0;
-		sum = 0;
-		history = data;
-		for(j = 0; j < order; j++) {
-			sum += qlp_coeff[j] * (*(--history));
-			sumo += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*history);
-			if(sumo > 2147483647ll || sumo < -2147483648ll)
-				fprintf(stderr,"FLAC__lpc_restore_signal: OVERFLOW, i=%u, j=%u, c=%d, d=%d, sumo=%" PRId64 "\n",i,j,qlp_coeff[j],*history,sumo);
-		}
-		*(data++) = *(r++) + (sum >> lp_quantization);
-	}
-
-	/* Here's a slower but clearer version:
-	for(i = 0; i < data_len; i++) {
-		sum = 0;
-		for(j = 0; j < order; j++)
-			sum += qlp_coeff[j] * data[i-j-1];
-		data[i] = residual[i] + (sum >> lp_quantization);
-	}
-	*/
-}
-#else /* fully unrolled version for normal use */
-{
-	int i;
-	FLAC__int32 sum;
-
-	FLAC__ASSERT(order > 0);
-	FLAC__ASSERT(order <= 32);
-
-	/*
-	 * We do unique versions up to 12th order since that's the subset limit.
-	 * Also they are roughly ordered to match frequency of occurrence to
-	 * minimize branching.
-	 */
-	if(order <= 12) {
-		if(order > 8) {
-			if(order > 10) {
-				if(order == 12) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[11] * data[i-12];
-						sum += qlp_coeff[10] * data[i-11];
-						sum += qlp_coeff[9] * data[i-10];
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 11 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[10] * data[i-11];
-						sum += qlp_coeff[9] * data[i-10];
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 10) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[9] * data[i-10];
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 9 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[8] * data[i-9];
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else if(order > 4) {
-			if(order > 6) {
-				if(order == 8) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[7] * data[i-8];
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 7 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[6] * data[i-7];
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 6) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[5] * data[i-6];
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 5 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[4] * data[i-5];
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else {
-			if(order > 2) {
-				if(order == 4) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[3] * data[i-4];
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 3 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[2] * data[i-3];
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 2) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[1] * data[i-2];
-						sum += qlp_coeff[0] * data[i-1];
-						data[i] = residual[i] + (sum >> lp_quantization);
-					}
-				}
-				else { /* order == 1 */
-					for(i = 0; i < (int)data_len; i++)
-						data[i] = residual[i] + ((qlp_coeff[0] * data[i-1]) >> lp_quantization);
-				}
-			}
-		}
-	}
-	else { /* order > 12 */
-		for(i = 0; i < (int)data_len; i++) {
-			sum = 0;
-			switch(order) {
-				case 32: sum += qlp_coeff[31] * data[i-32];
-				case 31: sum += qlp_coeff[30] * data[i-31];
-				case 30: sum += qlp_coeff[29] * data[i-30];
-				case 29: sum += qlp_coeff[28] * data[i-29];
-				case 28: sum += qlp_coeff[27] * data[i-28];
-				case 27: sum += qlp_coeff[26] * data[i-27];
-				case 26: sum += qlp_coeff[25] * data[i-26];
-				case 25: sum += qlp_coeff[24] * data[i-25];
-				case 24: sum += qlp_coeff[23] * data[i-24];
-				case 23: sum += qlp_coeff[22] * data[i-23];
-				case 22: sum += qlp_coeff[21] * data[i-22];
-				case 21: sum += qlp_coeff[20] * data[i-21];
-				case 20: sum += qlp_coeff[19] * data[i-20];
-				case 19: sum += qlp_coeff[18] * data[i-19];
-				case 18: sum += qlp_coeff[17] * data[i-18];
-				case 17: sum += qlp_coeff[16] * data[i-17];
-				case 16: sum += qlp_coeff[15] * data[i-16];
-				case 15: sum += qlp_coeff[14] * data[i-15];
-				case 14: sum += qlp_coeff[13] * data[i-14];
-				case 13: sum += qlp_coeff[12] * data[i-13];
-				         sum += qlp_coeff[11] * data[i-12];
-				         sum += qlp_coeff[10] * data[i-11];
-				         sum += qlp_coeff[ 9] * data[i-10];
-				         sum += qlp_coeff[ 8] * data[i- 9];
-				         sum += qlp_coeff[ 7] * data[i- 8];
-				         sum += qlp_coeff[ 6] * data[i- 7];
-				         sum += qlp_coeff[ 5] * data[i- 6];
-				         sum += qlp_coeff[ 4] * data[i- 5];
-				         sum += qlp_coeff[ 3] * data[i- 4];
-				         sum += qlp_coeff[ 2] * data[i- 3];
-				         sum += qlp_coeff[ 1] * data[i- 2];
-				         sum += qlp_coeff[ 0] * data[i- 1];
-			}
-			data[i] = residual[i] + (sum >> lp_quantization);
-		}
-	}
-}
-#endif
-
-void FLAC__lpc_restore_signal_wide(const FLAC__int32 * flac_restrict residual, unsigned data_len, const FLAC__int32 * flac_restrict qlp_coeff, unsigned order, int lp_quantization, FLAC__int32 * flac_restrict data)
-#if defined(FLAC__OVERFLOW_DETECT) || !defined(FLAC__LPC_UNROLLED_FILTER_LOOPS)
-{
-	unsigned i, j;
-	FLAC__int64 sum;
-	const FLAC__int32 *r = residual, *history;
-
-#ifdef FLAC__OVERFLOW_DETECT_VERBOSE
-	fprintf(stderr,"FLAC__lpc_restore_signal_wide: data_len=%d, order=%u, lpq=%d",data_len,order,lp_quantization);
-	for(i=0;i<order;i++)
-		fprintf(stderr,", q[%u]=%d",i,qlp_coeff[i]);
-	fprintf(stderr,"\n");
-#endif
-	FLAC__ASSERT(order > 0);
-
-	for(i = 0; i < data_len; i++) {
-		sum = 0;
-		history = data;
-		for(j = 0; j < order; j++)
-			sum += (FLAC__int64)qlp_coeff[j] * (FLAC__int64)(*(--history));
-		if(FLAC__bitmath_silog2_wide(sum >> lp_quantization) > 32) {
-			fprintf(stderr,"FLAC__lpc_restore_signal_wide: OVERFLOW, i=%u, sum=%" PRId64 "\n", i, (sum >> lp_quantization));
-			break;
-		}
-		if(FLAC__bitmath_silog2_wide((FLAC__int64)(*r) + (sum >> lp_quantization)) > 32) {
-			fprintf(stderr,"FLAC__lpc_restore_signal_wide: OVERFLOW, i=%u, residual=%d, sum=%" PRId64 ", data=%" PRId64 "\n", i, *r, (sum >> lp_quantization), ((FLAC__int64)(*r) + (sum >> lp_quantization)));
-			break;
-		}
-		*(data++) = *(r++) + (FLAC__int32)(sum >> lp_quantization);
-	}
-}
-#else /* fully unrolled version for normal use */
-{
-	int i;
-	FLAC__int64 sum;
-
-	FLAC__ASSERT(order > 0);
-	FLAC__ASSERT(order <= 32);
-
-	/*
-	 * We do unique versions up to 12th order since that's the subset limit.
-	 * Also they are roughly ordered to match frequency of occurrence to
-	 * minimize branching.
-	 */
-	if(order <= 12) {
-		if(order > 8) {
-			if(order > 10) {
-				if(order == 12) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[11] * (FLAC__int64)data[i-12];
-						sum += qlp_coeff[10] * (FLAC__int64)data[i-11];
-						sum += qlp_coeff[9] * (FLAC__int64)data[i-10];
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 11 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[10] * (FLAC__int64)data[i-11];
-						sum += qlp_coeff[9] * (FLAC__int64)data[i-10];
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 10) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[9] * (FLAC__int64)data[i-10];
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 9 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[8] * (FLAC__int64)data[i-9];
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else if(order > 4) {
-			if(order > 6) {
-				if(order == 8) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[7] * (FLAC__int64)data[i-8];
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 7 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[6] * (FLAC__int64)data[i-7];
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 6) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[5] * (FLAC__int64)data[i-6];
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 5 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[4] * (FLAC__int64)data[i-5];
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-		}
-		else {
-			if(order > 2) {
-				if(order == 4) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[3] * (FLAC__int64)data[i-4];
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 3 */
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[2] * (FLAC__int64)data[i-3];
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-			}
-			else {
-				if(order == 2) {
-					for(i = 0; i < (int)data_len; i++) {
-						sum = 0;
-						sum += qlp_coeff[1] * (FLAC__int64)data[i-2];
-						sum += qlp_coeff[0] * (FLAC__int64)data[i-1];
-						data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-					}
-				}
-				else { /* order == 1 */
-					for(i = 0; i < (int)data_len; i++)
-						data[i] = residual[i] + (FLAC__int32)((qlp_coeff[0] * (FLAC__int64)data[i-1]) >> lp_quantization);
-				}
-			}
-		}
-	}
-	else { /* order > 12 */
-		for(i = 0; i < (int)data_len; i++) {
-			sum = 0;
-			switch(order) {
-				case 32: sum += qlp_coeff[31] * (FLAC__int64)data[i-32];
-				case 31: sum += qlp_coeff[30] * (FLAC__int64)data[i-31];
-				case 30: sum += qlp_coeff[29] * (FLAC__int64)data[i-30];
-				case 29: sum += qlp_coeff[28] * (FLAC__int64)data[i-29];
-				case 28: sum += qlp_coeff[27] * (FLAC__int64)data[i-28];
-				case 27: sum += qlp_coeff[26] * (FLAC__int64)data[i-27];
-				case 26: sum += qlp_coeff[25] * (FLAC__int64)data[i-26];
-				case 25: sum += qlp_coeff[24] * (FLAC__int64)data[i-25];
-				case 24: sum += qlp_coeff[23] * (FLAC__int64)data[i-24];
-				case 23: sum += qlp_coeff[22] * (FLAC__int64)data[i-23];
-				case 22: sum += qlp_coeff[21] * (FLAC__int64)data[i-22];
-				case 21: sum += qlp_coeff[20] * (FLAC__int64)data[i-21];
-				case 20: sum += qlp_coeff[19] * (FLAC__int64)data[i-20];
-				case 19: sum += qlp_coeff[18] * (FLAC__int64)data[i-19];
-				case 18: sum += qlp_coeff[17] * (FLAC__int64)data[i-18];
-				case 17: sum += qlp_coeff[16] * (FLAC__int64)data[i-17];
-				case 16: sum += qlp_coeff[15] * (FLAC__int64)data[i-16];
-				case 15: sum += qlp_coeff[14] * (FLAC__int64)data[i-15];
-				case 14: sum += qlp_coeff[13] * (FLAC__int64)data[i-14];
-				case 13: sum += qlp_coeff[12] * (FLAC__int64)data[i-13];
-				         sum += qlp_coeff[11] * (FLAC__int64)data[i-12];
-				         sum += qlp_coeff[10] * (FLAC__int64)data[i-11];
-				         sum += qlp_coeff[ 9] * (FLAC__int64)data[i-10];
-				         sum += qlp_coeff[ 8] * (FLAC__int64)data[i- 9];
-				         sum += qlp_coeff[ 7] * (FLAC__int64)data[i- 8];
-				         sum += qlp_coeff[ 6] * (FLAC__int64)data[i- 7];
-				         sum += qlp_coeff[ 5] * (FLAC__int64)data[i- 6];
-				         sum += qlp_coeff[ 4] * (FLAC__int64)data[i- 5];
-				         sum += qlp_coeff[ 3] * (FLAC__int64)data[i- 4];
-				         sum += qlp_coeff[ 2] * (FLAC__int64)data[i- 3];
-				         sum += qlp_coeff[ 1] * (FLAC__int64)data[i- 2];
-				         sum += qlp_coeff[ 0] * (FLAC__int64)data[i- 1];
-			}
-			data[i] = residual[i] + (FLAC__int32)(sum >> lp_quantization);
-		}
-	}
-}
-#endif
-
-#if defined(_MSC_VER)
-#pragma warning ( default : 4028 )
-#endif
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample(FLAC__double lpc_error, unsigned total_samples)
-{
-	FLAC__double error_scale;
-
-	FLAC__ASSERT(total_samples > 0);
-
-	error_scale = 0.5 * M_LN2 * M_LN2 / (FLAC__double)total_samples;
-
-	return FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(lpc_error, error_scale);
-}
-
-FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(FLAC__double lpc_error, FLAC__double error_scale)
-{
-	if(lpc_error > 0.0) {
-		FLAC__double bps = (FLAC__double)0.5 * log(error_scale * lpc_error) / M_LN2;
-		if(bps >= 0.0)
-			return bps;
-		else
-			return 0.0;
-	}
-	else if(lpc_error < 0.0) { /* error should not be negative but can happen due to inadequate floating-point resolution */
-		return 1e32;
-	}
-	else {
-		return 0.0;
-	}
-}
-
-unsigned FLAC__lpc_compute_best_order(const FLAC__double lpc_error[], unsigned max_order, unsigned total_samples, unsigned overhead_bits_per_order)
-{
-	unsigned order, indx, best_index; /* 'index' the index into lpc_error; index==order-1 since lpc_error[0] is for order==1, lpc_error[1] is for order==2, etc */
-	FLAC__double bits, best_bits, error_scale;
-
-	FLAC__ASSERT(max_order > 0);
-	FLAC__ASSERT(total_samples > 0);
-
-	error_scale = 0.5 * M_LN2 * M_LN2 / (FLAC__double)total_samples;
-
-	best_index = 0;
-	best_bits = (unsigned)(-1);
-
-	for(indx = 0, order = 1; indx < max_order; indx++, order++) {
-		bits = FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(lpc_error[indx], error_scale) * (FLAC__double)(total_samples - order) + (FLAC__double)(order * overhead_bits_per_order);
-		if(bits < best_bits) {
-			best_index = indx;
-			best_bits = bits;
-		}
-	}
-
-	return best_index+1; /* +1 since indx of lpc_error[] is order-1 */
-}
-
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/md5.c b/modules/juce_audio_formats/codecs/flac/libFLAC/md5.c
deleted file mode 100644
index d41f6a8..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/md5.c
+++ /dev/null
@@ -1,518 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>		/* for malloc() */
-#include <string.h>		/* for memcpy() */
-
-#include "include/private/md5.h"
-#include "../alloc.h"
-#include "../endswap.h"
-
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- *
- * Changed so as no longer to depend on Colin Plumb's `usual.h' header
- * definitions; now uses stuff from dpkg's config.h.
- *  - Ian Jackson <ijackson at nyx.cs.du.edu>.
- * Still in the public domain.
- *
- * Josh Coalson: made some changes to integrate with libFLAC.
- * Still in the public domain.
- */
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f,w,x,y,z,in,s) \
-	 (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data.  MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void FLAC__MD5Transform(FLAC__uint32 buf[4], FLAC__uint32 const in[16])
-{
-	register FLAC__uint32 a, b, c, d;
-
-	a = buf[0];
-	b = buf[1];
-	c = buf[2];
-	d = buf[3];
-
-	MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
-	MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
-	MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
-	MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
-	MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
-	MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
-	MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
-	MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
-	MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
-	MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
-	MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
-	MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
-	MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
-	MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
-	MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
-	MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
-	MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
-	MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
-	MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
-	MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
-	MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
-	MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
-	MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
-	MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
-	MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
-	MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
-	MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-	MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
-	MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
-	MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
-	MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
-	MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
-	MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
-	MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
-	MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
-	MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
-	MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
-	MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
-	MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
-	MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
-	MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
-	MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
-	MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
-	MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
-	MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
-	MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
-	MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
-	MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
-	MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
-	MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
-	MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
-	MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
-	MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
-	MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
-	MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
-	MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
-	MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
-	MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
-	MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
-	MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
-	MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
-	MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
-	MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
-	MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
-	buf[0] += a;
-	buf[1] += b;
-	buf[2] += c;
-	buf[3] += d;
-}
-
-#if WORDS_BIGENDIAN
-//@@@@@@ OPT: use bswap/intrinsics
-static void byteSwap(FLAC__uint32 *buf, unsigned words)
-{
-	register FLAC__uint32 x;
-	do {
-		x = *buf;
-		x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff);
-		*buf++ = (x >> 16) | (x << 16);
-	} while (--words);
-}
-static void byteSwapX16(FLAC__uint32 *buf)
-{
-	register FLAC__uint32 x;
-
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf++ = (x >> 16) | (x << 16);
-	x = *buf; x = ((x << 8) & 0xff00ff00) | ((x >> 8) & 0x00ff00ff); *buf   = (x >> 16) | (x << 16);
-}
-#else
-#define byteSwap(buf, words)
-#define byteSwapX16(buf)
-#endif
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-static void FLAC__MD5Update(FLAC__MD5Context *ctx, FLAC__byte const *buf, unsigned len)
-{
-	FLAC__uint32 t;
-
-	/* Update byte count */
-
-	t = ctx->bytes[0];
-	if ((ctx->bytes[0] = t + len) < t)
-		ctx->bytes[1]++;	/* Carry from low to high */
-
-	t = 64 - (t & 0x3f);	/* Space available in ctx->in (at least 1) */
-	if (t > len) {
-		memcpy((FLAC__byte *)ctx->in + 64 - t, buf, len);
-		return;
-	}
-	/* First chunk is an odd size */
-	memcpy((FLAC__byte *)ctx->in + 64 - t, buf, t);
-	byteSwapX16(ctx->in);
-	FLAC__MD5Transform(ctx->buf, ctx->in);
-	buf += t;
-	len -= t;
-
-	/* Process data in 64-byte chunks */
-	while (len >= 64) {
-		memcpy(ctx->in, buf, 64);
-		byteSwapX16(ctx->in);
-		FLAC__MD5Transform(ctx->buf, ctx->in);
-		buf += 64;
-		len -= 64;
-	}
-
-	/* Handle any remaining bytes of data. */
-	memcpy(ctx->in, buf, len);
-}
-
-/*
- * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-void FLAC__MD5Init(FLAC__MD5Context *ctx)
-{
-	ctx->buf[0] = 0x67452301;
-	ctx->buf[1] = 0xefcdab89;
-	ctx->buf[2] = 0x98badcfe;
-	ctx->buf[3] = 0x10325476;
-
-	ctx->bytes[0] = 0;
-	ctx->bytes[1] = 0;
-
-	ctx->internal_buf.p8= 0;
-	ctx->capacity = 0;
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-void FLAC__MD5Final(FLAC__byte digest[16], FLAC__MD5Context *ctx)
-{
-	int count = ctx->bytes[0] & 0x3f;	/* Number of bytes in ctx->in */
-	FLAC__byte *p = (FLAC__byte *)ctx->in + count;
-
-	/* Set the first char of padding to 0x80.  There is always room. */
-	*p++ = 0x80;
-
-	/* Bytes of padding needed to make 56 bytes (-8..55) */
-	count = 56 - 1 - count;
-
-	if (count < 0) {	/* Padding forces an extra block */
-		memset(p, 0, count + 8);
-		byteSwapX16(ctx->in);
-		FLAC__MD5Transform(ctx->buf, ctx->in);
-		p = (FLAC__byte *)ctx->in;
-		count = 56;
-	}
-	memset(p, 0, count);
-	byteSwap(ctx->in, 14);
-
-	/* Append length in bits and transform */
-	ctx->in[14] = ctx->bytes[0] << 3;
-	ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
-	FLAC__MD5Transform(ctx->buf, ctx->in);
-
-	byteSwap(ctx->buf, 4);
-	memcpy(digest, ctx->buf, 16);
-	if (0 != ctx->internal_buf.p8) {
-		free(ctx->internal_buf.p8);
-		ctx->internal_buf.p8= 0;
-		ctx->capacity = 0;
-	}
-	memset(ctx, 0, sizeof(*ctx));	/* In case it's sensitive */
-}
-
-/*
- * Convert the incoming audio signal to a byte stream
- */
-static void format_input_(FLAC__multibyte *mbuf, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample)
-{
-	FLAC__byte *buf_ = mbuf->p8;
-	FLAC__int16 *buf16 = mbuf->p16;
-	FLAC__int32 *buf32 = mbuf->p32;
-	FLAC__int32 a_word;
-	unsigned channel, sample;
-
-	/* Storage in the output buffer, buf, is little endian. */
-
-#define BYTES_CHANNEL_SELECTOR(bytes, channels)   (bytes * 100 + channels)
-
-	/* First do the most commonly used combinations. */
-	switch (BYTES_CHANNEL_SELECTOR (bytes_per_sample, channels)) {
-		/* One byte per sample. */
-		case (BYTES_CHANNEL_SELECTOR (1, 1)):
-			for (sample = 0; sample < samples; sample++)
-				*buf_++ = signal[0][sample];
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (1, 2)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf_++ = signal[0][sample];
-				*buf_++ = signal[1][sample];
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (1, 4)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf_++ = signal[0][sample];
-				*buf_++ = signal[1][sample];
-				*buf_++ = signal[2][sample];
-				*buf_++ = signal[3][sample];
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (1, 6)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf_++ = signal[0][sample];
-				*buf_++ = signal[1][sample];
-				*buf_++ = signal[2][sample];
-				*buf_++ = signal[3][sample];
-				*buf_++ = signal[4][sample];
-				*buf_++ = signal[5][sample];
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (1, 8)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf_++ = signal[0][sample];
-				*buf_++ = signal[1][sample];
-				*buf_++ = signal[2][sample];
-				*buf_++ = signal[3][sample];
-				*buf_++ = signal[4][sample];
-				*buf_++ = signal[5][sample];
-				*buf_++ = signal[6][sample];
-				*buf_++ = signal[7][sample];
-			}
-			return;
-
-		/* Two bytes per sample. */
-		case (BYTES_CHANNEL_SELECTOR (2, 1)):
-			for (sample = 0; sample < samples; sample++)
-				*buf16++ = H2LE_16(signal[0][sample]);
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (2, 2)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf16++ = H2LE_16(signal[0][sample]);
-				*buf16++ = H2LE_16(signal[1][sample]);
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (2, 4)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf16++ = H2LE_16(signal[0][sample]);
-				*buf16++ = H2LE_16(signal[1][sample]);
-				*buf16++ = H2LE_16(signal[2][sample]);
-				*buf16++ = H2LE_16(signal[3][sample]);
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (2, 6)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf16++ = H2LE_16(signal[0][sample]);
-				*buf16++ = H2LE_16(signal[1][sample]);
-				*buf16++ = H2LE_16(signal[2][sample]);
-				*buf16++ = H2LE_16(signal[3][sample]);
-				*buf16++ = H2LE_16(signal[4][sample]);
-				*buf16++ = H2LE_16(signal[5][sample]);
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (2, 8)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf16++ = H2LE_16(signal[0][sample]);
-				*buf16++ = H2LE_16(signal[1][sample]);
-				*buf16++ = H2LE_16(signal[2][sample]);
-				*buf16++ = H2LE_16(signal[3][sample]);
-				*buf16++ = H2LE_16(signal[4][sample]);
-				*buf16++ = H2LE_16(signal[5][sample]);
-				*buf16++ = H2LE_16(signal[6][sample]);
-				*buf16++ = H2LE_16(signal[7][sample]);
-			}
-			return;
-
-		/* Three bytes per sample. */
-		case (BYTES_CHANNEL_SELECTOR (3, 1)):
-			for (sample = 0; sample < samples; sample++) {
-				a_word = signal[0][sample];
-				*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-				*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-				*buf_++ = (FLAC__byte)a_word;
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (3, 2)):
-			for (sample = 0; sample < samples; sample++) {
-				a_word = signal[0][sample];
-				*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-				*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-				*buf_++ = (FLAC__byte)a_word;
-				a_word = signal[1][sample];
-				*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-				*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-				*buf_++ = (FLAC__byte)a_word;
-			}
-			return;
-
-		/* Four bytes per sample. */
-		case (BYTES_CHANNEL_SELECTOR (4, 1)):
-			for (sample = 0; sample < samples; sample++)
-				*buf32++ = H2LE_32(signal[0][sample]);
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (4, 2)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf32++ = H2LE_32(signal[0][sample]);
-				*buf32++ = H2LE_32(signal[1][sample]);
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (4, 4)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf32++ = H2LE_32(signal[0][sample]);
-				*buf32++ = H2LE_32(signal[1][sample]);
-				*buf32++ = H2LE_32(signal[2][sample]);
-				*buf32++ = H2LE_32(signal[3][sample]);
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (4, 6)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf32++ = H2LE_32(signal[0][sample]);
-				*buf32++ = H2LE_32(signal[1][sample]);
-				*buf32++ = H2LE_32(signal[2][sample]);
-				*buf32++ = H2LE_32(signal[3][sample]);
-				*buf32++ = H2LE_32(signal[4][sample]);
-				*buf32++ = H2LE_32(signal[5][sample]);
-			}
-			return;
-
-		case (BYTES_CHANNEL_SELECTOR (4, 8)):
-			for (sample = 0; sample < samples; sample++) {
-				*buf32++ = H2LE_32(signal[0][sample]);
-				*buf32++ = H2LE_32(signal[1][sample]);
-				*buf32++ = H2LE_32(signal[2][sample]);
-				*buf32++ = H2LE_32(signal[3][sample]);
-				*buf32++ = H2LE_32(signal[4][sample]);
-				*buf32++ = H2LE_32(signal[5][sample]);
-				*buf32++ = H2LE_32(signal[6][sample]);
-				*buf32++ = H2LE_32(signal[7][sample]);
-			}
-			return;
-
-		default:
-			break;
-	}
-
-	/* General version. */
-	switch (bytes_per_sample) {
-		case 1:
-			for (sample = 0; sample < samples; sample++)
-				for (channel = 0; channel < channels; channel++)
-					*buf_++ = signal[channel][sample];
-			return;
-
-		case 2:
-			for (sample = 0; sample < samples; sample++)
-				for (channel = 0; channel < channels; channel++)
-					*buf16++ = H2LE_16(signal[channel][sample]);
-			return;
-
-		case 3:
-			for (sample = 0; sample < samples; sample++)
-				for (channel = 0; channel < channels; channel++) {
-					a_word = signal[channel][sample];
-					*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-					*buf_++ = (FLAC__byte)a_word; a_word >>= 8;
-					*buf_++ = (FLAC__byte)a_word;
-				}
-			return;
-
-		case 4:
-			for (sample = 0; sample < samples; sample++)
-				for (channel = 0; channel < channels; channel++)
-					*buf32++ = H2LE_32(signal[channel][sample]);
-			return;
-
-		default:
-			break;
-	}
-}
-
-/*
- * Convert the incoming audio signal to a byte stream and FLAC__MD5Update it.
- */
-FLAC__bool FLAC__MD5Accumulate(FLAC__MD5Context *ctx, const FLAC__int32 * const signal[], unsigned channels, unsigned samples, unsigned bytes_per_sample)
-{
-	const size_t bytes_needed = (size_t)channels * (size_t)samples * (size_t)bytes_per_sample;
-
-	/* overflow check */
-	if ((size_t)channels > SIZE_MAX / (size_t)bytes_per_sample)
-		return false;
-	if ((size_t)channels * (size_t)bytes_per_sample > SIZE_MAX / (size_t)samples)
-		return false;
-
-	if (ctx->capacity < bytes_needed) {
-		FLAC__byte *tmp = (FLAC__byte*) realloc(ctx->internal_buf.p8, bytes_needed);
-		if (0 == tmp) {
-			free(ctx->internal_buf.p8);
-			if (0 == (ctx->internal_buf.p8= (FLAC__byte*) safe_malloc_(bytes_needed)))
-				return false;
-		}
-		else
-			ctx->internal_buf.p8= tmp;
-		ctx->capacity = bytes_needed;
-	}
-
-	format_input_(&ctx->internal_buf, signal, channels, samples, bytes_per_sample);
-
-	FLAC__MD5Update(ctx, ctx->internal_buf.p8, bytes_needed);
-
-	return true;
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/memory.c b/modules/juce_audio_formats/codecs/flac/libFLAC/memory.c
deleted file mode 100644
index fb125f1..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/memory.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include "include/private/memory.h"
-#include "../assert.h"
-#include "../alloc.h"
-
-void *FLAC__memory_alloc_aligned(size_t bytes, void **aligned_address)
-{
-	void *x;
-
-	FLAC__ASSERT(0 != aligned_address);
-
-#ifdef FLAC__ALIGN_MALLOC_DATA
-	/* align on 32-byte (256-bit) boundary */
-	x = safe_malloc_add_2op_(bytes, /*+*/31L);
-	*aligned_address = (void*)(((uintptr_t)x + 31L) & -32L);
-#else
-	x = safe_malloc_(bytes);
-	*aligned_address = x;
-#endif
-	return x;
-}
-
-FLAC__bool FLAC__memory_alloc_aligned_int32_array(size_t elements, FLAC__int32 **unaligned_pointer, FLAC__int32 **aligned_pointer)
-{
-	FLAC__int32 *pu; /* unaligned pointer */
-	union { /* union needed to comply with C99 pointer aliasing rules */
-		FLAC__int32 *pa; /* aligned pointer */
-		void        *pv; /* aligned pointer alias */
-	} u;
-
-	FLAC__ASSERT(elements > 0);
-	FLAC__ASSERT(0 != unaligned_pointer);
-	FLAC__ASSERT(0 != aligned_pointer);
-	FLAC__ASSERT(unaligned_pointer != aligned_pointer);
-
-	if(elements > SIZE_MAX / sizeof(*pu)) /* overflow check */
-		return false;
-
-	pu = (FLAC__int32*) FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv);
-	if(0 == pu) {
-		return false;
-	}
-	else {
-		if(*unaligned_pointer != 0)
-			free(*unaligned_pointer);
-		*unaligned_pointer = pu;
-		*aligned_pointer = u.pa;
-		return true;
-	}
-}
-
-FLAC__bool FLAC__memory_alloc_aligned_uint32_array(size_t elements, FLAC__uint32 **unaligned_pointer, FLAC__uint32 **aligned_pointer)
-{
-	FLAC__uint32 *pu; /* unaligned pointer */
-	union { /* union needed to comply with C99 pointer aliasing rules */
-		FLAC__uint32 *pa; /* aligned pointer */
-		void         *pv; /* aligned pointer alias */
-	} u;
-
-	FLAC__ASSERT(elements > 0);
-	FLAC__ASSERT(0 != unaligned_pointer);
-	FLAC__ASSERT(0 != aligned_pointer);
-	FLAC__ASSERT(unaligned_pointer != aligned_pointer);
-
-	if(elements > SIZE_MAX / sizeof(*pu)) /* overflow check */
-		return false;
-
-	pu = (FLAC__uint32*) FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv);
-	if(0 == pu) {
-		return false;
-	}
-	else {
-		if(*unaligned_pointer != 0)
-			free(*unaligned_pointer);
-		*unaligned_pointer = pu;
-		*aligned_pointer = u.pa;
-		return true;
-	}
-}
-
-FLAC__bool FLAC__memory_alloc_aligned_uint64_array(size_t elements, FLAC__uint64 **unaligned_pointer, FLAC__uint64 **aligned_pointer)
-{
-	FLAC__uint64 *pu; /* unaligned pointer */
-	union { /* union needed to comply with C99 pointer aliasing rules */
-		FLAC__uint64 *pa; /* aligned pointer */
-		void         *pv; /* aligned pointer alias */
-	} u;
-
-	FLAC__ASSERT(elements > 0);
-	FLAC__ASSERT(0 != unaligned_pointer);
-	FLAC__ASSERT(0 != aligned_pointer);
-	FLAC__ASSERT(unaligned_pointer != aligned_pointer);
-
-	if(elements > SIZE_MAX / sizeof(*pu)) /* overflow check */
-		return false;
-
-	pu = (FLAC__uint64*) FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv);
-	if(0 == pu) {
-		return false;
-	}
-	else {
-		if(*unaligned_pointer != 0)
-			free(*unaligned_pointer);
-		*unaligned_pointer = pu;
-		*aligned_pointer = u.pa;
-		return true;
-	}
-}
-
-FLAC__bool FLAC__memory_alloc_aligned_unsigned_array(size_t elements, unsigned **unaligned_pointer, unsigned **aligned_pointer)
-{
-	unsigned *pu; /* unaligned pointer */
-	union { /* union needed to comply with C99 pointer aliasing rules */
-		unsigned *pa; /* aligned pointer */
-		void     *pv; /* aligned pointer alias */
-	} u;
-
-	FLAC__ASSERT(elements > 0);
-	FLAC__ASSERT(0 != unaligned_pointer);
-	FLAC__ASSERT(0 != aligned_pointer);
-	FLAC__ASSERT(unaligned_pointer != aligned_pointer);
-
-	if(elements > SIZE_MAX / sizeof(*pu)) /* overflow check */
-		return false;
-
-	pu = (unsigned int*) FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv);
-	if(0 == pu) {
-		return false;
-	}
-	else {
-		if(*unaligned_pointer != 0)
-			free(*unaligned_pointer);
-		*unaligned_pointer = pu;
-		*aligned_pointer = u.pa;
-		return true;
-	}
-}
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-FLAC__bool FLAC__memory_alloc_aligned_real_array(size_t elements, FLAC__real **unaligned_pointer, FLAC__real **aligned_pointer)
-{
-	FLAC__real *pu; /* unaligned pointer */
-	union { /* union needed to comply with C99 pointer aliasing rules */
-		FLAC__real *pa; /* aligned pointer */
-		void       *pv; /* aligned pointer alias */
-	} u;
-
-	FLAC__ASSERT(elements > 0);
-	FLAC__ASSERT(0 != unaligned_pointer);
-	FLAC__ASSERT(0 != aligned_pointer);
-	FLAC__ASSERT(unaligned_pointer != aligned_pointer);
-
-	if(elements > SIZE_MAX / sizeof(*pu)) /* overflow check */
-		return false;
-
-	pu = (FLAC__real*) FLAC__memory_alloc_aligned(sizeof(*pu) * elements, &u.pv);
-	if(0 == pu) {
-		return false;
-	}
-	else {
-		if(*unaligned_pointer != 0)
-			free(*unaligned_pointer);
-		*unaligned_pointer = pu;
-		*aligned_pointer = u.pa;
-		return true;
-	}
-}
-
-#endif
-
-void *safe_malloc_mul_2op_p(size_t size1, size_t size2)
-{
-	if(!size1 || !size2)
-		return malloc(1); /* malloc(0) is undefined; FLAC src convention is to always allocate */
-	if(size1 > SIZE_MAX / size2)
-		return 0;
-	return malloc(size1*size2);
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c b/modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c
deleted file mode 100644
index d6a7973..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/stream_decoder.c
+++ /dev/null
@@ -1,3395 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h> /* for malloc() */
-#include <string.h> /* for memset/memcpy() */
-#include <sys/stat.h> /* for stat() */
-#include <sys/types.h> /* for off_t */
-#include "../compat.h"
-#include "../assert.h"
-#include "../alloc.h"
-#include "include/protected/stream_decoder.h"
-#include "include/private/bitreader.h"
-#include "include/private/bitmath.h"
-#include "include/private/cpu.h"
-#include "include/private/crc.h"
-#include "include/private/fixed.h"
-#include "include/private/format.h"
-#include "include/private/lpc.h"
-#include "include/private/md5.h"
-#include "include/private/memory.h"
-
-
-/* technically this should be in an "export.c" but this is convenient enough */
-FLAC_API int FLAC_API_SUPPORTS_OGG_FLAC =
-#if FLAC__HAS_OGG
-	1
-#else
-	0
-#endif
-;
-
-
-/***********************************************************************
- *
- * Private static data
- *
- ***********************************************************************/
-
-static const FLAC__byte ID3V2_TAG_[3] = { 'I', 'D', '3' };
-
-/***********************************************************************
- *
- * Private class method prototypes
- *
- ***********************************************************************/
-
-static void set_defaults_(FLAC__StreamDecoder *decoder);
-//static FILE *get_binary_stdin_(void);
-static FLAC__bool allocate_output_(FLAC__StreamDecoder *decoder, unsigned size, unsigned channels);
-static FLAC__bool has_id_filtered_(FLAC__StreamDecoder *decoder, FLAC__byte *id);
-static FLAC__bool find_metadata_(FLAC__StreamDecoder *decoder);
-static FLAC__bool read_metadata_(FLAC__StreamDecoder *decoder);
-static FLAC__bool read_metadata_streaminfo_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length);
-static FLAC__bool read_metadata_seektable_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length);
-static FLAC__bool read_metadata_vorbiscomment_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_VorbisComment *obj, unsigned length);
-static FLAC__bool read_metadata_cuesheet_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_CueSheet *obj);
-static FLAC__bool read_metadata_picture_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_Picture *obj);
-static FLAC__bool skip_id3v2_tag_(FLAC__StreamDecoder *decoder);
-static FLAC__bool frame_sync_(FLAC__StreamDecoder *decoder);
-static FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FLAC__bool do_full_decode);
-static FLAC__bool read_frame_header_(FLAC__StreamDecoder *decoder);
-static FLAC__bool read_subframe_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode);
-static FLAC__bool read_subframe_constant_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode);
-static FLAC__bool read_subframe_fixed_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode);
-static FLAC__bool read_subframe_lpc_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode);
-static FLAC__bool read_subframe_verbatim_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode);
-static FLAC__bool read_residual_partitioned_rice_(FLAC__StreamDecoder *decoder, unsigned predictor_order, unsigned partition_order, FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, FLAC__int32 *residual, FLAC__bool is_extended);
-static FLAC__bool read_zero_padding_(FLAC__StreamDecoder *decoder);
-static FLAC__bool read_callback_(FLAC__byte buffer[], size_t *bytes, void *client_data);
-#if FLAC__HAS_OGG
-static FLAC__StreamDecoderReadStatus read_callback_ogg_aspect_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes);
-static FLAC__OggDecoderAspectReadStatus read_callback_proxy_(const void *void_decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-#endif
-static FLAC__StreamDecoderWriteStatus write_audio_frame_to_client_(FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[]);
-static void send_error_to_client_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status);
-static FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample);
-#if FLAC__HAS_OGG
-static FLAC__bool seek_to_absolute_sample_ogg_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample);
-#endif
-//static FLAC__StreamDecoderReadStatus file_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-//static FLAC__StreamDecoderSeekStatus file_seek_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
-//static FLAC__StreamDecoderTellStatus file_tell_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
-//static FLAC__StreamDecoderLengthStatus file_length_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
-//static FLAC__bool file_eof_callback_(const FLAC__StreamDecoder *decoder, void *client_data);
-
-/***********************************************************************
- *
- * Private class data
- *
- ***********************************************************************/
-
-typedef struct FLAC__StreamDecoderPrivate {
-#if FLAC__HAS_OGG
-	FLAC__bool is_ogg;
-#endif
-	FLAC__StreamDecoderReadCallback read_callback;
-	FLAC__StreamDecoderSeekCallback seek_callback;
-	FLAC__StreamDecoderTellCallback tell_callback;
-	FLAC__StreamDecoderLengthCallback length_callback;
-	FLAC__StreamDecoderEofCallback eof_callback;
-	FLAC__StreamDecoderWriteCallback write_callback;
-	FLAC__StreamDecoderMetadataCallback metadata_callback;
-	FLAC__StreamDecoderErrorCallback error_callback;
-	/* generic 32-bit datapath: */
-	void (*local_lpc_restore_signal)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-	/* generic 64-bit datapath: */
-	void (*local_lpc_restore_signal_64bit)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-	/* for use when the signal is <= 16 bits-per-sample, or <= 15 bits-per-sample on a side channel (which requires 1 extra bit): */
-	void (*local_lpc_restore_signal_16bit)(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]);
-	void *client_data;
-	FILE *file; /* only used if FLAC__stream_decoder_init_file()/FLAC__stream_decoder_init_file() called, else NULL */
-	FLAC__BitReader *input;
-	FLAC__int32 *output[FLAC__MAX_CHANNELS];
-	FLAC__int32 *residual[FLAC__MAX_CHANNELS]; /* WATCHOUT: these are the aligned pointers; the real pointers that should be free()'d are residual_unaligned[] below */
-	FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents[FLAC__MAX_CHANNELS];
-	unsigned output_capacity, output_channels;
-	FLAC__uint32 fixed_block_size, next_fixed_block_size;
-	FLAC__uint64 samples_decoded;
-	FLAC__bool has_stream_info, has_seek_table;
-	FLAC__StreamMetadata stream_info;
-	FLAC__StreamMetadata seek_table;
-	FLAC__bool metadata_filter[128]; /* MAGIC number 128 == total number of metadata block types == 1 << 7 */
-	FLAC__byte *metadata_filter_ids;
-	size_t metadata_filter_ids_count, metadata_filter_ids_capacity; /* units for both are IDs, not bytes */
-	FLAC__Frame frame;
-	FLAC__bool cached; /* true if there is a byte in lookahead */
-	FLAC__CPUInfo cpuinfo;
-	FLAC__byte header_warmup[2]; /* contains the sync code and reserved bits */
-	FLAC__byte lookahead; /* temp storage when we need to look ahead one byte in the stream */
-	/* unaligned (original) pointers to allocated data */
-	FLAC__int32 *residual_unaligned[FLAC__MAX_CHANNELS];
-	FLAC__bool do_md5_checking; /* initially gets protected_->md5_checking but is turned off after a seek or if the metadata has a zero MD5 */
-	FLAC__bool internal_reset_hack; /* used only during init() so we can call reset to set up the decoder without rewinding the input */
-	FLAC__bool is_seeking;
-	FLAC__MD5Context md5context;
-	FLAC__byte computed_md5sum[16]; /* this is the sum we computed from the decoded data */
-	/* (the rest of these are only used for seeking) */
-	FLAC__Frame last_frame; /* holds the info of the last frame we seeked to */
-	FLAC__uint64 first_frame_offset; /* hint to the seek routine of where in the stream the first audio frame starts */
-	FLAC__uint64 target_sample;
-	unsigned unparseable_frame_count; /* used to tell whether we're decoding a future version of FLAC or just got a bad sync */
-#if FLAC__HAS_OGG
-	FLAC__bool got_a_frame; /* hack needed in Ogg FLAC seek routine to check when process_single() actually writes a frame */
-#endif
-} FLAC__StreamDecoderPrivate;
-
-/***********************************************************************
- *
- * Public static class data
- *
- ***********************************************************************/
-
-FLAC_API const char * const FLAC__StreamDecoderStateString[] = {
-	"FLAC__STREAM_DECODER_SEARCH_FOR_METADATA",
-	"FLAC__STREAM_DECODER_READ_METADATA",
-	"FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC",
-	"FLAC__STREAM_DECODER_READ_FRAME",
-	"FLAC__STREAM_DECODER_END_OF_STREAM",
-	"FLAC__STREAM_DECODER_OGG_ERROR",
-	"FLAC__STREAM_DECODER_SEEK_ERROR",
-	"FLAC__STREAM_DECODER_ABORTED",
-	"FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR",
-	"FLAC__STREAM_DECODER_UNINITIALIZED"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderInitStatusString[] = {
-	"FLAC__STREAM_DECODER_INIT_STATUS_OK",
-	"FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER",
-	"FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS",
-	"FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR",
-	"FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE",
-	"FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderReadStatusString[] = {
-	"FLAC__STREAM_DECODER_READ_STATUS_CONTINUE",
-	"FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM",
-	"FLAC__STREAM_DECODER_READ_STATUS_ABORT"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[] = {
-	"FLAC__STREAM_DECODER_SEEK_STATUS_OK",
-	"FLAC__STREAM_DECODER_SEEK_STATUS_ERROR",
-	"FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderTellStatusString[] = {
-	"FLAC__STREAM_DECODER_TELL_STATUS_OK",
-	"FLAC__STREAM_DECODER_TELL_STATUS_ERROR",
-	"FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[] = {
-	"FLAC__STREAM_DECODER_LENGTH_STATUS_OK",
-	"FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR",
-	"FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[] = {
-	"FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE",
-	"FLAC__STREAM_DECODER_WRITE_STATUS_ABORT"
-};
-
-FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[] = {
-	"FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC",
-	"FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER",
-	"FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH",
-	"FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM"
-};
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void)
-{
-	FLAC__StreamDecoder *decoder;
-	unsigned i;
-
-	FLAC__ASSERT(sizeof(int) >= 4); /* we want to die right away if this is not true */
-
-	decoder = (FLAC__StreamDecoder*) calloc(1, sizeof(FLAC__StreamDecoder));
-	if(decoder == 0) {
-		return 0;
-	}
-
-	decoder->protected_ = (FLAC__StreamDecoderProtected*) calloc(1, sizeof(FLAC__StreamDecoderProtected));
-	if(decoder->protected_ == 0) {
-		free(decoder);
-		return 0;
-	}
-
-	decoder->private_ = (FLAC__StreamDecoderPrivate*) calloc(1, sizeof(FLAC__StreamDecoderPrivate));
-	if(decoder->private_ == 0) {
-		free(decoder->protected_);
-		free(decoder);
-		return 0;
-	}
-
-	decoder->private_->input = FLAC__bitreader_new();
-	if(decoder->private_->input == 0) {
-		free(decoder->private_);
-		free(decoder->protected_);
-		free(decoder);
-		return 0;
-	}
-
-	decoder->private_->metadata_filter_ids_capacity = 16;
-	if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*) malloc((FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8) * decoder->private_->metadata_filter_ids_capacity))) {
-		FLAC__bitreader_delete(decoder->private_->input);
-		free(decoder->private_);
-		free(decoder->protected_);
-		free(decoder);
-		return 0;
-	}
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		decoder->private_->output[i] = 0;
-		decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0;
-	}
-
-	decoder->private_->output_capacity = 0;
-	decoder->private_->output_channels = 0;
-	decoder->private_->has_seek_table = false;
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++)
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&decoder->private_->partitioned_rice_contents[i]);
-
-	decoder->private_->file = 0;
-
-	set_defaults_(decoder);
-
-	decoder->protected_->state = FLAC__STREAM_DECODER_UNINITIALIZED;
-
-	return decoder;
-}
-
-FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder)
-{
-	unsigned i;
-
-	if (decoder == NULL)
-		return ;
-
-	FLAC__ASSERT(0 != decoder->protected_);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->private_->input);
-
-	(void)FLAC__stream_decoder_finish(decoder);
-
-	if(0 != decoder->private_->metadata_filter_ids)
-		free(decoder->private_->metadata_filter_ids);
-
-	FLAC__bitreader_delete(decoder->private_->input);
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++)
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&decoder->private_->partitioned_rice_contents[i]);
-
-	free(decoder->private_);
-	free(decoder->protected_);
-	free(decoder);
-}
-
-/***********************************************************************
- *
- * Public class methods
- *
- ***********************************************************************/
-
-static FLAC__StreamDecoderInitStatus init_stream_internal_(
-	FLAC__StreamDecoder *decoder,
-	FLAC__StreamDecoderReadCallback read_callback,
-	FLAC__StreamDecoderSeekCallback seek_callback,
-	FLAC__StreamDecoderTellCallback tell_callback,
-	FLAC__StreamDecoderLengthCallback length_callback,
-	FLAC__StreamDecoderEofCallback eof_callback,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data,
-	FLAC__bool is_ogg
-)
-{
-	FLAC__ASSERT(0 != decoder);
-
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED;
-
-#if !FLAC__HAS_OGG
-	if(is_ogg)
-		return FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER;
-#endif
-
-	if(
-		0 == read_callback ||
-		0 == write_callback ||
-		0 == error_callback ||
-		(seek_callback && (0 == tell_callback || 0 == length_callback || 0 == eof_callback))
-	)
-		return FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS;
-
-#if FLAC__HAS_OGG
-	decoder->private_->is_ogg = is_ogg;
-	if(is_ogg && !FLAC__ogg_decoder_aspect_init(&decoder->protected_->ogg_decoder_aspect))
-		return decoder->protected_->initstate = FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE;
-#endif
-
-	/*
-	 * get the CPU info and set the function pointers
-	 */
-	FLAC__cpu_info(&decoder->private_->cpuinfo);
-	/* first default to the non-asm routines */
-	decoder->private_->local_lpc_restore_signal = FLAC__lpc_restore_signal;
-	decoder->private_->local_lpc_restore_signal_64bit = FLAC__lpc_restore_signal_wide;
-	decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal;
-	/* now override with asm where appropriate */
-#ifndef FLAC__NO_ASM
-	if(decoder->private_->cpuinfo.use_asm) {
-#ifdef FLAC__CPU_IA32
-		FLAC__ASSERT(decoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_IA32);
-#ifdef FLAC__HAS_NASM
-		decoder->private_->local_lpc_restore_signal_64bit = FLAC__lpc_restore_signal_wide_asm_ia32; /* OPT_IA32: was really necessary for GCC < 4.9 */
-		if(decoder->private_->cpuinfo.ia32.mmx) {
-			decoder->private_->local_lpc_restore_signal = FLAC__lpc_restore_signal_asm_ia32;
-			decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal_asm_ia32_mmx;
-		}
-		else {
-			decoder->private_->local_lpc_restore_signal = FLAC__lpc_restore_signal_asm_ia32;
-			decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal_asm_ia32;
-		}
-#endif
-#ifdef FLAC__HAS_X86INTRIN
-# if defined FLAC__SSE2_SUPPORTED && !defined FLAC__HAS_NASM /* OPT_SSE: not better than MMX asm */
-		if(decoder->private_->cpuinfo.ia32.sse2) {
-			decoder->private_->local_lpc_restore_signal_16bit = FLAC__lpc_restore_signal_16_intrin_sse2;
-		}
-# endif
-# if defined FLAC__SSE4_1_SUPPORTED
-		if(decoder->private_->cpuinfo.ia32.sse41) {
-			decoder->private_->local_lpc_restore_signal_64bit = FLAC__lpc_restore_signal_wide_intrin_sse41;
-		}
-# endif
-#endif
-#elif defined FLAC__CPU_X86_64
-		FLAC__ASSERT(decoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_X86_64);
-		/* No useful SSE optimizations yet */
-#endif
-	}
-#endif
-
-	/* from here on, errors are fatal */
-
-	if(!FLAC__bitreader_init(decoder->private_->input, read_callback_, decoder)) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR;
-	}
-
-	decoder->private_->read_callback = read_callback;
-	decoder->private_->seek_callback = seek_callback;
-	decoder->private_->tell_callback = tell_callback;
-	decoder->private_->length_callback = length_callback;
-	decoder->private_->eof_callback = eof_callback;
-	decoder->private_->write_callback = write_callback;
-	decoder->private_->metadata_callback = metadata_callback;
-	decoder->private_->error_callback = error_callback;
-	decoder->private_->client_data = client_data;
-	decoder->private_->fixed_block_size = decoder->private_->next_fixed_block_size = 0;
-	decoder->private_->samples_decoded = 0;
-	decoder->private_->has_stream_info = false;
-	decoder->private_->cached = false;
-
-	decoder->private_->do_md5_checking = decoder->protected_->md5_checking;
-	decoder->private_->is_seeking = false;
-
-	decoder->private_->internal_reset_hack = true; /* so the following reset does not try to rewind the input */
-	if(!FLAC__stream_decoder_reset(decoder)) {
-		/* above call sets the state for us */
-		return FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR;
-	}
-
-	return FLAC__STREAM_DECODER_INIT_STATUS_OK;
-}
-
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
-	FLAC__StreamDecoder *decoder,
-	FLAC__StreamDecoderReadCallback read_callback,
-	FLAC__StreamDecoderSeekCallback seek_callback,
-	FLAC__StreamDecoderTellCallback tell_callback,
-	FLAC__StreamDecoderLengthCallback length_callback,
-	FLAC__StreamDecoderEofCallback eof_callback,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-)
-{
-	return init_stream_internal_(
-		decoder,
-		read_callback,
-		seek_callback,
-		tell_callback,
-		length_callback,
-		eof_callback,
-		write_callback,
-		metadata_callback,
-		error_callback,
-		client_data,
-		/*is_ogg=*/false
-	);
-}
-
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
-	FLAC__StreamDecoder *decoder,
-	FLAC__StreamDecoderReadCallback read_callback,
-	FLAC__StreamDecoderSeekCallback seek_callback,
-	FLAC__StreamDecoderTellCallback tell_callback,
-	FLAC__StreamDecoderLengthCallback length_callback,
-	FLAC__StreamDecoderEofCallback eof_callback,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-)
-{
-	return init_stream_internal_(
-		decoder,
-		read_callback,
-		seek_callback,
-		tell_callback,
-		length_callback,
-		eof_callback,
-		write_callback,
-		metadata_callback,
-		error_callback,
-		client_data,
-		/*is_ogg=*/true
-	);
-}
-
-#if 0
-static FLAC__StreamDecoderInitStatus init_FILE_internal_(
-	FLAC__StreamDecoder *decoder,
-	FILE *file,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data,
-	FLAC__bool is_ogg
-)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != file);
-
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return decoder->protected_->initstate = FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED;
-
-	if(0 == write_callback || 0 == error_callback)
-		return decoder->protected_->initstate = FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS;
-
-	/*
-	 * To make sure that our file does not go unclosed after an error, we
-	 * must assign the FILE pointer before any further error can occur in
-	 * this routine.
-	 */
-	if(file == stdin)
-		file = get_binary_stdin_(); /* just to be safe */
-
-	decoder->private_->file = file;
-
-	return init_stream_internal_(
-		decoder,
-		file_read_callback_,
-		decoder->private_->file == stdin? 0: file_seek_callback_,
-		decoder->private_->file == stdin? 0: file_tell_callback_,
-		decoder->private_->file == stdin? 0: file_length_callback_,
-		file_eof_callback_,
-		write_callback,
-		metadata_callback,
-		error_callback,
-		client_data,
-		is_ogg
-	);
-}
-
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
-	FLAC__StreamDecoder *decoder,
-	FILE *file,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-)
-{
-	return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/false);
-}
-
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
-	FLAC__StreamDecoder *decoder,
-	FILE *file,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-)
-{
-	return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/true);
-}
-
-static FLAC__StreamDecoderInitStatus init_file_internal_(
-	FLAC__StreamDecoder *decoder,
-	const char *filename,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data,
-	FLAC__bool is_ogg
-)
-{
-	FILE *file;
-
-	FLAC__ASSERT(0 != decoder);
-
-	/*
-	 * To make sure that our file does not go unclosed after an error, we
-	 * have to do the same entrance checks here that are later performed
-	 * in FLAC__stream_decoder_init_FILE() before the FILE* is assigned.
-	 */
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return decoder->protected_->initstate = FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED;
-
-	if(0 == write_callback || 0 == error_callback)
-		return decoder->protected_->initstate = FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS;
-
-	file = filename? flac_fopen(filename, "rb") : stdin;
-
-	if(0 == file)
-		return FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE;
-
-	return init_FILE_internal_(decoder, file, write_callback, metadata_callback, error_callback, client_data, is_ogg);
-}
-
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
-	FLAC__StreamDecoder *decoder,
-	const char *filename,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-)
-{
-	return init_file_internal_(decoder, filename, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/false);
-}
-
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
-	FLAC__StreamDecoder *decoder,
-	const char *filename,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-)
-{
-	return init_file_internal_(decoder, filename, write_callback, metadata_callback, error_callback, client_data, /*is_ogg=*/true);
-}
-#endif
-
-FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder)
-{
-	FLAC__bool md5_failed = false;
-	unsigned i;
-
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	if(decoder->protected_->state == FLAC__STREAM_DECODER_UNINITIALIZED)
-		return true;
-
-	/* see the comment in FLAC__stream_decoder_reset() as to why we
-	 * always call FLAC__MD5Final()
-	 */
-	FLAC__MD5Final(decoder->private_->computed_md5sum, &decoder->private_->md5context);
-
-	if(decoder->private_->has_seek_table && 0 != decoder->private_->seek_table.data.seek_table.points) {
-		free(decoder->private_->seek_table.data.seek_table.points);
-		decoder->private_->seek_table.data.seek_table.points = 0;
-		decoder->private_->has_seek_table = false;
-	}
-	FLAC__bitreader_free(decoder->private_->input);
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		/* WATCHOUT:
-		 * FLAC__lpc_restore_signal_asm_ia32_mmx() requires that the
-		 * output arrays have a buffer of up to 3 zeroes in front
-		 * (at negative indices) for alignment purposes; we use 4
-		 * to keep the data well-aligned.
-		 */
-		if(0 != decoder->private_->output[i]) {
-			free(decoder->private_->output[i]-4);
-			decoder->private_->output[i] = 0;
-		}
-		if(0 != decoder->private_->residual_unaligned[i]) {
-			free(decoder->private_->residual_unaligned[i]);
-			decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0;
-		}
-	}
-	decoder->private_->output_capacity = 0;
-	decoder->private_->output_channels = 0;
-
-#if FLAC__HAS_OGG
-	if(decoder->private_->is_ogg)
-		FLAC__ogg_decoder_aspect_finish(&decoder->protected_->ogg_decoder_aspect);
-#endif
-
-	if(0 != decoder->private_->file) {
-		if(decoder->private_->file != stdin)
-			fclose(decoder->private_->file);
-		decoder->private_->file = 0;
-	}
-
-	if(decoder->private_->do_md5_checking) {
-		if(memcmp(decoder->private_->stream_info.data.stream_info.md5sum, decoder->private_->computed_md5sum, 16))
-			md5_failed = true;
-	}
-	decoder->private_->is_seeking = false;
-
-	set_defaults_(decoder);
-
-	decoder->protected_->state = FLAC__STREAM_DECODER_UNINITIALIZED;
-
-	return !md5_failed;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long value)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-#if FLAC__HAS_OGG
-	/* can't check decoder->private_->is_ogg since that's not set until init time */
-	FLAC__ogg_decoder_aspect_set_serial_number(&decoder->protected_->ogg_decoder_aspect, value);
-	return true;
-#else
-	(void)value;
-	return false;
-#endif
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-	decoder->protected_->md5_checking = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	FLAC__ASSERT((unsigned)type <= FLAC__MAX_METADATA_TYPE_CODE);
-	/* double protection */
-	if((unsigned)type > FLAC__MAX_METADATA_TYPE_CODE)
-		return false;
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-	decoder->private_->metadata_filter[type] = true;
-	if(type == FLAC__METADATA_TYPE_APPLICATION)
-		decoder->private_->metadata_filter_ids_count = 0;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4])
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	FLAC__ASSERT(0 != id);
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-
-	if(decoder->private_->metadata_filter[FLAC__METADATA_TYPE_APPLICATION])
-		return true;
-
-	FLAC__ASSERT(0 != decoder->private_->metadata_filter_ids);
-
-	if(decoder->private_->metadata_filter_ids_count == decoder->private_->metadata_filter_ids_capacity) {
-		if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*) safe_realloc_mul_2op_(decoder->private_->metadata_filter_ids, decoder->private_->metadata_filter_ids_capacity, /*times*/2))) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-			return false;
-		}
-		decoder->private_->metadata_filter_ids_capacity *= 2;
-	}
-
-	memcpy(decoder->private_->metadata_filter_ids + decoder->private_->metadata_filter_ids_count * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8));
-	decoder->private_->metadata_filter_ids_count++;
-
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder)
-{
-	unsigned i;
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-	for(i = 0; i < sizeof(decoder->private_->metadata_filter) / sizeof(decoder->private_->metadata_filter[0]); i++)
-		decoder->private_->metadata_filter[i] = true;
-	decoder->private_->metadata_filter_ids_count = 0;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	FLAC__ASSERT((unsigned)type <= FLAC__MAX_METADATA_TYPE_CODE);
-	/* double protection */
-	if((unsigned)type > FLAC__MAX_METADATA_TYPE_CODE)
-		return false;
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-	decoder->private_->metadata_filter[type] = false;
-	if(type == FLAC__METADATA_TYPE_APPLICATION)
-		decoder->private_->metadata_filter_ids_count = 0;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4])
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	FLAC__ASSERT(0 != id);
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-
-	if(!decoder->private_->metadata_filter[FLAC__METADATA_TYPE_APPLICATION])
-		return true;
-
-	FLAC__ASSERT(0 != decoder->private_->metadata_filter_ids);
-
-	if(decoder->private_->metadata_filter_ids_count == decoder->private_->metadata_filter_ids_capacity) {
-		if(0 == (decoder->private_->metadata_filter_ids = (FLAC__byte*) safe_realloc_mul_2op_(decoder->private_->metadata_filter_ids, decoder->private_->metadata_filter_ids_capacity, /*times*/2))) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-			return false;
-		}
-		decoder->private_->metadata_filter_ids_capacity *= 2;
-	}
-
-	memcpy(decoder->private_->metadata_filter_ids + decoder->private_->metadata_filter_ids_count * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8));
-	decoder->private_->metadata_filter_ids_count++;
-
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-	if(decoder->protected_->state != FLAC__STREAM_DECODER_UNINITIALIZED)
-		return false;
-	memset(decoder->private_->metadata_filter, 0, sizeof(decoder->private_->metadata_filter));
-	decoder->private_->metadata_filter_ids_count = 0;
-	return true;
-}
-
-FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->state;
-}
-
-FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder)
-{
-	return FLAC__StreamDecoderStateString[decoder->protected_->state];
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->md5_checking;
-}
-
-FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->private_->has_stream_info? decoder->private_->stream_info.data.stream_info.total_samples : 0;
-}
-
-FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->channels;
-}
-
-FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->channel_assignment;
-}
-
-FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->bits_per_sample;
-}
-
-FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->sample_rate;
-}
-
-FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-	return decoder->protected_->blocksize;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != position);
-
-#if FLAC__HAS_OGG
-	if(decoder->private_->is_ogg)
-		return false;
-#endif
-	if(0 == decoder->private_->tell_callback)
-		return false;
-	if(decoder->private_->tell_callback(decoder, position, decoder->private_->client_data) != FLAC__STREAM_DECODER_TELL_STATUS_OK)
-		return false;
-	/* should never happen since all FLAC frames and metadata blocks are byte aligned, but check just in case */
-	if(!FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input))
-		return false;
-	FLAC__ASSERT(*position >= FLAC__stream_decoder_get_input_bytes_unconsumed(decoder));
-	*position -= FLAC__stream_decoder_get_input_bytes_unconsumed(decoder);
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	decoder->private_->samples_decoded = 0;
-	decoder->private_->do_md5_checking = false;
-
-#if FLAC__HAS_OGG
-	if(decoder->private_->is_ogg)
-		FLAC__ogg_decoder_aspect_flush(&decoder->protected_->ogg_decoder_aspect);
-#endif
-
-	if(!FLAC__bitreader_clear(decoder->private_->input)) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-	decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	if(!FLAC__stream_decoder_flush(decoder)) {
-		/* above call sets the state for us */
-		return false;
-	}
-
-#if FLAC__HAS_OGG
-	/*@@@ could go in !internal_reset_hack block below */
-	if(decoder->private_->is_ogg)
-		FLAC__ogg_decoder_aspect_reset(&decoder->protected_->ogg_decoder_aspect);
-#endif
-
-	/* Rewind if necessary.  If FLAC__stream_decoder_init() is calling us,
-	 * (internal_reset_hack) don't try to rewind since we are already at
-	 * the beginning of the stream and don't want to fail if the input is
-	 * not seekable.
-	 */
-	if(!decoder->private_->internal_reset_hack) {
-		if(decoder->private_->file == stdin)
-			return false; /* can't rewind stdin, reset fails */
-		if(decoder->private_->seek_callback && decoder->private_->seek_callback(decoder, 0, decoder->private_->client_data) == FLAC__STREAM_DECODER_SEEK_STATUS_ERROR)
-			return false; /* seekable and seek fails, reset fails */
-	}
-	else
-		decoder->private_->internal_reset_hack = false;
-
-	decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_METADATA;
-
-	decoder->private_->has_stream_info = false;
-	if(decoder->private_->has_seek_table && 0 != decoder->private_->seek_table.data.seek_table.points) {
-		free(decoder->private_->seek_table.data.seek_table.points);
-		decoder->private_->seek_table.data.seek_table.points = 0;
-		decoder->private_->has_seek_table = false;
-	}
-	decoder->private_->do_md5_checking = decoder->protected_->md5_checking;
-	/*
-	 * This goes in reset() and not flush() because according to the spec, a
-	 * fixed-blocksize stream must stay that way through the whole stream.
-	 */
-	decoder->private_->fixed_block_size = decoder->private_->next_fixed_block_size = 0;
-
-	/* We initialize the FLAC__MD5Context even though we may never use it.  This
-	 * is because md5 checking may be turned on to start and then turned off if
-	 * a seek occurs.  So we init the context here and finalize it in
-	 * FLAC__stream_decoder_finish() to make sure things are always cleaned up
-	 * properly.
-	 */
-	FLAC__MD5Init(&decoder->private_->md5context);
-
-	decoder->private_->first_frame_offset = 0;
-	decoder->private_->unparseable_frame_count = 0;
-
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder)
-{
-	FLAC__bool got_a_frame;
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	while(1) {
-		switch(decoder->protected_->state) {
-			case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
-				if(!find_metadata_(decoder))
-					return false; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_READ_METADATA:
-				if(!read_metadata_(decoder))
-					return false; /* above function sets the status for us */
-				else
-					return true;
-			case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
-				if(!frame_sync_(decoder))
-					return true; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_READ_FRAME:
-				if(!read_frame_(decoder, &got_a_frame, /*do_full_decode=*/true))
-					return false; /* above function sets the status for us */
-				if(got_a_frame)
-					return true; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_END_OF_STREAM:
-			case FLAC__STREAM_DECODER_ABORTED:
-				return true;
-			default:
-				FLAC__ASSERT(0);
-				return false;
-		}
-	}
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	while(1) {
-		switch(decoder->protected_->state) {
-			case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
-				if(!find_metadata_(decoder))
-					return false; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_READ_METADATA:
-				if(!read_metadata_(decoder))
-					return false; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
-			case FLAC__STREAM_DECODER_READ_FRAME:
-			case FLAC__STREAM_DECODER_END_OF_STREAM:
-			case FLAC__STREAM_DECODER_ABORTED:
-				return true;
-			default:
-				FLAC__ASSERT(0);
-				return false;
-		}
-	}
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder)
-{
-	FLAC__bool dummy;
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	while(1) {
-		switch(decoder->protected_->state) {
-			case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
-				if(!find_metadata_(decoder))
-					return false; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_READ_METADATA:
-				if(!read_metadata_(decoder))
-					return false; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
-				if(!frame_sync_(decoder))
-					return true; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_READ_FRAME:
-				if(!read_frame_(decoder, &dummy, /*do_full_decode=*/true))
-					return false; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_END_OF_STREAM:
-			case FLAC__STREAM_DECODER_ABORTED:
-				return true;
-			default:
-				FLAC__ASSERT(0);
-				return false;
-		}
-	}
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder)
-{
-	FLAC__bool got_a_frame;
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->protected_);
-
-	while(1) {
-		switch(decoder->protected_->state) {
-			case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
-			case FLAC__STREAM_DECODER_READ_METADATA:
-				return false; /* above function sets the status for us */
-			case FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC:
-				if(!frame_sync_(decoder))
-					return true; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_READ_FRAME:
-				if(!read_frame_(decoder, &got_a_frame, /*do_full_decode=*/false))
-					return false; /* above function sets the status for us */
-				if(got_a_frame)
-					return true; /* above function sets the status for us */
-				break;
-			case FLAC__STREAM_DECODER_END_OF_STREAM:
-			case FLAC__STREAM_DECODER_ABORTED:
-				return true;
-			default:
-				FLAC__ASSERT(0);
-				return false;
-		}
-	}
-}
-
-FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample)
-{
-	FLAC__uint64 length;
-
-	FLAC__ASSERT(0 != decoder);
-
-	if(
-		decoder->protected_->state != FLAC__STREAM_DECODER_SEARCH_FOR_METADATA &&
-		decoder->protected_->state != FLAC__STREAM_DECODER_READ_METADATA &&
-		decoder->protected_->state != FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC &&
-		decoder->protected_->state != FLAC__STREAM_DECODER_READ_FRAME &&
-		decoder->protected_->state != FLAC__STREAM_DECODER_END_OF_STREAM
-	)
-		return false;
-
-	if(0 == decoder->private_->seek_callback)
-		return false;
-
-	FLAC__ASSERT(decoder->private_->seek_callback);
-	FLAC__ASSERT(decoder->private_->tell_callback);
-	FLAC__ASSERT(decoder->private_->length_callback);
-	FLAC__ASSERT(decoder->private_->eof_callback);
-
-	if(FLAC__stream_decoder_get_total_samples(decoder) > 0 && sample >= FLAC__stream_decoder_get_total_samples(decoder))
-		return false;
-
-	decoder->private_->is_seeking = true;
-
-	/* turn off md5 checking if a seek is attempted */
-	decoder->private_->do_md5_checking = false;
-
-	/* get the file length (currently our algorithm needs to know the length so it's also an error to get FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED) */
-	if(decoder->private_->length_callback(decoder, &length, decoder->private_->client_data) != FLAC__STREAM_DECODER_LENGTH_STATUS_OK) {
-		decoder->private_->is_seeking = false;
-		return false;
-	}
-
-	/* if we haven't finished processing the metadata yet, do that so we have the STREAMINFO, SEEK_TABLE, and first_frame_offset */
-	if(
-		decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_METADATA ||
-		decoder->protected_->state == FLAC__STREAM_DECODER_READ_METADATA
-	) {
-		if(!FLAC__stream_decoder_process_until_end_of_metadata(decoder)) {
-			/* above call sets the state for us */
-			decoder->private_->is_seeking = false;
-			return false;
-		}
-		/* check this again in case we didn't know total_samples the first time */
-		if(FLAC__stream_decoder_get_total_samples(decoder) > 0 && sample >= FLAC__stream_decoder_get_total_samples(decoder)) {
-			decoder->private_->is_seeking = false;
-			return false;
-		}
-	}
-
-	{
-		const FLAC__bool ok =
-#if FLAC__HAS_OGG
-			decoder->private_->is_ogg?
-			seek_to_absolute_sample_ogg_(decoder, length, sample) :
-#endif
-			seek_to_absolute_sample_(decoder, length, sample)
-		;
-		decoder->private_->is_seeking = false;
-		return ok;
-	}
-}
-
-/***********************************************************************
- *
- * Protected class methods
- *
- ***********************************************************************/
-
-unsigned FLAC__stream_decoder_get_input_bytes_unconsumed(const FLAC__StreamDecoder *decoder)
-{
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-	FLAC__ASSERT(!(FLAC__bitreader_get_input_bits_unconsumed(decoder->private_->input) & 7));
-	return FLAC__bitreader_get_input_bits_unconsumed(decoder->private_->input) / 8;
-}
-
-/***********************************************************************
- *
- * Private class methods
- *
- ***********************************************************************/
-
-void set_defaults_(FLAC__StreamDecoder *decoder)
-{
-#if FLAC__HAS_OGG
-	decoder->private_->is_ogg = false;
-#endif
-	decoder->private_->read_callback = 0;
-	decoder->private_->seek_callback = 0;
-	decoder->private_->tell_callback = 0;
-	decoder->private_->length_callback = 0;
-	decoder->private_->eof_callback = 0;
-	decoder->private_->write_callback = 0;
-	decoder->private_->metadata_callback = 0;
-	decoder->private_->error_callback = 0;
-	decoder->private_->client_data = 0;
-
-	memset(decoder->private_->metadata_filter, 0, sizeof(decoder->private_->metadata_filter));
-	decoder->private_->metadata_filter[FLAC__METADATA_TYPE_STREAMINFO] = true;
-	decoder->private_->metadata_filter_ids_count = 0;
-
-	decoder->protected_->md5_checking = false;
-
-#if FLAC__HAS_OGG
-	FLAC__ogg_decoder_aspect_set_defaults(&decoder->protected_->ogg_decoder_aspect);
-#endif
-}
-
-#if 0
-/*
- * This will forcibly set stdin to binary mode (for OSes that require it)
- */
-FILE *get_binary_stdin_(void)
-{
-	/* if something breaks here it is probably due to the presence or
-	 * absence of an underscore before the identifiers 'setmode',
-	 * 'fileno', and/or 'O_BINARY'; check your system header files.
-	 */
-#if defined _MSC_VER || defined __MINGW32__
-	_setmode(_fileno(stdin), _O_BINARY);
-#elif defined __CYGWIN__
-	/* almost certainly not needed for any modern Cygwin, but let's be safe... */
-	setmode(_fileno(stdin), _O_BINARY);
-#elif defined __EMX__
-	setmode(fileno(stdin), O_BINARY);
-#endif
-
-	return stdin;
-}
-#endif
-
-FLAC__bool allocate_output_(FLAC__StreamDecoder *decoder, unsigned size, unsigned channels)
-{
-	unsigned i;
-	FLAC__int32 *tmp;
-
-	if(size <= decoder->private_->output_capacity && channels <= decoder->private_->output_channels)
-		return true;
-
-	/* simply using realloc() is not practical because the number of channels may change mid-stream */
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		if(0 != decoder->private_->output[i]) {
-			free(decoder->private_->output[i]-4);
-			decoder->private_->output[i] = 0;
-		}
-		if(0 != decoder->private_->residual_unaligned[i]) {
-			free(decoder->private_->residual_unaligned[i]);
-			decoder->private_->residual_unaligned[i] = decoder->private_->residual[i] = 0;
-		}
-	}
-
-	for(i = 0; i < channels; i++) {
-		/* WATCHOUT:
-		 * FLAC__lpc_restore_signal_asm_ia32_mmx() requires that the
-		 * output arrays have a buffer of up to 3 zeroes in front
-		 * (at negative indices) for alignment purposes; we use 4
-		 * to keep the data well-aligned.
-		 */
-		tmp = (FLAC__int32*) safe_malloc_muladd2_(sizeof(FLAC__int32), /*times (*/size, /*+*/4/*)*/);
-		if(tmp == 0) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-			return false;
-		}
-		memset(tmp, 0, sizeof(FLAC__int32)*4);
-		decoder->private_->output[i] = tmp + 4;
-
-		if(!FLAC__memory_alloc_aligned_int32_array(size, &decoder->private_->residual_unaligned[i], &decoder->private_->residual[i])) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-			return false;
-		}
-	}
-
-	decoder->private_->output_capacity = size;
-	decoder->private_->output_channels = channels;
-
-	return true;
-}
-
-FLAC__bool has_id_filtered_(FLAC__StreamDecoder *decoder, FLAC__byte *id)
-{
-	size_t i;
-
-	FLAC__ASSERT(0 != decoder);
-	FLAC__ASSERT(0 != decoder->private_);
-
-	for(i = 0; i < decoder->private_->metadata_filter_ids_count; i++)
-		if(0 == memcmp(decoder->private_->metadata_filter_ids + i * (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8), id, (FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8)))
-			return true;
-
-	return false;
-}
-
-FLAC__bool find_metadata_(FLAC__StreamDecoder *decoder)
-{
-	FLAC__uint32 x;
-	unsigned i, id_;
-	FLAC__bool first = true;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	for(i = id_ = 0; i < 4; ) {
-		if(decoder->private_->cached) {
-			x = (FLAC__uint32)decoder->private_->lookahead;
-			decoder->private_->cached = false;
-		}
-		else {
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-				return false; /* read_callback_ sets the state for us */
-		}
-		if(x == FLAC__STREAM_SYNC_STRING[i]) {
-			first = true;
-			i++;
-			id_ = 0;
-			continue;
-		}
-
-		if(id_ >= 3)
-			return false;
-
-		if(x == ID3V2_TAG_[id_]) {
-			id_++;
-			i = 0;
-			if(id_ == 3) {
-				if(!skip_id3v2_tag_(decoder))
-					return false; /* skip_id3v2_tag_ sets the state for us */
-			}
-			continue;
-		}
-		id_ = 0;
-		if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */
-			decoder->private_->header_warmup[0] = (FLAC__byte)x;
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-				return false; /* read_callback_ sets the state for us */
-
-			/* we have to check if we just read two 0xff's in a row; the second may actually be the beginning of the sync code */
-			/* else we have to check if the second byte is the end of a sync code */
-			if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */
-				decoder->private_->lookahead = (FLAC__byte)x;
-				decoder->private_->cached = true;
-			}
-			else if(x >> 1 == 0x7c) { /* MAGIC NUMBER for the last 6 sync bits and reserved 7th bit */
-				decoder->private_->header_warmup[1] = (FLAC__byte)x;
-				decoder->protected_->state = FLAC__STREAM_DECODER_READ_FRAME;
-				return true;
-			}
-		}
-		i = 0;
-		if(first) {
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-			first = false;
-		}
-	}
-
-	decoder->protected_->state = FLAC__STREAM_DECODER_READ_METADATA;
-	return true;
-}
-
-FLAC__bool read_metadata_(FLAC__StreamDecoder *decoder)
-{
-	FLAC__bool is_last;
-	FLAC__uint32 i, x, type, length;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_IS_LAST_LEN))
-		return false; /* read_callback_ sets the state for us */
-	is_last = x? true : false;
-
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &type, FLAC__STREAM_METADATA_TYPE_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &length, FLAC__STREAM_METADATA_LENGTH_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	if(type == FLAC__METADATA_TYPE_STREAMINFO) {
-		if(!read_metadata_streaminfo_(decoder, is_last, length))
-			return false;
-
-		decoder->private_->has_stream_info = true;
-		if(0 == memcmp(decoder->private_->stream_info.data.stream_info.md5sum, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16))
-			decoder->private_->do_md5_checking = false;
-		if(!decoder->private_->is_seeking && decoder->private_->metadata_filter[FLAC__METADATA_TYPE_STREAMINFO] && decoder->private_->metadata_callback)
-			decoder->private_->metadata_callback(decoder, &decoder->private_->stream_info, decoder->private_->client_data);
-	}
-	else if(type == FLAC__METADATA_TYPE_SEEKTABLE) {
-		if(!read_metadata_seektable_(decoder, is_last, length))
-			return false;
-
-		decoder->private_->has_seek_table = true;
-		if(!decoder->private_->is_seeking && decoder->private_->metadata_filter[FLAC__METADATA_TYPE_SEEKTABLE] && decoder->private_->metadata_callback)
-			decoder->private_->metadata_callback(decoder, &decoder->private_->seek_table, decoder->private_->client_data);
-	}
-	else {
-		FLAC__bool skip_it = !decoder->private_->metadata_filter[type];
-		unsigned real_length = length;
-		FLAC__StreamMetadata block;
-
-		memset(&block, 0, sizeof(block));
-		block.is_last = is_last;
-		block.type = (FLAC__MetadataType)type;
-		block.length = length;
-
-		if(type == FLAC__METADATA_TYPE_APPLICATION) {
-			if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, block.data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8))
-				return false; /* read_callback_ sets the state for us */
-
-			if(real_length < FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8) { /* underflow check */
-				decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;/*@@@@@@ maybe wrong error? need to resync?*/
-				return false;
-			}
-
-			real_length -= FLAC__STREAM_METADATA_APPLICATION_ID_LEN/8;
-
-			if(decoder->private_->metadata_filter_ids_count > 0 && has_id_filtered_(decoder, block.data.application.id))
-				skip_it = !skip_it;
-		}
-
-		if(skip_it) {
-			if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, real_length))
-				return false; /* read_callback_ sets the state for us */
-		}
-		else {
-			FLAC__bool ok = true;
-			switch(type) {
-				case FLAC__METADATA_TYPE_PADDING:
-					/* skip the padding bytes */
-					if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, real_length))
-						ok = false; /* read_callback_ sets the state for us */
-					break;
-				case FLAC__METADATA_TYPE_APPLICATION:
-					/* remember, we read the ID already */
-					if(real_length > 0) {
-						if(0 == (block.data.application.data = (FLAC__byte*) malloc(real_length))) {
-							decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-							ok = false;
-						}
-						else if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, block.data.application.data, real_length))
-							ok = false; /* read_callback_ sets the state for us */
-					}
-					else
-						block.data.application.data = 0;
-					break;
-				case FLAC__METADATA_TYPE_VORBIS_COMMENT:
-					if(!read_metadata_vorbiscomment_(decoder, &block.data.vorbis_comment, real_length))
-						ok = false;
-					break;
-				case FLAC__METADATA_TYPE_CUESHEET:
-					if(!read_metadata_cuesheet_(decoder, &block.data.cue_sheet))
-						ok = false;
-					break;
-				case FLAC__METADATA_TYPE_PICTURE:
-					if(!read_metadata_picture_(decoder, &block.data.picture))
-						ok = false;
-					break;
-				case FLAC__METADATA_TYPE_STREAMINFO:
-				case FLAC__METADATA_TYPE_SEEKTABLE:
-					FLAC__ASSERT(0);
-					break;
-				default:
-					if(real_length > 0) {
-						if(0 == (block.data.unknown.data = (FLAC__byte*) malloc(real_length))) {
-							decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-							ok = false;
-						}
-						else if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, block.data.unknown.data, real_length))
-							ok = false; /* read_callback_ sets the state for us */
-					}
-					else
-						block.data.unknown.data = 0;
-					break;
-			}
-			if(ok && !decoder->private_->is_seeking && decoder->private_->metadata_callback)
-				decoder->private_->metadata_callback(decoder, &block, decoder->private_->client_data);
-
-			/* now we have to free any malloc()ed data in the block */
-			switch(type) {
-				case FLAC__METADATA_TYPE_PADDING:
-					break;
-				case FLAC__METADATA_TYPE_APPLICATION:
-					if(0 != block.data.application.data)
-						free(block.data.application.data);
-					break;
-				case FLAC__METADATA_TYPE_VORBIS_COMMENT:
-					if(0 != block.data.vorbis_comment.vendor_string.entry)
-						free(block.data.vorbis_comment.vendor_string.entry);
-					if(block.data.vorbis_comment.num_comments > 0)
-						for(i = 0; i < block.data.vorbis_comment.num_comments; i++)
-							if(0 != block.data.vorbis_comment.comments[i].entry)
-								free(block.data.vorbis_comment.comments[i].entry);
-					if(0 != block.data.vorbis_comment.comments)
-						free(block.data.vorbis_comment.comments);
-					break;
-				case FLAC__METADATA_TYPE_CUESHEET:
-					if(block.data.cue_sheet.num_tracks > 0)
-						for(i = 0; i < block.data.cue_sheet.num_tracks; i++)
-							if(0 != block.data.cue_sheet.tracks[i].indices)
-								free(block.data.cue_sheet.tracks[i].indices);
-					if(0 != block.data.cue_sheet.tracks)
-						free(block.data.cue_sheet.tracks);
-					break;
-				case FLAC__METADATA_TYPE_PICTURE:
-					if(0 != block.data.picture.mime_type)
-						free(block.data.picture.mime_type);
-					if(0 != block.data.picture.description)
-						free(block.data.picture.description);
-					if(0 != block.data.picture.data)
-						free(block.data.picture.data);
-					break;
-				case FLAC__METADATA_TYPE_STREAMINFO:
-				case FLAC__METADATA_TYPE_SEEKTABLE:
-					FLAC__ASSERT(0);
-				default:
-					if(0 != block.data.unknown.data)
-						free(block.data.unknown.data);
-					break;
-			}
-
-			if(!ok) /* anything that unsets "ok" should also make sure decoder->protected_->state is updated */
-				return false;
-		}
-	}
-
-	if(is_last) {
-		/* if this fails, it's OK, it's just a hint for the seek routine */
-		if(!FLAC__stream_decoder_get_decode_position(decoder, &decoder->private_->first_frame_offset))
-			decoder->private_->first_frame_offset = 0;
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-	}
-
-	return true;
-}
-
-FLAC__bool read_metadata_streaminfo_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length)
-{
-	FLAC__uint32 x;
-	unsigned bits, used_bits = 0;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	decoder->private_->stream_info.type = FLAC__METADATA_TYPE_STREAMINFO;
-	decoder->private_->stream_info.is_last = is_last;
-	decoder->private_->stream_info.length = length;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, bits))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.min_blocksize = x;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.max_blocksize = x;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.min_framesize = x;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.max_framesize = x;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.sample_rate = x;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.channels = x+1;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN;
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	decoder->private_->stream_info.data.stream_info.bits_per_sample = x+1;
-	used_bits += bits;
-
-	bits = FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN;
-	if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &decoder->private_->stream_info.data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN))
-		return false; /* read_callback_ sets the state for us */
-	used_bits += bits;
-
-	if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, decoder->private_->stream_info.data.stream_info.md5sum, 16))
-		return false; /* read_callback_ sets the state for us */
-	used_bits += 16*8;
-
-	/* skip the rest of the block */
-	FLAC__ASSERT(used_bits % 8 == 0);
-	length -= (used_bits / 8);
-	if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, length))
-		return false; /* read_callback_ sets the state for us */
-
-	return true;
-}
-
-FLAC__bool read_metadata_seektable_(FLAC__StreamDecoder *decoder, FLAC__bool is_last, unsigned length)
-{
-	FLAC__uint32 i, x;
-	FLAC__uint64 xx;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	decoder->private_->seek_table.type = FLAC__METADATA_TYPE_SEEKTABLE;
-	decoder->private_->seek_table.is_last = is_last;
-	decoder->private_->seek_table.length = length;
-
-	decoder->private_->seek_table.data.seek_table.num_points = length / FLAC__STREAM_METADATA_SEEKPOINT_LENGTH;
-
-	/* use realloc since we may pass through here several times (e.g. after seeking) */
-	if(0 == (decoder->private_->seek_table.data.seek_table.points = (FLAC__StreamMetadata_SeekPoint*) safe_realloc_mul_2op_(decoder->private_->seek_table.data.seek_table.points, decoder->private_->seek_table.data.seek_table.num_points, /*times*/sizeof(FLAC__StreamMetadata_SeekPoint)))) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-	for(i = 0; i < decoder->private_->seek_table.data.seek_table.num_points; i++) {
-		if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &xx, FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN))
-			return false; /* read_callback_ sets the state for us */
-		decoder->private_->seek_table.data.seek_table.points[i].sample_number = xx;
-
-		if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &xx, FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN))
-			return false; /* read_callback_ sets the state for us */
-		decoder->private_->seek_table.data.seek_table.points[i].stream_offset = xx;
-
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN))
-			return false; /* read_callback_ sets the state for us */
-		decoder->private_->seek_table.data.seek_table.points[i].frame_samples = x;
-	}
-	length -= (decoder->private_->seek_table.data.seek_table.num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH);
-	/* if there is a partial point left, skip over it */
-	if(length > 0) {
-		/*@@@ do a send_error_to_client_() here?  there's an argument for either way */
-		if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, length))
-			return false; /* read_callback_ sets the state for us */
-	}
-
-	return true;
-}
-
-FLAC__bool read_metadata_vorbiscomment_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_VorbisComment *obj, unsigned length)
-{
-	FLAC__uint32 i;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	/* read vendor string */
-	if (length >= 8) {
-		length -= 8; /* vendor string length + num comments entries alone take 8 bytes */
-		FLAC__ASSERT(FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN == 32);
-		if (!FLAC__bitreader_read_uint32_little_endian(decoder->private_->input, &obj->vendor_string.length))
-			return false; /* read_callback_ sets the state for us */
-		if (obj->vendor_string.length > 0) {
-			if (length < obj->vendor_string.length) {
-				obj->vendor_string.length = 0;
-				obj->vendor_string.entry = 0;
-				goto skip;
-			}
-			else
-				length -= obj->vendor_string.length;
-			if (0 == (obj->vendor_string.entry = (FLAC__byte*) safe_malloc_add_2op_(obj->vendor_string.length, /*+*/1))) {
-				decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-				return false;
-			}
-			if (!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->vendor_string.entry, obj->vendor_string.length))
-				return false; /* read_callback_ sets the state for us */
-			obj->vendor_string.entry[obj->vendor_string.length] = '\0';
-		}
-		else
-			obj->vendor_string.entry = 0;
-
-		/* read num comments */
-		FLAC__ASSERT(FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN == 32);
-		if (!FLAC__bitreader_read_uint32_little_endian(decoder->private_->input, &obj->num_comments))
-			return false; /* read_callback_ sets the state for us */
-
-		/* read comments */
-		if (obj->num_comments > 0) {
-			if (0 == (obj->comments = (FLAC__StreamMetadata_VorbisComment_Entry*) safe_malloc_mul_2op_p(obj->num_comments, /*times*/sizeof(FLAC__StreamMetadata_VorbisComment_Entry)))) {
-				decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-				return false;
-			}
-			for (i = 0; i < obj->num_comments; i++) {
-				FLAC__ASSERT(FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN == 32);
-				if (length < 4) {
-					obj->num_comments = i;
-					goto skip;
-				}
-				else
-					length -= 4;
-				if (!FLAC__bitreader_read_uint32_little_endian(decoder->private_->input, &obj->comments[i].length))
-					return false; /* read_callback_ sets the state for us */
-				if (obj->comments[i].length > 0) {
-					if (length < obj->comments[i].length) {
-						obj->comments[i].length = 0;
-						obj->comments[i].entry = 0;
-						obj->num_comments = i;
-						goto skip;
-					}
-					else
-						length -= obj->comments[i].length;
-					if (0 == (obj->comments[i].entry = (FLAC__byte*) safe_malloc_add_2op_(obj->comments[i].length, /*+*/1))) {
-						decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-						return false;
-					}
-					if (!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->comments[i].entry, obj->comments[i].length))
-						return false; /* read_callback_ sets the state for us */
-					obj->comments[i].entry[obj->comments[i].length] = '\0';
-				}
-				else
-					obj->comments[i].entry = 0;
-			}
-		}
-		else
-			obj->comments = 0;
-	}
-
-  skip:
-	if (length > 0) {
-		/* This will only happen on files with invalid data in comments */
-		if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, length))
-			return false; /* read_callback_ sets the state for us */
-	}
-
-	return true;
-}
-
-FLAC__bool read_metadata_cuesheet_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_CueSheet *obj)
-{
-	FLAC__uint32 i, j, x;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	memset(obj, 0, sizeof(FLAC__StreamMetadata_CueSheet));
-
-	FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN % 8 == 0);
-	if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, (FLAC__byte*)obj->media_catalog_number, FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN/8))
-		return false; /* read_callback_ sets the state for us */
-
-	if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &obj->lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN))
-		return false; /* read_callback_ sets the state for us */
-	obj->is_cd = x? true : false;
-
-	if(!FLAC__bitreader_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN))
-		return false; /* read_callback_ sets the state for us */
-	obj->num_tracks = x;
-
-	if(obj->num_tracks > 0) {
-		if(0 == (obj->tracks = (FLAC__StreamMetadata_CueSheet_Track*) safe_calloc_(obj->num_tracks, sizeof(FLAC__StreamMetadata_CueSheet_Track)))) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-			return false;
-		}
-		for(i = 0; i < obj->num_tracks; i++) {
-			FLAC__StreamMetadata_CueSheet_Track *track = &obj->tracks[i];
-			if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &track->offset, FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN))
-				return false; /* read_callback_ sets the state for us */
-
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN))
-				return false; /* read_callback_ sets the state for us */
-			track->number = (FLAC__byte)x;
-
-			FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN % 8 == 0);
-			if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, (FLAC__byte*)track->isrc, FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN/8))
-				return false; /* read_callback_ sets the state for us */
-
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN))
-				return false; /* read_callback_ sets the state for us */
-			track->type = x;
-
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN))
-				return false; /* read_callback_ sets the state for us */
-			track->pre_emphasis = x;
-
-			if(!FLAC__bitreader_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN))
-				return false; /* read_callback_ sets the state for us */
-
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN))
-				return false; /* read_callback_ sets the state for us */
-			track->num_indices = (FLAC__byte)x;
-
-			if(track->num_indices > 0) {
-				if(0 == (track->indices = (FLAC__StreamMetadata_CueSheet_Index*) safe_calloc_(track->num_indices, sizeof(FLAC__StreamMetadata_CueSheet_Index)))) {
-					decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-					return false;
-				}
-				for(j = 0; j < track->num_indices; j++) {
-					FLAC__StreamMetadata_CueSheet_Index *indx = &track->indices[j];
-					if(!FLAC__bitreader_read_raw_uint64(decoder->private_->input, &indx->offset, FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN))
-						return false; /* read_callback_ sets the state for us */
-
-					if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN))
-						return false; /* read_callback_ sets the state for us */
-					indx->number = (FLAC__byte)x;
-
-					if(!FLAC__bitreader_skip_bits_no_crc(decoder->private_->input, FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN))
-						return false; /* read_callback_ sets the state for us */
-				}
-			}
-		}
-	}
-
-	return true;
-}
-
-FLAC__bool read_metadata_picture_(FLAC__StreamDecoder *decoder, FLAC__StreamMetadata_Picture *obj)
-{
-	FLAC__uint32 x;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	/* read type */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_PICTURE_TYPE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	obj->type = (FLAC__StreamMetadata_Picture_Type) x;
-
-	/* read MIME type */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN))
-		return false; /* read_callback_ sets the state for us */
-	if(0 == (obj->mime_type = (char*) safe_malloc_add_2op_(x, /*+*/1))) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-	if(x > 0) {
-		if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, (FLAC__byte*)obj->mime_type, x))
-			return false; /* read_callback_ sets the state for us */
-	}
-	obj->mime_type[x] = '\0';
-
-	/* read description */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN))
-		return false; /* read_callback_ sets the state for us */
-	if(0 == (obj->description = (FLAC__byte*) safe_malloc_add_2op_(x, /*+*/1))) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-	if(x > 0) {
-		if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->description, x))
-			return false; /* read_callback_ sets the state for us */
-	}
-	obj->description[x] = '\0';
-
-	/* read width */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->width, FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	/* read height */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->height, FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	/* read depth */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->depth, FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	/* read colors */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &obj->colors, FLAC__STREAM_METADATA_PICTURE_COLORS_LEN))
-		return false; /* read_callback_ sets the state for us */
-
-	/* read data */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &(obj->data_length), FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN))
-		return false; /* read_callback_ sets the state for us */
-	if(0 == (obj->data = (FLAC__byte*) safe_malloc_(obj->data_length))) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-	if(obj->data_length > 0) {
-		if(!FLAC__bitreader_read_byte_block_aligned_no_crc(decoder->private_->input, obj->data, obj->data_length))
-			return false; /* read_callback_ sets the state for us */
-	}
-
-	return true;
-}
-
-FLAC__bool skip_id3v2_tag_(FLAC__StreamDecoder *decoder)
-{
-	FLAC__uint32 x;
-	unsigned i, skip;
-
-	/* skip the version and flags bytes */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 24))
-		return false; /* read_callback_ sets the state for us */
-	/* get the size (in bytes) to skip */
-	skip = 0;
-	for(i = 0; i < 4; i++) {
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-			return false; /* read_callback_ sets the state for us */
-		skip <<= 7;
-		skip |= (x & 0x7f);
-	}
-	/* skip the rest of the tag */
-	if(!FLAC__bitreader_skip_byte_block_aligned_no_crc(decoder->private_->input, skip))
-		return false; /* read_callback_ sets the state for us */
-	return true;
-}
-
-FLAC__bool frame_sync_(FLAC__StreamDecoder *decoder)
-{
-	FLAC__uint32 x;
-	FLAC__bool first = true;
-
-	/* If we know the total number of samples in the stream, stop if we've read that many. */
-	/* This will stop us, for example, from wasting time trying to sync on an ID3V1 tag. */
-	if(FLAC__stream_decoder_get_total_samples(decoder) > 0) {
-		if(decoder->private_->samples_decoded >= FLAC__stream_decoder_get_total_samples(decoder)) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_END_OF_STREAM;
-			return true;
-		}
-	}
-
-	/* make sure we're byte aligned */
-	if(!FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)) {
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__bitreader_bits_left_for_byte_alignment(decoder->private_->input)))
-			return false; /* read_callback_ sets the state for us */
-	}
-
-	while(1) {
-		if(decoder->private_->cached) {
-			x = (FLAC__uint32)decoder->private_->lookahead;
-			decoder->private_->cached = false;
-		}
-		else {
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-				return false; /* read_callback_ sets the state for us */
-		}
-		if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */
-			decoder->private_->header_warmup[0] = (FLAC__byte)x;
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-				return false; /* read_callback_ sets the state for us */
-
-			/* we have to check if we just read two 0xff's in a row; the second may actually be the beginning of the sync code */
-			/* else we have to check if the second byte is the end of a sync code */
-			if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */
-				decoder->private_->lookahead = (FLAC__byte)x;
-				decoder->private_->cached = true;
-			}
-			else if(x >> 1 == 0x7c) { /* MAGIC NUMBER for the last 6 sync bits and reserved 7th bit */
-				decoder->private_->header_warmup[1] = (FLAC__byte)x;
-				decoder->protected_->state = FLAC__STREAM_DECODER_READ_FRAME;
-				return true;
-			}
-		}
-		if(first) {
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-			first = false;
-		}
-	}
-
-	return true;
-}
-
-FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FLAC__bool do_full_decode)
-{
-	unsigned channel;
-	unsigned i;
-	FLAC__int32 mid, side;
-	unsigned frame_crc; /* the one we calculate from the input stream */
-	FLAC__uint32 x;
-
-	*got_a_frame = false;
-
-	/* init the CRC */
-	frame_crc = 0;
-	frame_crc = FLAC__CRC16_UPDATE(decoder->private_->header_warmup[0], frame_crc);
-	frame_crc = FLAC__CRC16_UPDATE(decoder->private_->header_warmup[1], frame_crc);
-	FLAC__bitreader_reset_read_crc16(decoder->private_->input, (FLAC__uint16)frame_crc);
-
-	if(!read_frame_header_(decoder))
-		return false;
-	if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means we didn't sync on a valid header */
-		return true;
-	if(!allocate_output_(decoder, decoder->private_->frame.header.blocksize, decoder->private_->frame.header.channels))
-		return false;
-	for(channel = 0; channel < decoder->private_->frame.header.channels; channel++) {
-		/*
-		 * first figure the correct bits-per-sample of the subframe
-		 */
-		unsigned bps = decoder->private_->frame.header.bits_per_sample;
-		switch(decoder->private_->frame.header.channel_assignment) {
-			case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT:
-				/* no adjustment needed */
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE:
-				FLAC__ASSERT(decoder->private_->frame.header.channels == 2);
-				if(channel == 1)
-					bps++;
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE:
-				FLAC__ASSERT(decoder->private_->frame.header.channels == 2);
-				if(channel == 0)
-					bps++;
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE:
-				FLAC__ASSERT(decoder->private_->frame.header.channels == 2);
-				if(channel == 1)
-					bps++;
-				break;
-			default:
-				FLAC__ASSERT(0);
-		}
-		/*
-		 * now read it
-		 */
-		if(!read_subframe_(decoder, channel, bps, do_full_decode))
-			return false;
-		if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption */
-			return true;
-	}
-	if(!read_zero_padding_(decoder))
-		return false;
-	if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption (i.e. "zero bits" were not all zeroes) */
-		return true;
-
-	/*
-	 * Read the frame CRC-16 from the footer and check
-	 */
-	frame_crc = FLAC__bitreader_get_read_crc16(decoder->private_->input);
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, FLAC__FRAME_FOOTER_CRC_LEN))
-		return false; /* read_callback_ sets the state for us */
-	if(frame_crc == x) {
-		if(do_full_decode) {
-			/* Undo any special channel coding */
-			switch(decoder->private_->frame.header.channel_assignment) {
-				case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT:
-					/* do nothing */
-					break;
-				case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE:
-					FLAC__ASSERT(decoder->private_->frame.header.channels == 2);
-					for(i = 0; i < decoder->private_->frame.header.blocksize; i++)
-						decoder->private_->output[1][i] = decoder->private_->output[0][i] - decoder->private_->output[1][i];
-					break;
-				case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE:
-					FLAC__ASSERT(decoder->private_->frame.header.channels == 2);
-					for(i = 0; i < decoder->private_->frame.header.blocksize; i++)
-						decoder->private_->output[0][i] += decoder->private_->output[1][i];
-					break;
-				case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE:
-					FLAC__ASSERT(decoder->private_->frame.header.channels == 2);
-					for(i = 0; i < decoder->private_->frame.header.blocksize; i++) {
-#if 1
-						mid = decoder->private_->output[0][i];
-						side = decoder->private_->output[1][i];
-						mid <<= 1;
-						mid |= (side & 1); /* i.e. if 'side' is odd... */
-						decoder->private_->output[0][i] = (mid + side) >> 1;
-						decoder->private_->output[1][i] = (mid - side) >> 1;
-#else
-						/* OPT: without 'side' temp variable */
-						mid = (decoder->private_->output[0][i] << 1) | (decoder->private_->output[1][i] & 1); /* i.e. if 'side' is odd... */
-						decoder->private_->output[0][i] = (mid + decoder->private_->output[1][i]) >> 1;
-						decoder->private_->output[1][i] = (mid - decoder->private_->output[1][i]) >> 1;
-#endif
-					}
-					break;
-				default:
-					FLAC__ASSERT(0);
-					break;
-			}
-		}
-	}
-	else {
-		/* Bad frame, emit error and zero the output signal */
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH);
-		if(do_full_decode) {
-			for(channel = 0; channel < decoder->private_->frame.header.channels; channel++) {
-				memset(decoder->private_->output[channel], 0, sizeof(FLAC__int32) * decoder->private_->frame.header.blocksize);
-			}
-		}
-	}
-
-	*got_a_frame = true;
-
-	/* we wait to update fixed_block_size until here, when we're sure we've got a proper frame and hence a correct blocksize */
-	if(decoder->private_->next_fixed_block_size)
-		decoder->private_->fixed_block_size = decoder->private_->next_fixed_block_size;
-
-	/* put the latest values into the public section of the decoder instance */
-	decoder->protected_->channels = decoder->private_->frame.header.channels;
-	decoder->protected_->channel_assignment = decoder->private_->frame.header.channel_assignment;
-	decoder->protected_->bits_per_sample = decoder->private_->frame.header.bits_per_sample;
-	decoder->protected_->sample_rate = decoder->private_->frame.header.sample_rate;
-	decoder->protected_->blocksize = decoder->private_->frame.header.blocksize;
-
-	FLAC__ASSERT(decoder->private_->frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER);
-	decoder->private_->samples_decoded = decoder->private_->frame.header.number.sample_number + decoder->private_->frame.header.blocksize;
-
-	/* write it */
-	if(do_full_decode) {
-		if(write_audio_frame_to_client_(decoder, &decoder->private_->frame, (const FLAC__int32 * const *)decoder->private_->output) != FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE)
-			return false;
-	}
-
-	decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-	return true;
-}
-
-FLAC__bool read_frame_header_(FLAC__StreamDecoder *decoder)
-{
-	FLAC__uint32 x;
-	FLAC__uint64 xx;
-	unsigned i, blocksize_hint = 0, sample_rate_hint = 0;
-	FLAC__byte crc8, raw_header[16]; /* MAGIC NUMBER based on the maximum frame header size, including CRC */
-	unsigned raw_header_len;
-	FLAC__bool is_unparseable = false;
-
-	FLAC__ASSERT(FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input));
-
-	/* init the raw header with the saved bits from synchronization */
-	raw_header[0] = decoder->private_->header_warmup[0];
-	raw_header[1] = decoder->private_->header_warmup[1];
-	raw_header_len = 2;
-
-	/* check to make sure that reserved bit is 0 */
-	if(raw_header[1] & 0x02) /* MAGIC NUMBER */
-		is_unparseable = true;
-
-	/*
-	 * Note that along the way as we read the header, we look for a sync
-	 * code inside.  If we find one it would indicate that our original
-	 * sync was bad since there cannot be a sync code in a valid header.
-	 *
-	 * Three kinds of things can go wrong when reading the frame header:
-	 *  1) We may have sync'ed incorrectly and not landed on a frame header.
-	 *     If we don't find a sync code, it can end up looking like we read
-	 *     a valid but unparseable header, until getting to the frame header
-	 *     CRC.  Even then we could get a false positive on the CRC.
-	 *  2) We may have sync'ed correctly but on an unparseable frame (from a
-	 *     future encoder).
-	 *  3) We may be on a damaged frame which appears valid but unparseable.
-	 *
-	 * For all these reasons, we try and read a complete frame header as
-	 * long as it seems valid, even if unparseable, up until the frame
-	 * header CRC.
-	 */
-
-	/*
-	 * read in the raw header as bytes so we can CRC it, and parse it on the way
-	 */
-	for(i = 0; i < 2; i++) {
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-			return false; /* read_callback_ sets the state for us */
-		if(x == 0xff) { /* MAGIC NUMBER for the first 8 frame sync bits */
-			/* if we get here it means our original sync was erroneous since the sync code cannot appear in the header */
-			decoder->private_->lookahead = (FLAC__byte)x;
-			decoder->private_->cached = true;
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			return true;
-		}
-		raw_header[raw_header_len++] = (FLAC__byte)x;
-	}
-
-	switch(x = raw_header[2] >> 4) {
-		case 0:
-			is_unparseable = true;
-			break;
-		case 1:
-			decoder->private_->frame.header.blocksize = 192;
-			break;
-		case 2:
-		case 3:
-		case 4:
-		case 5:
-			decoder->private_->frame.header.blocksize = 576 << (x-2);
-			break;
-		case 6:
-		case 7:
-			blocksize_hint = x;
-			break;
-		case 8:
-		case 9:
-		case 10:
-		case 11:
-		case 12:
-		case 13:
-		case 14:
-		case 15:
-			decoder->private_->frame.header.blocksize = 256 << (x-8);
-			break;
-		default:
-			FLAC__ASSERT(0);
-			break;
-	}
-
-	switch(x = raw_header[2] & 0x0f) {
-		case 0:
-			if(decoder->private_->has_stream_info)
-				decoder->private_->frame.header.sample_rate = decoder->private_->stream_info.data.stream_info.sample_rate;
-			else
-				is_unparseable = true;
-			break;
-		case 1:
-			decoder->private_->frame.header.sample_rate = 88200;
-			break;
-		case 2:
-			decoder->private_->frame.header.sample_rate = 176400;
-			break;
-		case 3:
-			decoder->private_->frame.header.sample_rate = 192000;
-			break;
-		case 4:
-			decoder->private_->frame.header.sample_rate = 8000;
-			break;
-		case 5:
-			decoder->private_->frame.header.sample_rate = 16000;
-			break;
-		case 6:
-			decoder->private_->frame.header.sample_rate = 22050;
-			break;
-		case 7:
-			decoder->private_->frame.header.sample_rate = 24000;
-			break;
-		case 8:
-			decoder->private_->frame.header.sample_rate = 32000;
-			break;
-		case 9:
-			decoder->private_->frame.header.sample_rate = 44100;
-			break;
-		case 10:
-			decoder->private_->frame.header.sample_rate = 48000;
-			break;
-		case 11:
-			decoder->private_->frame.header.sample_rate = 96000;
-			break;
-		case 12:
-		case 13:
-		case 14:
-			sample_rate_hint = x;
-			break;
-		case 15:
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			return true;
-		default:
-			FLAC__ASSERT(0);
-	}
-
-	x = (unsigned)(raw_header[3] >> 4);
-	if(x & 8) {
-		decoder->private_->frame.header.channels = 2;
-		switch(x & 7) {
-			case 0:
-				decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE;
-				break;
-			case 1:
-				decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE;
-				break;
-			case 2:
-				decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_MID_SIDE;
-				break;
-			default:
-				is_unparseable = true;
-				break;
-		}
-	}
-	else {
-		decoder->private_->frame.header.channels = (unsigned)x + 1;
-		decoder->private_->frame.header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT;
-	}
-
-	switch(x = (unsigned)(raw_header[3] & 0x0e) >> 1) {
-		case 0:
-			if(decoder->private_->has_stream_info)
-				decoder->private_->frame.header.bits_per_sample = decoder->private_->stream_info.data.stream_info.bits_per_sample;
-			else
-				is_unparseable = true;
-			break;
-		case 1:
-			decoder->private_->frame.header.bits_per_sample = 8;
-			break;
-		case 2:
-			decoder->private_->frame.header.bits_per_sample = 12;
-			break;
-		case 4:
-			decoder->private_->frame.header.bits_per_sample = 16;
-			break;
-		case 5:
-			decoder->private_->frame.header.bits_per_sample = 20;
-			break;
-		case 6:
-			decoder->private_->frame.header.bits_per_sample = 24;
-			break;
-		case 3:
-		case 7:
-			is_unparseable = true;
-			break;
-		default:
-			FLAC__ASSERT(0);
-			break;
-	}
-
-	/* check to make sure that reserved bit is 0 */
-	if(raw_header[3] & 0x01) /* MAGIC NUMBER */
-		is_unparseable = true;
-
-	/* read the frame's starting sample number (or frame number as the case may be) */
-	if(
-		raw_header[1] & 0x01 ||
-		/*@@@ this clause is a concession to the old way of doing variable blocksize; the only known implementation is flake and can probably be removed without inconveniencing anyone */
-		(decoder->private_->has_stream_info && decoder->private_->stream_info.data.stream_info.min_blocksize != decoder->private_->stream_info.data.stream_info.max_blocksize)
-	) { /* variable blocksize */
-		if(!FLAC__bitreader_read_utf8_uint64(decoder->private_->input, &xx, raw_header, &raw_header_len))
-			return false; /* read_callback_ sets the state for us */
-		if(xx == FLAC__U64L(0xffffffffffffffff)) { /* i.e. non-UTF8 code... */
-			decoder->private_->lookahead = raw_header[raw_header_len-1]; /* back up as much as we can */
-			decoder->private_->cached = true;
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			return true;
-		}
-		decoder->private_->frame.header.number_type = FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER;
-		decoder->private_->frame.header.number.sample_number = xx;
-	}
-	else { /* fixed blocksize */
-		if(!FLAC__bitreader_read_utf8_uint32(decoder->private_->input, &x, raw_header, &raw_header_len))
-			return false; /* read_callback_ sets the state for us */
-		if(x == 0xffffffff) { /* i.e. non-UTF8 code... */
-			decoder->private_->lookahead = raw_header[raw_header_len-1]; /* back up as much as we can */
-			decoder->private_->cached = true;
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			return true;
-		}
-		decoder->private_->frame.header.number_type = FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER;
-		decoder->private_->frame.header.number.frame_number = x;
-	}
-
-	if(blocksize_hint) {
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-			return false; /* read_callback_ sets the state for us */
-		raw_header[raw_header_len++] = (FLAC__byte)x;
-		if(blocksize_hint == 7) {
-			FLAC__uint32 _x;
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &_x, 8))
-				return false; /* read_callback_ sets the state for us */
-			raw_header[raw_header_len++] = (FLAC__byte)_x;
-			x = (x << 8) | _x;
-		}
-		decoder->private_->frame.header.blocksize = x+1;
-	}
-
-	if(sample_rate_hint) {
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-			return false; /* read_callback_ sets the state for us */
-		raw_header[raw_header_len++] = (FLAC__byte)x;
-		if(sample_rate_hint != 12) {
-			FLAC__uint32 _x;
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &_x, 8))
-				return false; /* read_callback_ sets the state for us */
-			raw_header[raw_header_len++] = (FLAC__byte)_x;
-			x = (x << 8) | _x;
-		}
-		if(sample_rate_hint == 12)
-			decoder->private_->frame.header.sample_rate = x*1000;
-		else if(sample_rate_hint == 13)
-			decoder->private_->frame.header.sample_rate = x;
-		else
-			decoder->private_->frame.header.sample_rate = x*10;
-	}
-
-	/* read the CRC-8 byte */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8))
-		return false; /* read_callback_ sets the state for us */
-	crc8 = (FLAC__byte)x;
-
-	if(FLAC__crc8(raw_header, raw_header_len) != crc8) {
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER);
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		return true;
-	}
-
-	/* calculate the sample number from the frame number if needed */
-	decoder->private_->next_fixed_block_size = 0;
-	if(decoder->private_->frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER) {
-		x = decoder->private_->frame.header.number.frame_number;
-		decoder->private_->frame.header.number_type = FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER;
-		if(decoder->private_->fixed_block_size)
-			decoder->private_->frame.header.number.sample_number = (FLAC__uint64)decoder->private_->fixed_block_size * (FLAC__uint64)x;
-		else if(decoder->private_->has_stream_info) {
-			if(decoder->private_->stream_info.data.stream_info.min_blocksize == decoder->private_->stream_info.data.stream_info.max_blocksize) {
-				decoder->private_->frame.header.number.sample_number = (FLAC__uint64)decoder->private_->stream_info.data.stream_info.min_blocksize * (FLAC__uint64)x;
-				decoder->private_->next_fixed_block_size = decoder->private_->stream_info.data.stream_info.max_blocksize;
-			}
-			else
-				is_unparseable = true;
-		}
-		else if(x == 0) {
-			decoder->private_->frame.header.number.sample_number = 0;
-			decoder->private_->next_fixed_block_size = decoder->private_->frame.header.blocksize;
-		}
-		else {
-			/* can only get here if the stream has invalid frame numbering and no STREAMINFO, so assume it's not the last (possibly short) frame */
-			decoder->private_->frame.header.number.sample_number = (FLAC__uint64)decoder->private_->frame.header.blocksize * (FLAC__uint64)x;
-		}
-	}
-
-	if(is_unparseable) {
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM);
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		return true;
-	}
-
-	return true;
-}
-
-FLAC__bool read_subframe_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode)
-{
-	FLAC__uint32 x;
-	FLAC__bool wasted_bits;
-	unsigned i;
-
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &x, 8)) /* MAGIC NUMBER */
-		return false; /* read_callback_ sets the state for us */
-
-	wasted_bits = (x & 1);
-	x &= 0xfe;
-
-	if(wasted_bits) {
-		unsigned u;
-		if(!FLAC__bitreader_read_unary_unsigned(decoder->private_->input, &u))
-			return false; /* read_callback_ sets the state for us */
-		decoder->private_->frame.subframes[channel].wasted_bits = u+1;
-		bps -= decoder->private_->frame.subframes[channel].wasted_bits;
-	}
-	else
-		decoder->private_->frame.subframes[channel].wasted_bits = 0;
-
-	/*
-	 * Lots of magic numbers here
-	 */
-	if(x & 0x80) {
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		return true;
-	}
-	else if(x == 0) {
-		if(!read_subframe_constant_(decoder, channel, bps, do_full_decode))
-			return false;
-	}
-	else if(x == 2) {
-		if(!read_subframe_verbatim_(decoder, channel, bps, do_full_decode))
-			return false;
-	}
-	else if(x < 16) {
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM);
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		return true;
-	}
-	else if(x <= 24) {
-		if(!read_subframe_fixed_(decoder, channel, bps, (x>>1)&7, do_full_decode))
-			return false;
-		if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption */
-			return true;
-	}
-	else if(x < 64) {
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM);
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		return true;
-	}
-	else {
-		if(!read_subframe_lpc_(decoder, channel, bps, ((x>>1)&31)+1, do_full_decode))
-			return false;
-		if(decoder->protected_->state == FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC) /* means bad sync or got corruption */
-			return true;
-	}
-
-	if(wasted_bits && do_full_decode) {
-		x = decoder->private_->frame.subframes[channel].wasted_bits;
-		for(i = 0; i < decoder->private_->frame.header.blocksize; i++)
-			decoder->private_->output[channel][i] <<= x;
-	}
-
-	return true;
-}
-
-FLAC__bool read_subframe_constant_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode)
-{
-	FLAC__Subframe_Constant *subframe = &decoder->private_->frame.subframes[channel].data.constant;
-	FLAC__int32 x;
-	unsigned i;
-	FLAC__int32 *output = decoder->private_->output[channel];
-
-	decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_CONSTANT;
-
-	if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &x, bps))
-		return false; /* read_callback_ sets the state for us */
-
-	subframe->value = x;
-
-	/* decode the subframe */
-	if(do_full_decode) {
-		for(i = 0; i < decoder->private_->frame.header.blocksize; i++)
-			output[i] = x;
-	}
-
-	return true;
-}
-
-FLAC__bool read_subframe_fixed_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode)
-{
-	FLAC__Subframe_Fixed *subframe = &decoder->private_->frame.subframes[channel].data.fixed;
-	FLAC__int32 i32;
-	FLAC__uint32 u32;
-	unsigned u;
-
-	decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_FIXED;
-
-	subframe->residual = decoder->private_->residual[channel];
-	subframe->order = order;
-
-	/* read warm-up samples */
-	for(u = 0; u < order; u++) {
-		if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, bps))
-			return false; /* read_callback_ sets the state for us */
-		subframe->warmup[u] = i32;
-	}
-
-	/* read entropy coding method info */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	subframe->entropy_coding_method.type = (FLAC__EntropyCodingMethodType)u32;
-	switch(subframe->entropy_coding_method.type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN))
-				return false; /* read_callback_ sets the state for us */
-			subframe->entropy_coding_method.data.partitioned_rice.order = u32;
-			subframe->entropy_coding_method.data.partitioned_rice.contents = &decoder->private_->partitioned_rice_contents[channel];
-			break;
-		default:
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			return true;
-	}
-
-	/* read residual */
-	switch(subframe->entropy_coding_method.type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!read_residual_partitioned_rice_(decoder, order, subframe->entropy_coding_method.data.partitioned_rice.order, &decoder->private_->partitioned_rice_contents[channel], decoder->private_->residual[channel], /*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2))
-				return false;
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-
-	/* decode the subframe */
-	if(do_full_decode) {
-		memcpy(decoder->private_->output[channel], subframe->warmup, sizeof(FLAC__int32) * order);
-		FLAC__fixed_restore_signal(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, order, decoder->private_->output[channel]+order);
-	}
-
-	return true;
-}
-
-FLAC__bool read_subframe_lpc_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, const unsigned order, FLAC__bool do_full_decode)
-{
-	FLAC__Subframe_LPC *subframe = &decoder->private_->frame.subframes[channel].data.lpc;
-	FLAC__int32 i32;
-	FLAC__uint32 u32;
-	unsigned u;
-
-	decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_LPC;
-
-	subframe->residual = decoder->private_->residual[channel];
-	subframe->order = order;
-
-	/* read warm-up samples */
-	for(u = 0; u < order; u++) {
-		if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, bps))
-			return false; /* read_callback_ sets the state for us */
-		subframe->warmup[u] = i32;
-	}
-
-	/* read qlp coeff precision */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN))
-		return false; /* read_callback_ sets the state for us */
-	if(u32 == (1u << FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN) - 1) {
-		send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-		decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		return true;
-	}
-	subframe->qlp_coeff_precision = u32+1;
-
-	/* read qlp shift */
-	if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN))
-		return false; /* read_callback_ sets the state for us */
-	subframe->quantization_level = i32;
-
-	/* read quantized lp coefficiencts */
-	for(u = 0; u < order; u++) {
-		if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i32, subframe->qlp_coeff_precision))
-			return false; /* read_callback_ sets the state for us */
-		subframe->qlp_coeff[u] = i32;
-	}
-
-	/* read entropy coding method info */
-	if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN))
-		return false; /* read_callback_ sets the state for us */
-	subframe->entropy_coding_method.type = (FLAC__EntropyCodingMethodType)u32;
-	switch(subframe->entropy_coding_method.type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &u32, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN))
-				return false; /* read_callback_ sets the state for us */
-			subframe->entropy_coding_method.data.partitioned_rice.order = u32;
-			subframe->entropy_coding_method.data.partitioned_rice.contents = &decoder->private_->partitioned_rice_contents[channel];
-			break;
-		default:
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			return true;
-	}
-
-	/* read residual */
-	switch(subframe->entropy_coding_method.type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!read_residual_partitioned_rice_(decoder, order, subframe->entropy_coding_method.data.partitioned_rice.order, &decoder->private_->partitioned_rice_contents[channel], decoder->private_->residual[channel], /*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2))
-				return false;
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-
-	/* decode the subframe */
-	if(do_full_decode) {
-		memcpy(decoder->private_->output[channel], subframe->warmup, sizeof(FLAC__int32) * order);
-		/*@@@@@@ technically not pessimistic enough, should be more like
-		if( (FLAC__uint64)order * ((((FLAC__uint64)1)<<bps)-1) * ((1<<subframe->qlp_coeff_precision)-1) < (((FLAC__uint64)-1) << 32) )
-		*/
-		if(bps + subframe->qlp_coeff_precision + FLAC__bitmath_ilog2(order) <= 32)
-			if(bps <= 16 && subframe->qlp_coeff_precision <= 16)
-				decoder->private_->local_lpc_restore_signal_16bit(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order);
-			else
-				decoder->private_->local_lpc_restore_signal(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order);
-		else
-			decoder->private_->local_lpc_restore_signal_64bit(decoder->private_->residual[channel], decoder->private_->frame.header.blocksize-order, subframe->qlp_coeff, order, subframe->quantization_level, decoder->private_->output[channel]+order);
-	}
-
-	return true;
-}
-
-FLAC__bool read_subframe_verbatim_(FLAC__StreamDecoder *decoder, unsigned channel, unsigned bps, FLAC__bool do_full_decode)
-{
-	FLAC__Subframe_Verbatim *subframe = &decoder->private_->frame.subframes[channel].data.verbatim;
-	FLAC__int32 x, *residual = decoder->private_->residual[channel];
-	unsigned i;
-
-	decoder->private_->frame.subframes[channel].type = FLAC__SUBFRAME_TYPE_VERBATIM;
-
-	subframe->data = residual;
-
-	for(i = 0; i < decoder->private_->frame.header.blocksize; i++) {
-		if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &x, bps))
-			return false; /* read_callback_ sets the state for us */
-		residual[i] = x;
-	}
-
-	/* decode the subframe */
-	if(do_full_decode)
-		memcpy(decoder->private_->output[channel], subframe->data, sizeof(FLAC__int32) * decoder->private_->frame.header.blocksize);
-
-	return true;
-}
-
-FLAC__bool read_residual_partitioned_rice_(FLAC__StreamDecoder *decoder, unsigned predictor_order, unsigned partition_order, FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents, FLAC__int32 *residual, FLAC__bool is_extended)
-{
-	FLAC__uint32 rice_parameter;
-	int i;
-	unsigned partition, sample, u;
-	const unsigned partitions = 1u << partition_order;
-	const unsigned partition_samples = partition_order > 0? decoder->private_->frame.header.blocksize >> partition_order : decoder->private_->frame.header.blocksize - predictor_order;
-	const unsigned plen = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN;
-	const unsigned pesc = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
-
-	/* sanity checks */
-	if(partition_order == 0) {
-		if(decoder->private_->frame.header.blocksize < predictor_order) {
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			/* We have received a potentially malicious bit stream. All we can do is error out to avoid a heap overflow. */
-			return false;
-		}
-	}
-	else {
-		if(partition_samples < predictor_order) {
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-			/* We have received a potentially malicious bit stream. All we can do is error out to avoid a heap overflow. */
-			return false;
-		}
-	}
-
-	if(!FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(partitioned_rice_contents, flac_max(6u, partition_order))) {
-		decoder->protected_->state = FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-
-	sample = 0;
-	for(partition = 0; partition < partitions; partition++) {
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &rice_parameter, plen))
-			return false; /* read_callback_ sets the state for us */
-		partitioned_rice_contents->parameters[partition] = rice_parameter;
-		if(rice_parameter < pesc) {
-			partitioned_rice_contents->raw_bits[partition] = 0;
-			u = (partition_order == 0 || partition > 0)? partition_samples : partition_samples - predictor_order;
-			if(!FLAC__bitreader_read_rice_signed_block(decoder->private_->input, residual + sample, u, rice_parameter))
-				return false; /* read_callback_ sets the state for us */
-			sample += u;
-		}
-		else {
-			if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &rice_parameter, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
-				return false; /* read_callback_ sets the state for us */
-			partitioned_rice_contents->raw_bits[partition] = rice_parameter;
-			for(u = (partition_order == 0 || partition > 0)? 0 : predictor_order; u < partition_samples; u++, sample++) {
-				if(!FLAC__bitreader_read_raw_int32(decoder->private_->input, &i, rice_parameter))
-					return false; /* read_callback_ sets the state for us */
-				residual[sample] = i;
-			}
-		}
-	}
-
-	return true;
-}
-
-FLAC__bool read_zero_padding_(FLAC__StreamDecoder *decoder)
-{
-	if(!FLAC__bitreader_is_consumed_byte_aligned(decoder->private_->input)) {
-		FLAC__uint32 zero = 0;
-		if(!FLAC__bitreader_read_raw_uint32(decoder->private_->input, &zero, FLAC__bitreader_bits_left_for_byte_alignment(decoder->private_->input)))
-			return false; /* read_callback_ sets the state for us */
-		if(zero != 0) {
-			send_error_to_client_(decoder, FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC);
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC;
-		}
-	}
-	return true;
-}
-
-FLAC__bool read_callback_(FLAC__byte buffer[], size_t *bytes, void *client_data)
-{
-	FLAC__StreamDecoder *decoder = (FLAC__StreamDecoder *)client_data;
-
-	if(
-#if FLAC__HAS_OGG
-		/* see [1] HACK NOTE below for why we don't call the eof_callback when decoding Ogg FLAC */
-		!decoder->private_->is_ogg &&
-#endif
-		decoder->private_->eof_callback && decoder->private_->eof_callback(decoder, decoder->private_->client_data)
-	) {
-		*bytes = 0;
-		decoder->protected_->state = FLAC__STREAM_DECODER_END_OF_STREAM;
-		return false;
-	}
-	else if(*bytes > 0) {
-		/* While seeking, it is possible for our seek to land in the
-		 * middle of audio data that looks exactly like a frame header
-		 * from a future version of an encoder.  When that happens, our
-		 * error callback will get an
-		 * FLAC__STREAM_DECODER_UNPARSEABLE_STREAM and increment its
-		 * unparseable_frame_count.  But there is a remote possibility
-		 * that it is properly synced at such a "future-codec frame",
-		 * so to make sure, we wait to see many "unparseable" errors in
-		 * a row before bailing out.
-		 */
-		if(decoder->private_->is_seeking && decoder->private_->unparseable_frame_count > 20) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED;
-			return false;
-		}
-		else {
-			const FLAC__StreamDecoderReadStatus status =
-#if FLAC__HAS_OGG
-				decoder->private_->is_ogg?
-				read_callback_ogg_aspect_(decoder, buffer, bytes) :
-#endif
-				decoder->private_->read_callback(decoder, buffer, bytes, decoder->private_->client_data)
-			;
-			if(status == FLAC__STREAM_DECODER_READ_STATUS_ABORT) {
-				decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED;
-				return false;
-			}
-			else if(*bytes == 0) {
-				if(
-					status == FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM ||
-					(
-#if FLAC__HAS_OGG
-						/* see [1] HACK NOTE below for why we don't call the eof_callback when decoding Ogg FLAC */
-						!decoder->private_->is_ogg &&
-#endif
-						decoder->private_->eof_callback && decoder->private_->eof_callback(decoder, decoder->private_->client_data)
-					)
-				) {
-					decoder->protected_->state = FLAC__STREAM_DECODER_END_OF_STREAM;
-					return false;
-				}
-				else
-					return true;
-			}
-			else
-				return true;
-		}
-	}
-	else {
-		/* abort to avoid a deadlock */
-		decoder->protected_->state = FLAC__STREAM_DECODER_ABORTED;
-		return false;
-	}
-	/* [1] @@@ HACK NOTE: The end-of-stream checking has to be hacked around
-	 * for Ogg FLAC.  This is because the ogg decoder aspect can lose sync
-	 * and at the same time hit the end of the stream (for example, seeking
-	 * to a point that is after the beginning of the last Ogg page).  There
-	 * is no way to report an Ogg sync loss through the callbacks (see note
-	 * in read_callback_ogg_aspect_()) so it returns CONTINUE with *bytes==0.
-	 * So to keep the decoder from stopping at this point we gate the call
-	 * to the eof_callback and let the Ogg decoder aspect set the
-	 * end-of-stream state when it is needed.
-	 */
-}
-
-#if FLAC__HAS_OGG
-FLAC__StreamDecoderReadStatus read_callback_ogg_aspect_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes)
-{
-	switch(FLAC__ogg_decoder_aspect_read_callback_wrapper(&decoder->protected_->ogg_decoder_aspect, buffer, bytes, read_callback_proxy_, decoder, decoder->private_->client_data)) {
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK:
-			return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
-		/* we don't really have a way to handle lost sync via read
-		 * callback so we'll let it pass and let the underlying
-		 * FLAC decoder catch the error
-		 */
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_LOST_SYNC:
-			return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM:
-			return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_NOT_FLAC:
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_UNSUPPORTED_MAPPING_VERSION:
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT:
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_ERROR:
-		case FLAC__OGG_DECODER_ASPECT_READ_STATUS_MEMORY_ALLOCATION_ERROR:
-			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
-		default:
-			FLAC__ASSERT(0);
-			/* double protection */
-			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
-	}
-}
-
-FLAC__OggDecoderAspectReadStatus read_callback_proxy_(const void *void_decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
-{
-	FLAC__StreamDecoder *decoder = (FLAC__StreamDecoder*)void_decoder;
-
-	switch(decoder->private_->read_callback(decoder, buffer, bytes, client_data)) {
-		case FLAC__STREAM_DECODER_READ_STATUS_CONTINUE:
-			return FLAC__OGG_DECODER_ASPECT_READ_STATUS_OK;
-		case FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM:
-			return FLAC__OGG_DECODER_ASPECT_READ_STATUS_END_OF_STREAM;
-		case FLAC__STREAM_DECODER_READ_STATUS_ABORT:
-			return FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT;
-		default:
-			/* double protection: */
-			FLAC__ASSERT(0);
-			return FLAC__OGG_DECODER_ASPECT_READ_STATUS_ABORT;
-	}
-}
-#endif
-
-FLAC__StreamDecoderWriteStatus write_audio_frame_to_client_(FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[])
-{
-	if(decoder->private_->is_seeking) {
-		FLAC__uint64 this_frame_sample = frame->header.number.sample_number;
-		FLAC__uint64 next_frame_sample = this_frame_sample + (FLAC__uint64)frame->header.blocksize;
-		FLAC__uint64 target_sample = decoder->private_->target_sample;
-
-		FLAC__ASSERT(frame->header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER);
-
-#if FLAC__HAS_OGG
-		decoder->private_->got_a_frame = true;
-#endif
-		decoder->private_->last_frame = *frame; /* save the frame */
-		if(this_frame_sample <= target_sample && target_sample < next_frame_sample) { /* we hit our target frame */
-			unsigned delta = (unsigned)(target_sample - this_frame_sample);
-			/* kick out of seek mode */
-			decoder->private_->is_seeking = false;
-			/* shift out the samples before target_sample */
-			if(delta > 0) {
-				unsigned channel;
-				const FLAC__int32 *newbuffer[FLAC__MAX_CHANNELS];
-				for(channel = 0; channel < frame->header.channels; channel++)
-					newbuffer[channel] = buffer[channel] + delta;
-				decoder->private_->last_frame.header.blocksize -= delta;
-				decoder->private_->last_frame.header.number.sample_number += (FLAC__uint64)delta;
-				/* write the relevant samples */
-				return decoder->private_->write_callback(decoder, &decoder->private_->last_frame, newbuffer, decoder->private_->client_data);
-			}
-			else {
-				/* write the relevant samples */
-				return decoder->private_->write_callback(decoder, frame, buffer, decoder->private_->client_data);
-			}
-		}
-		else {
-			return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
-		}
-	}
-	else {
-		/*
-		 * If we never got STREAMINFO, turn off MD5 checking to save
-		 * cycles since we don't have a sum to compare to anyway
-		 */
-		if(!decoder->private_->has_stream_info)
-			decoder->private_->do_md5_checking = false;
-		if(decoder->private_->do_md5_checking) {
-			if(!FLAC__MD5Accumulate(&decoder->private_->md5context, buffer, frame->header.channels, frame->header.blocksize, (frame->header.bits_per_sample+7) / 8))
-				return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
-		}
-		return decoder->private_->write_callback(decoder, frame, buffer, decoder->private_->client_data);
-	}
-}
-
-void send_error_to_client_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status)
-{
-	if(!decoder->private_->is_seeking)
-		decoder->private_->error_callback(decoder, status, decoder->private_->client_data);
-	else if(status == FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM)
-		decoder->private_->unparseable_frame_count++;
-}
-
-FLAC__bool seek_to_absolute_sample_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample)
-{
-	FLAC__uint64 first_frame_offset = decoder->private_->first_frame_offset, lower_bound, upper_bound, lower_bound_sample, upper_bound_sample, this_frame_sample;
-	FLAC__int64 pos = -1;
-	int i;
-	unsigned approx_bytes_per_frame;
-	FLAC__bool first_seek = true;
-	const FLAC__uint64 total_samples = FLAC__stream_decoder_get_total_samples(decoder);
-	const unsigned min_blocksize = decoder->private_->stream_info.data.stream_info.min_blocksize;
-	const unsigned max_blocksize = decoder->private_->stream_info.data.stream_info.max_blocksize;
-	const unsigned max_framesize = decoder->private_->stream_info.data.stream_info.max_framesize;
-	const unsigned min_framesize = decoder->private_->stream_info.data.stream_info.min_framesize;
-	/* take these from the current frame in case they've changed mid-stream */
-	unsigned channels = FLAC__stream_decoder_get_channels(decoder);
-	unsigned bps = FLAC__stream_decoder_get_bits_per_sample(decoder);
-	const FLAC__StreamMetadata_SeekTable *seek_table = decoder->private_->has_seek_table? &decoder->private_->seek_table.data.seek_table : 0;
-
-	/* use values from stream info if we didn't decode a frame */
-	if(channels == 0)
-		channels = decoder->private_->stream_info.data.stream_info.channels;
-	if(bps == 0)
-		bps = decoder->private_->stream_info.data.stream_info.bits_per_sample;
-
-	/* we are just guessing here */
-	if(max_framesize > 0)
-		approx_bytes_per_frame = (max_framesize + min_framesize) / 2 + 1;
-	/*
-	 * Check if it's a known fixed-blocksize stream.  Note that though
-	 * the spec doesn't allow zeroes in the STREAMINFO block, we may
-	 * never get a STREAMINFO block when decoding so the value of
-	 * min_blocksize might be zero.
-	 */
-	else if(min_blocksize == max_blocksize && min_blocksize > 0) {
-		/* note there are no () around 'bps/8' to keep precision up since it's an integer calulation */
-		approx_bytes_per_frame = min_blocksize * channels * bps/8 + 64;
-	}
-	else
-		approx_bytes_per_frame = 4096 * channels * bps/8 + 64;
-
-	/*
-	 * First, we set an upper and lower bound on where in the
-	 * stream we will search.  For now we assume the worst case
-	 * scenario, which is our best guess at the beginning of
-	 * the first frame and end of the stream.
-	 */
-	lower_bound = first_frame_offset;
-	lower_bound_sample = 0;
-	upper_bound = stream_length;
-	upper_bound_sample = total_samples > 0 ? total_samples : target_sample /*estimate it*/;
-
-	/*
-	 * Now we refine the bounds if we have a seektable with
-	 * suitable points.  Note that according to the spec they
-	 * must be ordered by ascending sample number.
-	 *
-	 * Note: to protect against invalid seek tables we will ignore points
-	 * that have frame_samples==0 or sample_number>=total_samples
-	 */
-	if(seek_table) {
-		FLAC__uint64 new_lower_bound = lower_bound;
-		FLAC__uint64 new_upper_bound = upper_bound;
-		FLAC__uint64 new_lower_bound_sample = lower_bound_sample;
-		FLAC__uint64 new_upper_bound_sample = upper_bound_sample;
-
-		/* find the closest seek point <= target_sample, if it exists */
-		for(i = (int)seek_table->num_points - 1; i >= 0; i--) {
-			if(
-				seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER &&
-				seek_table->points[i].frame_samples > 0 && /* defense against bad seekpoints */
-				(total_samples <= 0 || seek_table->points[i].sample_number < total_samples) && /* defense against bad seekpoints */
-				seek_table->points[i].sample_number <= target_sample
-			)
-				break;
-		}
-		if(i >= 0) { /* i.e. we found a suitable seek point... */
-			new_lower_bound = first_frame_offset + seek_table->points[i].stream_offset;
-			new_lower_bound_sample = seek_table->points[i].sample_number;
-		}
-
-		/* find the closest seek point > target_sample, if it exists */
-		for(i = 0; i < (int)seek_table->num_points; i++) {
-			if(
-				seek_table->points[i].sample_number != FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER &&
-				seek_table->points[i].frame_samples > 0 && /* defense against bad seekpoints */
-				(total_samples <= 0 || seek_table->points[i].sample_number < total_samples) && /* defense against bad seekpoints */
-				seek_table->points[i].sample_number > target_sample
-			)
-				break;
-		}
-		if(i < (int)seek_table->num_points) { /* i.e. we found a suitable seek point... */
-			new_upper_bound = first_frame_offset + seek_table->points[i].stream_offset;
-			new_upper_bound_sample = seek_table->points[i].sample_number;
-		}
-		/* final protection against unsorted seek tables; keep original values if bogus */
-		if(new_upper_bound >= new_lower_bound) {
-			lower_bound = new_lower_bound;
-			upper_bound = new_upper_bound;
-			lower_bound_sample = new_lower_bound_sample;
-			upper_bound_sample = new_upper_bound_sample;
-		}
-	}
-
-	FLAC__ASSERT(upper_bound_sample >= lower_bound_sample);
-	/* there are 2 insidious ways that the following equality occurs, which
-	 * we need to fix:
-	 *  1) total_samples is 0 (unknown) and target_sample is 0
-	 *  2) total_samples is 0 (unknown) and target_sample happens to be
-	 *     exactly equal to the last seek point in the seek table; this
-	 *     means there is no seek point above it, and upper_bound_samples
-	 *     remains equal to the estimate (of target_samples) we made above
-	 * in either case it does not hurt to move upper_bound_sample up by 1
-	 */
-	if(upper_bound_sample == lower_bound_sample)
-		upper_bound_sample++;
-
-	decoder->private_->target_sample = target_sample;
-	while(1) {
-		/* check if the bounds are still ok */
-		if (lower_bound_sample >= upper_bound_sample || lower_bound > upper_bound) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-			return false;
-		}
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-		pos = (FLAC__int64)lower_bound + (FLAC__int64)((FLAC__double)(target_sample - lower_bound_sample) / (FLAC__double)(upper_bound_sample - lower_bound_sample) * (FLAC__double)(upper_bound - lower_bound)) - approx_bytes_per_frame;
-#else
-		/* a little less accurate: */
-		if(upper_bound - lower_bound < 0xffffffff)
-			pos = (FLAC__int64)lower_bound + (FLAC__int64)(((target_sample - lower_bound_sample) * (upper_bound - lower_bound)) / (upper_bound_sample - lower_bound_sample)) - approx_bytes_per_frame;
-		else /* @@@ WATCHOUT, ~2TB limit */
-			pos = (FLAC__int64)lower_bound + (FLAC__int64)((((target_sample - lower_bound_sample)>>8) * ((upper_bound - lower_bound)>>8)) / ((upper_bound_sample - lower_bound_sample)>>16)) - approx_bytes_per_frame;
-#endif
-		if(pos >= (FLAC__int64)upper_bound)
-			pos = (FLAC__int64)upper_bound - 1;
-		if(pos < (FLAC__int64)lower_bound)
-			pos = (FLAC__int64)lower_bound;
-		if(decoder->private_->seek_callback(decoder, (FLAC__uint64)pos, decoder->private_->client_data) != FLAC__STREAM_DECODER_SEEK_STATUS_OK) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-			return false;
-		}
-		if(!FLAC__stream_decoder_flush(decoder)) {
-			/* above call sets the state for us */
-			return false;
-		}
-		/* Now we need to get a frame.  First we need to reset our
-		 * unparseable_frame_count; if we get too many unparseable
-		 * frames in a row, the read callback will return
-		 * FLAC__STREAM_DECODER_READ_STATUS_ABORT, causing
-		 * FLAC__stream_decoder_process_single() to return false.
-		 */
-		decoder->private_->unparseable_frame_count = 0;
-		if(!FLAC__stream_decoder_process_single(decoder)) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-			return false;
-		}
-		/* our write callback will change the state when it gets to the target frame */
-		/* actually, we could have got_a_frame if our decoder is at FLAC__STREAM_DECODER_END_OF_STREAM so we need to check for that also */
-#if 0
-		/*@@@@@@ used to be the following; not clear if the check for end of stream is needed anymore */
-		if(decoder->protected_->state != FLAC__SEEKABLE_STREAM_DECODER_SEEKING && decoder->protected_->state != FLAC__STREAM_DECODER_END_OF_STREAM)
-			break;
-#endif
-		if(!decoder->private_->is_seeking)
-			break;
-
-		FLAC__ASSERT(decoder->private_->last_frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER);
-		this_frame_sample = decoder->private_->last_frame.header.number.sample_number;
-
-		if (0 == decoder->private_->samples_decoded || (this_frame_sample + decoder->private_->last_frame.header.blocksize >= upper_bound_sample && !first_seek)) {
-			if (pos == (FLAC__int64)lower_bound) {
-				/* can't move back any more than the first frame, something is fatally wrong */
-				decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-				return false;
-			}
-			/* our last move backwards wasn't big enough, try again */
-			approx_bytes_per_frame = approx_bytes_per_frame? approx_bytes_per_frame * 2 : 16;
-			continue;
-		}
-		/* allow one seek over upper bound, so we can get a correct upper_bound_sample for streams with unknown total_samples */
-		first_seek = false;
-
-		/* make sure we are not seeking in corrupted stream */
-		if (this_frame_sample < lower_bound_sample) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-			return false;
-		}
-
-		/* we need to narrow the search */
-		if(target_sample < this_frame_sample) {
-			upper_bound_sample = this_frame_sample + decoder->private_->last_frame.header.blocksize;
-/*@@@@@@ what will decode position be if at end of stream? */
-			if(!FLAC__stream_decoder_get_decode_position(decoder, &upper_bound)) {
-				decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-				return false;
-			}
-			approx_bytes_per_frame = (unsigned)(2 * (upper_bound - pos) / 3 + 16);
-		}
-		else { /* target_sample >= this_frame_sample + this frame's blocksize */
-			lower_bound_sample = this_frame_sample + decoder->private_->last_frame.header.blocksize;
-			if(!FLAC__stream_decoder_get_decode_position(decoder, &lower_bound)) {
-				decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-				return false;
-			}
-			approx_bytes_per_frame = (unsigned)(2 * (lower_bound - pos) / 3 + 16);
-		}
-	}
-
-	return true;
-}
-
-#if FLAC__HAS_OGG
-FLAC__bool seek_to_absolute_sample_ogg_(FLAC__StreamDecoder *decoder, FLAC__uint64 stream_length, FLAC__uint64 target_sample)
-{
-	FLAC__uint64 left_pos = 0, right_pos = stream_length;
-	FLAC__uint64 left_sample = 0, right_sample = FLAC__stream_decoder_get_total_samples(decoder);
-	FLAC__uint64 this_frame_sample = (FLAC__uint64)0 - 1;
-	FLAC__uint64 pos = 0; /* only initialized to avoid compiler warning */
-	FLAC__bool did_a_seek;
-	unsigned iteration = 0;
-
-	/* In the first iterations, we will calculate the target byte position
-	 * by the distance from the target sample to left_sample and
-	 * right_sample (let's call it "proportional search").  After that, we
-	 * will switch to binary search.
-	 */
-	unsigned BINARY_SEARCH_AFTER_ITERATION = 2;
-
-	/* We will switch to a linear search once our current sample is less
-	 * than this number of samples ahead of the target sample
-	 */
-	static const FLAC__uint64 LINEAR_SEARCH_WITHIN_SAMPLES = FLAC__MAX_BLOCK_SIZE * 2;
-
-	/* If the total number of samples is unknown, use a large value, and
-	 * force binary search immediately.
-	 */
-	if(right_sample == 0) {
-		right_sample = (FLAC__uint64)(-1);
-		BINARY_SEARCH_AFTER_ITERATION = 0;
-	}
-
-	decoder->private_->target_sample = target_sample;
-	for( ; ; iteration++) {
-		if (iteration == 0 || this_frame_sample > target_sample || target_sample - this_frame_sample > LINEAR_SEARCH_WITHIN_SAMPLES) {
-			if (iteration >= BINARY_SEARCH_AFTER_ITERATION) {
-				pos = (right_pos + left_pos) / 2;
-			}
-			else {
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-				pos = (FLAC__uint64)((FLAC__double)(target_sample - left_sample) / (FLAC__double)(right_sample - left_sample) * (FLAC__double)(right_pos - left_pos));
-#else
-				/* a little less accurate: */
-				if ((target_sample-left_sample <= 0xffffffff) && (right_pos-left_pos <= 0xffffffff))
-					pos = (FLAC__int64)(((target_sample-left_sample) * (right_pos-left_pos)) / (right_sample-left_sample));
-				else /* @@@ WATCHOUT, ~2TB limit */
-					pos = (FLAC__int64)((((target_sample-left_sample)>>8) * ((right_pos-left_pos)>>8)) / ((right_sample-left_sample)>>16));
-#endif
-				/* @@@ TODO: might want to limit pos to some distance
-				 * before EOF, to make sure we land before the last frame,
-				 * thereby getting a this_frame_sample and so having a better
-				 * estimate.
-				 */
-			}
-
-			/* physical seek */
-			if(decoder->private_->seek_callback((FLAC__StreamDecoder*)decoder, (FLAC__uint64)pos, decoder->private_->client_data) != FLAC__STREAM_DECODER_SEEK_STATUS_OK) {
-				decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-				return false;
-			}
-			if(!FLAC__stream_decoder_flush(decoder)) {
-				/* above call sets the state for us */
-				return false;
-			}
-			did_a_seek = true;
-		}
-		else
-			did_a_seek = false;
-
-		decoder->private_->got_a_frame = false;
-		if(!FLAC__stream_decoder_process_single(decoder)) {
-			decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-			return false;
-		}
-		if(!decoder->private_->got_a_frame) {
-			if(did_a_seek) {
-				/* this can happen if we seek to a point after the last frame; we drop
-				 * to binary search right away in this case to avoid any wasted
-				 * iterations of proportional search.
-				 */
-				right_pos = pos;
-				BINARY_SEARCH_AFTER_ITERATION = 0;
-			}
-			else {
-				/* this can probably only happen if total_samples is unknown and the
-				 * target_sample is past the end of the stream
-				 */
-				decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-				return false;
-			}
-		}
-		/* our write callback will change the state when it gets to the target frame */
-		else if(!decoder->private_->is_seeking) {
-			break;
-		}
-		else {
-			this_frame_sample = decoder->private_->last_frame.header.number.sample_number;
-			FLAC__ASSERT(decoder->private_->last_frame.header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER);
-
-			if (did_a_seek) {
-				if (this_frame_sample <= target_sample) {
-					/* The 'equal' case should not happen, since
-					 * FLAC__stream_decoder_process_single()
-					 * should recognize that it has hit the
-					 * target sample and we would exit through
-					 * the 'break' above.
-					 */
-					FLAC__ASSERT(this_frame_sample != target_sample);
-
-					left_sample = this_frame_sample;
-					/* sanity check to avoid infinite loop */
-					if (left_pos == pos) {
-						decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-						return false;
-					}
-					left_pos = pos;
-				}
-				else if(this_frame_sample > target_sample) {
-					right_sample = this_frame_sample;
-					/* sanity check to avoid infinite loop */
-					if (right_pos == pos) {
-						decoder->protected_->state = FLAC__STREAM_DECODER_SEEK_ERROR;
-						return false;
-					}
-					right_pos = pos;
-				}
-			}
-		}
-	}
-
-	return true;
-}
-#endif
-
-#if 0
-FLAC__StreamDecoderReadStatus file_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
-{
-	(void)client_data;
-
-	if(*bytes > 0) {
-		*bytes = fread(buffer, sizeof(FLAC__byte), *bytes, decoder->private_->file);
-		if(ferror(decoder->private_->file))
-			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
-		else if(*bytes == 0)
-			return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
-		else
-			return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
-	}
-	else
-		return FLAC__STREAM_DECODER_READ_STATUS_ABORT; /* abort to avoid a deadlock */
-}
-
-FLAC__StreamDecoderSeekStatus file_seek_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
-{
-	(void)client_data;
-
-	if(decoder->private_->file == stdin)
-		return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED;
-	else if(fseeko(decoder->private_->file, (FLAC__off_t)absolute_byte_offset, SEEK_SET) < 0)
-		return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
-	else
-		return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
-}
-
-FLAC__StreamDecoderTellStatus file_tell_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
-{
-	FLAC__off_t pos;
-	(void)client_data;
-
-	if(decoder->private_->file == stdin)
-		return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED;
-	else if((pos = ftello(decoder->private_->file)) < 0)
-		return FLAC__STREAM_DECODER_TELL_STATUS_ERROR;
-	else {
-		*absolute_byte_offset = (FLAC__uint64)pos;
-		return FLAC__STREAM_DECODER_TELL_STATUS_OK;
-	}
-}
-
-FLAC__StreamDecoderLengthStatus file_length_callback_(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
-{
-	struct flac_stat_s filestats;
-	(void)client_data;
-
-	if(decoder->private_->file == stdin)
-		return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED;
-	else if(flac_fstat(fileno(decoder->private_->file), &filestats) != 0)
-		return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR;
-	else {
-		*stream_length = (FLAC__uint64)filestats.st_size;
-		return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
-	}
-}
-
-FLAC__bool file_eof_callback_(const FLAC__StreamDecoder *decoder, void *client_data)
-{
-	(void)client_data;
-
-	return feof(decoder->private_->file)? true : false;
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c b/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c
deleted file mode 100644
index f5eb90e..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder.c
+++ /dev/null
@@ -1,4527 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h> /* for malloc() */
-#include <string.h> /* for memcpy() */
-#include <sys/types.h> /* for off_t */
-#include "../assert.h"
-#include "../stream_decoder.h"
-#include "include/protected/stream_encoder.h"
-#include "include/private/bitwriter.h"
-#include "include/private/bitmath.h"
-#include "include/private/crc.h"
-#include "include/private/cpu.h"
-#include "include/private/fixed.h"
-#include "include/private/format.h"
-#include "include/private/lpc.h"
-#include "include/private/md5.h"
-#include "include/private/memory.h"
-#if FLAC__HAS_OGG
-#include "include/private/ogg_helper.h"
-#include "include/private/ogg_mapping.h"
-#endif
-#include "include/private/stream_encoder.h"
-#include "include/private/stream_encoder_framing.h"
-#include "include/private/window.h"
-#include "../alloc.h"
-
-
-/* Exact Rice codeword length calculation is off by default.  The simple
- * (and fast) estimation (of how many bits a residual value will be
- * encoded with) in this encoder is very good, almost always yielding
- * compression within 0.1% of exact calculation.
- */
-#undef EXACT_RICE_BITS_CALCULATION
-/* Rice parameter searching is off by default.  The simple (and fast)
- * parameter estimation in this encoder is very good, almost always
- * yielding compression within 0.1% of the optimal parameters.
- */
-#undef ENABLE_RICE_PARAMETER_SEARCH
-
-
-typedef struct {
-	FLAC__int32 *data[FLAC__MAX_CHANNELS];
-	unsigned size; /* of each data[] in samples */
-	unsigned tail;
-} verify_input_fifo;
-
-typedef struct {
-	const FLAC__byte *data;
-	unsigned capacity;
-	unsigned bytes;
-} verify_output;
-
-typedef enum {
-	ENCODER_IN_MAGIC = 0,
-	ENCODER_IN_METADATA = 1,
-	ENCODER_IN_AUDIO = 2
-} EncoderStateHint;
-
-static struct CompressionLevels {
-	FLAC__bool do_mid_side_stereo;
-	FLAC__bool loose_mid_side_stereo;
-	unsigned max_lpc_order;
-	unsigned qlp_coeff_precision;
-	FLAC__bool do_qlp_coeff_prec_search;
-	FLAC__bool do_escape_coding;
-	FLAC__bool do_exhaustive_model_search;
-	unsigned min_residual_partition_order;
-	unsigned max_residual_partition_order;
-	unsigned rice_parameter_search_dist;
-	const char *apodization;
-} compression_levels_[] = {
-	{ false, false,  0, 0, false, false, false, 0, 3, 0, "tukey(5e-1)" },
-	{ true , true ,  0, 0, false, false, false, 0, 3, 0, "tukey(5e-1)" },
-	{ true , false,  0, 0, false, false, false, 0, 3, 0, "tukey(5e-1)" },
-	{ false, false,  6, 0, false, false, false, 0, 4, 0, "tukey(5e-1)" },
-	{ true , true ,  8, 0, false, false, false, 0, 4, 0, "tukey(5e-1)" },
-	{ true , false,  8, 0, false, false, false, 0, 5, 0, "tukey(5e-1)" },
-	{ true , false,  8, 0, false, false, false, 0, 6, 0, "tukey(5e-1);partial_tukey(2)" },
-	{ true , false, 12, 0, false, false, false, 0, 6, 0, "tukey(5e-1);partial_tukey(2)" },
-	{ true , false, 12, 0, false, false, false, 0, 6, 0, "tukey(5e-1);partial_tukey(2);punchout_tukey(3)" }
-	/* here we use locale-independent 5e-1 instead of 0.5 or 0,5 */
-};
-
-
-/***********************************************************************
- *
- * Private class method prototypes
- *
- ***********************************************************************/
-
-static void set_defaults_(FLAC__StreamEncoder *encoder);
-static void free_(FLAC__StreamEncoder *encoder);
-static FLAC__bool resize_buffers_(FLAC__StreamEncoder *encoder, unsigned new_blocksize);
-static FLAC__bool write_bitbuffer_(FLAC__StreamEncoder *encoder, unsigned samples, FLAC__bool is_last_block);
-static FLAC__StreamEncoderWriteStatus write_frame_(FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, FLAC__bool is_last_block);
-static void update_metadata_(const FLAC__StreamEncoder *encoder);
-#if FLAC__HAS_OGG
-static void update_ogg_metadata_(FLAC__StreamEncoder *encoder);
-#endif
-static FLAC__bool process_frame_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block, FLAC__bool is_last_block);
-static FLAC__bool process_subframes_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block);
-
-static FLAC__bool process_subframe_(
-	FLAC__StreamEncoder *encoder,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	const FLAC__FrameHeader *frame_header,
-	unsigned subframe_bps,
-	const FLAC__int32 integer_signal[],
-	FLAC__Subframe *subframe[2],
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents[2],
-	FLAC__int32 *residual[2],
-	unsigned *best_subframe,
-	unsigned *best_bits
-);
-
-static FLAC__bool add_subframe_(
-	FLAC__StreamEncoder *encoder,
-	unsigned blocksize,
-	unsigned subframe_bps,
-	const FLAC__Subframe *subframe,
-	FLAC__BitWriter *frame
-);
-
-static unsigned evaluate_constant_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal,
-	unsigned blocksize,
-	unsigned subframe_bps,
-	FLAC__Subframe *subframe
-);
-
-static unsigned evaluate_fixed_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal[],
-	FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned raw_bits_per_partition[],
-	unsigned blocksize,
-	unsigned subframe_bps,
-	unsigned order,
-	unsigned rice_parameter,
-	unsigned rice_parameter_limit,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	FLAC__bool do_escape_coding,
-	unsigned rice_parameter_search_dist,
-	FLAC__Subframe *subframe,
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents
-);
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-static unsigned evaluate_lpc_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal[],
-	FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned raw_bits_per_partition[],
-	const FLAC__real lp_coeff[],
-	unsigned blocksize,
-	unsigned subframe_bps,
-	unsigned order,
-	unsigned qlp_coeff_precision,
-	unsigned rice_parameter,
-	unsigned rice_parameter_limit,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	FLAC__bool do_escape_coding,
-	unsigned rice_parameter_search_dist,
-	FLAC__Subframe *subframe,
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents
-);
-#endif
-
-static unsigned evaluate_verbatim_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal[],
-	unsigned blocksize,
-	unsigned subframe_bps,
-	FLAC__Subframe *subframe
-);
-
-static unsigned find_best_partition_order_(
-	struct FLAC__StreamEncoderPrivate *private_,
-	const FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned raw_bits_per_partition[],
-	unsigned residual_samples,
-	unsigned predictor_order,
-	unsigned rice_parameter,
-	unsigned rice_parameter_limit,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	unsigned bps,
-	FLAC__bool do_escape_coding,
-	unsigned rice_parameter_search_dist,
-	FLAC__EntropyCodingMethod *best_ecm
-);
-
-static void precompute_partition_info_sums_(
-	const FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned residual_samples,
-	unsigned predictor_order,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	unsigned bps
-);
-
-static void precompute_partition_info_escapes_(
-	const FLAC__int32 residual[],
-	unsigned raw_bits_per_partition[],
-	unsigned residual_samples,
-	unsigned predictor_order,
-	unsigned min_partition_order,
-	unsigned max_partition_order
-);
-
-static FLAC__bool set_partitioned_rice_(
-#ifdef EXACT_RICE_BITS_CALCULATION
-	const FLAC__int32 residual[],
-#endif
-	const FLAC__uint64 abs_residual_partition_sums[],
-	const unsigned raw_bits_per_partition[],
-	const unsigned residual_samples,
-	const unsigned predictor_order,
-	const unsigned suggested_rice_parameter,
-	const unsigned rice_parameter_limit,
-	const unsigned rice_parameter_search_dist,
-	const unsigned partition_order,
-	const FLAC__bool search_for_escapes,
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents,
-	unsigned *bits
-);
-
-static unsigned get_wasted_bits_(FLAC__int32 signal[], unsigned samples);
-
-/* verify-related routines: */
-static void append_to_verify_fifo_(
-	verify_input_fifo *fifo,
-	const FLAC__int32 * const input[],
-	unsigned input_offset,
-	unsigned channels,
-	unsigned wide_samples
-);
-
-static void append_to_verify_fifo_interleaved_(
-	verify_input_fifo *fifo,
-	const FLAC__int32 input[],
-	unsigned input_offset,
-	unsigned channels,
-	unsigned wide_samples
-);
-
-static FLAC__StreamDecoderReadStatus verify_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-static FLAC__StreamDecoderWriteStatus verify_write_callback_(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
-static void verify_metadata_callback_(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
-static void verify_error_callback_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
-
-//static FLAC__StreamEncoderReadStatus file_read_callback_(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-//static FLAC__StreamEncoderSeekStatus file_seek_callback_(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
-//static FLAC__StreamEncoderTellStatus file_tell_callback_(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
-//static FLAC__StreamEncoderWriteStatus file_write_callback_(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data);
-//static FILE *get_binary_stdout_(void);
-
-
-/***********************************************************************
- *
- * Private class data
- *
- ***********************************************************************/
-
-typedef struct FLAC__StreamEncoderPrivate {
-	unsigned input_capacity;                          /* current size (in samples) of the signal and residual buffers */
-	FLAC__int32 *integer_signal[FLAC__MAX_CHANNELS];  /* the integer version of the input signal */
-	FLAC__int32 *integer_signal_mid_side[2];          /* the integer version of the mid-side input signal (stereo only) */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	FLAC__real *real_signal[FLAC__MAX_CHANNELS];      /* (@@@ currently unused) the floating-point version of the input signal */
-	FLAC__real *real_signal_mid_side[2];              /* (@@@ currently unused) the floating-point version of the mid-side input signal (stereo only) */
-	FLAC__real *window[FLAC__MAX_APODIZATION_FUNCTIONS]; /* the pre-computed floating-point window for each apodization function */
-	FLAC__real *windowed_signal;                      /* the integer_signal[] * current window[] */
-#endif
-	unsigned subframe_bps[FLAC__MAX_CHANNELS];        /* the effective bits per sample of the input signal (stream bps - wasted bits) */
-	unsigned subframe_bps_mid_side[2];                /* the effective bits per sample of the mid-side input signal (stream bps - wasted bits + 0/1) */
-	FLAC__int32 *residual_workspace[FLAC__MAX_CHANNELS][2]; /* each channel has a candidate and best workspace where the subframe residual signals will be stored */
-	FLAC__int32 *residual_workspace_mid_side[2][2];
-	FLAC__Subframe subframe_workspace[FLAC__MAX_CHANNELS][2];
-	FLAC__Subframe subframe_workspace_mid_side[2][2];
-	FLAC__Subframe *subframe_workspace_ptr[FLAC__MAX_CHANNELS][2];
-	FLAC__Subframe *subframe_workspace_ptr_mid_side[2][2];
-	FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents_workspace[FLAC__MAX_CHANNELS][2];
-	FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents_workspace_mid_side[FLAC__MAX_CHANNELS][2];
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents_workspace_ptr[FLAC__MAX_CHANNELS][2];
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents_workspace_ptr_mid_side[FLAC__MAX_CHANNELS][2];
-	unsigned best_subframe[FLAC__MAX_CHANNELS];       /* index (0 or 1) into 2nd dimension of the above workspaces */
-	unsigned best_subframe_mid_side[2];
-	unsigned best_subframe_bits[FLAC__MAX_CHANNELS];  /* size in bits of the best subframe for each channel */
-	unsigned best_subframe_bits_mid_side[2];
-	FLAC__uint64 *abs_residual_partition_sums;        /* workspace where the sum of abs(candidate residual) for each partition is stored */
-	unsigned *raw_bits_per_partition;                 /* workspace where the sum of silog2(candidate residual) for each partition is stored */
-	FLAC__BitWriter *frame;                           /* the current frame being worked on */
-	unsigned loose_mid_side_stereo_frames;            /* rounded number of frames the encoder will use before trying both independent and mid/side frames again */
-	unsigned loose_mid_side_stereo_frame_count;       /* number of frames using the current channel assignment */
-	FLAC__ChannelAssignment last_channel_assignment;
-	FLAC__StreamMetadata streaminfo;                  /* scratchpad for STREAMINFO as it is built */
-	FLAC__StreamMetadata_SeekTable *seek_table;       /* pointer into encoder->protected_->metadata_ where the seek table is */
-	unsigned current_sample_number;
-	unsigned current_frame_number;
-	FLAC__MD5Context md5context;
-	FLAC__CPUInfo cpuinfo;
-	void (*local_precompute_partition_info_sums)(const FLAC__int32 residual[], FLAC__uint64 abs_residual_partition_sums[], unsigned residual_samples, unsigned predictor_order, unsigned min_partition_order, unsigned max_partition_order, unsigned bps);
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	unsigned (*local_fixed_compute_best_predictor)(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-	unsigned (*local_fixed_compute_best_predictor_wide)(const FLAC__int32 data[], unsigned data_len, FLAC__float residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-#else
-	unsigned (*local_fixed_compute_best_predictor)(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-	unsigned (*local_fixed_compute_best_predictor_wide)(const FLAC__int32 data[], unsigned data_len, FLAC__fixedpoint residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1]);
-#endif
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	void (*local_lpc_compute_autocorrelation)(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]);
-	void (*local_lpc_compute_residual_from_qlp_coefficients)(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-	void (*local_lpc_compute_residual_from_qlp_coefficients_64bit)(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-	void (*local_lpc_compute_residual_from_qlp_coefficients_16bit)(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]);
-#endif
-	FLAC__bool use_wide_by_block;          /* use slow 64-bit versions of some functions because of the block size */
-	FLAC__bool use_wide_by_partition;      /* use slow 64-bit versions of some functions because of the min partition order and blocksize */
-	FLAC__bool use_wide_by_order;          /* use slow 64-bit versions of some functions because of the lpc order */
-	FLAC__bool disable_constant_subframes;
-	FLAC__bool disable_fixed_subframes;
-	FLAC__bool disable_verbatim_subframes;
-#if FLAC__HAS_OGG
-	FLAC__bool is_ogg;
-#endif
-	FLAC__StreamEncoderReadCallback read_callback; /* currently only needed for Ogg FLAC */
-	FLAC__StreamEncoderSeekCallback seek_callback;
-	FLAC__StreamEncoderTellCallback tell_callback;
-	FLAC__StreamEncoderWriteCallback write_callback;
-	FLAC__StreamEncoderMetadataCallback metadata_callback;
-	FLAC__StreamEncoderProgressCallback progress_callback;
-	void *client_data;
-	unsigned first_seekpoint_to_check;
-	FILE *file;                            /* only used when encoding to a file */
-	FLAC__uint64 bytes_written;
-	FLAC__uint64 samples_written;
-	unsigned frames_written;
-	unsigned total_frames_estimate;
-	/* unaligned (original) pointers to allocated data */
-	FLAC__int32 *integer_signal_unaligned[FLAC__MAX_CHANNELS];
-	FLAC__int32 *integer_signal_mid_side_unaligned[2];
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	FLAC__real *real_signal_unaligned[FLAC__MAX_CHANNELS]; /* (@@@ currently unused) */
-	FLAC__real *real_signal_mid_side_unaligned[2]; /* (@@@ currently unused) */
-	FLAC__real *window_unaligned[FLAC__MAX_APODIZATION_FUNCTIONS];
-	FLAC__real *windowed_signal_unaligned;
-#endif
-	FLAC__int32 *residual_workspace_unaligned[FLAC__MAX_CHANNELS][2];
-	FLAC__int32 *residual_workspace_mid_side_unaligned[2][2];
-	FLAC__uint64 *abs_residual_partition_sums_unaligned;
-	unsigned *raw_bits_per_partition_unaligned;
-	/*
-	 * These fields have been moved here from private function local
-	 * declarations merely to save stack space during encoding.
-	 */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	FLAC__real lp_coeff[FLAC__MAX_LPC_ORDER][FLAC__MAX_LPC_ORDER]; /* from process_subframe_() */
-#endif
-	FLAC__EntropyCodingMethod_PartitionedRiceContents partitioned_rice_contents_extra[2]; /* from find_best_partition_order_() */
-	/*
-	 * The data for the verify section
-	 */
-	struct {
-		FLAC__StreamDecoder *decoder;
-		EncoderStateHint state_hint;
-		FLAC__bool needs_magic_hack;
-		verify_input_fifo input_fifo;
-		verify_output output;
-		struct {
-			FLAC__uint64 absolute_sample;
-			unsigned frame_number;
-			unsigned channel;
-			unsigned sample;
-			FLAC__int32 expected;
-			FLAC__int32 got;
-		} error_stats;
-	} verify;
-	FLAC__bool is_being_deleted; /* if true, call to ..._finish() from ..._delete() will not call the callbacks */
-} FLAC__StreamEncoderPrivate;
-
-/***********************************************************************
- *
- * Public static class data
- *
- ***********************************************************************/
-
-FLAC_API const char * const FLAC__StreamEncoderStateString[] = {
-	"FLAC__STREAM_ENCODER_OK",
-	"FLAC__STREAM_ENCODER_UNINITIALIZED",
-	"FLAC__STREAM_ENCODER_OGG_ERROR",
-	"FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR",
-	"FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA",
-	"FLAC__STREAM_ENCODER_CLIENT_ERROR",
-	"FLAC__STREAM_ENCODER_IO_ERROR",
-	"FLAC__STREAM_ENCODER_FRAMING_ERROR",
-	"FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR"
-};
-
-FLAC_API const char * const FLAC__StreamEncoderInitStatusString[] = {
-	"FLAC__STREAM_ENCODER_INIT_STATUS_OK",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA",
-	"FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED"
-};
-
-FLAC_API const char * const FLAC__StreamEncoderReadStatusString[] = {
-	"FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE",
-	"FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM",
-	"FLAC__STREAM_ENCODER_READ_STATUS_ABORT",
-	"FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED"
-};
-
-FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[] = {
-	"FLAC__STREAM_ENCODER_WRITE_STATUS_OK",
-	"FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR"
-};
-
-FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[] = {
-	"FLAC__STREAM_ENCODER_SEEK_STATUS_OK",
-	"FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR",
-	"FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED"
-};
-
-FLAC_API const char * const FLAC__StreamEncoderTellStatusString[] = {
-	"FLAC__STREAM_ENCODER_TELL_STATUS_OK",
-	"FLAC__STREAM_ENCODER_TELL_STATUS_ERROR",
-	"FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED"
-};
-
-/* Number of samples that will be overread to watch for end of stream.  By
- * 'overread', we mean that the FLAC__stream_encoder_process*() calls will
- * always try to read blocksize+1 samples before encoding a block, so that
- * even if the stream has a total sample count that is an integral multiple
- * of the blocksize, we will still notice when we are encoding the last
- * block.  This is needed, for example, to correctly set the end-of-stream
- * marker in Ogg FLAC.
- *
- * WATCHOUT: some parts of the code assert that OVERREAD_ == 1 and there's
- * not really any reason to change it.
- */
-static const unsigned OVERREAD_ = 1;
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- */
-FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void)
-{
-	FLAC__StreamEncoder *encoder;
-	unsigned i;
-
-	FLAC__ASSERT(sizeof(int) >= 4); /* we want to die right away if this is not true */
-
-	encoder = (FLAC__StreamEncoder*) calloc(1, sizeof(FLAC__StreamEncoder));
-	if(encoder == 0) {
-		return 0;
-	}
-
-	encoder->protected_ = (FLAC__StreamEncoderProtected*) calloc(1, sizeof(FLAC__StreamEncoderProtected));
-	if(encoder->protected_ == 0) {
-		free(encoder);
-		return 0;
-	}
-
-	encoder->private_ = (FLAC__StreamEncoderPrivate*) calloc(1, sizeof(FLAC__StreamEncoderPrivate));
-	if(encoder->private_ == 0) {
-		free(encoder->protected_);
-		free(encoder);
-		return 0;
-	}
-
-	encoder->private_->frame = FLAC__bitwriter_new();
-	if(encoder->private_->frame == 0) {
-		free(encoder->private_);
-		free(encoder->protected_);
-		free(encoder);
-		return 0;
-	}
-
-	encoder->private_->file = 0;
-
-	set_defaults_(encoder);
-
-	encoder->private_->is_being_deleted = false;
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		encoder->private_->subframe_workspace_ptr[i][0] = &encoder->private_->subframe_workspace[i][0];
-		encoder->private_->subframe_workspace_ptr[i][1] = &encoder->private_->subframe_workspace[i][1];
-	}
-	for(i = 0; i < 2; i++) {
-		encoder->private_->subframe_workspace_ptr_mid_side[i][0] = &encoder->private_->subframe_workspace_mid_side[i][0];
-		encoder->private_->subframe_workspace_ptr_mid_side[i][1] = &encoder->private_->subframe_workspace_mid_side[i][1];
-	}
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		encoder->private_->partitioned_rice_contents_workspace_ptr[i][0] = &encoder->private_->partitioned_rice_contents_workspace[i][0];
-		encoder->private_->partitioned_rice_contents_workspace_ptr[i][1] = &encoder->private_->partitioned_rice_contents_workspace[i][1];
-	}
-	for(i = 0; i < 2; i++) {
-		encoder->private_->partitioned_rice_contents_workspace_ptr_mid_side[i][0] = &encoder->private_->partitioned_rice_contents_workspace_mid_side[i][0];
-		encoder->private_->partitioned_rice_contents_workspace_ptr_mid_side[i][1] = &encoder->private_->partitioned_rice_contents_workspace_mid_side[i][1];
-	}
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace[i][0]);
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace[i][1]);
-	}
-	for(i = 0; i < 2; i++) {
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][0]);
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][1]);
-	}
-	for(i = 0; i < 2; i++)
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_init(&encoder->private_->partitioned_rice_contents_extra[i]);
-
-	encoder->protected_->state = FLAC__STREAM_ENCODER_UNINITIALIZED;
-
-	return encoder;
-}
-
-FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder)
-{
-	unsigned i;
-
-	if (encoder == NULL)
-		return ;
-
-	FLAC__ASSERT(0 != encoder->protected_);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->private_->frame);
-
-	encoder->private_->is_being_deleted = true;
-
-	(void)FLAC__stream_encoder_finish(encoder);
-
-	if(0 != encoder->private_->verify.decoder)
-		FLAC__stream_decoder_delete(encoder->private_->verify.decoder);
-
-	for(i = 0; i < FLAC__MAX_CHANNELS; i++) {
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace[i][0]);
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace[i][1]);
-	}
-	for(i = 0; i < 2; i++) {
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][0]);
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_workspace_mid_side[i][1]);
-	}
-	for(i = 0; i < 2; i++)
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_clear(&encoder->private_->partitioned_rice_contents_extra[i]);
-
-	FLAC__bitwriter_delete(encoder->private_->frame);
-	free(encoder->private_);
-	free(encoder->protected_);
-	free(encoder);
-}
-
-/***********************************************************************
- *
- * Public class methods
- *
- ***********************************************************************/
-
-static FLAC__StreamEncoderInitStatus init_stream_internal_(
-	FLAC__StreamEncoder *encoder,
-	FLAC__StreamEncoderReadCallback read_callback,
-	FLAC__StreamEncoderWriteCallback write_callback,
-	FLAC__StreamEncoderSeekCallback seek_callback,
-	FLAC__StreamEncoderTellCallback tell_callback,
-	FLAC__StreamEncoderMetadataCallback metadata_callback,
-	void *client_data,
-	FLAC__bool is_ogg
-)
-{
-	unsigned i;
-	FLAC__bool metadata_has_seektable, metadata_has_vorbis_comment, metadata_picture_has_type1, metadata_picture_has_type2;
-
-	FLAC__ASSERT(0 != encoder);
-
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED;
-
-#if !FLAC__HAS_OGG
-	if(is_ogg)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER;
-#endif
-
-	if(0 == write_callback || (seek_callback && 0 == tell_callback))
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS;
-
-	if(encoder->protected_->channels == 0 || encoder->protected_->channels > FLAC__MAX_CHANNELS)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS;
-
-	if(encoder->protected_->channels != 2) {
-		encoder->protected_->do_mid_side_stereo = false;
-		encoder->protected_->loose_mid_side_stereo = false;
-	}
-	else if(!encoder->protected_->do_mid_side_stereo)
-		encoder->protected_->loose_mid_side_stereo = false;
-
-	if(encoder->protected_->bits_per_sample >= 32)
-		encoder->protected_->do_mid_side_stereo = false; /* since we currenty do 32-bit math, the side channel would have 33 bps and overflow */
-
-	if(encoder->protected_->bits_per_sample < FLAC__MIN_BITS_PER_SAMPLE || encoder->protected_->bits_per_sample > FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE;
-
-	if(!FLAC__format_sample_rate_is_valid(encoder->protected_->sample_rate))
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE;
-
-	if(encoder->protected_->blocksize == 0) {
-		if(encoder->protected_->max_lpc_order == 0)
-			encoder->protected_->blocksize = 1152;
-		else
-			encoder->protected_->blocksize = 4096;
-	}
-
-	if(encoder->protected_->blocksize < FLAC__MIN_BLOCK_SIZE || encoder->protected_->blocksize > FLAC__MAX_BLOCK_SIZE)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE;
-
-	if(encoder->protected_->max_lpc_order > FLAC__MAX_LPC_ORDER)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER;
-
-	if(encoder->protected_->blocksize < encoder->protected_->max_lpc_order)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER;
-
-	if(encoder->protected_->qlp_coeff_precision == 0) {
-		if(encoder->protected_->bits_per_sample < 16) {
-			/* @@@ need some data about how to set this here w.r.t. blocksize and sample rate */
-			/* @@@ until then we'll make a guess */
-			encoder->protected_->qlp_coeff_precision = flac_max(FLAC__MIN_QLP_COEFF_PRECISION, 2 + encoder->protected_->bits_per_sample / 2);
-		}
-		else if(encoder->protected_->bits_per_sample == 16) {
-			if(encoder->protected_->blocksize <= 192)
-				encoder->protected_->qlp_coeff_precision = 7;
-			else if(encoder->protected_->blocksize <= 384)
-				encoder->protected_->qlp_coeff_precision = 8;
-			else if(encoder->protected_->blocksize <= 576)
-				encoder->protected_->qlp_coeff_precision = 9;
-			else if(encoder->protected_->blocksize <= 1152)
-				encoder->protected_->qlp_coeff_precision = 10;
-			else if(encoder->protected_->blocksize <= 2304)
-				encoder->protected_->qlp_coeff_precision = 11;
-			else if(encoder->protected_->blocksize <= 4608)
-				encoder->protected_->qlp_coeff_precision = 12;
-			else
-				encoder->protected_->qlp_coeff_precision = 13;
-		}
-		else {
-			if(encoder->protected_->blocksize <= 384)
-				encoder->protected_->qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION-2;
-			else if(encoder->protected_->blocksize <= 1152)
-				encoder->protected_->qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION-1;
-			else
-				encoder->protected_->qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION;
-		}
-		FLAC__ASSERT(encoder->protected_->qlp_coeff_precision <= FLAC__MAX_QLP_COEFF_PRECISION);
-	}
-	else if(encoder->protected_->qlp_coeff_precision < FLAC__MIN_QLP_COEFF_PRECISION || encoder->protected_->qlp_coeff_precision > FLAC__MAX_QLP_COEFF_PRECISION)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION;
-
-	if(encoder->protected_->streamable_subset) {
-		if(!FLAC__format_blocksize_is_subset(encoder->protected_->blocksize, encoder->protected_->sample_rate))
-			return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE;
-		if(!FLAC__format_sample_rate_is_subset(encoder->protected_->sample_rate))
-			return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE;
-		if(
-			encoder->protected_->bits_per_sample != 8 &&
-			encoder->protected_->bits_per_sample != 12 &&
-			encoder->protected_->bits_per_sample != 16 &&
-			encoder->protected_->bits_per_sample != 20 &&
-			encoder->protected_->bits_per_sample != 24
-		)
-			return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE;
-		if(encoder->protected_->max_residual_partition_order > FLAC__SUBSET_MAX_RICE_PARTITION_ORDER)
-			return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE;
-		if(
-			encoder->protected_->sample_rate <= 48000 &&
-			(
-				encoder->protected_->blocksize > FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ ||
-				encoder->protected_->max_lpc_order > FLAC__SUBSET_MAX_LPC_ORDER_48000HZ
-			)
-		) {
-			return FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE;
-		}
-	}
-
-	if(encoder->protected_->max_residual_partition_order >= (1u << FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN))
-		encoder->protected_->max_residual_partition_order = (1u << FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN) - 1;
-	if(encoder->protected_->min_residual_partition_order >= encoder->protected_->max_residual_partition_order)
-		encoder->protected_->min_residual_partition_order = encoder->protected_->max_residual_partition_order;
-
-#if FLAC__HAS_OGG
-	/* reorder metadata if necessary to ensure that any VORBIS_COMMENT is the first, according to the mapping spec */
-	if(is_ogg && 0 != encoder->protected_->metadata && encoder->protected_->num_metadata_blocks > 1) {
-		unsigned i1;
-		for(i1 = 1; i1 < encoder->protected_->num_metadata_blocks; i1++) {
-			if(0 != encoder->protected_->metadata[i1] && encoder->protected_->metadata[i1]->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) {
-				FLAC__StreamMetadata *vc = encoder->protected_->metadata[i1];
-				for( ; i1 > 0; i1--)
-					encoder->protected_->metadata[i1] = encoder->protected_->metadata[i1-1];
-				encoder->protected_->metadata[0] = vc;
-				break;
-			}
-		}
-	}
-#endif
-	/* keep track of any SEEKTABLE block */
-	if(0 != encoder->protected_->metadata && encoder->protected_->num_metadata_blocks > 0) {
-		unsigned i2;
-		for(i2 = 0; i2 < encoder->protected_->num_metadata_blocks; i2++) {
-			if(0 != encoder->protected_->metadata[i2] && encoder->protected_->metadata[i2]->type == FLAC__METADATA_TYPE_SEEKTABLE) {
-				encoder->private_->seek_table = &encoder->protected_->metadata[i2]->data.seek_table;
-				break; /* take only the first one */
-			}
-		}
-	}
-
-	/* validate metadata */
-	if(0 == encoder->protected_->metadata && encoder->protected_->num_metadata_blocks > 0)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-	metadata_has_seektable = false;
-	metadata_has_vorbis_comment = false;
-	metadata_picture_has_type1 = false;
-	metadata_picture_has_type2 = false;
-	for(i = 0; i < encoder->protected_->num_metadata_blocks; i++) {
-		const FLAC__StreamMetadata *m = encoder->protected_->metadata[i];
-		if(m->type == FLAC__METADATA_TYPE_STREAMINFO)
-			return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-		else if(m->type == FLAC__METADATA_TYPE_SEEKTABLE) {
-			if(metadata_has_seektable) /* only one is allowed */
-				return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-			metadata_has_seektable = true;
-			if(!FLAC__format_seektable_is_legal(&m->data.seek_table))
-				return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-		}
-		else if(m->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) {
-			if(metadata_has_vorbis_comment) /* only one is allowed */
-				return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-			metadata_has_vorbis_comment = true;
-		}
-		else if(m->type == FLAC__METADATA_TYPE_CUESHEET) {
-			if(!FLAC__format_cuesheet_is_legal(&m->data.cue_sheet, m->data.cue_sheet.is_cd, /*violation=*/0))
-				return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-		}
-		else if(m->type == FLAC__METADATA_TYPE_PICTURE) {
-			if(!FLAC__format_picture_is_legal(&m->data.picture, /*violation=*/0))
-				return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-			if(m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD) {
-				if(metadata_picture_has_type1) /* there should only be 1 per stream */
-					return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-				metadata_picture_has_type1 = true;
-				/* standard icon must be 32x32 pixel PNG */
-				if(
-					m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD &&
-					(
-						(strcmp(m->data.picture.mime_type, "image/png") && strcmp(m->data.picture.mime_type, "-->")) ||
-						m->data.picture.width != 32 ||
-						m->data.picture.height != 32
-					)
-				)
-					return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-			}
-			else if(m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON) {
-				if(metadata_picture_has_type2) /* there should only be 1 per stream */
-					return FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA;
-				metadata_picture_has_type2 = true;
-			}
-		}
-	}
-
-	encoder->private_->input_capacity = 0;
-	for(i = 0; i < encoder->protected_->channels; i++) {
-		encoder->private_->integer_signal_unaligned[i] = encoder->private_->integer_signal[i] = 0;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-		encoder->private_->real_signal_unaligned[i] = encoder->private_->real_signal[i] = 0;
-#endif
-	}
-	for(i = 0; i < 2; i++) {
-		encoder->private_->integer_signal_mid_side_unaligned[i] = encoder->private_->integer_signal_mid_side[i] = 0;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-		encoder->private_->real_signal_mid_side_unaligned[i] = encoder->private_->real_signal_mid_side[i] = 0;
-#endif
-	}
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	for(i = 0; i < encoder->protected_->num_apodizations; i++)
-		encoder->private_->window_unaligned[i] = encoder->private_->window[i] = 0;
-	encoder->private_->windowed_signal_unaligned = encoder->private_->windowed_signal = 0;
-#endif
-	for(i = 0; i < encoder->protected_->channels; i++) {
-		encoder->private_->residual_workspace_unaligned[i][0] = encoder->private_->residual_workspace[i][0] = 0;
-		encoder->private_->residual_workspace_unaligned[i][1] = encoder->private_->residual_workspace[i][1] = 0;
-		encoder->private_->best_subframe[i] = 0;
-	}
-	for(i = 0; i < 2; i++) {
-		encoder->private_->residual_workspace_mid_side_unaligned[i][0] = encoder->private_->residual_workspace_mid_side[i][0] = 0;
-		encoder->private_->residual_workspace_mid_side_unaligned[i][1] = encoder->private_->residual_workspace_mid_side[i][1] = 0;
-		encoder->private_->best_subframe_mid_side[i] = 0;
-	}
-	encoder->private_->abs_residual_partition_sums_unaligned = encoder->private_->abs_residual_partition_sums = 0;
-	encoder->private_->raw_bits_per_partition_unaligned = encoder->private_->raw_bits_per_partition = 0;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	encoder->private_->loose_mid_side_stereo_frames = (unsigned)((FLAC__double)encoder->protected_->sample_rate * 0.4 / (FLAC__double)encoder->protected_->blocksize + 0.5);
-#else
-	/* 26214 is the approximate fixed-point equivalent to 0.4 (0.4 * 2^16) */
-	/* sample rate can be up to 655350 Hz, and thus use 20 bits, so we do the multiply&divide by hand */
-	FLAC__ASSERT(FLAC__MAX_SAMPLE_RATE <= 655350);
-	FLAC__ASSERT(FLAC__MAX_BLOCK_SIZE <= 65535);
-	FLAC__ASSERT(encoder->protected_->sample_rate <= 655350);
-	FLAC__ASSERT(encoder->protected_->blocksize <= 65535);
-	encoder->private_->loose_mid_side_stereo_frames = (unsigned)FLAC__fixedpoint_trunc((((FLAC__uint64)(encoder->protected_->sample_rate) * (FLAC__uint64)(26214)) << 16) / (encoder->protected_->blocksize<<16) + FLAC__FP_ONE_HALF);
-#endif
-	if(encoder->private_->loose_mid_side_stereo_frames == 0)
-		encoder->private_->loose_mid_side_stereo_frames = 1;
-	encoder->private_->loose_mid_side_stereo_frame_count = 0;
-	encoder->private_->current_sample_number = 0;
-	encoder->private_->current_frame_number = 0;
-
-	encoder->private_->use_wide_by_block = (encoder->protected_->bits_per_sample + FLAC__bitmath_ilog2(encoder->protected_->blocksize)+1 > 30);
-	encoder->private_->use_wide_by_order = (encoder->protected_->bits_per_sample + FLAC__bitmath_ilog2(flac_max(encoder->protected_->max_lpc_order, FLAC__MAX_FIXED_ORDER))+1 > 30); /*@@@ need to use this? */
-	encoder->private_->use_wide_by_partition = (false); /*@@@ need to set this */
-
-	/*
-	 * get the CPU info and set the function pointers
-	 */
-	FLAC__cpu_info(&encoder->private_->cpuinfo);
-	/* first default to the non-asm routines */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation;
-#endif
-	encoder->private_->local_precompute_partition_info_sums = precompute_partition_info_sums_;
-	encoder->private_->local_fixed_compute_best_predictor = FLAC__fixed_compute_best_predictor;
-	encoder->private_->local_fixed_compute_best_predictor_wide = FLAC__fixed_compute_best_predictor_wide;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients;
-	encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit = FLAC__lpc_compute_residual_from_qlp_coefficients_wide;
-	encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients;
-#endif
-	/* now override with asm where appropriate */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-# ifndef FLAC__NO_ASM
-	if(encoder->private_->cpuinfo.use_asm) {
-#  ifdef FLAC__CPU_IA32
-		FLAC__ASSERT(encoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_IA32);
-#   ifdef FLAC__HAS_NASM
-		if(encoder->private_->cpuinfo.ia32.sse) {
-			if(encoder->protected_->max_lpc_order < 4)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_4;
-			else if(encoder->protected_->max_lpc_order < 8)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_8;
-			else if(encoder->protected_->max_lpc_order < 12)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_12;
-			else if(encoder->protected_->max_lpc_order < 16)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_16;
-			else
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32;
-		}
-		else
-			encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_asm_ia32;
-
-		encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit = FLAC__lpc_compute_residual_from_qlp_coefficients_wide_asm_ia32; /* OPT_IA32: was really necessary for GCC < 4.9 */
-		if(encoder->private_->cpuinfo.ia32.mmx) {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx;
-		}
-		else {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32;
-		}
-
-		if(encoder->private_->cpuinfo.ia32.mmx && encoder->private_->cpuinfo.ia32.cmov)
-			encoder->private_->local_fixed_compute_best_predictor = FLAC__fixed_compute_best_predictor_asm_ia32_mmx_cmov;
-#   endif /* FLAC__HAS_NASM */
-#   ifdef FLAC__HAS_X86INTRIN
-#    if defined FLAC__SSE_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.sse) {
-			if(encoder->protected_->max_lpc_order < 4)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_4;
-			else if(encoder->protected_->max_lpc_order < 8)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_8;
-			else if(encoder->protected_->max_lpc_order < 12)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_12;
-			else if(encoder->protected_->max_lpc_order < 16)
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_16;
-			else
-				encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation;
-		}
-#    endif
-
-#    ifdef FLAC__SSE2_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.sse2) {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients       = FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse2;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_sse2;
-		}
-#    endif
-#    ifdef FLAC__SSE4_1_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.sse41) {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients       = FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse41;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit = FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_sse41;
-		}
-#    endif
-#    ifdef FLAC__AVX2_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.avx2) {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_avx2;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients       = FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_avx2;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit = FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_avx2;
-		}
-#    endif
-
-#    ifdef FLAC__SSE2_SUPPORTED
-		if (encoder->private_->cpuinfo.ia32.sse2) {
-			encoder->private_->local_fixed_compute_best_predictor      = FLAC__fixed_compute_best_predictor_intrin_sse2;
-			encoder->private_->local_fixed_compute_best_predictor_wide = FLAC__fixed_compute_best_predictor_wide_intrin_sse2;
-		}
-#    endif
-#    ifdef FLAC__SSSE3_SUPPORTED
-		if (encoder->private_->cpuinfo.ia32.ssse3) {
-			encoder->private_->local_fixed_compute_best_predictor      = FLAC__fixed_compute_best_predictor_intrin_ssse3;
-			encoder->private_->local_fixed_compute_best_predictor_wide = FLAC__fixed_compute_best_predictor_wide_intrin_ssse3;
-		}
-#    endif
-#   endif /* FLAC__HAS_X86INTRIN */
-#  elif defined FLAC__CPU_X86_64
-		FLAC__ASSERT(encoder->private_->cpuinfo.type == FLAC__CPUINFO_TYPE_X86_64);
-#   ifdef FLAC__HAS_X86INTRIN
-#    ifdef FLAC__SSE_SUPPORTED
-		if(encoder->protected_->max_lpc_order < 4)
-			encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_4;
-		else if(encoder->protected_->max_lpc_order < 8)
-			encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_8;
-		else if(encoder->protected_->max_lpc_order < 12)
-			encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_12;
-		else if(encoder->protected_->max_lpc_order < 16)
-			encoder->private_->local_lpc_compute_autocorrelation = FLAC__lpc_compute_autocorrelation_intrin_sse_lag_16;
-#    endif
-
-#    ifdef FLAC__SSE2_SUPPORTED
-		encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_sse2;
-#    endif
-#    ifdef FLAC__SSE4_1_SUPPORTED
-		if(encoder->private_->cpuinfo.x86.sse41) {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients = FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse41;
-		}
-#    endif
-#    ifdef FLAC__AVX2_SUPPORTED
-		if(encoder->private_->cpuinfo.x86.avx2) {
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit = FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_avx2;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients       = FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_avx2;
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit = FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_avx2;
-		}
-#    endif
-
-#    ifdef FLAC__SSE2_SUPPORTED
-		encoder->private_->local_fixed_compute_best_predictor      = FLAC__fixed_compute_best_predictor_intrin_sse2;
-		encoder->private_->local_fixed_compute_best_predictor_wide = FLAC__fixed_compute_best_predictor_wide_intrin_sse2;
-#    endif
-#    ifdef FLAC__SSSE3_SUPPORTED
-		if (encoder->private_->cpuinfo.x86.ssse3) {
-			encoder->private_->local_fixed_compute_best_predictor      = FLAC__fixed_compute_best_predictor_intrin_ssse3;
-			encoder->private_->local_fixed_compute_best_predictor_wide = FLAC__fixed_compute_best_predictor_wide_intrin_ssse3;
-		}
-#    endif
-#   endif /* FLAC__HAS_X86INTRIN */
-#  endif /* FLAC__CPU_... */
-	}
-# endif /* !FLAC__NO_ASM */
-#endif /* !FLAC__INTEGER_ONLY_LIBRARY */
-#if !defined FLAC__NO_ASM && defined FLAC__HAS_X86INTRIN
-	if(encoder->private_->cpuinfo.use_asm) {
-# if defined FLAC__CPU_IA32
-#  ifdef FLAC__SSE2_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.sse2)
-			encoder->private_->local_precompute_partition_info_sums = FLAC__precompute_partition_info_sums_intrin_sse2;
-#  endif
-#  ifdef FLAC__SSSE3_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.ssse3)
-			encoder->private_->local_precompute_partition_info_sums = FLAC__precompute_partition_info_sums_intrin_ssse3;
-#  endif
-#  ifdef FLAC__AVX2_SUPPORTED
-		if(encoder->private_->cpuinfo.ia32.avx2)
-			encoder->private_->local_precompute_partition_info_sums = FLAC__precompute_partition_info_sums_intrin_avx2;
-#  endif
-# elif defined FLAC__CPU_X86_64
-#  ifdef FLAC__SSE2_SUPPORTED
-		encoder->private_->local_precompute_partition_info_sums = FLAC__precompute_partition_info_sums_intrin_sse2;
-#  endif
-#  ifdef FLAC__SSSE3_SUPPORTED
-		if(encoder->private_->cpuinfo.x86.ssse3)
-			encoder->private_->local_precompute_partition_info_sums = FLAC__precompute_partition_info_sums_intrin_ssse3;
-#  endif
-#  ifdef FLAC__AVX2_SUPPORTED
-		if(encoder->private_->cpuinfo.x86.avx2)
-			encoder->private_->local_precompute_partition_info_sums = FLAC__precompute_partition_info_sums_intrin_avx2;
-#  endif
-# endif /* FLAC__CPU_... */
-	}
-#endif /* !FLAC__NO_ASM && FLAC__HAS_X86INTRIN */
-	/* finally override based on wide-ness if necessary */
-	if(encoder->private_->use_wide_by_block) {
-		encoder->private_->local_fixed_compute_best_predictor = encoder->private_->local_fixed_compute_best_predictor_wide;
-	}
-
-	/* set state to OK; from here on, errors are fatal and we'll override the state then */
-	encoder->protected_->state = FLAC__STREAM_ENCODER_OK;
-
-#if FLAC__HAS_OGG
-	encoder->private_->is_ogg = is_ogg;
-	if(is_ogg && !FLAC__ogg_encoder_aspect_init(&encoder->protected_->ogg_encoder_aspect)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-#endif
-
-	encoder->private_->read_callback = read_callback;
-	encoder->private_->write_callback = write_callback;
-	encoder->private_->seek_callback = seek_callback;
-	encoder->private_->tell_callback = tell_callback;
-	encoder->private_->metadata_callback = metadata_callback;
-	encoder->private_->client_data = client_data;
-
-	if(!resize_buffers_(encoder, encoder->protected_->blocksize)) {
-		/* the above function sets the state for us in case of an error */
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	if(!FLAC__bitwriter_init(encoder->private_->frame)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	/*
-	 * Set up the verify stuff if necessary
-	 */
-	if(encoder->protected_->verify) {
-		/*
-		 * First, set up the fifo which will hold the
-		 * original signal to compare against
-		 */
-		encoder->private_->verify.input_fifo.size = encoder->protected_->blocksize+OVERREAD_;
-		for(i = 0; i < encoder->protected_->channels; i++) {
-			if(0 == (encoder->private_->verify.input_fifo.data[i] = (FLAC__int32*) safe_malloc_mul_2op_p(sizeof(FLAC__int32), /*times*/encoder->private_->verify.input_fifo.size))) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-				return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-			}
-		}
-		encoder->private_->verify.input_fifo.tail = 0;
-
-		/*
-		 * Now set up a stream decoder for verification
-		 */
-		if(0 == encoder->private_->verify.decoder) {
-			encoder->private_->verify.decoder = FLAC__stream_decoder_new();
-			if(0 == encoder->private_->verify.decoder) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR;
-				return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-			}
-		}
-
-		if(FLAC__stream_decoder_init_stream(encoder->private_->verify.decoder, verify_read_callback_, /*seek_callback=*/0, /*tell_callback=*/0, /*length_callback=*/0, /*eof_callback=*/0, verify_write_callback_, verify_metadata_callback_, verify_error_callback_, /*client_data=*/encoder) != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR;
-			return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-		}
-	}
-	encoder->private_->verify.error_stats.absolute_sample = 0;
-	encoder->private_->verify.error_stats.frame_number = 0;
-	encoder->private_->verify.error_stats.channel = 0;
-	encoder->private_->verify.error_stats.sample = 0;
-	encoder->private_->verify.error_stats.expected = 0;
-	encoder->private_->verify.error_stats.got = 0;
-
-	/*
-	 * These must be done before we write any metadata, because that
-	 * calls the write_callback, which uses these values.
-	 */
-	encoder->private_->first_seekpoint_to_check = 0;
-	encoder->private_->samples_written = 0;
-	encoder->protected_->streaminfo_offset = 0;
-	encoder->protected_->seektable_offset = 0;
-	encoder->protected_->audio_offset = 0;
-
-	/*
-	 * write the stream header
-	 */
-	if(encoder->protected_->verify)
-		encoder->private_->verify.state_hint = ENCODER_IN_MAGIC;
-	if(!FLAC__bitwriter_write_raw_uint32(encoder->private_->frame, FLAC__STREAM_SYNC, FLAC__STREAM_SYNC_LEN)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-	if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) {
-		/* the above function sets the state for us in case of an error */
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	/*
-	 * write the STREAMINFO metadata block
-	 */
-	if(encoder->protected_->verify)
-		encoder->private_->verify.state_hint = ENCODER_IN_METADATA;
-	encoder->private_->streaminfo.type = FLAC__METADATA_TYPE_STREAMINFO;
-	encoder->private_->streaminfo.is_last = false; /* we will have at a minimum a VORBIS_COMMENT afterwards */
-	encoder->private_->streaminfo.length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
-	encoder->private_->streaminfo.data.stream_info.min_blocksize = encoder->protected_->blocksize; /* this encoder uses the same blocksize for the whole stream */
-	encoder->private_->streaminfo.data.stream_info.max_blocksize = encoder->protected_->blocksize;
-	encoder->private_->streaminfo.data.stream_info.min_framesize = 0; /* we don't know this yet; have to fill it in later */
-	encoder->private_->streaminfo.data.stream_info.max_framesize = 0; /* we don't know this yet; have to fill it in later */
-	encoder->private_->streaminfo.data.stream_info.sample_rate = encoder->protected_->sample_rate;
-	encoder->private_->streaminfo.data.stream_info.channels = encoder->protected_->channels;
-	encoder->private_->streaminfo.data.stream_info.bits_per_sample = encoder->protected_->bits_per_sample;
-	encoder->private_->streaminfo.data.stream_info.total_samples = encoder->protected_->total_samples_estimate; /* we will replace this later with the real total */
-	memset(encoder->private_->streaminfo.data.stream_info.md5sum, 0, 16); /* we don't know this yet; have to fill it in later */
-	if(encoder->protected_->do_md5)
-		FLAC__MD5Init(&encoder->private_->md5context);
-	if(!FLAC__add_metadata_block(&encoder->private_->streaminfo, encoder->private_->frame)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-	if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) {
-		/* the above function sets the state for us in case of an error */
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	/*
-	 * Now that the STREAMINFO block is written, we can init this to an
-	 * absurdly-high value...
-	 */
-	encoder->private_->streaminfo.data.stream_info.min_framesize = (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN) - 1;
-	/* ... and clear this to 0 */
-	encoder->private_->streaminfo.data.stream_info.total_samples = 0;
-
-	/*
-	 * Check to see if the supplied metadata contains a VORBIS_COMMENT;
-	 * if not, we will write an empty one (FLAC__add_metadata_block()
-	 * automatically supplies the vendor string).
-	 *
-	 * WATCHOUT: the Ogg FLAC mapping requires us to write this block after
-	 * the STREAMINFO.  (In the case that metadata_has_vorbis_comment is
-	 * true it will have already insured that the metadata list is properly
-	 * ordered.)
-	 */
-	if(!metadata_has_vorbis_comment) {
-		FLAC__StreamMetadata vorbis_comment;
-		vorbis_comment.type = FLAC__METADATA_TYPE_VORBIS_COMMENT;
-		vorbis_comment.is_last = (encoder->protected_->num_metadata_blocks == 0);
-		vorbis_comment.length = 4 + 4; /* MAGIC NUMBER */
-		vorbis_comment.data.vorbis_comment.vendor_string.length = 0;
-		vorbis_comment.data.vorbis_comment.vendor_string.entry = 0;
-		vorbis_comment.data.vorbis_comment.num_comments = 0;
-		vorbis_comment.data.vorbis_comment.comments = 0;
-		if(!FLAC__add_metadata_block(&vorbis_comment, encoder->private_->frame)) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-			return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-		}
-		if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) {
-			/* the above function sets the state for us in case of an error */
-			return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-		}
-	}
-
-	/*
-	 * write the user's metadata blocks
-	 */
-	for(i = 0; i < encoder->protected_->num_metadata_blocks; i++) {
-		encoder->protected_->metadata[i]->is_last = (i == encoder->protected_->num_metadata_blocks - 1);
-		if(!FLAC__add_metadata_block(encoder->protected_->metadata[i], encoder->private_->frame)) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-			return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-		}
-		if(!write_bitbuffer_(encoder, 0, /*is_last_block=*/false)) {
-			/* the above function sets the state for us in case of an error */
-			return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-		}
-	}
-
-	/* now that all the metadata is written, we save the stream offset */
-	if(encoder->private_->tell_callback && encoder->private_->tell_callback(encoder, &encoder->protected_->audio_offset, encoder->private_->client_data) == FLAC__STREAM_ENCODER_TELL_STATUS_ERROR) { /* FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED just means we didn't get the offset; no error */
-		encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	if(encoder->protected_->verify)
-		encoder->private_->verify.state_hint = ENCODER_IN_AUDIO;
-
-	return FLAC__STREAM_ENCODER_INIT_STATUS_OK;
-}
-
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_stream(
-	FLAC__StreamEncoder *encoder,
-	FLAC__StreamEncoderWriteCallback write_callback,
-	FLAC__StreamEncoderSeekCallback seek_callback,
-	FLAC__StreamEncoderTellCallback tell_callback,
-	FLAC__StreamEncoderMetadataCallback metadata_callback,
-	void *client_data
-)
-{
-	return init_stream_internal_(
-		encoder,
-		/*read_callback=*/0,
-		write_callback,
-		seek_callback,
-		tell_callback,
-		metadata_callback,
-		client_data,
-		/*is_ogg=*/false
-	);
-}
-
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_stream(
-	FLAC__StreamEncoder *encoder,
-	FLAC__StreamEncoderReadCallback read_callback,
-	FLAC__StreamEncoderWriteCallback write_callback,
-	FLAC__StreamEncoderSeekCallback seek_callback,
-	FLAC__StreamEncoderTellCallback tell_callback,
-	FLAC__StreamEncoderMetadataCallback metadata_callback,
-	void *client_data
-)
-{
-	return init_stream_internal_(
-		encoder,
-		read_callback,
-		write_callback,
-		seek_callback,
-		tell_callback,
-		metadata_callback,
-		client_data,
-		/*is_ogg=*/true
-	);
-}
-
-#if 0
-static FLAC__StreamEncoderInitStatus init_FILE_internal_(
-	FLAC__StreamEncoder *encoder,
-	FILE *file,
-	FLAC__StreamEncoderProgressCallback progress_callback,
-	void *client_data,
-	FLAC__bool is_ogg
-)
-{
-	FLAC__StreamEncoderInitStatus init_status;
-
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != file);
-
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED;
-
-	/* double protection */
-	if(file == 0) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_IO_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	/*
-	 * To make sure that our file does not go unclosed after an error, we
-	 * must assign the FILE pointer before any further error can occur in
-	 * this routine.
-	 */
-	if(file == stdout)
-		file = get_binary_stdout_(); /* just to be safe */
-
-#ifdef _WIN32
-	/*
-	 * Windows can suffer quite badly from disk fragmentation. This can be
-	 * reduced significantly by setting the output buffer size to be 10MB.
-	 */
-	setvbuf(file, NULL, _IOFBF, 10*1024*1024);
-#endif
-	encoder->private_->file = file;
-
-	encoder->private_->progress_callback = progress_callback;
-	encoder->private_->bytes_written = 0;
-	encoder->private_->samples_written = 0;
-	encoder->private_->frames_written = 0;
-
-	init_status = init_stream_internal_(
-		encoder,
-		encoder->private_->file == stdout? 0 : is_ogg? file_read_callback_ : 0,
-		file_write_callback_,
-		encoder->private_->file == stdout? 0 : file_seek_callback_,
-		encoder->private_->file == stdout? 0 : file_tell_callback_,
-		/*metadata_callback=*/0,
-		client_data,
-		is_ogg
-	);
-	if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) {
-		/* the above function sets the state for us in case of an error */
-		return init_status;
-	}
-
-	{
-		unsigned blocksize = FLAC__stream_encoder_get_blocksize(encoder);
-
-		FLAC__ASSERT(blocksize != 0);
-		encoder->private_->total_frames_estimate = (unsigned)((FLAC__stream_encoder_get_total_samples_estimate(encoder) + blocksize - 1) / blocksize);
-	}
-
-	return init_status;
-}
-
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(
-	FLAC__StreamEncoder *encoder,
-	FILE *file,
-	FLAC__StreamEncoderProgressCallback progress_callback,
-	void *client_data
-)
-{
-	return init_FILE_internal_(encoder, file, progress_callback, client_data, /*is_ogg=*/false);
-}
-
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(
-	FLAC__StreamEncoder *encoder,
-	FILE *file,
-	FLAC__StreamEncoderProgressCallback progress_callback,
-	void *client_data
-)
-{
-	return init_FILE_internal_(encoder, file, progress_callback, client_data, /*is_ogg=*/true);
-}
-
-static FLAC__StreamEncoderInitStatus init_file_internal_(
-	FLAC__StreamEncoder *encoder,
-	const char *filename,
-	FLAC__StreamEncoderProgressCallback progress_callback,
-	void *client_data,
-	FLAC__bool is_ogg
-)
-{
-	FILE *file;
-
-	FLAC__ASSERT(0 != encoder);
-
-	/*
-	 * To make sure that our file does not go unclosed after an error, we
-	 * have to do the same entrance checks here that are later performed
-	 * in FLAC__stream_encoder_init_FILE() before the FILE* is assigned.
-	 */
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED;
-
-	file = filename? flac_fopen(filename, "w+b") : stdout;
-
-	if(file == 0) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_IO_ERROR;
-		return FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR;
-	}
-
-	return init_FILE_internal_(encoder, file, progress_callback, client_data, is_ogg);
-}
-
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(
-	FLAC__StreamEncoder *encoder,
-	const char *filename,
-	FLAC__StreamEncoderProgressCallback progress_callback,
-	void *client_data
-)
-{
-	return init_file_internal_(encoder, filename, progress_callback, client_data, /*is_ogg=*/false);
-}
-
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(
-	FLAC__StreamEncoder *encoder,
-	const char *filename,
-	FLAC__StreamEncoderProgressCallback progress_callback,
-	void *client_data
-)
-{
-	return init_file_internal_(encoder, filename, progress_callback, client_data, /*is_ogg=*/true);
-}
-#endif
-
-FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder)
-{
-	FLAC__bool error = false;
-
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-
-	if(encoder->protected_->state == FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return true;
-
-	if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK && !encoder->private_->is_being_deleted) {
-		if(encoder->private_->current_sample_number != 0) {
-			const FLAC__bool is_fractional_block = encoder->protected_->blocksize != encoder->private_->current_sample_number;
-			encoder->protected_->blocksize = encoder->private_->current_sample_number;
-			if(!process_frame_(encoder, is_fractional_block, /*is_last_block=*/true))
-				error = true;
-		}
-	}
-
-	if(encoder->protected_->do_md5)
-		FLAC__MD5Final(encoder->private_->streaminfo.data.stream_info.md5sum, &encoder->private_->md5context);
-
-	if(!encoder->private_->is_being_deleted) {
-		if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK) {
-			if(encoder->private_->seek_callback) {
-#if FLAC__HAS_OGG
-				if(encoder->private_->is_ogg)
-					update_ogg_metadata_(encoder);
-				else
-#endif
-				update_metadata_(encoder);
-
-				/* check if an error occurred while updating metadata */
-				if(encoder->protected_->state != FLAC__STREAM_ENCODER_OK)
-					error = true;
-			}
-			if(encoder->private_->metadata_callback)
-				encoder->private_->metadata_callback(encoder, &encoder->private_->streaminfo, encoder->private_->client_data);
-		}
-
-		if(encoder->protected_->verify && 0 != encoder->private_->verify.decoder && !FLAC__stream_decoder_finish(encoder->private_->verify.decoder)) {
-			if(!error)
-				encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA;
-			error = true;
-		}
-	}
-
-	if(0 != encoder->private_->file) {
-		if(encoder->private_->file != stdout)
-			fclose(encoder->private_->file);
-		encoder->private_->file = 0;
-	}
-
-#if FLAC__HAS_OGG
-	if(encoder->private_->is_ogg)
-		FLAC__ogg_encoder_aspect_finish(&encoder->protected_->ogg_encoder_aspect);
-#endif
-
-	free_(encoder);
-	set_defaults_(encoder);
-
-	if(!error)
-		encoder->protected_->state = FLAC__STREAM_ENCODER_UNINITIALIZED;
-
-	return !error;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-#if FLAC__HAS_OGG
-	/* can't check encoder->private_->is_ogg since that's not set until init time */
-	FLAC__ogg_encoder_aspect_set_serial_number(&encoder->protected_->ogg_encoder_aspect, value);
-	return true;
-#else
-	(void)value;
-	return false;
-#endif
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-#ifndef FLAC__MANDATORY_VERIFY_WHILE_ENCODING
-	encoder->protected_->verify = value;
-#endif
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->streamable_subset = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_md5(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->do_md5 = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->channels = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->bits_per_sample = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->sample_rate = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__bool ok = true;
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	if(value >= sizeof(compression_levels_)/sizeof(compression_levels_[0]))
-		value = sizeof(compression_levels_)/sizeof(compression_levels_[0]) - 1;
-	ok &= FLAC__stream_encoder_set_do_mid_side_stereo          (encoder, compression_levels_[value].do_mid_side_stereo);
-	ok &= FLAC__stream_encoder_set_loose_mid_side_stereo       (encoder, compression_levels_[value].loose_mid_side_stereo);
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-#if 1
-	ok &= FLAC__stream_encoder_set_apodization                 (encoder, compression_levels_[value].apodization);
-#else
-	/* equivalent to -A tukey(0.5) */
-	encoder->protected_->num_apodizations = 1;
-	encoder->protected_->apodizations[0].type = FLAC__APODIZATION_TUKEY;
-	encoder->protected_->apodizations[0].parameters.tukey.p = 0.5;
-#endif
-#endif
-	ok &= FLAC__stream_encoder_set_max_lpc_order               (encoder, compression_levels_[value].max_lpc_order);
-	ok &= FLAC__stream_encoder_set_qlp_coeff_precision         (encoder, compression_levels_[value].qlp_coeff_precision);
-	ok &= FLAC__stream_encoder_set_do_qlp_coeff_prec_search    (encoder, compression_levels_[value].do_qlp_coeff_prec_search);
-	ok &= FLAC__stream_encoder_set_do_escape_coding            (encoder, compression_levels_[value].do_escape_coding);
-	ok &= FLAC__stream_encoder_set_do_exhaustive_model_search  (encoder, compression_levels_[value].do_exhaustive_model_search);
-	ok &= FLAC__stream_encoder_set_min_residual_partition_order(encoder, compression_levels_[value].min_residual_partition_order);
-	ok &= FLAC__stream_encoder_set_max_residual_partition_order(encoder, compression_levels_[value].max_residual_partition_order);
-	ok &= FLAC__stream_encoder_set_rice_parameter_search_dist  (encoder, compression_levels_[value].rice_parameter_search_dist);
-	return ok;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->blocksize = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->do_mid_side_stereo = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->loose_mid_side_stereo = value;
-	return true;
-}
-
-/*@@@@add to tests*/
-FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	FLAC__ASSERT(0 != specification);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-#ifdef FLAC__INTEGER_ONLY_LIBRARY
-	(void)specification; /* silently ignore since we haven't integerized; will always use a rectangular window */
-#else
-	encoder->protected_->num_apodizations = 0;
-	while(1) {
-		const char *s = strchr(specification, ';');
-		const size_t n = s? (size_t)(s - specification) : strlen(specification);
-		if     (n==8  && 0 == strncmp("bartlett"     , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BARTLETT;
-		else if(n==13 && 0 == strncmp("bartlett_hann", specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BARTLETT_HANN;
-		else if(n==8  && 0 == strncmp("blackman"     , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BLACKMAN;
-		else if(n==26 && 0 == strncmp("blackman_harris_4term_92db", specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE;
-		else if(n==6  && 0 == strncmp("connes"       , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_CONNES;
-		else if(n==7  && 0 == strncmp("flattop"      , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_FLATTOP;
-		else if(n>7   && 0 == strncmp("gauss("       , specification, 6)) {
-			FLAC__real stddev = (FLAC__real)strtod(specification+6, 0);
-			if (stddev > 0.0 && stddev <= 0.5) {
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.gauss.stddev = stddev;
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_GAUSS;
-			}
-		}
-		else if(n==7  && 0 == strncmp("hamming"      , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_HAMMING;
-		else if(n==4  && 0 == strncmp("hann"         , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_HANN;
-		else if(n==13 && 0 == strncmp("kaiser_bessel", specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_KAISER_BESSEL;
-		else if(n==7  && 0 == strncmp("nuttall"      , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_NUTTALL;
-		else if(n==9  && 0 == strncmp("rectangle"    , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_RECTANGLE;
-		else if(n==8  && 0 == strncmp("triangle"     , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_TRIANGLE;
-		else if(n>7   && 0 == strncmp("tukey("       , specification, 6)) {
-			FLAC__real p = (FLAC__real)strtod(specification+6, 0);
-			if (p >= 0.0 && p <= 1.0) {
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.tukey.p = p;
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_TUKEY;
-			}
-		}
-		else if(n>15   && 0 == strncmp("partial_tukey("       , specification, 14)) {
-			FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+14, 0);
-			const char *si_1 = strchr(specification, '/');
-			FLAC__real overlap = si_1?flac_min((FLAC__real)strtod(si_1+1, 0),0.99f):0.1f;
-			FLAC__real overlap_units = 1.0f/(1.0f - overlap) - 1.0f;
-			const char *si_2 = strchr((si_1?(si_1+1):specification), '/');
-			FLAC__real tukey_p = si_2?(FLAC__real)strtod(si_2+1, 0):0.2f;
-
-			if (tukey_parts <= 1) {
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.tukey.p = tukey_p;
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_TUKEY;
-			}else if (encoder->protected_->num_apodizations + tukey_parts < 32){
-				FLAC__int32 m;
-				for(m = 0; m < tukey_parts; m++){
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.multiple_tukey.p = tukey_p;
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.multiple_tukey.start = m/(tukey_parts+overlap_units);
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.multiple_tukey.end = (m+1+overlap_units)/(tukey_parts+overlap_units);
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_PARTIAL_TUKEY;
-				}
-			}
-		}
-		else if(n>16   && 0 == strncmp("punchout_tukey("       , specification, 15)) {
-			FLAC__int32 tukey_parts = (FLAC__int32)strtod(specification+15, 0);
-			const char *si_1 = strchr(specification, '/');
-			FLAC__real overlap = si_1?flac_min((FLAC__real)strtod(si_1+1, 0),0.99f):0.2f;
-			FLAC__real overlap_units = 1.0f/(1.0f - overlap) - 1.0f;
-			const char *si_2 = strchr((si_1?(si_1+1):specification), '/');
-			FLAC__real tukey_p = si_2?(FLAC__real)strtod(si_2+1, 0):0.2f;
-
-			if (tukey_parts <= 1) {
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.tukey.p = tukey_p;
-				encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_TUKEY;
-			}else if (encoder->protected_->num_apodizations + tukey_parts < 32){
-				FLAC__int32 m;
-				for(m = 0; m < tukey_parts; m++){
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.multiple_tukey.p = tukey_p;
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.multiple_tukey.start = m/(tukey_parts+overlap_units);
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations].parameters.multiple_tukey.end = (m+1+overlap_units)/(tukey_parts+overlap_units);
-					encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_PUNCHOUT_TUKEY;
-				}
-			}
-		}
-		else if(n==5  && 0 == strncmp("welch"        , specification, n))
-			encoder->protected_->apodizations[encoder->protected_->num_apodizations++].type = FLAC__APODIZATION_WELCH;
-		if (encoder->protected_->num_apodizations == 32)
-			break;
-		if (s)
-			specification = s+1;
-		else
-			break;
-	}
-	if(encoder->protected_->num_apodizations == 0) {
-		encoder->protected_->num_apodizations = 1;
-		encoder->protected_->apodizations[0].type = FLAC__APODIZATION_TUKEY;
-		encoder->protected_->apodizations[0].parameters.tukey.p = 0.5;
-	}
-#endif
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->max_lpc_order = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->qlp_coeff_precision = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->do_qlp_coeff_prec_search = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-#if 0
-	/*@@@ deprecated: */
-	encoder->protected_->do_escape_coding = value;
-#else
-	(void)value;
-#endif
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->do_exhaustive_model_search = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->min_residual_partition_order = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->max_residual_partition_order = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-#if 0
-	/*@@@ deprecated: */
-	encoder->protected_->rice_parameter_search_dist = value;
-#else
-	(void)value;
-#endif
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->protected_->total_samples_estimate = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	if(0 == metadata)
-		num_blocks = 0;
-	if(0 == num_blocks)
-		metadata = 0;
-	/* realloc() does not do exactly what we want so... */
-	if(encoder->protected_->metadata) {
-		free(encoder->protected_->metadata);
-		encoder->protected_->metadata = 0;
-		encoder->protected_->num_metadata_blocks = 0;
-	}
-	if(num_blocks) {
-		FLAC__StreamMetadata **m;
-		if(0 == (m = (FLAC__StreamMetadata**) safe_malloc_mul_2op_p(sizeof(m[0]), /*times*/num_blocks)))
-			return false;
-		memcpy(m, metadata, sizeof(m[0]) * num_blocks);
-		encoder->protected_->metadata = m;
-		encoder->protected_->num_metadata_blocks = num_blocks;
-	}
-#if FLAC__HAS_OGG
-	if(!FLAC__ogg_encoder_aspect_set_num_metadata(&encoder->protected_->ogg_encoder_aspect, num_blocks))
-		return false;
-#endif
-	return true;
-}
-
-/*
- * These three functions are not static, but not publically exposed in
- * include/FLAC/ either.  They are used by the test suite.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_disable_constant_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->private_->disable_constant_subframes = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_disable_fixed_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->private_->disable_fixed_subframes = value;
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_disable_verbatim_subframes(FLAC__StreamEncoder *encoder, FLAC__bool value)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_UNINITIALIZED)
-		return false;
-	encoder->private_->disable_verbatim_subframes = value;
-	return true;
-}
-
-FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->state;
-}
-
-FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->verify)
-		return FLAC__stream_decoder_get_state(encoder->private_->verify.decoder);
-	else
-		return FLAC__STREAM_DECODER_UNINITIALIZED;
-}
-
-FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(encoder->protected_->state != FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR)
-		return FLAC__StreamEncoderStateString[encoder->protected_->state];
-	else
-		return FLAC__stream_decoder_get_resolved_state_string(encoder->private_->verify.decoder);
-}
-
-FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	if(0 != absolute_sample)
-		*absolute_sample = encoder->private_->verify.error_stats.absolute_sample;
-	if(0 != frame_number)
-		*frame_number = encoder->private_->verify.error_stats.frame_number;
-	if(0 != channel)
-		*channel = encoder->private_->verify.error_stats.channel;
-	if(0 != sample)
-		*sample = encoder->private_->verify.error_stats.sample;
-	if(0 != expected)
-		*expected = encoder->private_->verify.error_stats.expected;
-	if(0 != got)
-		*got = encoder->private_->verify.error_stats.got;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->verify;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->streamable_subset;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_md5(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->do_md5;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->channels;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->bits_per_sample;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->sample_rate;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->blocksize;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->do_mid_side_stereo;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->loose_mid_side_stereo;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->max_lpc_order;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->qlp_coeff_precision;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->do_qlp_coeff_prec_search;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->do_escape_coding;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->do_exhaustive_model_search;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->min_residual_partition_order;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->max_residual_partition_order;
-}
-
-FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->rice_parameter_search_dist;
-}
-
-FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	return encoder->protected_->total_samples_estimate;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples)
-{
-	unsigned i, j = 0, channel;
-	const unsigned channels = encoder->protected_->channels, blocksize = encoder->protected_->blocksize;
-
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK);
-
-	do {
-		const unsigned n = flac_min(blocksize+OVERREAD_-encoder->private_->current_sample_number, samples-j);
-
-		if(encoder->protected_->verify)
-			append_to_verify_fifo_(&encoder->private_->verify.input_fifo, buffer, j, channels, n);
-
-		for(channel = 0; channel < channels; channel++)
-			memcpy(&encoder->private_->integer_signal[channel][encoder->private_->current_sample_number], &buffer[channel][j], sizeof(buffer[channel][0]) * n);
-
-		if(encoder->protected_->do_mid_side_stereo) {
-			FLAC__ASSERT(channels == 2);
-			/* "i <= blocksize" to overread 1 sample; see comment in OVERREAD_ decl */
-			for(i = encoder->private_->current_sample_number; i <= blocksize && j < samples; i++, j++) {
-				encoder->private_->integer_signal_mid_side[1][i] = buffer[0][j] - buffer[1][j];
-				encoder->private_->integer_signal_mid_side[0][i] = (buffer[0][j] + buffer[1][j]) >> 1; /* NOTE: not the same as 'mid = (buffer[0][j] + buffer[1][j]) / 2' ! */
-			}
-		}
-		else
-			j += n;
-
-		encoder->private_->current_sample_number += n;
-
-		/* we only process if we have a full block + 1 extra sample; final block is always handled by FLAC__stream_encoder_finish() */
-		if(encoder->private_->current_sample_number > blocksize) {
-			FLAC__ASSERT(encoder->private_->current_sample_number == blocksize+OVERREAD_);
-			FLAC__ASSERT(OVERREAD_ == 1); /* assert we only overread 1 sample which simplifies the rest of the code below */
-			if(!process_frame_(encoder, /*is_fractional_block=*/false, /*is_last_block=*/false))
-				return false;
-			/* move unprocessed overread samples to beginnings of arrays */
-			for(channel = 0; channel < channels; channel++)
-				encoder->private_->integer_signal[channel][0] = encoder->private_->integer_signal[channel][blocksize];
-			if(encoder->protected_->do_mid_side_stereo) {
-				encoder->private_->integer_signal_mid_side[0][0] = encoder->private_->integer_signal_mid_side[0][blocksize];
-				encoder->private_->integer_signal_mid_side[1][0] = encoder->private_->integer_signal_mid_side[1][blocksize];
-			}
-			encoder->private_->current_sample_number = 1;
-		}
-	} while(j < samples);
-
-	return true;
-}
-
-FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples)
-{
-	unsigned i, j, k, channel;
-	FLAC__int32 x, mid, side;
-	const unsigned channels = encoder->protected_->channels, blocksize = encoder->protected_->blocksize;
-
-	FLAC__ASSERT(0 != encoder);
-	FLAC__ASSERT(0 != encoder->private_);
-	FLAC__ASSERT(0 != encoder->protected_);
-	FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK);
-
-	j = k = 0;
-	/*
-	 * we have several flavors of the same basic loop, optimized for
-	 * different conditions:
-	 */
-	if(encoder->protected_->do_mid_side_stereo && channels == 2) {
-		/*
-		 * stereo coding: unroll channel loop
-		 */
-		do {
-			if(encoder->protected_->verify)
-				append_to_verify_fifo_interleaved_(&encoder->private_->verify.input_fifo, buffer, j, channels, flac_min(blocksize+OVERREAD_-encoder->private_->current_sample_number, samples-j));
-
-			/* "i <= blocksize" to overread 1 sample; see comment in OVERREAD_ decl */
-			for(i = encoder->private_->current_sample_number; i <= blocksize && j < samples; i++, j++) {
-				encoder->private_->integer_signal[0][i] = mid = side = buffer[k++];
-				x = buffer[k++];
-				encoder->private_->integer_signal[1][i] = x;
-				mid += x;
-				side -= x;
-				mid >>= 1; /* NOTE: not the same as 'mid = (left + right) / 2' ! */
-				encoder->private_->integer_signal_mid_side[1][i] = side;
-				encoder->private_->integer_signal_mid_side[0][i] = mid;
-			}
-			encoder->private_->current_sample_number = i;
-			/* we only process if we have a full block + 1 extra sample; final block is always handled by FLAC__stream_encoder_finish() */
-			if(i > blocksize) {
-				if(!process_frame_(encoder, /*is_fractional_block=*/false, /*is_last_block=*/false))
-					return false;
-				/* move unprocessed overread samples to beginnings of arrays */
-				FLAC__ASSERT(i == blocksize+OVERREAD_);
-				FLAC__ASSERT(OVERREAD_ == 1); /* assert we only overread 1 sample which simplifies the rest of the code below */
-				encoder->private_->integer_signal[0][0] = encoder->private_->integer_signal[0][blocksize];
-				encoder->private_->integer_signal[1][0] = encoder->private_->integer_signal[1][blocksize];
-				encoder->private_->integer_signal_mid_side[0][0] = encoder->private_->integer_signal_mid_side[0][blocksize];
-				encoder->private_->integer_signal_mid_side[1][0] = encoder->private_->integer_signal_mid_side[1][blocksize];
-				encoder->private_->current_sample_number = 1;
-			}
-		} while(j < samples);
-	}
-	else {
-		/*
-		 * independent channel coding: buffer each channel in inner loop
-		 */
-		do {
-			if(encoder->protected_->verify)
-				append_to_verify_fifo_interleaved_(&encoder->private_->verify.input_fifo, buffer, j, channels, flac_min(blocksize+OVERREAD_-encoder->private_->current_sample_number, samples-j));
-
-			/* "i <= blocksize" to overread 1 sample; see comment in OVERREAD_ decl */
-			for(i = encoder->private_->current_sample_number; i <= blocksize && j < samples; i++, j++) {
-				for(channel = 0; channel < channels; channel++)
-					encoder->private_->integer_signal[channel][i] = buffer[k++];
-			}
-			encoder->private_->current_sample_number = i;
-			/* we only process if we have a full block + 1 extra sample; final block is always handled by FLAC__stream_encoder_finish() */
-			if(i > blocksize) {
-				if(!process_frame_(encoder, /*is_fractional_block=*/false, /*is_last_block=*/false))
-					return false;
-				/* move unprocessed overread samples to beginnings of arrays */
-				FLAC__ASSERT(i == blocksize+OVERREAD_);
-				FLAC__ASSERT(OVERREAD_ == 1); /* assert we only overread 1 sample which simplifies the rest of the code below */
-				for(channel = 0; channel < channels; channel++)
-					encoder->private_->integer_signal[channel][0] = encoder->private_->integer_signal[channel][blocksize];
-				encoder->private_->current_sample_number = 1;
-			}
-		} while(j < samples);
-	}
-
-	return true;
-}
-
-/***********************************************************************
- *
- * Private class methods
- *
- ***********************************************************************/
-
-void set_defaults_(FLAC__StreamEncoder *encoder)
-{
-	FLAC__ASSERT(0 != encoder);
-
-#ifdef FLAC__MANDATORY_VERIFY_WHILE_ENCODING
-	encoder->protected_->verify = true;
-#else
-	encoder->protected_->verify = false;
-#endif
-	encoder->protected_->streamable_subset = true;
-	encoder->protected_->do_md5 = true;
-	encoder->protected_->do_mid_side_stereo = false;
-	encoder->protected_->loose_mid_side_stereo = false;
-	encoder->protected_->channels = 2;
-	encoder->protected_->bits_per_sample = 16;
-	encoder->protected_->sample_rate = 44100;
-	encoder->protected_->blocksize = 0;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	encoder->protected_->num_apodizations = 1;
-	encoder->protected_->apodizations[0].type = FLAC__APODIZATION_TUKEY;
-	encoder->protected_->apodizations[0].parameters.tukey.p = 0.5;
-#endif
-	encoder->protected_->max_lpc_order = 0;
-	encoder->protected_->qlp_coeff_precision = 0;
-	encoder->protected_->do_qlp_coeff_prec_search = false;
-	encoder->protected_->do_exhaustive_model_search = false;
-	encoder->protected_->do_escape_coding = false;
-	encoder->protected_->min_residual_partition_order = 0;
-	encoder->protected_->max_residual_partition_order = 0;
-	encoder->protected_->rice_parameter_search_dist = 0;
-	encoder->protected_->total_samples_estimate = 0;
-	encoder->protected_->metadata = 0;
-	encoder->protected_->num_metadata_blocks = 0;
-
-	encoder->private_->seek_table = 0;
-	encoder->private_->disable_constant_subframes = false;
-	encoder->private_->disable_fixed_subframes = false;
-	encoder->private_->disable_verbatim_subframes = false;
-#if FLAC__HAS_OGG
-	encoder->private_->is_ogg = false;
-#endif
-	encoder->private_->read_callback = 0;
-	encoder->private_->write_callback = 0;
-	encoder->private_->seek_callback = 0;
-	encoder->private_->tell_callback = 0;
-	encoder->private_->metadata_callback = 0;
-	encoder->private_->progress_callback = 0;
-	encoder->private_->client_data = 0;
-
-#if FLAC__HAS_OGG
-	FLAC__ogg_encoder_aspect_set_defaults(&encoder->protected_->ogg_encoder_aspect);
-#endif
-
-	FLAC__stream_encoder_set_compression_level(encoder, 5);
-}
-
-void free_(FLAC__StreamEncoder *encoder)
-{
-	unsigned i, channel;
-
-	FLAC__ASSERT(0 != encoder);
-	if(encoder->protected_->metadata) {
-		free(encoder->protected_->metadata);
-		encoder->protected_->metadata = 0;
-		encoder->protected_->num_metadata_blocks = 0;
-	}
-	for(i = 0; i < encoder->protected_->channels; i++) {
-		if(0 != encoder->private_->integer_signal_unaligned[i]) {
-			free(encoder->private_->integer_signal_unaligned[i]);
-			encoder->private_->integer_signal_unaligned[i] = 0;
-		}
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-		if(0 != encoder->private_->real_signal_unaligned[i]) {
-			free(encoder->private_->real_signal_unaligned[i]);
-			encoder->private_->real_signal_unaligned[i] = 0;
-		}
-#endif
-	}
-	for(i = 0; i < 2; i++) {
-		if(0 != encoder->private_->integer_signal_mid_side_unaligned[i]) {
-			free(encoder->private_->integer_signal_mid_side_unaligned[i]);
-			encoder->private_->integer_signal_mid_side_unaligned[i] = 0;
-		}
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-		if(0 != encoder->private_->real_signal_mid_side_unaligned[i]) {
-			free(encoder->private_->real_signal_mid_side_unaligned[i]);
-			encoder->private_->real_signal_mid_side_unaligned[i] = 0;
-		}
-#endif
-	}
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	for(i = 0; i < encoder->protected_->num_apodizations; i++) {
-		if(0 != encoder->private_->window_unaligned[i]) {
-			free(encoder->private_->window_unaligned[i]);
-			encoder->private_->window_unaligned[i] = 0;
-		}
-	}
-	if(0 != encoder->private_->windowed_signal_unaligned) {
-		free(encoder->private_->windowed_signal_unaligned);
-		encoder->private_->windowed_signal_unaligned = 0;
-	}
-#endif
-	for(channel = 0; channel < encoder->protected_->channels; channel++) {
-		for(i = 0; i < 2; i++) {
-			if(0 != encoder->private_->residual_workspace_unaligned[channel][i]) {
-				free(encoder->private_->residual_workspace_unaligned[channel][i]);
-				encoder->private_->residual_workspace_unaligned[channel][i] = 0;
-			}
-		}
-	}
-	for(channel = 0; channel < 2; channel++) {
-		for(i = 0; i < 2; i++) {
-			if(0 != encoder->private_->residual_workspace_mid_side_unaligned[channel][i]) {
-				free(encoder->private_->residual_workspace_mid_side_unaligned[channel][i]);
-				encoder->private_->residual_workspace_mid_side_unaligned[channel][i] = 0;
-			}
-		}
-	}
-	if(0 != encoder->private_->abs_residual_partition_sums_unaligned) {
-		free(encoder->private_->abs_residual_partition_sums_unaligned);
-		encoder->private_->abs_residual_partition_sums_unaligned = 0;
-	}
-	if(0 != encoder->private_->raw_bits_per_partition_unaligned) {
-		free(encoder->private_->raw_bits_per_partition_unaligned);
-		encoder->private_->raw_bits_per_partition_unaligned = 0;
-	}
-	if(encoder->protected_->verify) {
-		for(i = 0; i < encoder->protected_->channels; i++) {
-			if(0 != encoder->private_->verify.input_fifo.data[i]) {
-				free(encoder->private_->verify.input_fifo.data[i]);
-				encoder->private_->verify.input_fifo.data[i] = 0;
-			}
-		}
-	}
-	FLAC__bitwriter_free(encoder->private_->frame);
-}
-
-FLAC__bool resize_buffers_(FLAC__StreamEncoder *encoder, unsigned new_blocksize)
-{
-	FLAC__bool ok;
-	unsigned i, channel;
-
-	FLAC__ASSERT(new_blocksize > 0);
-	FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK);
-	FLAC__ASSERT(encoder->private_->current_sample_number == 0);
-
-	/* To avoid excessive malloc'ing, we only grow the buffer; no shrinking. */
-	if(new_blocksize <= encoder->private_->input_capacity)
-		return true;
-
-	ok = true;
-
-	/* WATCHOUT: FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx() and ..._intrin_sse2()
-	 * require that the input arrays (in our case the integer signals)
-	 * have a buffer of up to 3 zeroes in front (at negative indices) for
-	 * alignment purposes; we use 4 in front to keep the data well-aligned.
-	 */
-
-	for(i = 0; ok && i < encoder->protected_->channels; i++) {
-		ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize+4+OVERREAD_, &encoder->private_->integer_signal_unaligned[i], &encoder->private_->integer_signal[i]);
-		memset(encoder->private_->integer_signal[i], 0, sizeof(FLAC__int32)*4);
-		encoder->private_->integer_signal[i] += 4;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-#if 0 /* @@@ currently unused */
-		if(encoder->protected_->max_lpc_order > 0)
-			ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize+OVERREAD_, &encoder->private_->real_signal_unaligned[i], &encoder->private_->real_signal[i]);
-#endif
-#endif
-	}
-	for(i = 0; ok && i < 2; i++) {
-		ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize+4+OVERREAD_, &encoder->private_->integer_signal_mid_side_unaligned[i], &encoder->private_->integer_signal_mid_side[i]);
-		memset(encoder->private_->integer_signal_mid_side[i], 0, sizeof(FLAC__int32)*4);
-		encoder->private_->integer_signal_mid_side[i] += 4;
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-#if 0 /* @@@ currently unused */
-		if(encoder->protected_->max_lpc_order > 0)
-			ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize+OVERREAD_, &encoder->private_->real_signal_mid_side_unaligned[i], &encoder->private_->real_signal_mid_side[i]);
-#endif
-#endif
-	}
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	if(ok && encoder->protected_->max_lpc_order > 0) {
-		for(i = 0; ok && i < encoder->protected_->num_apodizations; i++)
-			ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize, &encoder->private_->window_unaligned[i], &encoder->private_->window[i]);
-		ok = ok && FLAC__memory_alloc_aligned_real_array(new_blocksize, &encoder->private_->windowed_signal_unaligned, &encoder->private_->windowed_signal);
-	}
-#endif
-	for(channel = 0; ok && channel < encoder->protected_->channels; channel++) {
-		for(i = 0; ok && i < 2; i++) {
-			ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize, &encoder->private_->residual_workspace_unaligned[channel][i], &encoder->private_->residual_workspace[channel][i]);
-		}
-	}
-	for(channel = 0; ok && channel < 2; channel++) {
-		for(i = 0; ok && i < 2; i++) {
-			ok = ok && FLAC__memory_alloc_aligned_int32_array(new_blocksize, &encoder->private_->residual_workspace_mid_side_unaligned[channel][i], &encoder->private_->residual_workspace_mid_side[channel][i]);
-		}
-	}
-	/* the *2 is an approximation to the series 1 + 1/2 + 1/4 + ... that sums tree occupies in a flat array */
-	/*@@@ new_blocksize*2 is too pessimistic, but to fix, we need smarter logic because a smaller new_blocksize can actually increase the # of partitions; would require moving this out into a separate function, then checking its capacity against the need of the current blocksize&min/max_partition_order (and maybe predictor order) */
-	ok = ok && FLAC__memory_alloc_aligned_uint64_array(new_blocksize * 2, &encoder->private_->abs_residual_partition_sums_unaligned, &encoder->private_->abs_residual_partition_sums);
-	if(encoder->protected_->do_escape_coding)
-		ok = ok && FLAC__memory_alloc_aligned_unsigned_array(new_blocksize * 2, &encoder->private_->raw_bits_per_partition_unaligned, &encoder->private_->raw_bits_per_partition);
-
-	/* now adjust the windows if the blocksize has changed */
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	if(ok && new_blocksize != encoder->private_->input_capacity && encoder->protected_->max_lpc_order > 0) {
-		for(i = 0; ok && i < encoder->protected_->num_apodizations; i++) {
-			switch(encoder->protected_->apodizations[i].type) {
-				case FLAC__APODIZATION_BARTLETT:
-					FLAC__window_bartlett(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_BARTLETT_HANN:
-					FLAC__window_bartlett_hann(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_BLACKMAN:
-					FLAC__window_blackman(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_BLACKMAN_HARRIS_4TERM_92DB_SIDELOBE:
-					FLAC__window_blackman_harris_4term_92db_sidelobe(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_CONNES:
-					FLAC__window_connes(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_FLATTOP:
-					FLAC__window_flattop(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_GAUSS:
-					FLAC__window_gauss(encoder->private_->window[i], new_blocksize, encoder->protected_->apodizations[i].parameters.gauss.stddev);
-					break;
-				case FLAC__APODIZATION_HAMMING:
-					FLAC__window_hamming(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_HANN:
-					FLAC__window_hann(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_KAISER_BESSEL:
-					FLAC__window_kaiser_bessel(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_NUTTALL:
-					FLAC__window_nuttall(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_RECTANGLE:
-					FLAC__window_rectangle(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_TRIANGLE:
-					FLAC__window_triangle(encoder->private_->window[i], new_blocksize);
-					break;
-				case FLAC__APODIZATION_TUKEY:
-					FLAC__window_tukey(encoder->private_->window[i], new_blocksize, encoder->protected_->apodizations[i].parameters.tukey.p);
-					break;
-				case FLAC__APODIZATION_PARTIAL_TUKEY:
-					FLAC__window_partial_tukey(encoder->private_->window[i], new_blocksize, encoder->protected_->apodizations[i].parameters.multiple_tukey.p, encoder->protected_->apodizations[i].parameters.multiple_tukey.start, encoder->protected_->apodizations[i].parameters.multiple_tukey.end);
-					break;
-				case FLAC__APODIZATION_PUNCHOUT_TUKEY:
-					FLAC__window_punchout_tukey(encoder->private_->window[i], new_blocksize, encoder->protected_->apodizations[i].parameters.multiple_tukey.p, encoder->protected_->apodizations[i].parameters.multiple_tukey.start, encoder->protected_->apodizations[i].parameters.multiple_tukey.end);
-					break;
-				case FLAC__APODIZATION_WELCH:
-					FLAC__window_welch(encoder->private_->window[i], new_blocksize);
-					break;
-				default:
-					FLAC__ASSERT(0);
-					/* double protection */
-					FLAC__window_hann(encoder->private_->window[i], new_blocksize);
-					break;
-			}
-		}
-	}
-#endif
-
-	if(ok)
-		encoder->private_->input_capacity = new_blocksize;
-	else
-		encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-
-	return ok;
-}
-
-FLAC__bool write_bitbuffer_(FLAC__StreamEncoder *encoder, unsigned samples, FLAC__bool is_last_block)
-{
-	const FLAC__byte *buffer;
-	size_t bytes;
-
-	FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(encoder->private_->frame));
-
-	if(!FLAC__bitwriter_get_buffer(encoder->private_->frame, &buffer, &bytes)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-
-	if(encoder->protected_->verify) {
-		encoder->private_->verify.output.data = buffer;
-		encoder->private_->verify.output.bytes = bytes;
-		if(encoder->private_->verify.state_hint == ENCODER_IN_MAGIC) {
-			encoder->private_->verify.needs_magic_hack = true;
-		}
-		else {
-			if(!FLAC__stream_decoder_process_single(encoder->private_->verify.decoder)) {
-				FLAC__bitwriter_release_buffer(encoder->private_->frame);
-				FLAC__bitwriter_clear(encoder->private_->frame);
-				if(encoder->protected_->state != FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA)
-					encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR;
-				return false;
-			}
-		}
-	}
-
-	if(write_frame_(encoder, buffer, bytes, samples, is_last_block) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-		FLAC__bitwriter_release_buffer(encoder->private_->frame);
-		FLAC__bitwriter_clear(encoder->private_->frame);
-		encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-		return false;
-	}
-
-	FLAC__bitwriter_release_buffer(encoder->private_->frame);
-	FLAC__bitwriter_clear(encoder->private_->frame);
-
-	if(samples > 0) {
-		encoder->private_->streaminfo.data.stream_info.min_framesize = flac_min(bytes, (size_t) encoder->private_->streaminfo.data.stream_info.min_framesize);
-		encoder->private_->streaminfo.data.stream_info.max_framesize = flac_max(bytes, (size_t) encoder->private_->streaminfo.data.stream_info.max_framesize);
-	}
-
-	return true;
-}
-
-FLAC__StreamEncoderWriteStatus write_frame_(FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, FLAC__bool is_last_block)
-{
-	FLAC__StreamEncoderWriteStatus status;
-	FLAC__uint64 output_position = 0;
-
-#if FLAC__HAS_OGG == 0
-	(void)is_last_block;
-#endif
-
-	/* FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED just means we didn't get the offset; no error */
-	if(encoder->private_->tell_callback && encoder->private_->tell_callback(encoder, &output_position, encoder->private_->client_data) == FLAC__STREAM_ENCODER_TELL_STATUS_ERROR) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-		return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
-	}
-
-	/*
-	 * Watch for the STREAMINFO block and first SEEKTABLE block to go by and store their offsets.
-	 */
-	if(samples == 0) {
-		FLAC__MetadataType type = (FLAC__MetadataType) (buffer[0] & 0x7f);
-		if(type == FLAC__METADATA_TYPE_STREAMINFO)
-			encoder->protected_->streaminfo_offset = output_position;
-		else if(type == FLAC__METADATA_TYPE_SEEKTABLE && encoder->protected_->seektable_offset == 0)
-			encoder->protected_->seektable_offset = output_position;
-	}
-
-	/*
-	 * Mark the current seek point if hit (if audio_offset == 0 that
-	 * means we're still writing metadata and haven't hit the first
-	 * frame yet)
-	 */
-	if(0 != encoder->private_->seek_table && encoder->protected_->audio_offset > 0 && encoder->private_->seek_table->num_points > 0) {
-		const unsigned blocksize = FLAC__stream_encoder_get_blocksize(encoder);
-		const FLAC__uint64 frame_first_sample = encoder->private_->samples_written;
-		const FLAC__uint64 frame_last_sample = frame_first_sample + (FLAC__uint64)blocksize - 1;
-		FLAC__uint64 test_sample;
-		unsigned i;
-		for(i = encoder->private_->first_seekpoint_to_check; i < encoder->private_->seek_table->num_points; i++) {
-			test_sample = encoder->private_->seek_table->points[i].sample_number;
-			if(test_sample > frame_last_sample) {
-				break;
-			}
-			else if(test_sample >= frame_first_sample) {
-				encoder->private_->seek_table->points[i].sample_number = frame_first_sample;
-				encoder->private_->seek_table->points[i].stream_offset = output_position - encoder->protected_->audio_offset;
-				encoder->private_->seek_table->points[i].frame_samples = blocksize;
-				encoder->private_->first_seekpoint_to_check++;
-				/* DO NOT: "break;" and here's why:
-				 * The seektable template may contain more than one target
-				 * sample for any given frame; we will keep looping, generating
-				 * duplicate seekpoints for them, and we'll clean it up later,
-				 * just before writing the seektable back to the metadata.
-				 */
-			}
-			else {
-				encoder->private_->first_seekpoint_to_check++;
-			}
-		}
-	}
-
-#if FLAC__HAS_OGG
-	if(encoder->private_->is_ogg) {
-		status = FLAC__ogg_encoder_aspect_write_callback_wrapper(
-			&encoder->protected_->ogg_encoder_aspect,
-			buffer,
-			bytes,
-			samples,
-			encoder->private_->current_frame_number,
-			is_last_block,
-			(FLAC__OggEncoderAspectWriteCallbackProxy)encoder->private_->write_callback,
-			encoder,
-			encoder->private_->client_data
-		);
-	}
-	else
-#endif
-	status = encoder->private_->write_callback(encoder, buffer, bytes, samples, encoder->private_->current_frame_number, encoder->private_->client_data);
-
-	if(status == FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-		encoder->private_->bytes_written += bytes;
-		encoder->private_->samples_written += samples;
-		/* we keep a high watermark on the number of frames written because
-		 * when the encoder goes back to write metadata, 'current_frame'
-		 * will drop back to 0.
-		 */
-		encoder->private_->frames_written = flac_max(encoder->private_->frames_written, encoder->private_->current_frame_number+1);
-	}
-	else
-		encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-
-	return status;
-}
-
-/* Gets called when the encoding process has finished so that we can update the STREAMINFO and SEEKTABLE blocks.  */
-void update_metadata_(const FLAC__StreamEncoder *encoder)
-{
-	FLAC__byte b[FLAC__STREAM_METADATA_SEEKPOINT_LENGTH];
-	const FLAC__StreamMetadata *metadata = &encoder->private_->streaminfo;
-	const FLAC__uint64 samples = metadata->data.stream_info.total_samples;
-	const unsigned min_framesize = metadata->data.stream_info.min_framesize;
-	const unsigned max_framesize = metadata->data.stream_info.max_framesize;
-	const unsigned bps = metadata->data.stream_info.bits_per_sample;
-	FLAC__StreamEncoderSeekStatus seek_status;
-
-	FLAC__ASSERT(metadata->type == FLAC__METADATA_TYPE_STREAMINFO);
-
-	/* All this is based on intimate knowledge of the stream header
-	 * layout, but a change to the header format that would break this
-	 * would also break all streams encoded in the previous format.
-	 */
-
-	/*
-	 * Write MD5 signature
-	 */
-	{
-		const unsigned md5_offset =
-			FLAC__STREAM_METADATA_HEADER_LENGTH +
-			(
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN
-			) / 8;
-
-		if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->streaminfo_offset + md5_offset, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
-			if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
-				encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-		if(encoder->private_->write_callback(encoder, metadata->data.stream_info.md5sum, 16, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-	}
-
-	/*
-	 * Write total samples
-	 */
-	{
-		const unsigned total_samples_byte_offset =
-			FLAC__STREAM_METADATA_HEADER_LENGTH +
-			(
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN
-				- 4
-			) / 8;
-
-		b[0] = ((FLAC__byte)(bps-1) << 4) | (FLAC__byte)((samples >> 32) & 0x0F);
-		b[1] = (FLAC__byte)((samples >> 24) & 0xFF);
-		b[2] = (FLAC__byte)((samples >> 16) & 0xFF);
-		b[3] = (FLAC__byte)((samples >> 8) & 0xFF);
-		b[4] = (FLAC__byte)(samples & 0xFF);
-		if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->streaminfo_offset + total_samples_byte_offset, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
-			if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
-				encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-		if(encoder->private_->write_callback(encoder, b, 5, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-	}
-
-	/*
-	 * Write min/max framesize
-	 */
-	{
-		const unsigned min_framesize_offset =
-			FLAC__STREAM_METADATA_HEADER_LENGTH +
-			(
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN
-			) / 8;
-
-		b[0] = (FLAC__byte)((min_framesize >> 16) & 0xFF);
-		b[1] = (FLAC__byte)((min_framesize >> 8) & 0xFF);
-		b[2] = (FLAC__byte)(min_framesize & 0xFF);
-		b[3] = (FLAC__byte)((max_framesize >> 16) & 0xFF);
-		b[4] = (FLAC__byte)((max_framesize >> 8) & 0xFF);
-		b[5] = (FLAC__byte)(max_framesize & 0xFF);
-		if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->streaminfo_offset + min_framesize_offset, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
-			if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
-				encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-		if(encoder->private_->write_callback(encoder, b, 6, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-	}
-
-	/*
-	 * Write seektable
-	 */
-	if(0 != encoder->private_->seek_table && encoder->private_->seek_table->num_points > 0 && encoder->protected_->seektable_offset > 0) {
-		unsigned i;
-
-		FLAC__format_seektable_sort(encoder->private_->seek_table);
-
-		FLAC__ASSERT(FLAC__format_seektable_is_legal(encoder->private_->seek_table));
-
-		if((seek_status = encoder->private_->seek_callback(encoder, encoder->protected_->seektable_offset + FLAC__STREAM_METADATA_HEADER_LENGTH, encoder->private_->client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
-			if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
-				encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-			return;
-		}
-
-		for(i = 0; i < encoder->private_->seek_table->num_points; i++) {
-			FLAC__uint64 xx;
-			unsigned x;
-			xx = encoder->private_->seek_table->points[i].sample_number;
-			b[7] = (FLAC__byte)xx; xx >>= 8;
-			b[6] = (FLAC__byte)xx; xx >>= 8;
-			b[5] = (FLAC__byte)xx; xx >>= 8;
-			b[4] = (FLAC__byte)xx; xx >>= 8;
-			b[3] = (FLAC__byte)xx; xx >>= 8;
-			b[2] = (FLAC__byte)xx; xx >>= 8;
-			b[1] = (FLAC__byte)xx; xx >>= 8;
-			b[0] = (FLAC__byte)xx; //xx >>= 8;
-			xx = encoder->private_->seek_table->points[i].stream_offset;
-			b[15] = (FLAC__byte)xx; xx >>= 8;
-			b[14] = (FLAC__byte)xx; xx >>= 8;
-			b[13] = (FLAC__byte)xx; xx >>= 8;
-			b[12] = (FLAC__byte)xx; xx >>= 8;
-			b[11] = (FLAC__byte)xx; xx >>= 8;
-			b[10] = (FLAC__byte)xx; xx >>= 8;
-			b[9] = (FLAC__byte)xx; xx >>= 8;
-			b[8] = (FLAC__byte)xx; //xx >>= 8;
-			x = encoder->private_->seek_table->points[i].frame_samples;
-			b[17] = (FLAC__byte)x; x >>= 8;
-			b[16] = (FLAC__byte)x; //x >>= 8;
-			if(encoder->private_->write_callback(encoder, b, 18, 0, 0, encoder->private_->client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
-				return;
-			}
-		}
-	}
-}
-
-#if FLAC__HAS_OGG
-/* Gets called when the encoding process has finished so that we can update the STREAMINFO and SEEKTABLE blocks.  */
-void update_ogg_metadata_(FLAC__StreamEncoder *encoder)
-{
-	/* the # of bytes in the 1st packet that precede the STREAMINFO */
-	static const unsigned FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH =
-		FLAC__OGG_MAPPING_PACKET_TYPE_LENGTH +
-		FLAC__OGG_MAPPING_MAGIC_LENGTH +
-		FLAC__OGG_MAPPING_VERSION_MAJOR_LENGTH +
-		FLAC__OGG_MAPPING_VERSION_MINOR_LENGTH +
-		FLAC__OGG_MAPPING_NUM_HEADERS_LENGTH +
-		FLAC__STREAM_SYNC_LENGTH
-	;
-	FLAC__byte b[flac_max(6u, FLAC__STREAM_METADATA_SEEKPOINT_LENGTH)];
-	const FLAC__StreamMetadata *metadata = &encoder->private_->streaminfo;
-	const FLAC__uint64 samples = metadata->data.stream_info.total_samples;
-	const unsigned min_framesize = metadata->data.stream_info.min_framesize;
-	const unsigned max_framesize = metadata->data.stream_info.max_framesize;
-	ogg_page page;
-
-	FLAC__ASSERT(metadata->type == FLAC__METADATA_TYPE_STREAMINFO);
-	FLAC__ASSERT(0 != encoder->private_->seek_callback);
-
-	/* Pre-check that client supports seeking, since we don't want the
-	 * ogg_helper code to ever have to deal with this condition.
-	 */
-	if(encoder->private_->seek_callback(encoder, 0, encoder->private_->client_data) == FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED)
-		return;
-
-	/* All this is based on intimate knowledge of the stream header
-	 * layout, but a change to the header format that would break this
-	 * would also break all streams encoded in the previous format.
-	 */
-
-	/**
-	 ** Write STREAMINFO stats
-	 **/
-	simple_ogg_page__init(&page);
-	if(!simple_ogg_page__get_at(encoder, encoder->protected_->streaminfo_offset, &page, encoder->private_->seek_callback, encoder->private_->read_callback, encoder->private_->client_data)) {
-		simple_ogg_page__clear(&page);
-		return; /* state already set */
-	}
-
-	/*
-	 * Write MD5 signature
-	 */
-	{
-		const unsigned md5_offset =
-			FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH +
-			FLAC__STREAM_METADATA_HEADER_LENGTH +
-			(
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN
-			) / 8;
-
-		if(md5_offset + 16 > (unsigned)page.body_len) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
-			simple_ogg_page__clear(&page);
-			return;
-		}
-		memcpy(page.body + md5_offset, metadata->data.stream_info.md5sum, 16);
-	}
-
-	/*
-	 * Write total samples
-	 */
-	{
-		const unsigned total_samples_byte_offset =
-			FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH +
-			FLAC__STREAM_METADATA_HEADER_LENGTH +
-			(
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN
-				- 4
-			) / 8;
-
-		if(total_samples_byte_offset + 5 > (unsigned)page.body_len) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
-			simple_ogg_page__clear(&page);
-			return;
-		}
-		b[0] = (FLAC__byte)page.body[total_samples_byte_offset] & 0xF0;
-		b[0] |= (FLAC__byte)((samples >> 32) & 0x0F);
-		b[1] = (FLAC__byte)((samples >> 24) & 0xFF);
-		b[2] = (FLAC__byte)((samples >> 16) & 0xFF);
-		b[3] = (FLAC__byte)((samples >> 8) & 0xFF);
-		b[4] = (FLAC__byte)(samples & 0xFF);
-		memcpy(page.body + total_samples_byte_offset, b, 5);
-	}
-
-	/*
-	 * Write min/max framesize
-	 */
-	{
-		const unsigned min_framesize_offset =
-			FIRST_OGG_PACKET_STREAMINFO_PREFIX_LENGTH +
-			FLAC__STREAM_METADATA_HEADER_LENGTH +
-			(
-				FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN +
-				FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN
-			) / 8;
-
-		if(min_framesize_offset + 6 > (unsigned)page.body_len) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
-			simple_ogg_page__clear(&page);
-			return;
-		}
-		b[0] = (FLAC__byte)((min_framesize >> 16) & 0xFF);
-		b[1] = (FLAC__byte)((min_framesize >> 8) & 0xFF);
-		b[2] = (FLAC__byte)(min_framesize & 0xFF);
-		b[3] = (FLAC__byte)((max_framesize >> 16) & 0xFF);
-		b[4] = (FLAC__byte)((max_framesize >> 8) & 0xFF);
-		b[5] = (FLAC__byte)(max_framesize & 0xFF);
-		memcpy(page.body + min_framesize_offset, b, 6);
-	}
-	if(!simple_ogg_page__set_at(encoder, encoder->protected_->streaminfo_offset, &page, encoder->private_->seek_callback, encoder->private_->write_callback, encoder->private_->client_data)) {
-		simple_ogg_page__clear(&page);
-		return; /* state already set */
-	}
-	simple_ogg_page__clear(&page);
-
-	/*
-	 * Write seektable
-	 */
-	if(0 != encoder->private_->seek_table && encoder->private_->seek_table->num_points > 0 && encoder->protected_->seektable_offset > 0) {
-		unsigned i;
-		FLAC__byte *p;
-
-		FLAC__format_seektable_sort(encoder->private_->seek_table);
-
-		FLAC__ASSERT(FLAC__format_seektable_is_legal(encoder->private_->seek_table));
-
-		simple_ogg_page__init(&page);
-		if(!simple_ogg_page__get_at(encoder, encoder->protected_->seektable_offset, &page, encoder->private_->seek_callback, encoder->private_->read_callback, encoder->private_->client_data)) {
-			simple_ogg_page__clear(&page);
-			return; /* state already set */
-		}
-
-		if((FLAC__STREAM_METADATA_HEADER_LENGTH + 18*encoder->private_->seek_table->num_points) != (unsigned)page.body_len) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
-			simple_ogg_page__clear(&page);
-			return;
-		}
-
-		for(i = 0, p = page.body + FLAC__STREAM_METADATA_HEADER_LENGTH; i < encoder->private_->seek_table->num_points; i++, p += 18) {
-			FLAC__uint64 xx;
-			unsigned x;
-			xx = encoder->private_->seek_table->points[i].sample_number;
-			b[7] = (FLAC__byte)xx; xx >>= 8;
-			b[6] = (FLAC__byte)xx; xx >>= 8;
-			b[5] = (FLAC__byte)xx; xx >>= 8;
-			b[4] = (FLAC__byte)xx; xx >>= 8;
-			b[3] = (FLAC__byte)xx; xx >>= 8;
-			b[2] = (FLAC__byte)xx; xx >>= 8;
-			b[1] = (FLAC__byte)xx; xx >>= 8;
-			b[0] = (FLAC__byte)xx; xx >>= 8;
-			xx = encoder->private_->seek_table->points[i].stream_offset;
-			b[15] = (FLAC__byte)xx; xx >>= 8;
-			b[14] = (FLAC__byte)xx; xx >>= 8;
-			b[13] = (FLAC__byte)xx; xx >>= 8;
-			b[12] = (FLAC__byte)xx; xx >>= 8;
-			b[11] = (FLAC__byte)xx; xx >>= 8;
-			b[10] = (FLAC__byte)xx; xx >>= 8;
-			b[9] = (FLAC__byte)xx; xx >>= 8;
-			b[8] = (FLAC__byte)xx; xx >>= 8;
-			x = encoder->private_->seek_table->points[i].frame_samples;
-			b[17] = (FLAC__byte)x; x >>= 8;
-			b[16] = (FLAC__byte)x; x >>= 8;
-			memcpy(p, b, 18);
-		}
-
-		if(!simple_ogg_page__set_at(encoder, encoder->protected_->seektable_offset, &page, encoder->private_->seek_callback, encoder->private_->write_callback, encoder->private_->client_data)) {
-			simple_ogg_page__clear(&page);
-			return; /* state already set */
-		}
-		simple_ogg_page__clear(&page);
-	}
-}
-#endif
-
-FLAC__bool process_frame_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block, FLAC__bool is_last_block)
-{
-	FLAC__uint16 crc;
-	FLAC__ASSERT(encoder->protected_->state == FLAC__STREAM_ENCODER_OK);
-
-	/*
-	 * Accumulate raw signal to the MD5 signature
-	 */
-	if(encoder->protected_->do_md5 && !FLAC__MD5Accumulate(&encoder->private_->md5context, (const FLAC__int32 * const *)encoder->private_->integer_signal, encoder->protected_->channels, encoder->protected_->blocksize, (encoder->protected_->bits_per_sample+7) / 8)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-
-	/*
-	 * Process the frame header and subframes into the frame bitbuffer
-	 */
-	if(!process_subframes_(encoder, is_fractional_block)) {
-		/* the above function sets the state for us in case of an error */
-		return false;
-	}
-
-	/*
-	 * Zero-pad the frame to a byte_boundary
-	 */
-	if(!FLAC__bitwriter_zero_pad_to_byte_boundary(encoder->private_->frame)) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-
-	/*
-	 * CRC-16 the whole thing
-	 */
-	FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(encoder->private_->frame));
-	if(
-		!FLAC__bitwriter_get_write_crc16(encoder->private_->frame, &crc) ||
-		!FLAC__bitwriter_write_raw_uint32(encoder->private_->frame, crc, FLAC__FRAME_FOOTER_CRC_LEN)
-	) {
-		encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
-		return false;
-	}
-
-	/*
-	 * Write it
-	 */
-	if(!write_bitbuffer_(encoder, encoder->protected_->blocksize, is_last_block)) {
-		/* the above function sets the state for us in case of an error */
-		return false;
-	}
-
-	/*
-	 * Get ready for the next frame
-	 */
-	encoder->private_->current_sample_number = 0;
-	encoder->private_->current_frame_number++;
-	encoder->private_->streaminfo.data.stream_info.total_samples += (FLAC__uint64)encoder->protected_->blocksize;
-
-	return true;
-}
-
-FLAC__bool process_subframes_(FLAC__StreamEncoder *encoder, FLAC__bool is_fractional_block)
-{
-	FLAC__FrameHeader frame_header;
-	unsigned channel, min_partition_order = encoder->protected_->min_residual_partition_order, max_partition_order;
-	FLAC__bool do_independent, do_mid_side;
-
-	/*
-	 * Calculate the min,max Rice partition orders
-	 */
-	if(is_fractional_block) {
-		max_partition_order = 0;
-	}
-	else {
-		max_partition_order = FLAC__format_get_max_rice_partition_order_from_blocksize(encoder->protected_->blocksize);
-		max_partition_order = flac_min(max_partition_order, encoder->protected_->max_residual_partition_order);
-	}
-	min_partition_order = flac_min(min_partition_order, max_partition_order);
-
-	/*
-	 * Setup the frame
-	 */
-	frame_header.blocksize = encoder->protected_->blocksize;
-	frame_header.sample_rate = encoder->protected_->sample_rate;
-	frame_header.channels = encoder->protected_->channels;
-	frame_header.channel_assignment = FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT; /* the default unless the encoder determines otherwise */
-	frame_header.bits_per_sample = encoder->protected_->bits_per_sample;
-	frame_header.number_type = FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER;
-	frame_header.number.frame_number = encoder->private_->current_frame_number;
-
-	/*
-	 * Figure out what channel assignments to try
-	 */
-	if(encoder->protected_->do_mid_side_stereo) {
-		if(encoder->protected_->loose_mid_side_stereo) {
-			if(encoder->private_->loose_mid_side_stereo_frame_count == 0) {
-				do_independent = true;
-				do_mid_side = true;
-			}
-			else {
-				do_independent = (encoder->private_->last_channel_assignment == FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT);
-				do_mid_side = !do_independent;
-			}
-		}
-		else {
-			do_independent = true;
-			do_mid_side = true;
-		}
-	}
-	else {
-		do_independent = true;
-		do_mid_side = false;
-	}
-
-	FLAC__ASSERT(do_independent || do_mid_side);
-
-	/*
-	 * Check for wasted bits; set effective bps for each subframe
-	 */
-	if(do_independent) {
-		for(channel = 0; channel < encoder->protected_->channels; channel++) {
-			const unsigned w = get_wasted_bits_(encoder->private_->integer_signal[channel], encoder->protected_->blocksize);
-			encoder->private_->subframe_workspace[channel][0].wasted_bits = encoder->private_->subframe_workspace[channel][1].wasted_bits = w;
-			encoder->private_->subframe_bps[channel] = encoder->protected_->bits_per_sample - w;
-		}
-	}
-	if(do_mid_side) {
-		FLAC__ASSERT(encoder->protected_->channels == 2);
-		for(channel = 0; channel < 2; channel++) {
-			const unsigned w = get_wasted_bits_(encoder->private_->integer_signal_mid_side[channel], encoder->protected_->blocksize);
-			encoder->private_->subframe_workspace_mid_side[channel][0].wasted_bits = encoder->private_->subframe_workspace_mid_side[channel][1].wasted_bits = w;
-			encoder->private_->subframe_bps_mid_side[channel] = encoder->protected_->bits_per_sample - w + (channel==0? 0:1);
-		}
-	}
-
-	/*
-	 * First do a normal encoding pass of each independent channel
-	 */
-	if(do_independent) {
-		for(channel = 0; channel < encoder->protected_->channels; channel++) {
-			if(!
-				process_subframe_(
-					encoder,
-					min_partition_order,
-					max_partition_order,
-					&frame_header,
-					encoder->private_->subframe_bps[channel],
-					encoder->private_->integer_signal[channel],
-					encoder->private_->subframe_workspace_ptr[channel],
-					encoder->private_->partitioned_rice_contents_workspace_ptr[channel],
-					encoder->private_->residual_workspace[channel],
-					encoder->private_->best_subframe+channel,
-					encoder->private_->best_subframe_bits+channel
-				)
-			)
-				return false;
-		}
-	}
-
-	/*
-	 * Now do mid and side channels if requested
-	 */
-	if(do_mid_side) {
-		FLAC__ASSERT(encoder->protected_->channels == 2);
-
-		for(channel = 0; channel < 2; channel++) {
-			if(!
-				process_subframe_(
-					encoder,
-					min_partition_order,
-					max_partition_order,
-					&frame_header,
-					encoder->private_->subframe_bps_mid_side[channel],
-					encoder->private_->integer_signal_mid_side[channel],
-					encoder->private_->subframe_workspace_ptr_mid_side[channel],
-					encoder->private_->partitioned_rice_contents_workspace_ptr_mid_side[channel],
-					encoder->private_->residual_workspace_mid_side[channel],
-					encoder->private_->best_subframe_mid_side+channel,
-					encoder->private_->best_subframe_bits_mid_side+channel
-				)
-			)
-				return false;
-		}
-	}
-
-	/*
-	 * Compose the frame bitbuffer
-	 */
-	if(do_mid_side) {
-		unsigned left_bps = 0, right_bps = 0; /* initialized only to prevent superfluous compiler warning */
-		FLAC__Subframe *left_subframe = 0, *right_subframe = 0; /* initialized only to prevent superfluous compiler warning */
-		FLAC__ChannelAssignment channel_assignment;
-
-		FLAC__ASSERT(encoder->protected_->channels == 2);
-
-		if(encoder->protected_->loose_mid_side_stereo && encoder->private_->loose_mid_side_stereo_frame_count > 0) {
-			channel_assignment = (encoder->private_->last_channel_assignment == FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT? FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT : FLAC__CHANNEL_ASSIGNMENT_MID_SIDE);
-		}
-		else {
-			unsigned bits[4]; /* WATCHOUT - indexed by FLAC__ChannelAssignment */
-			unsigned min_bits;
-			int ca;
-
-			FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT == 0);
-			FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE   == 1);
-			FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE  == 2);
-			FLAC__ASSERT(FLAC__CHANNEL_ASSIGNMENT_MID_SIDE    == 3);
-			FLAC__ASSERT(do_independent && do_mid_side);
-
-			/* We have to figure out which channel assignent results in the smallest frame */
-			bits[FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT] = encoder->private_->best_subframe_bits         [0] + encoder->private_->best_subframe_bits         [1];
-			bits[FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE  ] = encoder->private_->best_subframe_bits         [0] + encoder->private_->best_subframe_bits_mid_side[1];
-			bits[FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE ] = encoder->private_->best_subframe_bits         [1] + encoder->private_->best_subframe_bits_mid_side[1];
-			bits[FLAC__CHANNEL_ASSIGNMENT_MID_SIDE   ] = encoder->private_->best_subframe_bits_mid_side[0] + encoder->private_->best_subframe_bits_mid_side[1];
-
-			channel_assignment = FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT;
-			min_bits = bits[channel_assignment];
-			for(ca = 1; ca <= 3; ca++) {
-				if(bits[ca] < min_bits) {
-					min_bits = bits[ca];
-					channel_assignment = (FLAC__ChannelAssignment)ca;
-				}
-			}
-		}
-
-		frame_header.channel_assignment = channel_assignment;
-
-		if(!FLAC__frame_add_header(&frame_header, encoder->private_->frame)) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-			return false;
-		}
-
-		switch(channel_assignment) {
-			case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT:
-				left_subframe  = &encoder->private_->subframe_workspace         [0][encoder->private_->best_subframe         [0]];
-				right_subframe = &encoder->private_->subframe_workspace         [1][encoder->private_->best_subframe         [1]];
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE:
-				left_subframe  = &encoder->private_->subframe_workspace         [0][encoder->private_->best_subframe         [0]];
-				right_subframe = &encoder->private_->subframe_workspace_mid_side[1][encoder->private_->best_subframe_mid_side[1]];
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE:
-				left_subframe  = &encoder->private_->subframe_workspace_mid_side[1][encoder->private_->best_subframe_mid_side[1]];
-				right_subframe = &encoder->private_->subframe_workspace         [1][encoder->private_->best_subframe         [1]];
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE:
-				left_subframe  = &encoder->private_->subframe_workspace_mid_side[0][encoder->private_->best_subframe_mid_side[0]];
-				right_subframe = &encoder->private_->subframe_workspace_mid_side[1][encoder->private_->best_subframe_mid_side[1]];
-				break;
-			default:
-				FLAC__ASSERT(0);
-		}
-
-		switch(channel_assignment) {
-			case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT:
-				left_bps  = encoder->private_->subframe_bps         [0];
-				right_bps = encoder->private_->subframe_bps         [1];
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE:
-				left_bps  = encoder->private_->subframe_bps         [0];
-				right_bps = encoder->private_->subframe_bps_mid_side[1];
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE:
-				left_bps  = encoder->private_->subframe_bps_mid_side[1];
-				right_bps = encoder->private_->subframe_bps         [1];
-				break;
-			case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE:
-				left_bps  = encoder->private_->subframe_bps_mid_side[0];
-				right_bps = encoder->private_->subframe_bps_mid_side[1];
-				break;
-			default:
-				FLAC__ASSERT(0);
-		}
-
-		/* note that encoder_add_subframe_ sets the state for us in case of an error */
-		if(!add_subframe_(encoder, frame_header.blocksize, left_bps , left_subframe , encoder->private_->frame))
-			return false;
-		if(!add_subframe_(encoder, frame_header.blocksize, right_bps, right_subframe, encoder->private_->frame))
-			return false;
-	}
-	else {
-		if(!FLAC__frame_add_header(&frame_header, encoder->private_->frame)) {
-			encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-			return false;
-		}
-
-		for(channel = 0; channel < encoder->protected_->channels; channel++) {
-			if(!add_subframe_(encoder, frame_header.blocksize, encoder->private_->subframe_bps[channel], &encoder->private_->subframe_workspace[channel][encoder->private_->best_subframe[channel]], encoder->private_->frame)) {
-				/* the above function sets the state for us in case of an error */
-				return false;
-			}
-		}
-	}
-
-	if(encoder->protected_->loose_mid_side_stereo) {
-		encoder->private_->loose_mid_side_stereo_frame_count++;
-		if(encoder->private_->loose_mid_side_stereo_frame_count >= encoder->private_->loose_mid_side_stereo_frames)
-			encoder->private_->loose_mid_side_stereo_frame_count = 0;
-	}
-
-	encoder->private_->last_channel_assignment = frame_header.channel_assignment;
-
-	return true;
-}
-
-FLAC__bool process_subframe_(
-	FLAC__StreamEncoder *encoder,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	const FLAC__FrameHeader *frame_header,
-	unsigned subframe_bps,
-	const FLAC__int32 integer_signal[],
-	FLAC__Subframe *subframe[2],
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents[2],
-	FLAC__int32 *residual[2],
-	unsigned *best_subframe,
-	unsigned *best_bits
-)
-{
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	FLAC__float fixed_residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1];
-#else
-	FLAC__fixedpoint fixed_residual_bits_per_sample[FLAC__MAX_FIXED_ORDER+1];
-#endif
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-	FLAC__double lpc_residual_bits_per_sample;
-	FLAC__real autoc[FLAC__MAX_LPC_ORDER+1]; /* WATCHOUT: the size is important even though encoder->protected_->max_lpc_order might be less; some asm and x86 intrinsic routines need all the space */
-	FLAC__double lpc_error[FLAC__MAX_LPC_ORDER];
-	unsigned min_lpc_order, max_lpc_order, lpc_order;
-	unsigned min_qlp_coeff_precision, max_qlp_coeff_precision, qlp_coeff_precision;
-#endif
-	unsigned min_fixed_order, max_fixed_order, guess_fixed_order, fixed_order;
-	unsigned rice_parameter;
-	unsigned _candidate_bits, _best_bits;
-	unsigned _best_subframe;
-	/* only use RICE2 partitions if stream bps > 16 */
-	const unsigned rice_parameter_limit = FLAC__stream_encoder_get_bits_per_sample(encoder) > 16? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
-
-	FLAC__ASSERT(frame_header->blocksize > 0);
-
-	/* verbatim subframe is the baseline against which we measure other compressed subframes */
-	_best_subframe = 0;
-	if(encoder->private_->disable_verbatim_subframes && frame_header->blocksize >= FLAC__MAX_FIXED_ORDER)
-		_best_bits = UINT_MAX;
-	else
-		_best_bits = evaluate_verbatim_subframe_(encoder, integer_signal, frame_header->blocksize, subframe_bps, subframe[_best_subframe]);
-
-	if(frame_header->blocksize >= FLAC__MAX_FIXED_ORDER) {
-		unsigned signal_is_constant = false;
-		guess_fixed_order = encoder->private_->local_fixed_compute_best_predictor(integer_signal+FLAC__MAX_FIXED_ORDER, frame_header->blocksize-FLAC__MAX_FIXED_ORDER, fixed_residual_bits_per_sample);
-		/* check for constant subframe */
-		if(
-			!encoder->private_->disable_constant_subframes &&
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-			fixed_residual_bits_per_sample[1] == 0.0
-#else
-			fixed_residual_bits_per_sample[1] == FLAC__FP_ZERO
-#endif
-		) {
-			/* the above means it's possible all samples are the same value; now double-check it: */
-			unsigned i;
-			signal_is_constant = true;
-			for(i = 1; i < frame_header->blocksize; i++) {
-				if(integer_signal[0] != integer_signal[i]) {
-					signal_is_constant = false;
-					break;
-				}
-			}
-		}
-		if(signal_is_constant) {
-			_candidate_bits = evaluate_constant_subframe_(encoder, integer_signal[0], frame_header->blocksize, subframe_bps, subframe[!_best_subframe]);
-			if(_candidate_bits < _best_bits) {
-				_best_subframe = !_best_subframe;
-				_best_bits = _candidate_bits;
-			}
-		}
-		else {
-			if(!encoder->private_->disable_fixed_subframes || (encoder->protected_->max_lpc_order == 0 && _best_bits == UINT_MAX)) {
-				/* encode fixed */
-				if(encoder->protected_->do_exhaustive_model_search) {
-					min_fixed_order = 0;
-					max_fixed_order = FLAC__MAX_FIXED_ORDER;
-				}
-				else {
-					min_fixed_order = max_fixed_order = guess_fixed_order;
-				}
-				if(max_fixed_order >= frame_header->blocksize)
-					max_fixed_order = frame_header->blocksize - 1;
-				for(fixed_order = min_fixed_order; fixed_order <= max_fixed_order; fixed_order++) {
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-					if(fixed_residual_bits_per_sample[fixed_order] >= (FLAC__float)subframe_bps)
-						continue; /* don't even try */
-					rice_parameter = (fixed_residual_bits_per_sample[fixed_order] > 0.0)? (unsigned)(fixed_residual_bits_per_sample[fixed_order]+0.5) : 0; /* 0.5 is for rounding */
-#else
-					if(FLAC__fixedpoint_trunc(fixed_residual_bits_per_sample[fixed_order]) >= (int)subframe_bps)
-						continue; /* don't even try */
-					rice_parameter = (fixed_residual_bits_per_sample[fixed_order] > FLAC__FP_ZERO)? (unsigned)FLAC__fixedpoint_trunc(fixed_residual_bits_per_sample[fixed_order]+FLAC__FP_ONE_HALF) : 0; /* 0.5 is for rounding */
-#endif
-					rice_parameter++; /* to account for the signed->unsigned conversion during rice coding */
-					if(rice_parameter >= rice_parameter_limit) {
-#ifdef DEBUG_VERBOSE
-						fprintf(stderr, "clipping rice_parameter (%u -> %u) @0\n", rice_parameter, rice_parameter_limit - 1);
-#endif
-						rice_parameter = rice_parameter_limit - 1;
-					}
-					_candidate_bits =
-						evaluate_fixed_subframe_(
-							encoder,
-							integer_signal,
-							residual[!_best_subframe],
-							encoder->private_->abs_residual_partition_sums,
-							encoder->private_->raw_bits_per_partition,
-							frame_header->blocksize,
-							subframe_bps,
-							fixed_order,
-							rice_parameter,
-							rice_parameter_limit,
-							min_partition_order,
-							max_partition_order,
-							encoder->protected_->do_escape_coding,
-							encoder->protected_->rice_parameter_search_dist,
-							subframe[!_best_subframe],
-							partitioned_rice_contents[!_best_subframe]
-						);
-					if(_candidate_bits < _best_bits) {
-						_best_subframe = !_best_subframe;
-						_best_bits = _candidate_bits;
-					}
-				}
-			}
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-			/* encode lpc */
-			if(encoder->protected_->max_lpc_order > 0) {
-				if(encoder->protected_->max_lpc_order >= frame_header->blocksize)
-					max_lpc_order = frame_header->blocksize-1;
-				else
-					max_lpc_order = encoder->protected_->max_lpc_order;
-				if(max_lpc_order > 0) {
-					unsigned a;
-					for (a = 0; a < encoder->protected_->num_apodizations; a++) {
-						FLAC__lpc_window_data(integer_signal, encoder->private_->window[a], encoder->private_->windowed_signal, frame_header->blocksize);
-						encoder->private_->local_lpc_compute_autocorrelation(encoder->private_->windowed_signal, frame_header->blocksize, max_lpc_order+1, autoc);
-						/* if autoc[0] == 0.0, the signal is constant and we usually won't get here, but it can happen */
-						if(autoc[0] != 0.0) {
-							FLAC__lpc_compute_lp_coefficients(autoc, &max_lpc_order, encoder->private_->lp_coeff, lpc_error);
-							if(encoder->protected_->do_exhaustive_model_search) {
-								min_lpc_order = 1;
-							}
-							else {
-								const unsigned guess_lpc_order =
-									FLAC__lpc_compute_best_order(
-										lpc_error,
-										max_lpc_order,
-										frame_header->blocksize,
-										subframe_bps + (
-											encoder->protected_->do_qlp_coeff_prec_search?
-												FLAC__MIN_QLP_COEFF_PRECISION : /* have to guess; use the min possible size to avoid accidentally favoring lower orders */
-												encoder->protected_->qlp_coeff_precision
-										)
-									);
-								min_lpc_order = max_lpc_order = guess_lpc_order;
-							}
-							if(max_lpc_order >= frame_header->blocksize)
-								max_lpc_order = frame_header->blocksize - 1;
-							for(lpc_order = min_lpc_order; lpc_order <= max_lpc_order; lpc_order++) {
-								lpc_residual_bits_per_sample = FLAC__lpc_compute_expected_bits_per_residual_sample(lpc_error[lpc_order-1], frame_header->blocksize-lpc_order);
-								if(lpc_residual_bits_per_sample >= (FLAC__double)subframe_bps)
-									continue; /* don't even try */
-								rice_parameter = (lpc_residual_bits_per_sample > 0.0)? (unsigned)(lpc_residual_bits_per_sample+0.5) : 0; /* 0.5 is for rounding */
-								rice_parameter++; /* to account for the signed->unsigned conversion during rice coding */
-								if(rice_parameter >= rice_parameter_limit) {
-#ifdef DEBUG_VERBOSE
-									fprintf(stderr, "clipping rice_parameter (%u -> %u) @1\n", rice_parameter, rice_parameter_limit - 1);
-#endif
-									rice_parameter = rice_parameter_limit - 1;
-								}
-								if(encoder->protected_->do_qlp_coeff_prec_search) {
-									min_qlp_coeff_precision = FLAC__MIN_QLP_COEFF_PRECISION;
-									/* try to keep qlp coeff precision such that only 32-bit math is required for decode of <=16bps streams */
-									if(subframe_bps <= 16) {
-										max_qlp_coeff_precision = flac_min(32 - subframe_bps - FLAC__bitmath_ilog2(lpc_order), FLAC__MAX_QLP_COEFF_PRECISION);
-										max_qlp_coeff_precision = flac_max(max_qlp_coeff_precision, min_qlp_coeff_precision);
-									}
-									else
-										max_qlp_coeff_precision = FLAC__MAX_QLP_COEFF_PRECISION;
-								}
-								else {
-									min_qlp_coeff_precision = max_qlp_coeff_precision = encoder->protected_->qlp_coeff_precision;
-								}
-								for(qlp_coeff_precision = min_qlp_coeff_precision; qlp_coeff_precision <= max_qlp_coeff_precision; qlp_coeff_precision++) {
-									_candidate_bits =
-										evaluate_lpc_subframe_(
-											encoder,
-											integer_signal,
-											residual[!_best_subframe],
-											encoder->private_->abs_residual_partition_sums,
-											encoder->private_->raw_bits_per_partition,
-											encoder->private_->lp_coeff[lpc_order-1],
-											frame_header->blocksize,
-											subframe_bps,
-											lpc_order,
-											qlp_coeff_precision,
-											rice_parameter,
-											rice_parameter_limit,
-											min_partition_order,
-											max_partition_order,
-											encoder->protected_->do_escape_coding,
-											encoder->protected_->rice_parameter_search_dist,
-											subframe[!_best_subframe],
-											partitioned_rice_contents[!_best_subframe]
-										);
-									if(_candidate_bits > 0) { /* if == 0, there was a problem quantizing the lpcoeffs */
-										if(_candidate_bits < _best_bits) {
-											_best_subframe = !_best_subframe;
-											_best_bits = _candidate_bits;
-										}
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
-		}
-	}
-
-	/* under rare circumstances this can happen when all but lpc subframe types are disabled: */
-	if(_best_bits == UINT_MAX) {
-		FLAC__ASSERT(_best_subframe == 0);
-		_best_bits = evaluate_verbatim_subframe_(encoder, integer_signal, frame_header->blocksize, subframe_bps, subframe[_best_subframe]);
-	}
-
-	*best_subframe = _best_subframe;
-	*best_bits = _best_bits;
-
-	return true;
-}
-
-FLAC__bool add_subframe_(
-	FLAC__StreamEncoder *encoder,
-	unsigned blocksize,
-	unsigned subframe_bps,
-	const FLAC__Subframe *subframe,
-	FLAC__BitWriter *frame
-)
-{
-	switch(subframe->type) {
-		case FLAC__SUBFRAME_TYPE_CONSTANT:
-			if(!FLAC__subframe_add_constant(&(subframe->data.constant), subframe_bps, subframe->wasted_bits, frame)) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-				return false;
-			}
-			break;
-		case FLAC__SUBFRAME_TYPE_FIXED:
-			if(!FLAC__subframe_add_fixed(&(subframe->data.fixed), blocksize - subframe->data.fixed.order, subframe_bps, subframe->wasted_bits, frame)) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-				return false;
-			}
-			break;
-		case FLAC__SUBFRAME_TYPE_LPC:
-			if(!FLAC__subframe_add_lpc(&(subframe->data.lpc), blocksize - subframe->data.lpc.order, subframe_bps, subframe->wasted_bits, frame)) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-				return false;
-			}
-			break;
-		case FLAC__SUBFRAME_TYPE_VERBATIM:
-			if(!FLAC__subframe_add_verbatim(&(subframe->data.verbatim), blocksize, subframe_bps, subframe->wasted_bits, frame)) {
-				encoder->protected_->state = FLAC__STREAM_ENCODER_FRAMING_ERROR;
-				return false;
-			}
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-
-	return true;
-}
-
-#define SPOTCHECK_ESTIMATE 0
-#if SPOTCHECK_ESTIMATE
-static void spotcheck_subframe_estimate_(
-	FLAC__StreamEncoder *encoder,
-	unsigned blocksize,
-	unsigned subframe_bps,
-	const FLAC__Subframe *subframe,
-	unsigned estimate
-)
-{
-	FLAC__bool ret;
-	FLAC__BitWriter *frame = FLAC__bitwriter_new();
-	if(frame == 0) {
-		fprintf(stderr, "EST: can't allocate frame\n");
-		return;
-	}
-	if(!FLAC__bitwriter_init(frame)) {
-		fprintf(stderr, "EST: can't init frame\n");
-		return;
-	}
-	ret = add_subframe_(encoder, blocksize, subframe_bps, subframe, frame);
-	FLAC__ASSERT(ret);
-	{
-		const unsigned actual = FLAC__bitwriter_get_input_bits_unconsumed(frame);
-		if(estimate != actual)
-			fprintf(stderr, "EST: bad, frame#%u sub#%%d type=%8s est=%u, actual=%u, delta=%d\n", encoder->private_->current_frame_number, FLAC__SubframeTypeString[subframe->type], estimate, actual, (int)actual-(int)estimate);
-	}
-	FLAC__bitwriter_delete(frame);
-}
-#endif
-
-unsigned evaluate_constant_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal,
-	unsigned blocksize,
-	unsigned subframe_bps,
-	FLAC__Subframe *subframe
-)
-{
-	unsigned estimate;
-	subframe->type = FLAC__SUBFRAME_TYPE_CONSTANT;
-	subframe->data.constant.value = signal;
-
-	estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + subframe_bps;
-
-#if SPOTCHECK_ESTIMATE
-	spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate);
-#else
-	(void)encoder, (void)blocksize;
-#endif
-
-	return estimate;
-}
-
-unsigned evaluate_fixed_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal[],
-	FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned raw_bits_per_partition[],
-	unsigned blocksize,
-	unsigned subframe_bps,
-	unsigned order,
-	unsigned rice_parameter,
-	unsigned rice_parameter_limit,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	FLAC__bool do_escape_coding,
-	unsigned rice_parameter_search_dist,
-	FLAC__Subframe *subframe,
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents
-)
-{
-	unsigned i, residual_bits, estimate;
-	const unsigned residual_samples = blocksize - order;
-
-	FLAC__fixed_compute_residual(signal+order, residual_samples, order, residual);
-
-	subframe->type = FLAC__SUBFRAME_TYPE_FIXED;
-
-	subframe->data.fixed.entropy_coding_method.type = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE;
-	subframe->data.fixed.entropy_coding_method.data.partitioned_rice.contents = partitioned_rice_contents;
-	subframe->data.fixed.residual = residual;
-
-	residual_bits =
-		find_best_partition_order_(
-			encoder->private_,
-			residual,
-			abs_residual_partition_sums,
-			raw_bits_per_partition,
-			residual_samples,
-			order,
-			rice_parameter,
-			rice_parameter_limit,
-			min_partition_order,
-			max_partition_order,
-			subframe_bps,
-			do_escape_coding,
-			rice_parameter_search_dist,
-			&subframe->data.fixed.entropy_coding_method
-		);
-
-	subframe->data.fixed.order = order;
-	for(i = 0; i < order; i++)
-		subframe->data.fixed.warmup[i] = signal[i];
-
-	estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + (order * subframe_bps) + residual_bits;
-
-#if SPOTCHECK_ESTIMATE
-	spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate);
-#endif
-
-	return estimate;
-}
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-unsigned evaluate_lpc_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal[],
-	FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned raw_bits_per_partition[],
-	const FLAC__real lp_coeff[],
-	unsigned blocksize,
-	unsigned subframe_bps,
-	unsigned order,
-	unsigned qlp_coeff_precision,
-	unsigned rice_parameter,
-	unsigned rice_parameter_limit,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	FLAC__bool do_escape_coding,
-	unsigned rice_parameter_search_dist,
-	FLAC__Subframe *subframe,
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents
-)
-{
-	FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER]; /* WATCHOUT: the size is important; some x86 intrinsic routines need more than lpc order elements */
-	unsigned i, residual_bits, estimate;
-	int quantization, ret;
-	const unsigned residual_samples = blocksize - order;
-
-	/* try to keep qlp coeff precision such that only 32-bit math is required for decode of <=16bps streams */
-	if(subframe_bps <= 16) {
-		FLAC__ASSERT(order > 0);
-		FLAC__ASSERT(order <= FLAC__MAX_LPC_ORDER);
-		qlp_coeff_precision = flac_min(qlp_coeff_precision, 32 - subframe_bps - FLAC__bitmath_ilog2(order));
-	}
-
-	ret = FLAC__lpc_quantize_coefficients(lp_coeff, order, qlp_coeff_precision, qlp_coeff, &quantization);
-	if(ret != 0)
-		return 0; /* this is a hack to indicate to the caller that we can't do lp at this order on this subframe */
-
-	if(subframe_bps + qlp_coeff_precision + FLAC__bitmath_ilog2(order) <= 32)
-		if(subframe_bps <= 16 && qlp_coeff_precision <= 16)
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_16bit(signal+order, residual_samples, qlp_coeff, order, quantization, residual);
-		else
-			encoder->private_->local_lpc_compute_residual_from_qlp_coefficients(signal+order, residual_samples, qlp_coeff, order, quantization, residual);
-	else
-		encoder->private_->local_lpc_compute_residual_from_qlp_coefficients_64bit(signal+order, residual_samples, qlp_coeff, order, quantization, residual);
-
-	subframe->type = FLAC__SUBFRAME_TYPE_LPC;
-
-	subframe->data.lpc.entropy_coding_method.type = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE;
-	subframe->data.lpc.entropy_coding_method.data.partitioned_rice.contents = partitioned_rice_contents;
-	subframe->data.lpc.residual = residual;
-
-	residual_bits =
-		find_best_partition_order_(
-			encoder->private_,
-			residual,
-			abs_residual_partition_sums,
-			raw_bits_per_partition,
-			residual_samples,
-			order,
-			rice_parameter,
-			rice_parameter_limit,
-			min_partition_order,
-			max_partition_order,
-			subframe_bps,
-			do_escape_coding,
-			rice_parameter_search_dist,
-			&subframe->data.lpc.entropy_coding_method
-		);
-
-	subframe->data.lpc.order = order;
-	subframe->data.lpc.qlp_coeff_precision = qlp_coeff_precision;
-	subframe->data.lpc.quantization_level = quantization;
-	memcpy(subframe->data.lpc.qlp_coeff, qlp_coeff, sizeof(FLAC__int32)*FLAC__MAX_LPC_ORDER);
-	for(i = 0; i < order; i++)
-		subframe->data.lpc.warmup[i] = signal[i];
-
-	estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN + FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN + (order * (qlp_coeff_precision + subframe_bps)) + residual_bits;
-
-#if SPOTCHECK_ESTIMATE
-	spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate);
-#endif
-
-	return estimate;
-}
-#endif
-
-unsigned evaluate_verbatim_subframe_(
-	FLAC__StreamEncoder *encoder,
-	const FLAC__int32 signal[],
-	unsigned blocksize,
-	unsigned subframe_bps,
-	FLAC__Subframe *subframe
-)
-{
-	unsigned estimate;
-
-	subframe->type = FLAC__SUBFRAME_TYPE_VERBATIM;
-
-	subframe->data.verbatim.data = signal;
-
-	estimate = FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN + subframe->wasted_bits + (blocksize * subframe_bps);
-
-#if SPOTCHECK_ESTIMATE
-	spotcheck_subframe_estimate_(encoder, blocksize, subframe_bps, subframe, estimate);
-#else
-	(void)encoder;
-#endif
-
-	return estimate;
-}
-
-unsigned find_best_partition_order_(
-	FLAC__StreamEncoderPrivate *private_,
-	const FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned raw_bits_per_partition[],
-	unsigned residual_samples,
-	unsigned predictor_order,
-	unsigned rice_parameter,
-	unsigned rice_parameter_limit,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	unsigned bps,
-	FLAC__bool do_escape_coding,
-	unsigned rice_parameter_search_dist,
-	FLAC__EntropyCodingMethod *best_ecm
-)
-{
-	unsigned residual_bits, best_residual_bits = 0;
-	unsigned best_parameters_index = 0;
-	unsigned best_partition_order = 0;
-	const unsigned blocksize = residual_samples + predictor_order;
-
-	max_partition_order = FLAC__format_get_max_rice_partition_order_from_blocksize_limited_max_and_predictor_order(max_partition_order, blocksize, predictor_order);
-	min_partition_order = flac_min(min_partition_order, max_partition_order);
-
-	private_->local_precompute_partition_info_sums(residual, abs_residual_partition_sums, residual_samples, predictor_order, min_partition_order, max_partition_order, bps);
-
-	if(do_escape_coding)
-		precompute_partition_info_escapes_(residual, raw_bits_per_partition, residual_samples, predictor_order, min_partition_order, max_partition_order);
-
-	{
-		int partition_order;
-		unsigned sum;
-
-		for(partition_order = (int)max_partition_order, sum = 0; partition_order >= (int)min_partition_order; partition_order--) {
-			if(!
-				set_partitioned_rice_(
-#ifdef EXACT_RICE_BITS_CALCULATION
-					residual,
-#endif
-					abs_residual_partition_sums+sum,
-					raw_bits_per_partition+sum,
-					residual_samples,
-					predictor_order,
-					rice_parameter,
-					rice_parameter_limit,
-					rice_parameter_search_dist,
-					(unsigned)partition_order,
-					do_escape_coding,
-					&private_->partitioned_rice_contents_extra[!best_parameters_index],
-					&residual_bits
-				)
-			)
-			{
-				FLAC__ASSERT(best_residual_bits != 0);
-				break;
-			}
-			sum += 1u << partition_order;
-			if(best_residual_bits == 0 || residual_bits < best_residual_bits) {
-				best_residual_bits = residual_bits;
-				best_parameters_index = !best_parameters_index;
-				best_partition_order = partition_order;
-			}
-		}
-	}
-
-	best_ecm->data.partitioned_rice.order = best_partition_order;
-
-	{
-		/*
-		 * We are allowed to de-const the pointer based on our special
-		 * knowledge; it is const to the outside world.
-		 */
-		FLAC__EntropyCodingMethod_PartitionedRiceContents* prc = (FLAC__EntropyCodingMethod_PartitionedRiceContents*)best_ecm->data.partitioned_rice.contents;
-		unsigned partition;
-
-		/* save best parameters and raw_bits */
-		FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(prc, flac_max(6u, best_partition_order));
-		memcpy(prc->parameters, private_->partitioned_rice_contents_extra[best_parameters_index].parameters, sizeof(unsigned)*(1<<(best_partition_order)));
-		if(do_escape_coding)
-			memcpy(prc->raw_bits, private_->partitioned_rice_contents_extra[best_parameters_index].raw_bits, sizeof(unsigned)*(1<<(best_partition_order)));
-		/*
-		 * Now need to check if the type should be changed to
-		 * FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 based on the
-		 * size of the rice parameters.
-		 */
-		for(partition = 0; partition < (1u<<best_partition_order); partition++) {
-			if(prc->parameters[partition] >= FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER) {
-				best_ecm->type = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2;
-				break;
-			}
-		}
-	}
-
-	return best_residual_bits;
-}
-
-void precompute_partition_info_sums_(
-	const FLAC__int32 residual[],
-	FLAC__uint64 abs_residual_partition_sums[],
-	unsigned residual_samples,
-	unsigned predictor_order,
-	unsigned min_partition_order,
-	unsigned max_partition_order,
-	unsigned bps
-)
-{
-	const unsigned default_partition_samples = (residual_samples + predictor_order) >> max_partition_order;
-	unsigned partitions = 1u << max_partition_order;
-
-	FLAC__ASSERT(default_partition_samples > predictor_order);
-
-	/* first do max_partition_order */
-	{
-		unsigned partition, residual_sample, end = (unsigned)(-(int)predictor_order);
-		/* WATCHOUT: "+ bps + FLAC__MAX_EXTRA_RESIDUAL_BPS" is the maximum
-		 * assumed size of the average residual magnitude */
-		if(FLAC__bitmath_ilog2(default_partition_samples) + bps + FLAC__MAX_EXTRA_RESIDUAL_BPS < 32) {
-			FLAC__uint32 abs_residual_partition_sum;
-
-			for(partition = residual_sample = 0; partition < partitions; partition++) {
-				end += default_partition_samples;
-				abs_residual_partition_sum = 0;
-				for( ; residual_sample < end; residual_sample++)
-					abs_residual_partition_sum += abs(residual[residual_sample]); /* abs(INT_MIN) is undefined, but if the residual is INT_MIN we have bigger problems */
-				abs_residual_partition_sums[partition] = abs_residual_partition_sum;
-			}
-		}
-		else { /* have to pessimistically use 64 bits for accumulator */
-			FLAC__uint64 abs_residual_partition_sum;
-
-			for(partition = residual_sample = 0; partition < partitions; partition++) {
-				end += default_partition_samples;
-				abs_residual_partition_sum = 0;
-				for( ; residual_sample < end; residual_sample++)
-					abs_residual_partition_sum += abs(residual[residual_sample]); /* abs(INT_MIN) is undefined, but if the residual is INT_MIN we have bigger problems */
-				abs_residual_partition_sums[partition] = abs_residual_partition_sum;
-			}
-		}
-	}
-
-	/* now merge partitions for lower orders */
-	{
-		unsigned from_partition = 0, to_partition = partitions;
-		int partition_order;
-		for(partition_order = (int)max_partition_order - 1; partition_order >= (int)min_partition_order; partition_order--) {
-			unsigned i;
-			partitions >>= 1;
-			for(i = 0; i < partitions; i++) {
-				abs_residual_partition_sums[to_partition++] =
-					abs_residual_partition_sums[from_partition  ] +
-					abs_residual_partition_sums[from_partition+1];
-				from_partition += 2;
-			}
-		}
-	}
-}
-
-void precompute_partition_info_escapes_(
-	const FLAC__int32 residual[],
-	unsigned raw_bits_per_partition[],
-	unsigned residual_samples,
-	unsigned predictor_order,
-	unsigned min_partition_order,
-	unsigned max_partition_order
-)
-{
-	int partition_order;
-	unsigned from_partition, to_partition = 0;
-	const unsigned blocksize = residual_samples + predictor_order;
-
-	/* first do max_partition_order */
-	for(partition_order = (int)max_partition_order; partition_order >= 0; partition_order--) {
-		FLAC__int32 r;
-		FLAC__uint32 rmax;
-		unsigned partition, partition_sample, partition_samples, residual_sample;
-		const unsigned partitions = 1u << partition_order;
-		const unsigned default_partition_samples = blocksize >> partition_order;
-
-		FLAC__ASSERT(default_partition_samples > predictor_order);
-
-		for(partition = residual_sample = 0; partition < partitions; partition++) {
-			partition_samples = default_partition_samples;
-			if(partition == 0)
-				partition_samples -= predictor_order;
-			rmax = 0;
-			for(partition_sample = 0; partition_sample < partition_samples; partition_sample++) {
-				r = residual[residual_sample++];
-				/* OPT: maybe faster: rmax |= r ^ (r>>31) */
-				if(r < 0)
-					rmax |= ~r;
-				else
-					rmax |= r;
-			}
-			/* now we know all residual values are in the range [-rmax-1,rmax] */
-			raw_bits_per_partition[partition] = rmax? FLAC__bitmath_ilog2(rmax) + 2 : 1;
-		}
-		to_partition = partitions;
-		break; /*@@@ yuck, should remove the 'for' loop instead */
-	}
-
-	/* now merge partitions for lower orders */
-	for(from_partition = 0, --partition_order; partition_order >= (int)min_partition_order; partition_order--) {
-		unsigned m;
-		unsigned i;
-		const unsigned partitions = 1u << partition_order;
-		for(i = 0; i < partitions; i++) {
-			m = raw_bits_per_partition[from_partition];
-			from_partition++;
-			raw_bits_per_partition[to_partition] = flac_max(m, raw_bits_per_partition[from_partition]);
-			from_partition++;
-			to_partition++;
-		}
-	}
-}
-
-#ifdef EXACT_RICE_BITS_CALCULATION
-static inline unsigned count_rice_bits_in_partition_(
-	const unsigned rice_parameter,
-	const unsigned partition_samples,
-	const FLAC__int32 *residual
-)
-{
-	unsigned i, partition_bits =
-		FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN + /* actually could end up being FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN but err on side of 16bps */
-		(1+rice_parameter) * partition_samples /* 1 for unary stop bit + rice_parameter for the binary portion */
-	;
-	for(i = 0; i < partition_samples; i++)
-		partition_bits += ( (FLAC__uint32)((residual[i]<<1)^(residual[i]>>31)) >> rice_parameter );
-	return partition_bits;
-}
-#else
-static inline unsigned count_rice_bits_in_partition_(
-	const unsigned rice_parameter,
-	const unsigned partition_samples,
-	const FLAC__uint64 abs_residual_partition_sum
-)
-{
-	return
-		FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN + /* actually could end up being FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN but err on side of 16bps */
-		(1+rice_parameter) * partition_samples + /* 1 for unary stop bit + rice_parameter for the binary portion */
-		(
-			rice_parameter?
-				(unsigned)(abs_residual_partition_sum >> (rice_parameter-1)) /* rice_parameter-1 because the real coder sign-folds instead of using a sign bit */
-				: (unsigned)(abs_residual_partition_sum << 1) /* can't shift by negative number, so reverse */
-		)
-		- (partition_samples >> 1)
-		/* -(partition_samples>>1) to subtract out extra contributions to the abs_residual_partition_sum.
-		 * The actual number of bits used is closer to the sum(for all i in the partition) of  abs(residual[i])>>(rice_parameter-1)
-		 * By using the abs_residual_partition sum, we also add in bits in the LSBs that would normally be shifted out.
-		 * So the subtraction term tries to guess how many extra bits were contributed.
-		 * If the LSBs are randomly distributed, this should average to 0.5 extra bits per sample.
-		 */
-	;
-}
-#endif
-
-FLAC__bool set_partitioned_rice_(
-#ifdef EXACT_RICE_BITS_CALCULATION
-	const FLAC__int32 residual[],
-#endif
-	const FLAC__uint64 abs_residual_partition_sums[],
-	const unsigned raw_bits_per_partition[],
-	const unsigned residual_samples,
-	const unsigned predictor_order,
-	const unsigned suggested_rice_parameter,
-	const unsigned rice_parameter_limit,
-	const unsigned rice_parameter_search_dist,
-	const unsigned partition_order,
-	const FLAC__bool search_for_escapes,
-	FLAC__EntropyCodingMethod_PartitionedRiceContents *partitioned_rice_contents,
-	unsigned *bits
-)
-{
-	unsigned rice_parameter, partition_bits;
-	unsigned best_partition_bits, best_rice_parameter = 0;
-	unsigned bits_ = FLAC__ENTROPY_CODING_METHOD_TYPE_LEN + FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN;
-	unsigned *parameters, *raw_bits;
-#ifdef ENABLE_RICE_PARAMETER_SEARCH
-	unsigned min_rice_parameter, max_rice_parameter;
-#else
-	(void)rice_parameter_search_dist;
-#endif
-
-	FLAC__ASSERT(suggested_rice_parameter < FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER);
-	FLAC__ASSERT(rice_parameter_limit <= FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER);
-
-	FLAC__format_entropy_coding_method_partitioned_rice_contents_ensure_size(partitioned_rice_contents, flac_max(6u, partition_order));
-	parameters = partitioned_rice_contents->parameters;
-	raw_bits = partitioned_rice_contents->raw_bits;
-
-	if(partition_order == 0) {
-		best_partition_bits = (unsigned)(-1);
-#ifdef ENABLE_RICE_PARAMETER_SEARCH
-		if(rice_parameter_search_dist) {
-			if(suggested_rice_parameter < rice_parameter_search_dist)
-				min_rice_parameter = 0;
-			else
-				min_rice_parameter = suggested_rice_parameter - rice_parameter_search_dist;
-			max_rice_parameter = suggested_rice_parameter + rice_parameter_search_dist;
-			if(max_rice_parameter >= rice_parameter_limit) {
-#ifdef DEBUG_VERBOSE
-				fprintf(stderr, "clipping rice_parameter (%u -> %u) @5\n", max_rice_parameter, rice_parameter_limit - 1);
-#endif
-				max_rice_parameter = rice_parameter_limit - 1;
-			}
-		}
-		else
-			min_rice_parameter = max_rice_parameter = suggested_rice_parameter;
-
-		for(rice_parameter = min_rice_parameter; rice_parameter <= max_rice_parameter; rice_parameter++) {
-#else
-			rice_parameter = suggested_rice_parameter;
-#endif
-#ifdef EXACT_RICE_BITS_CALCULATION
-			partition_bits = count_rice_bits_in_partition_(rice_parameter, residual_samples, residual);
-#else
-			partition_bits = count_rice_bits_in_partition_(rice_parameter, residual_samples, abs_residual_partition_sums[0]);
-#endif
-			if(partition_bits < best_partition_bits) {
-				best_rice_parameter = rice_parameter;
-				best_partition_bits = partition_bits;
-			}
-#ifdef ENABLE_RICE_PARAMETER_SEARCH
-		}
-#endif
-		if(search_for_escapes) {
-			partition_bits = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN + FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN + raw_bits_per_partition[0] * residual_samples;
-			if(partition_bits <= best_partition_bits) {
-				raw_bits[0] = raw_bits_per_partition[0];
-				best_rice_parameter = 0; /* will be converted to appropriate escape parameter later */
-				best_partition_bits = partition_bits;
-			}
-			else
-				raw_bits[0] = 0;
-		}
-		parameters[0] = best_rice_parameter;
-		bits_ += best_partition_bits;
-	}
-	else {
-		unsigned partition, residual_sample;
-		unsigned partition_samples;
-		FLAC__uint64 mean, k;
-		const unsigned partitions = 1u << partition_order;
-		for(partition = residual_sample = 0; partition < partitions; partition++) {
-			partition_samples = (residual_samples+predictor_order) >> partition_order;
-			if(partition == 0) {
-				if(partition_samples <= predictor_order)
-					return false;
-				else
-					partition_samples -= predictor_order;
-			}
-			mean = abs_residual_partition_sums[partition];
-			/* we are basically calculating the size in bits of the
-			 * average residual magnitude in the partition:
-			 *   rice_parameter = floor(log2(mean/partition_samples))
-			 * 'mean' is not a good name for the variable, it is
-			 * actually the sum of magnitudes of all residual values
-			 * in the partition, so the actual mean is
-			 * mean/partition_samples
-			 */
-#if 0 /* old simple code */
-			for(rice_parameter = 0, k = partition_samples; k < mean; rice_parameter++, k <<= 1)
-				;
-#else
-#if defined FLAC__CPU_X86_64 /* and other 64-bit arch, too */
-			if(mean <= 0x80000000/512) { /* 512: more or less optimal for both 16- and 24-bit input */
-#else
-			if(mean <= 0x80000000/8) { /* 32-bit arch: use 32-bit math if possible */
-#endif
-				FLAC__uint32 k2, mean2 = (FLAC__uint32) mean;
-				rice_parameter = 0; k2 = partition_samples;
-				while(k2*8 < mean2) { /* requires: mean <= (2^31)/8 */
-					rice_parameter += 4; k2 <<= 4; /* tuned for 16-bit input */
-				}
-				while(k2 < mean2) { /* requires: mean <= 2^31 */
-					rice_parameter++; k2 <<= 1;
-				}
-			}
-			else {
-				rice_parameter = 0; k = partition_samples;
-				if(mean <= FLAC__U64L(0x8000000000000000)/128) /* usually mean is _much_ smaller than this value */
-					while(k*128 < mean) { /* requires: mean <= (2^63)/128 */
-						rice_parameter += 8; k <<= 8; /* tuned for 24-bit input */
-					}
-				while(k < mean) { /* requires: mean <= 2^63 */
-					rice_parameter++; k <<= 1;
-				}
-			}
-#endif
-			if(rice_parameter >= rice_parameter_limit) {
-#ifdef DEBUG_VERBOSE
-				fprintf(stderr, "clipping rice_parameter (%u -> %u) @6\n", rice_parameter, rice_parameter_limit - 1);
-#endif
-				rice_parameter = rice_parameter_limit - 1;
-			}
-
-			best_partition_bits = (unsigned)(-1);
-#ifdef ENABLE_RICE_PARAMETER_SEARCH
-			if(rice_parameter_search_dist) {
-				if(rice_parameter < rice_parameter_search_dist)
-					min_rice_parameter = 0;
-				else
-					min_rice_parameter = rice_parameter - rice_parameter_search_dist;
-				max_rice_parameter = rice_parameter + rice_parameter_search_dist;
-				if(max_rice_parameter >= rice_parameter_limit) {
-#ifdef DEBUG_VERBOSE
-					fprintf(stderr, "clipping rice_parameter (%u -> %u) @7\n", max_rice_parameter, rice_parameter_limit - 1);
-#endif
-					max_rice_parameter = rice_parameter_limit - 1;
-				}
-			}
-			else
-				min_rice_parameter = max_rice_parameter = rice_parameter;
-
-			for(rice_parameter = min_rice_parameter; rice_parameter <= max_rice_parameter; rice_parameter++) {
-#endif
-#ifdef EXACT_RICE_BITS_CALCULATION
-				partition_bits = count_rice_bits_in_partition_(rice_parameter, partition_samples, residual+residual_sample);
-#else
-				partition_bits = count_rice_bits_in_partition_(rice_parameter, partition_samples, abs_residual_partition_sums[partition]);
-#endif
-				if(partition_bits < best_partition_bits) {
-					best_rice_parameter = rice_parameter;
-					best_partition_bits = partition_bits;
-				}
-#ifdef ENABLE_RICE_PARAMETER_SEARCH
-			}
-#endif
-			if(search_for_escapes) {
-				partition_bits = FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN + FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN + raw_bits_per_partition[partition] * partition_samples;
-				if(partition_bits <= best_partition_bits) {
-					raw_bits[partition] = raw_bits_per_partition[partition];
-					best_rice_parameter = 0; /* will be converted to appropriate escape parameter later */
-					best_partition_bits = partition_bits;
-				}
-				else
-					raw_bits[partition] = 0;
-			}
-			parameters[partition] = best_rice_parameter;
-			bits_ += best_partition_bits;
-			residual_sample += partition_samples;
-		}
-	}
-
-	*bits = bits_;
-	return true;
-}
-
-unsigned get_wasted_bits_(FLAC__int32 signal[], unsigned samples)
-{
-	unsigned i, shift;
-	FLAC__int32 x = 0;
-
-	for(i = 0; i < samples && !(x&1); i++)
-		x |= signal[i];
-
-	if(x == 0) {
-		shift = 0;
-	}
-	else {
-		for(shift = 0; !(x&1); shift++)
-			x >>= 1;
-	}
-
-	if(shift > 0) {
-		for(i = 0; i < samples; i++)
-			 signal[i] >>= shift;
-	}
-
-	return shift;
-}
-
-void append_to_verify_fifo_(verify_input_fifo *fifo, const FLAC__int32 * const input[], unsigned input_offset, unsigned channels, unsigned wide_samples)
-{
-	unsigned channel;
-
-	for(channel = 0; channel < channels; channel++)
-		memcpy(&fifo->data[channel][fifo->tail], &input[channel][input_offset], sizeof(FLAC__int32) * wide_samples);
-
-	fifo->tail += wide_samples;
-
-	FLAC__ASSERT(fifo->tail <= fifo->size);
-}
-
-void append_to_verify_fifo_interleaved_(verify_input_fifo *fifo, const FLAC__int32 input[], unsigned input_offset, unsigned channels, unsigned wide_samples)
-{
-	unsigned channel;
-	unsigned sample, wide_sample;
-	unsigned tail = fifo->tail;
-
-	sample = input_offset * channels;
-	for(wide_sample = 0; wide_sample < wide_samples; wide_sample++) {
-		for(channel = 0; channel < channels; channel++)
-			fifo->data[channel][tail] = input[sample++];
-		tail++;
-	}
-	fifo->tail = tail;
-
-	FLAC__ASSERT(fifo->tail <= fifo->size);
-}
-
-FLAC__StreamDecoderReadStatus verify_read_callback_(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
-{
-	FLAC__StreamEncoder *encoder = (FLAC__StreamEncoder*)client_data;
-	const size_t encoded_bytes = encoder->private_->verify.output.bytes;
-	(void)decoder;
-
-	if(encoder->private_->verify.needs_magic_hack) {
-		FLAC__ASSERT(*bytes >= FLAC__STREAM_SYNC_LENGTH);
-		*bytes = FLAC__STREAM_SYNC_LENGTH;
-		memcpy(buffer, FLAC__STREAM_SYNC_STRING, *bytes);
-		encoder->private_->verify.needs_magic_hack = false;
-	}
-	else {
-		if(encoded_bytes == 0) {
-			/*
-			 * If we get here, a FIFO underflow has occurred,
-			 * which means there is a bug somewhere.
-			 */
-			FLAC__ASSERT(0);
-			return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
-		}
-		else if(encoded_bytes < *bytes)
-			*bytes = encoded_bytes;
-		memcpy(buffer, encoder->private_->verify.output.data, *bytes);
-		encoder->private_->verify.output.data += *bytes;
-		encoder->private_->verify.output.bytes -= *bytes;
-	}
-
-	return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
-}
-
-FLAC__StreamDecoderWriteStatus verify_write_callback_(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
-{
-	FLAC__StreamEncoder *encoder = (FLAC__StreamEncoder *)client_data;
-	unsigned channel;
-	const unsigned channels = frame->header.channels;
-	const unsigned blocksize = frame->header.blocksize;
-	const unsigned bytes_per_block = sizeof(FLAC__int32) * blocksize;
-
-	(void)decoder;
-
-	for(channel = 0; channel < channels; channel++) {
-		if(0 != memcmp(buffer[channel], encoder->private_->verify.input_fifo.data[channel], bytes_per_block)) {
-			unsigned i, sample = 0;
-			FLAC__int32 expect = 0, got = 0;
-
-			for(i = 0; i < blocksize; i++) {
-				if(buffer[channel][i] != encoder->private_->verify.input_fifo.data[channel][i]) {
-					sample = i;
-					expect = (FLAC__int32)encoder->private_->verify.input_fifo.data[channel][i];
-					got = (FLAC__int32)buffer[channel][i];
-					break;
-				}
-			}
-			FLAC__ASSERT(i < blocksize);
-			FLAC__ASSERT(frame->header.number_type == FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER);
-			encoder->private_->verify.error_stats.absolute_sample = frame->header.number.sample_number + sample;
-			encoder->private_->verify.error_stats.frame_number = (unsigned)(frame->header.number.sample_number / blocksize);
-			encoder->private_->verify.error_stats.channel = channel;
-			encoder->private_->verify.error_stats.sample = sample;
-			encoder->private_->verify.error_stats.expected = expect;
-			encoder->private_->verify.error_stats.got = got;
-			encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA;
-			return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
-		}
-	}
-	/* dequeue the frame from the fifo */
-	encoder->private_->verify.input_fifo.tail -= blocksize;
-	FLAC__ASSERT(encoder->private_->verify.input_fifo.tail <= OVERREAD_);
-	for(channel = 0; channel < channels; channel++)
-		memmove(&encoder->private_->verify.input_fifo.data[channel][0], &encoder->private_->verify.input_fifo.data[channel][blocksize], encoder->private_->verify.input_fifo.tail * sizeof(encoder->private_->verify.input_fifo.data[0][0]));
-	return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
-}
-
-void verify_metadata_callback_(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
-{
-	(void)decoder, (void)metadata, (void)client_data;
-}
-
-void verify_error_callback_(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
-{
-	FLAC__StreamEncoder *encoder = (FLAC__StreamEncoder*)client_data;
-	(void)decoder, (void)status;
-	encoder->protected_->state = FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR;
-}
-
-#if 0
-FLAC__StreamEncoderReadStatus file_read_callback_(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
-{
-	(void)client_data;
-
-	*bytes = fread(buffer, 1, *bytes, encoder->private_->file);
-	if (*bytes == 0) {
-		if (feof(encoder->private_->file))
-			return FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM;
-		else if (ferror(encoder->private_->file))
-			return FLAC__STREAM_ENCODER_READ_STATUS_ABORT;
-	}
-	return FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE;
-}
-
-FLAC__StreamEncoderSeekStatus file_seek_callback_(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data)
-{
-	(void)client_data;
-
-	if(fseeko(encoder->private_->file, (FLAC__off_t)absolute_byte_offset, SEEK_SET) < 0)
-		return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR;
-	else
-		return FLAC__STREAM_ENCODER_SEEK_STATUS_OK;
-}
-
-FLAC__StreamEncoderTellStatus file_tell_callback_(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
-{
-	FLAC__off_t offset;
-
-	(void)client_data;
-
-	offset = ftello(encoder->private_->file);
-
-	if(offset < 0) {
-		return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR;
-	}
-	else {
-		*absolute_byte_offset = (FLAC__uint64)offset;
-		return FLAC__STREAM_ENCODER_TELL_STATUS_OK;
-	}
-}
-
-#ifdef FLAC__VALGRIND_TESTING
-static size_t local__fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
-{
-	size_t ret = fwrite(ptr, size, nmemb, stream);
-	if(!ferror(stream))
-		fflush(stream);
-	return ret;
-}
-#else
-#define local__fwrite fwrite
-#endif
-
-FLAC__StreamEncoderWriteStatus file_write_callback_(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data)
-{
-	(void)client_data, (void)current_frame;
-
-	if(local__fwrite(buffer, sizeof(FLAC__byte), bytes, encoder->private_->file) == bytes) {
-		FLAC__bool call_it = 0 != encoder->private_->progress_callback && (
-#if FLAC__HAS_OGG
-			/* We would like to be able to use 'samples > 0' in the
-			 * clause here but currently because of the nature of our
-			 * Ogg writing implementation, 'samples' is always 0 (see
-			 * ogg_encoder_aspect.c).  The downside is extra progress
-			 * callbacks.
-			 */
-			encoder->private_->is_ogg? true :
-#endif
-			samples > 0
-		);
-		if(call_it) {
-			/* NOTE: We have to add +bytes, +samples, and +1 to the stats
-			 * because at this point in the callback chain, the stats
-			 * have not been updated.  Only after we return and control
-			 * gets back to write_frame_() are the stats updated
-			 */
-			encoder->private_->progress_callback(encoder, encoder->private_->bytes_written+bytes, encoder->private_->samples_written+samples, encoder->private_->frames_written+(samples?1:0), encoder->private_->total_frames_estimate, encoder->private_->client_data);
-		}
-		return FLAC__STREAM_ENCODER_WRITE_STATUS_OK;
-	}
-	else
-		return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR;
-}
-
-/*
- * This will forcibly set stdout to binary mode (for OSes that require it)
- */
-FILE *get_binary_stdout_(void)
-{
-	/* if something breaks here it is probably due to the presence or
-	 * absence of an underscore before the identifiers 'setmode',
-	 * 'fileno', and/or 'O_BINARY'; check your system header files.
-	 */
-#if defined _MSC_VER || defined __MINGW32__
-	_setmode(_fileno(stdout), _O_BINARY);
-#elif defined __CYGWIN__
-	/* almost certainly not needed for any modern Cygwin, but let's be safe... */
-	setmode(_fileno(stdout), _O_BINARY);
-#elif defined __EMX__
-	setmode(fileno(stdout), O_BINARY);
-#endif
-
-	return stdout;
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder_framing.c b/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder_framing.c
deleted file mode 100644
index 6d57006..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/stream_encoder_framing.c
+++ /dev/null
@@ -1,549 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h> /* for strlen() */
-#include "include/private/stream_encoder_framing.h"
-#include "include/private/crc.h"
-#include "../assert.h"
-
-static FLAC__bool add_entropy_coding_method_(FLAC__BitWriter *bw, const FLAC__EntropyCodingMethod *method);
-static FLAC__bool add_residual_partitioned_rice_(FLAC__BitWriter *bw, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order, const FLAC__bool is_extended);
-
-FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitWriter *bw)
-{
-	unsigned i, j;
-	const unsigned vendor_string_length = (unsigned)strlen(FLAC__VENDOR_STRING);
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->is_last, FLAC__STREAM_METADATA_IS_LAST_LEN))
-		return false;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->type, FLAC__STREAM_METADATA_TYPE_LEN))
-		return false;
-
-	/*
-	 * First, for VORBIS_COMMENTs, adjust the length to reflect our vendor string
-	 */
-	i = metadata->length;
-	if(metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) {
-		FLAC__ASSERT(metadata->data.vorbis_comment.vendor_string.length == 0 || 0 != metadata->data.vorbis_comment.vendor_string.entry);
-		i -= metadata->data.vorbis_comment.vendor_string.length;
-		i += vendor_string_length;
-	}
-	FLAC__ASSERT(i < (1u << FLAC__STREAM_METADATA_LENGTH_LEN));
-	if(!FLAC__bitwriter_write_raw_uint32(bw, i, FLAC__STREAM_METADATA_LENGTH_LEN))
-		return false;
-
-	switch(metadata->type) {
-		case FLAC__METADATA_TYPE_STREAMINFO:
-			FLAC__ASSERT(metadata->data.stream_info.min_blocksize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.min_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN))
-				return false;
-			FLAC__ASSERT(metadata->data.stream_info.max_blocksize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.max_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN))
-				return false;
-			FLAC__ASSERT(metadata->data.stream_info.min_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.min_framesize, FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN))
-				return false;
-			FLAC__ASSERT(metadata->data.stream_info.max_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.max_framesize, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN))
-				return false;
-			FLAC__ASSERT(FLAC__format_sample_rate_is_valid(metadata->data.stream_info.sample_rate));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.sample_rate, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN))
-				return false;
-			FLAC__ASSERT(metadata->data.stream_info.channels > 0);
-			FLAC__ASSERT(metadata->data.stream_info.channels <= (1u << FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.channels-1, FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN))
-				return false;
-			FLAC__ASSERT(metadata->data.stream_info.bits_per_sample > 0);
-			FLAC__ASSERT(metadata->data.stream_info.bits_per_sample <= (1u << FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN));
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.bits_per_sample-1, FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN))
-				return false;
-			if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN))
-				return false;
-			if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.stream_info.md5sum, 16))
-				return false;
-			break;
-		case FLAC__METADATA_TYPE_PADDING:
-			if(!FLAC__bitwriter_write_zeroes(bw, metadata->length * 8))
-				return false;
-			break;
-		case FLAC__METADATA_TYPE_APPLICATION:
-			if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8))
-				return false;
-			if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.application.data, metadata->length - (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8)))
-				return false;
-			break;
-		case FLAC__METADATA_TYPE_SEEKTABLE:
-			for(i = 0; i < metadata->data.seek_table.num_points; i++) {
-				if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.seek_table.points[i].sample_number, FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.seek_table.points[i].stream_offset, FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.seek_table.points[i].frame_samples, FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN))
-					return false;
-			}
-			break;
-		case FLAC__METADATA_TYPE_VORBIS_COMMENT:
-			if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, vendor_string_length))
-				return false;
-			if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)FLAC__VENDOR_STRING, vendor_string_length))
-				return false;
-			if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, metadata->data.vorbis_comment.num_comments))
-				return false;
-			for(i = 0; i < metadata->data.vorbis_comment.num_comments; i++) {
-				if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, metadata->data.vorbis_comment.comments[i].length))
-					return false;
-				if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.vorbis_comment.comments[i].entry, metadata->data.vorbis_comment.comments[i].length))
-					return false;
-			}
-			break;
-		case FLAC__METADATA_TYPE_CUESHEET:
-			FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN % 8 == 0);
-			if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)metadata->data.cue_sheet.media_catalog_number, FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN/8))
-				return false;
-			if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.cue_sheet.lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN))
-				return false;
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.cue_sheet.is_cd? 1 : 0, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN))
-				return false;
-			if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN))
-				return false;
-			if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.cue_sheet.num_tracks, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN))
-				return false;
-			for(i = 0; i < metadata->data.cue_sheet.num_tracks; i++) {
-				const FLAC__StreamMetadata_CueSheet_Track *track = metadata->data.cue_sheet.tracks + i;
-
-				if(!FLAC__bitwriter_write_raw_uint64(bw, track->offset, FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, track->number, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN))
-					return false;
-				FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN % 8 == 0);
-				if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)track->isrc, FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN/8))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, track->type, FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, track->pre_emphasis, FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, track->num_indices, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN))
-					return false;
-				for(j = 0; j < track->num_indices; j++) {
-					const FLAC__StreamMetadata_CueSheet_Index *indx = track->indices + j;
-
-					if(!FLAC__bitwriter_write_raw_uint64(bw, indx->offset, FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN))
-						return false;
-					if(!FLAC__bitwriter_write_raw_uint32(bw, indx->number, FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN))
-						return false;
-					if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN))
-						return false;
-				}
-			}
-			break;
-		case FLAC__METADATA_TYPE_PICTURE:
-			{
-				size_t len;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.type, FLAC__STREAM_METADATA_PICTURE_TYPE_LEN))
-					return false;
-				len = strlen(metadata->data.picture.mime_type);
-				if(!FLAC__bitwriter_write_raw_uint32(bw, len, FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)metadata->data.picture.mime_type, len))
-					return false;
-				len = strlen((const char *)metadata->data.picture.description);
-				if(!FLAC__bitwriter_write_raw_uint32(bw, len, FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.picture.description, len))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.width, FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.height, FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.depth, FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.colors, FLAC__STREAM_METADATA_PICTURE_COLORS_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.data_length, FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN))
-					return false;
-				if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.picture.data, metadata->data.picture.data_length))
-					return false;
-			}
-			break;
-		default:
-			if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.unknown.data, metadata->length))
-				return false;
-			break;
-	}
-
-	FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(bw));
-	return true;
-}
-
-FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__BitWriter *bw)
-{
-	unsigned u, blocksize_hint, sample_rate_hint;
-	FLAC__byte crc;
-
-	FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(bw));
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__FRAME_HEADER_SYNC, FLAC__FRAME_HEADER_SYNC_LEN))
-		return false;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, 0, FLAC__FRAME_HEADER_RESERVED_LEN))
-		return false;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, (header->number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER)? 0 : 1, FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN))
-		return false;
-
-	FLAC__ASSERT(header->blocksize > 0 && header->blocksize <= FLAC__MAX_BLOCK_SIZE);
-	/* when this assertion holds true, any legal blocksize can be expressed in the frame header */
-	FLAC__ASSERT(FLAC__MAX_BLOCK_SIZE <= 65535u);
-	blocksize_hint = 0;
-	switch(header->blocksize) {
-		case   192: u = 1; break;
-		case   576: u = 2; break;
-		case  1152: u = 3; break;
-		case  2304: u = 4; break;
-		case  4608: u = 5; break;
-		case   256: u = 8; break;
-		case   512: u = 9; break;
-		case  1024: u = 10; break;
-		case  2048: u = 11; break;
-		case  4096: u = 12; break;
-		case  8192: u = 13; break;
-		case 16384: u = 14; break;
-		case 32768: u = 15; break;
-		default:
-			if(header->blocksize <= 0x100)
-				blocksize_hint = u = 6;
-			else
-				blocksize_hint = u = 7;
-			break;
-	}
-	if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_BLOCK_SIZE_LEN))
-		return false;
-
-	FLAC__ASSERT(FLAC__format_sample_rate_is_valid(header->sample_rate));
-	sample_rate_hint = 0;
-	switch(header->sample_rate) {
-		case  88200: u = 1; break;
-		case 176400: u = 2; break;
-		case 192000: u = 3; break;
-		case   8000: u = 4; break;
-		case  16000: u = 5; break;
-		case  22050: u = 6; break;
-		case  24000: u = 7; break;
-		case  32000: u = 8; break;
-		case  44100: u = 9; break;
-		case  48000: u = 10; break;
-		case  96000: u = 11; break;
-		default:
-			if(header->sample_rate <= 255000 && header->sample_rate % 1000 == 0)
-				sample_rate_hint = u = 12;
-			else if(header->sample_rate % 10 == 0)
-				sample_rate_hint = u = 14;
-			else if(header->sample_rate <= 0xffff)
-				sample_rate_hint = u = 13;
-			else
-				u = 0;
-			break;
-	}
-	if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_SAMPLE_RATE_LEN))
-		return false;
-
-	FLAC__ASSERT(header->channels > 0 && header->channels <= (1u << FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN) && header->channels <= FLAC__MAX_CHANNELS);
-	switch(header->channel_assignment) {
-		case FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT:
-			u = header->channels - 1;
-			break;
-		case FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE:
-			FLAC__ASSERT(header->channels == 2);
-			u = 8;
-			break;
-		case FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE:
-			FLAC__ASSERT(header->channels == 2);
-			u = 9;
-			break;
-		case FLAC__CHANNEL_ASSIGNMENT_MID_SIDE:
-			FLAC__ASSERT(header->channels == 2);
-			u = 10;
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-	if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN))
-		return false;
-
-	FLAC__ASSERT(header->bits_per_sample > 0 && header->bits_per_sample <= (1u << FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN));
-	switch(header->bits_per_sample) {
-		case 8 : u = 1; break;
-		case 12: u = 2; break;
-		case 16: u = 4; break;
-		case 20: u = 5; break;
-		case 24: u = 6; break;
-		default: u = 0; break;
-	}
-	if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN))
-		return false;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, 0, FLAC__FRAME_HEADER_ZERO_PAD_LEN))
-		return false;
-
-	if(header->number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER) {
-		if(!FLAC__bitwriter_write_utf8_uint32(bw, header->number.frame_number))
-			return false;
-	}
-	else {
-		if(!FLAC__bitwriter_write_utf8_uint64(bw, header->number.sample_number))
-			return false;
-	}
-
-	if(blocksize_hint)
-		if(!FLAC__bitwriter_write_raw_uint32(bw, header->blocksize-1, (blocksize_hint==6)? 8:16))
-			return false;
-
-	switch(sample_rate_hint) {
-		case 12:
-			if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate / 1000, 8))
-				return false;
-			break;
-		case 13:
-			if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate, 16))
-				return false;
-			break;
-		case 14:
-			if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate / 10, 16))
-				return false;
-			break;
-	}
-
-	/* write the CRC */
-	if(!FLAC__bitwriter_get_write_crc8(bw, &crc))
-		return false;
-	if(!FLAC__bitwriter_write_raw_uint32(bw, crc, FLAC__FRAME_HEADER_CRC_LEN))
-		return false;
-
-	return true;
-}
-
-FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
-{
-	FLAC__bool ok;
-
-	ok =
-		FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN) &&
-		(wasted_bits? FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1) : true) &&
-		FLAC__bitwriter_write_raw_int32(bw, subframe->value, subframe_bps)
-	;
-
-	return ok;
-}
-
-FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
-{
-	unsigned i;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK | (subframe->order<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
-		return false;
-	if(wasted_bits)
-		if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1))
-			return false;
-
-	for(i = 0; i < subframe->order; i++)
-		if(!FLAC__bitwriter_write_raw_int32(bw, subframe->warmup[i], subframe_bps))
-			return false;
-
-	if(!add_entropy_coding_method_(bw, &subframe->entropy_coding_method))
-		return false;
-	switch(subframe->entropy_coding_method.type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!add_residual_partitioned_rice_(
-				bw,
-				subframe->residual,
-				residual_samples,
-				subframe->order,
-				subframe->entropy_coding_method.data.partitioned_rice.contents->parameters,
-				subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits,
-				subframe->entropy_coding_method.data.partitioned_rice.order,
-				/*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2
-			))
-				return false;
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-
-	return true;
-}
-
-FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
-{
-	unsigned i;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK | ((subframe->order-1)<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
-		return false;
-	if(wasted_bits)
-		if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1))
-			return false;
-
-	for(i = 0; i < subframe->order; i++)
-		if(!FLAC__bitwriter_write_raw_int32(bw, subframe->warmup[i], subframe_bps))
-			return false;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, subframe->qlp_coeff_precision-1, FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN))
-		return false;
-	if(!FLAC__bitwriter_write_raw_int32(bw, subframe->quantization_level, FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN))
-		return false;
-	for(i = 0; i < subframe->order; i++)
-		if(!FLAC__bitwriter_write_raw_int32(bw, subframe->qlp_coeff[i], subframe->qlp_coeff_precision))
-			return false;
-
-	if(!add_entropy_coding_method_(bw, &subframe->entropy_coding_method))
-		return false;
-	switch(subframe->entropy_coding_method.type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!add_residual_partitioned_rice_(
-				bw,
-				subframe->residual,
-				residual_samples,
-				subframe->order,
-				subframe->entropy_coding_method.data.partitioned_rice.contents->parameters,
-				subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits,
-				subframe->entropy_coding_method.data.partitioned_rice.order,
-				/*is_extended=*/subframe->entropy_coding_method.type == FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2
-			))
-				return false;
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-
-	return true;
-}
-
-FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
-{
-	unsigned i;
-	const FLAC__int32 *signal = subframe->data;
-
-	if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
-		return false;
-	if(wasted_bits)
-		if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1))
-			return false;
-
-	for(i = 0; i < samples; i++)
-		if(!FLAC__bitwriter_write_raw_int32(bw, signal[i], subframe_bps))
-			return false;
-
-	return true;
-}
-
-FLAC__bool add_entropy_coding_method_(FLAC__BitWriter *bw, const FLAC__EntropyCodingMethod *method)
-{
-	if(!FLAC__bitwriter_write_raw_uint32(bw, method->type, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN))
-		return false;
-	switch(method->type) {
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
-		case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2:
-			if(!FLAC__bitwriter_write_raw_uint32(bw, method->data.partitioned_rice.order, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN))
-				return false;
-			break;
-		default:
-			FLAC__ASSERT(0);
-	}
-	return true;
-}
-
-FLAC__bool add_residual_partitioned_rice_(FLAC__BitWriter *bw, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order, const FLAC__bool is_extended)
-{
-	const unsigned plen = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN;
-	const unsigned pesc = is_extended? FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER : FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
-
-	if(partition_order == 0) {
-		unsigned i;
-
-		if(raw_bits[0] == 0) {
-			if(!FLAC__bitwriter_write_raw_uint32(bw, rice_parameters[0], plen))
-				return false;
-			if(!FLAC__bitwriter_write_rice_signed_block(bw, residual, residual_samples, rice_parameters[0]))
-				return false;
-		}
-		else {
-			FLAC__ASSERT(rice_parameters[0] == 0);
-			if(!FLAC__bitwriter_write_raw_uint32(bw, pesc, plen))
-				return false;
-			if(!FLAC__bitwriter_write_raw_uint32(bw, raw_bits[0], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
-				return false;
-			for(i = 0; i < residual_samples; i++) {
-				if(!FLAC__bitwriter_write_raw_int32(bw, residual[i], raw_bits[0]))
-					return false;
-			}
-		}
-		return true;
-	}
-	else {
-		unsigned i, j, k = 0, k_last = 0;
-		unsigned partition_samples;
-		const unsigned default_partition_samples = (residual_samples+predictor_order) >> partition_order;
-		for(i = 0; i < (1u<<partition_order); i++) {
-			partition_samples = default_partition_samples;
-			if(i == 0)
-				partition_samples -= predictor_order;
-			k += partition_samples;
-			if(raw_bits[i] == 0) {
-				if(!FLAC__bitwriter_write_raw_uint32(bw, rice_parameters[i], plen))
-					return false;
-				if(!FLAC__bitwriter_write_rice_signed_block(bw, residual+k_last, k-k_last, rice_parameters[i]))
-					return false;
-			}
-			else {
-				if(!FLAC__bitwriter_write_raw_uint32(bw, pesc, plen))
-					return false;
-				if(!FLAC__bitwriter_write_raw_uint32(bw, raw_bits[i], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
-					return false;
-				for(j = k_last; j < k; j++) {
-					if(!FLAC__bitwriter_write_raw_int32(bw, residual[j], raw_bits[i]))
-						return false;
-				}
-			}
-			k_last = k;
-		}
-		return true;
-	}
-}
diff --git a/modules/juce_audio_formats/codecs/flac/libFLAC/window_flac.c b/modules/juce_audio_formats/codecs/flac/libFLAC/window_flac.c
deleted file mode 100644
index dc341a6..0000000
--- a/modules/juce_audio_formats/codecs/flac/libFLAC/window_flac.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2006-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <math.h>
-#include "../assert.h"
-#include "../format.h"
-#include "include/private/window.h"
-
-#ifndef FLAC__INTEGER_ONLY_LIBRARY
-
-
-void FLAC__window_bartlett(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	if (L & 1) {
-		for (n = 0; n <= N/2; n++)
-			window[n] = 2.0f * n / (float)N;
-		for (; n <= N; n++)
-			window[n] = 2.0f - 2.0f * n / (float)N;
-	}
-	else {
-		for (n = 0; n <= L/2-1; n++)
-			window[n] = 2.0f * n / (float)N;
-		for (; n <= N; n++)
-			window[n] = 2.0f - 2.0f * n / (float)N;
-	}
-}
-
-void FLAC__window_bartlett_hann(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(0.62f - 0.48f * fabs((float)n/(float)N-0.5f) - 0.38f * cos(2.0f * M_PI * ((float)n/(float)N)));
-}
-
-void FLAC__window_blackman(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(0.42f - 0.5f * cos(2.0f * M_PI * n / N) + 0.08f * cos(4.0f * M_PI * n / N));
-}
-
-/* 4-term -92dB side-lobe */
-void FLAC__window_blackman_harris_4term_92db_sidelobe(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n <= N; n++)
-		window[n] = (FLAC__real)(0.35875f - 0.48829f * cos(2.0f * M_PI * n / N) + 0.14128f * cos(4.0f * M_PI * n / N) - 0.01168f * cos(6.0f * M_PI * n / N));
-}
-
-void FLAC__window_connes(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	const double N2 = (double)N / 2.;
-	FLAC__int32 n;
-
-	for (n = 0; n <= N; n++) {
-		double k = ((double)n - N2) / N2;
-		k = 1.0f - k * k;
-		window[n] = (FLAC__real)(k * k);
-	}
-}
-
-void FLAC__window_flattop(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(1.0f - 1.93f * cos(2.0f * M_PI * n / N) + 1.29f * cos(4.0f * M_PI * n / N) - 0.388f * cos(6.0f * M_PI * n / N) + 0.0322f * cos(8.0f * M_PI * n / N));
-}
-
-void FLAC__window_gauss(FLAC__real *window, const FLAC__int32 L, const FLAC__real stddev)
-{
-	const FLAC__int32 N = L - 1;
-	const double N2 = (double)N / 2.;
-	FLAC__int32 n;
-
-	for (n = 0; n <= N; n++) {
-		const double k = ((double)n - N2) / (stddev * N2);
-		window[n] = (FLAC__real)exp(-0.5f * k * k);
-	}
-}
-
-void FLAC__window_hamming(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(0.54f - 0.46f * cos(2.0f * M_PI * n / N));
-}
-
-void FLAC__window_hann(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(0.5f - 0.5f * cos(2.0f * M_PI * n / N));
-}
-
-void FLAC__window_kaiser_bessel(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(0.402f - 0.498f * cos(2.0f * M_PI * n / N) + 0.098f * cos(4.0f * M_PI * n / N) - 0.001f * cos(6.0f * M_PI * n / N));
-}
-
-void FLAC__window_nuttall(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = (FLAC__real)(0.3635819f - 0.4891775f*cos(2.0f*M_PI*n/N) + 0.1365995f*cos(4.0f*M_PI*n/N) - 0.0106411f*cos(6.0f*M_PI*n/N));
-}
-
-void FLAC__window_rectangle(FLAC__real *window, const FLAC__int32 L)
-{
-	FLAC__int32 n;
-
-	for (n = 0; n < L; n++)
-		window[n] = 1.0f;
-}
-
-void FLAC__window_triangle(FLAC__real *window, const FLAC__int32 L)
-{
-	FLAC__int32 n;
-
-	if (L & 1) {
-		for (n = 1; n <= (L+1)/2; n++)
-			window[n-1] = 2.0f * n / ((float)L + 1.0f);
-		for (; n <= L; n++)
-			window[n-1] = (float)(2 * (L - n + 1)) / ((float)L + 1.0f);
-	}
-	else {
-		for (n = 1; n <= L/2; n++)
-			window[n-1] = 2.0f * n / ((float)L + 1.0f);
-		for (; n <= L; n++)
-			window[n-1] = (float)(2 * (L - n + 1)) / ((float)L + 1.0f);
-	}
-}
-
-void FLAC__window_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p)
-{
-	if (p <= 0.0)
-		FLAC__window_rectangle(window, L);
-	else if (p >= 1.0)
-		FLAC__window_hann(window, L);
-	else {
-		const FLAC__int32 Np = (FLAC__int32)(p / 2.0f * L) - 1;
-		FLAC__int32 n;
-		/* start with rectangle... */
-		FLAC__window_rectangle(window, L);
-		/* ...replace ends with hann */
-		if (Np > 0) {
-			for (n = 0; n <= Np; n++) {
-				window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * n / Np));
-				window[L-Np-1+n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * (n+Np) / Np));
-			}
-		}
-	}
-}
-
-void FLAC__window_partial_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p, const FLAC__real start, const FLAC__real end)
-{
-	const FLAC__int32 start_n = (FLAC__int32)(start * L);
-	const FLAC__int32 end_n = (FLAC__int32)(end * L);
-	const FLAC__int32 N = end_n - start_n;
-	FLAC__int32 Np, n, i;
-
-	if (p <= 0.0f)
-		FLAC__window_partial_tukey(window, L, 0.05f, start, end);
-	else if (p >= 1.0f)
-		FLAC__window_partial_tukey(window, L, 0.95f, start, end);
-	else {
-
-		Np = (FLAC__int32)(p / 2.0f * N);
-
-		for (n = 0; n < start_n && n < L; n++)
-			window[n] = 0.0f;
-		for (i = 1; n < (start_n+Np) && n < L; n++, i++)
-			window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * i / Np));
-		for (; n < (end_n-Np) && n < L; n++)
-			window[n] = 1.0f;
-		for (i = Np; n < end_n && n < L; n++, i--)
-			window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * i / Np));
-		for (; n < L; n++)
-			window[n] = 0.0f;
-	}
-}
-
-void FLAC__window_punchout_tukey(FLAC__real *window, const FLAC__int32 L, const FLAC__real p, const FLAC__real start, const FLAC__real end)
-{
-	const FLAC__int32 start_n = (FLAC__int32)(start * L);
-	const FLAC__int32 end_n = (FLAC__int32)(end * L);
-	FLAC__int32 Ns, Ne, n, i;
-
-	if (p <= 0.0f)
-		FLAC__window_punchout_tukey(window, L, 0.05f, start, end);
-	else if (p >= 1.0f)
-		FLAC__window_punchout_tukey(window, L, 0.95f, start, end);
-	else {
-
-		Ns = (FLAC__int32)(p / 2.0f * start_n);
-		Ne = (FLAC__int32)(p / 2.0f * (L - end_n));
-
-		for (n = 0, i = 1; n < Ns && n < L; n++, i++)
-			window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * i / Ns));
-		for (; n < start_n-Ns && n < L; n++)
-			window[n] = 1.0f;
-		for (i = Ns; n < start_n && n < L; n++, i--)
-			window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * i / Ns));
-		for (; n < end_n && n < L; n++)
-			window[n] = 0.0f;
-		for (i = 1; n < end_n+Ne && n < L; n++, i++)
-			window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * i / Ne));
-		for (; n < L - (Ne) && n < L; n++)
-			window[n] = 1.0f;
-		for (i = Ne; n < L; n++, i--)
-			window[n] = (FLAC__real)(0.5f - 0.5f * cos(M_PI * i / Ne));
-	}
-}
-
-void FLAC__window_welch(FLAC__real *window, const FLAC__int32 L)
-{
-	const FLAC__int32 N = L - 1;
-	const double N2 = (double)N / 2.;
-	FLAC__int32 n;
-
-	for (n = 0; n <= N; n++) {
-		const double k = ((double)n - N2) / N2;
-		window[n] = (FLAC__real)(1.0f - k * k);
-	}
-}
-
-#endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */
diff --git a/modules/juce_audio_formats/codecs/flac/metadata.h b/modules/juce_audio_formats/codecs/flac/metadata.h
deleted file mode 100644
index 02cfc32..0000000
--- a/modules/juce_audio_formats/codecs/flac/metadata.h
+++ /dev/null
@@ -1,2182 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2001-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__METADATA_H
-#define FLAC__METADATA_H
-
-#include <sys/types.h> /* for off_t */
-#include "export.h"
-#include "callback.h"
-#include "format.h"
-
-/* --------------------------------------------------------------------
-   (For an example of how all these routines are used, see the source
-   code for the unit tests in src/test_libFLAC/metadata_*.c, or
-   metaflac in src/metaflac/)
-   ------------------------------------------------------------------*/
-
-/** \file include/FLAC/metadata.h
- *
- *  \brief
- *  This module provides functions for creating and manipulating FLAC
- *  metadata blocks in memory, and three progressively more powerful
- *  interfaces for traversing and editing metadata in FLAC files.
- *
- *  See the detailed documentation for each interface in the
- *  \link flac_metadata metadata \endlink module.
- */
-
-/** \defgroup flac_metadata FLAC/metadata.h: metadata interfaces
- *  \ingroup flac
- *
- *  \brief
- *  This module provides functions for creating and manipulating FLAC
- *  metadata blocks in memory, and three progressively more powerful
- *  interfaces for traversing and editing metadata in native FLAC files.
- *  Note that currently only the Chain interface (level 2) supports Ogg
- *  FLAC files, and it is read-only i.e. no writing back changed
- *  metadata to file.
- *
- *  There are three metadata interfaces of increasing complexity:
- *
- *  Level 0:
- *  Read-only access to the STREAMINFO, VORBIS_COMMENT, CUESHEET, and
- *  PICTURE blocks.
- *
- *  Level 1:
- *  Read-write access to all metadata blocks.  This level is write-
- *  efficient in most cases (more on this below), and uses less memory
- *  than level 2.
- *
- *  Level 2:
- *  Read-write access to all metadata blocks.  This level is write-
- *  efficient in all cases, but uses more memory since all metadata for
- *  the whole file is read into memory and manipulated before writing
- *  out again.
- *
- *  What do we mean by efficient?  Since FLAC metadata appears at the
- *  beginning of the file, when writing metadata back to a FLAC file
- *  it is possible to grow or shrink the metadata such that the entire
- *  file must be rewritten.  However, if the size remains the same during
- *  changes or PADDING blocks are utilized, only the metadata needs to be
- *  overwritten, which is much faster.
- *
- *  Efficient means the whole file is rewritten at most one time, and only
- *  when necessary.  Level 1 is not efficient only in the case that you
- *  cause more than one metadata block to grow or shrink beyond what can
- *  be accomodated by padding.  In this case you should probably use level
- *  2, which allows you to edit all the metadata for a file in memory and
- *  write it out all at once.
- *
- *  All levels know how to skip over and not disturb an ID3v2 tag at the
- *  front of the file.
- *
- *  All levels access files via their filenames.  In addition, level 2
- *  has additional alternative read and write functions that take an I/O
- *  handle and callbacks, for situations where access by filename is not
- *  possible.
- *
- *  In addition to the three interfaces, this module defines functions for
- *  creating and manipulating various metadata objects in memory.  As we see
- *  from the Format module, FLAC metadata blocks in memory are very primitive
- *  structures for storing information in an efficient way.  Reading
- *  information from the structures is easy but creating or modifying them
- *  directly is more complex.  The metadata object routines here facilitate
- *  this by taking care of the consistency and memory management drudgery.
- *
- *  Unless you will be using the level 1 or 2 interfaces to modify existing
- *  metadata however, you will not probably not need these.
- *
- *  From a dependency standpoint, none of the encoders or decoders require
- *  the metadata module.  This is so that embedded users can strip out the
- *  metadata module from libFLAC to reduce the size and complexity.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** \defgroup flac_metadata_level0 FLAC/metadata.h: metadata level 0 interface
- *  \ingroup flac_metadata
- *
- *  \brief
- *  The level 0 interface consists of individual routines to read the
- *  STREAMINFO, VORBIS_COMMENT, CUESHEET, and PICTURE blocks, requiring
- *  only a filename.
- *
- *  They try to skip any ID3v2 tag at the head of the file.
- *
- * \{
- */
-
-/** Read the STREAMINFO metadata block of the given FLAC file.  This function
- *  will try to skip any ID3v2 tag at the head of the file.
- *
- * \param filename    The path to the FLAC file to read.
- * \param streaminfo  A pointer to space for the STREAMINFO block.  Since
- *                    FLAC__StreamMetadata is a simple structure with no
- *                    memory allocation involved, you pass the address of
- *                    an existing structure.  It need not be initialized.
- * \assert
- *    \code filename != NULL \endcode
- *    \code streaminfo != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid STREAMINFO block was read from \a filename.  Returns
- *    \c false if there was a memory allocation error, a file decoder error,
- *    or the file contained no STREAMINFO block.  (A memory allocation error
- *    is possible because this function must set up a file decoder.)
- */
-FLAC_API FLAC__bool FLAC__metadata_get_streaminfo(const char *filename, FLAC__StreamMetadata *streaminfo);
-
-/** Read the VORBIS_COMMENT metadata block of the given FLAC file.  This
- *  function will try to skip any ID3v2 tag at the head of the file.
- *
- * \param filename    The path to the FLAC file to read.
- * \param tags        The address where the returned pointer will be
- *                    stored.  The \a tags object must be deleted by
- *                    the caller using FLAC__metadata_object_delete().
- * \assert
- *    \code filename != NULL \endcode
- *    \code tags != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid VORBIS_COMMENT block was read from \a filename,
- *    and \a *tags will be set to the address of the metadata structure.
- *    Returns \c false if there was a memory allocation error, a file
- *    decoder error, or the file contained no VORBIS_COMMENT block, and
- *    \a *tags will be set to \c NULL.
- */
-FLAC_API FLAC__bool FLAC__metadata_get_tags(const char *filename, FLAC__StreamMetadata **tags);
-
-/** Read the CUESHEET metadata block of the given FLAC file.  This
- *  function will try to skip any ID3v2 tag at the head of the file.
- *
- * \param filename    The path to the FLAC file to read.
- * \param cuesheet    The address where the returned pointer will be
- *                    stored.  The \a cuesheet object must be deleted by
- *                    the caller using FLAC__metadata_object_delete().
- * \assert
- *    \code filename != NULL \endcode
- *    \code cuesheet != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid CUESHEET block was read from \a filename,
- *    and \a *cuesheet will be set to the address of the metadata
- *    structure.  Returns \c false if there was a memory allocation
- *    error, a file decoder error, or the file contained no CUESHEET
- *    block, and \a *cuesheet will be set to \c NULL.
- */
-FLAC_API FLAC__bool FLAC__metadata_get_cuesheet(const char *filename, FLAC__StreamMetadata **cuesheet);
-
-/** Read a PICTURE metadata block of the given FLAC file.  This
- *  function will try to skip any ID3v2 tag at the head of the file.
- *  Since there can be more than one PICTURE block in a file, this
- *  function takes a number of parameters that act as constraints to
- *  the search.  The PICTURE block with the largest area matching all
- *  the constraints will be returned, or \a *picture will be set to
- *  \c NULL if there was no such block.
- *
- * \param filename    The path to the FLAC file to read.
- * \param picture     The address where the returned pointer will be
- *                    stored.  The \a picture object must be deleted by
- *                    the caller using FLAC__metadata_object_delete().
- * \param type        The desired picture type.  Use \c -1 to mean
- *                    "any type".
- * \param mime_type   The desired MIME type, e.g. "image/jpeg".  The
- *                    string will be matched exactly.  Use \c NULL to
- *                    mean "any MIME type".
- * \param description The desired description.  The string will be
- *                    matched exactly.  Use \c NULL to mean "any
- *                    description".
- * \param max_width   The maximum width in pixels desired.  Use
- *                    \c (unsigned)(-1) to mean "any width".
- * \param max_height  The maximum height in pixels desired.  Use
- *                    \c (unsigned)(-1) to mean "any height".
- * \param max_depth   The maximum color depth in bits-per-pixel desired.
- *                    Use \c (unsigned)(-1) to mean "any depth".
- * \param max_colors  The maximum number of colors desired.  Use
- *                    \c (unsigned)(-1) to mean "any number of colors".
- * \assert
- *    \code filename != NULL \endcode
- *    \code picture != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid PICTURE block was read from \a filename,
- *    and \a *picture will be set to the address of the metadata
- *    structure.  Returns \c false if there was a memory allocation
- *    error, a file decoder error, or the file contained no PICTURE
- *    block, and \a *picture will be set to \c NULL.
- */
-FLAC_API FLAC__bool FLAC__metadata_get_picture(const char *filename, FLAC__StreamMetadata **picture, FLAC__StreamMetadata_Picture_Type type, const char *mime_type, const FLAC__byte *description, unsigned max_width, unsigned max_height, unsigned max_depth, unsigned max_colors);
-
-/* \} */
-
-
-/** \defgroup flac_metadata_level1 FLAC/metadata.h: metadata level 1 interface
- *  \ingroup flac_metadata
- *
- * \brief
- * The level 1 interface provides read-write access to FLAC file metadata and
- * operates directly on the FLAC file.
- *
- * The general usage of this interface is:
- *
- * - Create an iterator using FLAC__metadata_simple_iterator_new()
- * - Attach it to a file using FLAC__metadata_simple_iterator_init() and check
- *   the exit code.  Call FLAC__metadata_simple_iterator_is_writable() to
- *   see if the file is writable, or only read access is allowed.
- * - Use FLAC__metadata_simple_iterator_next() and
- *   FLAC__metadata_simple_iterator_prev() to traverse the blocks.
- *   This is does not read the actual blocks themselves.
- *   FLAC__metadata_simple_iterator_next() is relatively fast.
- *   FLAC__metadata_simple_iterator_prev() is slower since it needs to search
- *   forward from the front of the file.
- * - Use FLAC__metadata_simple_iterator_get_block_type() or
- *   FLAC__metadata_simple_iterator_get_block() to access the actual data at
- *   the current iterator position.  The returned object is yours to modify
- *   and free.
- * - Use FLAC__metadata_simple_iterator_set_block() to write a modified block
- *   back.  You must have write permission to the original file.  Make sure to
- *   read the whole comment to FLAC__metadata_simple_iterator_set_block()
- *   below.
- * - Use FLAC__metadata_simple_iterator_insert_block_after() to add new blocks.
- *   Use the object creation functions from
- *   \link flac_metadata_object here \endlink to generate new objects.
- * - Use FLAC__metadata_simple_iterator_delete_block() to remove the block
- *   currently referred to by the iterator, or replace it with padding.
- * - Destroy the iterator with FLAC__metadata_simple_iterator_delete() when
- *   finished.
- *
- * \note
- * The FLAC file remains open the whole time between
- * FLAC__metadata_simple_iterator_init() and
- * FLAC__metadata_simple_iterator_delete(), so make sure you are not altering
- * the file during this time.
- *
- * \note
- * Do not modify the \a is_last, \a length, or \a type fields of returned
- * FLAC__StreamMetadata objects.  These are managed automatically.
- *
- * \note
- * If any of the modification functions
- * (FLAC__metadata_simple_iterator_set_block(),
- * FLAC__metadata_simple_iterator_delete_block(),
- * FLAC__metadata_simple_iterator_insert_block_after(), etc.) return \c false,
- * you should delete the iterator as it may no longer be valid.
- *
- * \{
- */
-
-struct FLAC__Metadata_SimpleIterator;
-/** The opaque structure definition for the level 1 iterator type.
- *  See the
- *  \link flac_metadata_level1 metadata level 1 module \endlink
- *  for a detailed description.
- */
-typedef struct FLAC__Metadata_SimpleIterator FLAC__Metadata_SimpleIterator;
-
-/** Status type for FLAC__Metadata_SimpleIterator.
- *
- *  The iterator's current status can be obtained by calling FLAC__metadata_simple_iterator_status().
- */
-typedef enum {
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK = 0,
-	/**< The iterator is in the normal OK state */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT,
-	/**< The data passed into a function violated the function's usage criteria */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE,
-	/**< The iterator could not open the target file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_A_FLAC_FILE,
-	/**< The iterator could not find the FLAC signature at the start of the file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_WRITABLE,
-	/**< The iterator tried to write to a file that was not writable */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_BAD_METADATA,
-	/**< The iterator encountered input that does not conform to the FLAC metadata specification */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR,
-	/**< The iterator encountered an error while reading the FLAC file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR,
-	/**< The iterator encountered an error while seeking in the FLAC file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR,
-	/**< The iterator encountered an error while writing the FLAC file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_RENAME_ERROR,
-	/**< The iterator encountered an error renaming the FLAC file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_UNLINK_ERROR,
-	/**< The iterator encountered an error removing the temporary file */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR,
-	/**< Memory allocation failed */
-
-	FLAC__METADATA_SIMPLE_ITERATOR_STATUS_INTERNAL_ERROR
-	/**< The caller violated an assertion or an unexpected error occurred */
-
-} FLAC__Metadata_SimpleIteratorStatus;
-
-/** Maps a FLAC__Metadata_SimpleIteratorStatus to a C string.
- *
- *  Using a FLAC__Metadata_SimpleIteratorStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__Metadata_SimpleIteratorStatusString[];
-
-
-/** Create a new iterator instance.
- *
- * \retval FLAC__Metadata_SimpleIterator*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__Metadata_SimpleIterator *FLAC__metadata_simple_iterator_new(void);
-
-/** Free an iterator instance.  Deletes the object pointed to by \a iterator.
- *
- * \param iterator  A pointer to an existing iterator.
- * \assert
- *    \code iterator != NULL \endcode
- */
-FLAC_API void FLAC__metadata_simple_iterator_delete(FLAC__Metadata_SimpleIterator *iterator);
-
-/** Get the current status of the iterator.  Call this after a function
- *  returns \c false to get the reason for the error.  Also resets the status
- *  to FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK.
- *
- * \param iterator  A pointer to an existing iterator.
- * \assert
- *    \code iterator != NULL \endcode
- * \retval FLAC__Metadata_SimpleIteratorStatus
- *    The current status of the iterator.
- */
-FLAC_API FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator);
-
-/** Initialize the iterator to point to the first metadata block in the
- *  given FLAC file.
- *
- * \param iterator             A pointer to an existing iterator.
- * \param filename             The path to the FLAC file.
- * \param read_only            If \c true, the FLAC file will be opened
- *                             in read-only mode; if \c false, the FLAC
- *                             file will be opened for edit even if no
- *                             edits are performed.
- * \param preserve_file_stats  If \c true, the owner and modification
- *                             time will be preserved even if the FLAC
- *                             file is written to.
- * \assert
- *    \code iterator != NULL \endcode
- *    \code filename != NULL \endcode
- * \retval FLAC__bool
- *    \c false if a memory allocation error occurs, the file can't be
- *    opened, or another error occurs, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool read_only, FLAC__bool preserve_file_stats);
-
-/** Returns \c true if the FLAC file is writable.  If \c false, calls to
- *  FLAC__metadata_simple_iterator_set_block() and
- *  FLAC__metadata_simple_iterator_insert_block_after() will fail.
- *
- * \param iterator             A pointer to an existing iterator.
- * \assert
- *    \code iterator != NULL \endcode
- * \retval FLAC__bool
- *    See above.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator);
-
-/** Moves the iterator forward one metadata block, returning \c false if
- *  already at the end.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__bool
- *    \c false if already at the last metadata block of the chain, else
- *    \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_next(FLAC__Metadata_SimpleIterator *iterator);
-
-/** Moves the iterator backward one metadata block, returning \c false if
- *  already at the beginning.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__bool
- *    \c false if already at the first metadata block of the chain, else
- *    \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_prev(FLAC__Metadata_SimpleIterator *iterator);
-
-/** Returns a flag telling if the current metadata block is the last.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__bool
- *    \c true if the current metadata block is the last in the file,
- *    else \c false.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_last(const FLAC__Metadata_SimpleIterator *iterator);
-
-/** Get the offset of the metadata block at the current position.  This
- *  avoids reading the actual block data which can save time for large
- *  blocks.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval off_t
- *    The offset of the metadata block at the current iterator position.
- *    This is the byte offset relative to the beginning of the file of
- *    the current metadata block's header.
- */
-FLAC_API off_t FLAC__metadata_simple_iterator_get_block_offset(const FLAC__Metadata_SimpleIterator *iterator);
-
-/** Get the type of the metadata block at the current position.  This
- *  avoids reading the actual block data which can save time for large
- *  blocks.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__MetadataType
- *    The type of the metadata block at the current iterator position.
- */
-FLAC_API FLAC__MetadataType FLAC__metadata_simple_iterator_get_block_type(const FLAC__Metadata_SimpleIterator *iterator);
-
-/** Get the length of the metadata block at the current position.  This
- *  avoids reading the actual block data which can save time for large
- *  blocks.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval unsigned
- *    The length of the metadata block at the current iterator position.
- *    The is same length as that in the
- *    <a href="http://xiph.org/flac/format.html#metadata_block_header">metadata block header</a>,
- *    i.e. the length of the metadata body that follows the header.
- */
-FLAC_API unsigned FLAC__metadata_simple_iterator_get_block_length(const FLAC__Metadata_SimpleIterator *iterator);
-
-/** Get the application ID of the \c APPLICATION block at the current
- *  position.  This avoids reading the actual block data which can save
- *  time for large blocks.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \param id        A pointer to a buffer of at least \c 4 bytes where
- *                  the ID will be stored.
- * \assert
- *    \code iterator != NULL \endcode
- *    \code id != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__bool
- *    \c true if the ID was successfully read, else \c false, in which
- *    case you should check FLAC__metadata_simple_iterator_status() to
- *    find out why.  If the status is
- *    \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, then the
- *    current metadata block is not an \c APPLICATION block.  Otherwise
- *    if the status is
- *    \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR or
- *    \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, an I/O error
- *    occurred and the iterator can no longer be used.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_get_application_id(FLAC__Metadata_SimpleIterator *iterator, FLAC__byte *id);
-
-/** Get the metadata block at the current position.  You can modify the
- *  block but must use FLAC__metadata_simple_iterator_set_block() to
- *  write it back to the FLAC file.
- *
- *  You must call FLAC__metadata_object_delete() on the returned object
- *  when you are finished with it.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__StreamMetadata*
- *    The current metadata block, or \c NULL if there was a memory
- *    allocation error.
- */
-FLAC_API FLAC__StreamMetadata *FLAC__metadata_simple_iterator_get_block(FLAC__Metadata_SimpleIterator *iterator);
-
-/** Write a block back to the FLAC file.  This function tries to be
- *  as efficient as possible; how the block is actually written is
- *  shown by the following:
- *
- *  Existing block is a STREAMINFO block and the new block is a
- *  STREAMINFO block: the new block is written in place.  Make sure
- *  you know what you're doing when changing the values of a
- *  STREAMINFO block.
- *
- *  Existing block is a STREAMINFO block and the new block is a
- *  not a STREAMINFO block: this is an error since the first block
- *  must be a STREAMINFO block.  Returns \c false without altering the
- *  file.
- *
- *  Existing block is not a STREAMINFO block and the new block is a
- *  STREAMINFO block: this is an error since there may be only one
- *  STREAMINFO block.  Returns \c false without altering the file.
- *
- *  Existing block and new block are the same length: the existing
- *  block will be replaced by the new block, written in place.
- *
- *  Existing block is longer than new block: if use_padding is \c true,
- *  the existing block will be overwritten in place with the new
- *  block followed by a PADDING block, if possible, to make the total
- *  size the same as the existing block.  Remember that a padding
- *  block requires at least four bytes so if the difference in size
- *  between the new block and existing block is less than that, the
- *  entire file will have to be rewritten, using the new block's
- *  exact size.  If use_padding is \c false, the entire file will be
- *  rewritten, replacing the existing block by the new block.
- *
- *  Existing block is shorter than new block: if use_padding is \c true,
- *  the function will try and expand the new block into the following
- *  PADDING block, if it exists and doing so won't shrink the PADDING
- *  block to less than 4 bytes.  If there is no following PADDING
- *  block, or it will shrink to less than 4 bytes, or use_padding is
- *  \c false, the entire file is rewritten, replacing the existing block
- *  with the new block.  Note that in this case any following PADDING
- *  block is preserved as is.
- *
- *  After writing the block, the iterator will remain in the same
- *  place, i.e. pointing to the new block.
- *
- * \param iterator     A pointer to an existing initialized iterator.
- * \param block        The block to set.
- * \param use_padding  See above.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- *    \code block != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_set_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding);
-
-/** This is similar to FLAC__metadata_simple_iterator_set_block()
- *  except that instead of writing over an existing block, it appends
- *  a block after the existing block.  \a use_padding is again used to
- *  tell the function to try an expand into following padding in an
- *  attempt to avoid rewriting the entire file.
- *
- *  This function will fail and return \c false if given a STREAMINFO
- *  block.
- *
- *  After writing the block, the iterator will be pointing to the
- *  new block.
- *
- * \param iterator     A pointer to an existing initialized iterator.
- * \param block        The block to set.
- * \param use_padding  See above.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- *    \code block != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_insert_block_after(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding);
-
-/** Deletes the block at the current position.  This will cause the
- *  entire FLAC file to be rewritten, unless \a use_padding is \c true,
- *  in which case the block will be replaced by an equal-sized PADDING
- *  block.  The iterator will be left pointing to the block before the
- *  one just deleted.
- *
- *  You may not delete the STREAMINFO block.
- *
- * \param iterator     A pointer to an existing initialized iterator.
- * \param use_padding  See above.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_simple_iterator_init()
- * \retval FLAC__bool
- *    \c true if successful, else \c false.
- */
-FLAC_API FLAC__bool FLAC__metadata_simple_iterator_delete_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool use_padding);
-
-/* \} */
-
-
-/** \defgroup flac_metadata_level2 FLAC/metadata.h: metadata level 2 interface
- *  \ingroup flac_metadata
- *
- * \brief
- * The level 2 interface provides read-write access to FLAC file metadata;
- * all metadata is read into memory, operated on in memory, and then written
- * to file, which is more efficient than level 1 when editing multiple blocks.
- *
- * Currently Ogg FLAC is supported for read only, via
- * FLAC__metadata_chain_read_ogg() but a subsequent
- * FLAC__metadata_chain_write() will fail.
- *
- * The general usage of this interface is:
- *
- * - Create a new chain using FLAC__metadata_chain_new().  A chain is a
- *   linked list of FLAC metadata blocks.
- * - Read all metadata into the the chain from a FLAC file using
- *   FLAC__metadata_chain_read() or FLAC__metadata_chain_read_ogg() and
- *   check the status.
- * - Optionally, consolidate the padding using
- *   FLAC__metadata_chain_merge_padding() or
- *   FLAC__metadata_chain_sort_padding().
- * - Create a new iterator using FLAC__metadata_iterator_new()
- * - Initialize the iterator to point to the first element in the chain
- *   using FLAC__metadata_iterator_init()
- * - Traverse the chain using FLAC__metadata_iterator_next and
- *   FLAC__metadata_iterator_prev().
- * - Get a block for reading or modification using
- *   FLAC__metadata_iterator_get_block().  The pointer to the object
- *   inside the chain is returned, so the block is yours to modify.
- *   Changes will be reflected in the FLAC file when you write the
- *   chain.  You can also add and delete blocks (see functions below).
- * - When done, write out the chain using FLAC__metadata_chain_write().
- *   Make sure to read the whole comment to the function below.
- * - Delete the chain using FLAC__metadata_chain_delete().
- *
- * \note
- * Even though the FLAC file is not open while the chain is being
- * manipulated, you must not alter the file externally during
- * this time.  The chain assumes the FLAC file will not change
- * between the time of FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg()
- * and FLAC__metadata_chain_write().
- *
- * \note
- * Do not modify the is_last, length, or type fields of returned
- * FLAC__StreamMetadata objects.  These are managed automatically.
- *
- * \note
- * The metadata objects returned by FLAC__metadata_iterator_get_block()
- * are owned by the chain; do not FLAC__metadata_object_delete() them.
- * In the same way, blocks passed to FLAC__metadata_iterator_set_block()
- * become owned by the chain and they will be deleted when the chain is
- * deleted.
- *
- * \{
- */
-
-struct FLAC__Metadata_Chain;
-/** The opaque structure definition for the level 2 chain type.
- */
-typedef struct FLAC__Metadata_Chain FLAC__Metadata_Chain;
-
-struct FLAC__Metadata_Iterator;
-/** The opaque structure definition for the level 2 iterator type.
- */
-typedef struct FLAC__Metadata_Iterator FLAC__Metadata_Iterator;
-
-typedef enum {
-	FLAC__METADATA_CHAIN_STATUS_OK = 0,
-	/**< The chain is in the normal OK state */
-
-	FLAC__METADATA_CHAIN_STATUS_ILLEGAL_INPUT,
-	/**< The data passed into a function violated the function's usage criteria */
-
-	FLAC__METADATA_CHAIN_STATUS_ERROR_OPENING_FILE,
-	/**< The chain could not open the target file */
-
-	FLAC__METADATA_CHAIN_STATUS_NOT_A_FLAC_FILE,
-	/**< The chain could not find the FLAC signature at the start of the file */
-
-	FLAC__METADATA_CHAIN_STATUS_NOT_WRITABLE,
-	/**< The chain tried to write to a file that was not writable */
-
-	FLAC__METADATA_CHAIN_STATUS_BAD_METADATA,
-	/**< The chain encountered input that does not conform to the FLAC metadata specification */
-
-	FLAC__METADATA_CHAIN_STATUS_READ_ERROR,
-	/**< The chain encountered an error while reading the FLAC file */
-
-	FLAC__METADATA_CHAIN_STATUS_SEEK_ERROR,
-	/**< The chain encountered an error while seeking in the FLAC file */
-
-	FLAC__METADATA_CHAIN_STATUS_WRITE_ERROR,
-	/**< The chain encountered an error while writing the FLAC file */
-
-	FLAC__METADATA_CHAIN_STATUS_RENAME_ERROR,
-	/**< The chain encountered an error renaming the FLAC file */
-
-	FLAC__METADATA_CHAIN_STATUS_UNLINK_ERROR,
-	/**< The chain encountered an error removing the temporary file */
-
-	FLAC__METADATA_CHAIN_STATUS_MEMORY_ALLOCATION_ERROR,
-	/**< Memory allocation failed */
-
-	FLAC__METADATA_CHAIN_STATUS_INTERNAL_ERROR,
-	/**< The caller violated an assertion or an unexpected error occurred */
-
-	FLAC__METADATA_CHAIN_STATUS_INVALID_CALLBACKS,
-	/**< One or more of the required callbacks was NULL */
-
-	FLAC__METADATA_CHAIN_STATUS_READ_WRITE_MISMATCH,
-	/**< FLAC__metadata_chain_write() was called on a chain read by
-	 *   FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(),
-	 *   or
-	 *   FLAC__metadata_chain_write_with_callbacks()/FLAC__metadata_chain_write_with_callbacks_and_tempfile()
-	 *   was called on a chain read by
-	 *   FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg().
-	 *   Matching read/write methods must always be used. */
-
-	FLAC__METADATA_CHAIN_STATUS_WRONG_WRITE_CALL
-	/**< FLAC__metadata_chain_write_with_callbacks() was called when the
-	 *   chain write requires a tempfile; use
-	 *   FLAC__metadata_chain_write_with_callbacks_and_tempfile() instead.
-	 *   Or, FLAC__metadata_chain_write_with_callbacks_and_tempfile() was
-	 *   called when the chain write does not require a tempfile; use
-	 *   FLAC__metadata_chain_write_with_callbacks() instead.
-	 *   Always check FLAC__metadata_chain_check_if_tempfile_needed()
-	 *   before writing via callbacks. */
-
-} FLAC__Metadata_ChainStatus;
-
-/** Maps a FLAC__Metadata_ChainStatus to a C string.
- *
- *  Using a FLAC__Metadata_ChainStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__Metadata_ChainStatusString[];
-
-/*********** FLAC__Metadata_Chain ***********/
-
-/** Create a new chain instance.
- *
- * \retval FLAC__Metadata_Chain*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__Metadata_Chain *FLAC__metadata_chain_new(void);
-
-/** Free a chain instance.  Deletes the object pointed to by \a chain.
- *
- * \param chain  A pointer to an existing chain.
- * \assert
- *    \code chain != NULL \endcode
- */
-FLAC_API void FLAC__metadata_chain_delete(FLAC__Metadata_Chain *chain);
-
-/** Get the current status of the chain.  Call this after a function
- *  returns \c false to get the reason for the error.  Also resets the
- *  status to FLAC__METADATA_CHAIN_STATUS_OK.
- *
- * \param chain    A pointer to an existing chain.
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__Metadata_ChainStatus
- *    The current status of the chain.
- */
-FLAC_API FLAC__Metadata_ChainStatus FLAC__metadata_chain_status(FLAC__Metadata_Chain *chain);
-
-/** Read all metadata from a FLAC file into the chain.
- *
- * \param chain    A pointer to an existing chain.
- * \param filename The path to the FLAC file to read.
- * \assert
- *    \code chain != NULL \endcode
- *    \code filename != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid list of metadata blocks was read from
- *    \a filename, else \c false.  On failure, check the status with
- *    FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_read(FLAC__Metadata_Chain *chain, const char *filename);
-
-/** Read all metadata from an Ogg FLAC file into the chain.
- *
- * \note Ogg FLAC metadata data writing is not supported yet and
- * FLAC__metadata_chain_write() will fail.
- *
- * \param chain    A pointer to an existing chain.
- * \param filename The path to the Ogg FLAC file to read.
- * \assert
- *    \code chain != NULL \endcode
- *    \code filename != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid list of metadata blocks was read from
- *    \a filename, else \c false.  On failure, check the status with
- *    FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg(FLAC__Metadata_Chain *chain, const char *filename);
-
-/** Read all metadata from a FLAC stream into the chain via I/O callbacks.
- *
- *  The \a handle need only be open for reading, but must be seekable.
- *  The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb"
- *  for Windows).
- *
- * \param chain    A pointer to an existing chain.
- * \param handle   The I/O handle of the FLAC stream to read.  The
- *                 handle will NOT be closed after the metadata is read;
- *                 that is the duty of the caller.
- * \param callbacks
- *                 A set of callbacks to use for I/O.  The mandatory
- *                 callbacks are \a read, \a seek, and \a tell.
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid list of metadata blocks was read from
- *    \a handle, else \c false.  On failure, check the status with
- *    FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_read_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks);
-
-/** Read all metadata from an Ogg FLAC stream into the chain via I/O callbacks.
- *
- *  The \a handle need only be open for reading, but must be seekable.
- *  The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb"
- *  for Windows).
- *
- * \note Ogg FLAC metadata data writing is not supported yet and
- * FLAC__metadata_chain_write() will fail.
- *
- * \param chain    A pointer to an existing chain.
- * \param handle   The I/O handle of the Ogg FLAC stream to read.  The
- *                 handle will NOT be closed after the metadata is read;
- *                 that is the duty of the caller.
- * \param callbacks
- *                 A set of callbacks to use for I/O.  The mandatory
- *                 callbacks are \a read, \a seek, and \a tell.
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__bool
- *    \c true if a valid list of metadata blocks was read from
- *    \a handle, else \c false.  On failure, check the status with
- *    FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks);
-
-/** Checks if writing the given chain would require the use of a
- *  temporary file, or if it could be written in place.
- *
- *  Under certain conditions, padding can be utilized so that writing
- *  edited metadata back to the FLAC file does not require rewriting the
- *  entire file.  If rewriting is required, then a temporary workfile is
- *  required.  When writing metadata using callbacks, you must check
- *  this function to know whether to call
- *  FLAC__metadata_chain_write_with_callbacks() or
- *  FLAC__metadata_chain_write_with_callbacks_and_tempfile().  When
- *  writing with FLAC__metadata_chain_write(), the temporary file is
- *  handled internally.
- *
- * \param chain    A pointer to an existing chain.
- * \param use_padding
- *                 Whether or not padding will be allowed to be used
- *                 during the write.  The value of \a use_padding given
- *                 here must match the value later passed to
- *                 FLAC__metadata_chain_write_with_callbacks() or
- *                 FLAC__metadata_chain_write_with_callbacks_with_tempfile().
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__bool
- *    \c true if writing the current chain would require a tempfile, or
- *    \c false if metadata can be written in place.
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_check_if_tempfile_needed(FLAC__Metadata_Chain *chain, FLAC__bool use_padding);
-
-/** Write all metadata out to the FLAC file.  This function tries to be as
- *  efficient as possible; how the metadata is actually written is shown by
- *  the following:
- *
- *  If the current chain is the same size as the existing metadata, the new
- *  data is written in place.
- *
- *  If the current chain is longer than the existing metadata, and
- *  \a use_padding is \c true, and the last block is a PADDING block of
- *  sufficient length, the function will truncate the final padding block
- *  so that the overall size of the metadata is the same as the existing
- *  metadata, and then just rewrite the metadata.  Otherwise, if not all of
- *  the above conditions are met, the entire FLAC file must be rewritten.
- *  If you want to use padding this way it is a good idea to call
- *  FLAC__metadata_chain_sort_padding() first so that you have the maximum
- *  amount of padding to work with, unless you need to preserve ordering
- *  of the PADDING blocks for some reason.
- *
- *  If the current chain is shorter than the existing metadata, and
- *  \a use_padding is \c true, and the final block is a PADDING block, the padding
- *  is extended to make the overall size the same as the existing data.  If
- *  \a use_padding is \c true and the last block is not a PADDING block, a new
- *  PADDING block is added to the end of the new data to make it the same
- *  size as the existing data (if possible, see the note to
- *  FLAC__metadata_simple_iterator_set_block() about the four byte limit)
- *  and the new data is written in place.  If none of the above apply or
- *  \a use_padding is \c false, the entire FLAC file is rewritten.
- *
- *  If \a preserve_file_stats is \c true, the owner and modification time will
- *  be preserved even if the FLAC file is written.
- *
- *  For this write function to be used, the chain must have been read with
- *  FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(), not
- *  FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks().
- *
- * \param chain               A pointer to an existing chain.
- * \param use_padding         See above.
- * \param preserve_file_stats See above.
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__bool
- *    \c true if the write succeeded, else \c false.  On failure,
- *    check the status with FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_write(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__bool preserve_file_stats);
-
-/** Write all metadata out to a FLAC stream via callbacks.
- *
- *  (See FLAC__metadata_chain_write() for the details on how padding is
- *  used to write metadata in place if possible.)
- *
- *  The \a handle must be open for updating and be seekable.  The
- *  equivalent minimum stdio fopen() file mode is \c "r+" (or \c "r+b"
- *  for Windows).
- *
- *  For this write function to be used, the chain must have been read with
- *  FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(),
- *  not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg().
- *  Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned
- *  \c false.
- *
- * \param chain        A pointer to an existing chain.
- * \param use_padding  See FLAC__metadata_chain_write()
- * \param handle       The I/O handle of the FLAC stream to write.  The
- *                     handle will NOT be closed after the metadata is
- *                     written; that is the duty of the caller.
- * \param callbacks    A set of callbacks to use for I/O.  The mandatory
- *                     callbacks are \a write and \a seek.
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__bool
- *    \c true if the write succeeded, else \c false.  On failure,
- *    check the status with FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks);
-
-/** Write all metadata out to a FLAC stream via callbacks.
- *
- *  (See FLAC__metadata_chain_write() for the details on how padding is
- *  used to write metadata in place if possible.)
- *
- *  This version of the write-with-callbacks function must be used when
- *  FLAC__metadata_chain_check_if_tempfile_needed() returns true.  In
- *  this function, you must supply an I/O handle corresponding to the
- *  FLAC file to edit, and a temporary handle to which the new FLAC
- *  file will be written.  It is the caller's job to move this temporary
- *  FLAC file on top of the original FLAC file to complete the metadata
- *  edit.
- *
- *  The \a handle must be open for reading and be seekable.  The
- *  equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb"
- *  for Windows).
- *
- *  The \a temp_handle must be open for writing.  The
- *  equivalent minimum stdio fopen() file mode is \c "w" (or \c "wb"
- *  for Windows).  It should be an empty stream, or at least positioned
- *  at the start-of-file (in which case it is the caller's duty to
- *  truncate it on return).
- *
- *  For this write function to be used, the chain must have been read with
- *  FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(),
- *  not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg().
- *  Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned
- *  \c true.
- *
- * \param chain        A pointer to an existing chain.
- * \param use_padding  See FLAC__metadata_chain_write()
- * \param handle       The I/O handle of the original FLAC stream to read.
- *                     The handle will NOT be closed after the metadata is
- *                     written; that is the duty of the caller.
- * \param callbacks    A set of callbacks to use for I/O on \a handle.
- *                     The mandatory callbacks are \a read, \a seek, and
- *                     \a eof.
- * \param temp_handle  The I/O handle of the FLAC stream to write.  The
- *                     handle will NOT be closed after the metadata is
- *                     written; that is the duty of the caller.
- * \param temp_callbacks
- *                     A set of callbacks to use for I/O on temp_handle.
- *                     The only mandatory callback is \a write.
- * \assert
- *    \code chain != NULL \endcode
- * \retval FLAC__bool
- *    \c true if the write succeeded, else \c false.  On failure,
- *    check the status with FLAC__metadata_chain_status().
- */
-FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks_and_tempfile(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks, FLAC__IOHandle temp_handle, FLAC__IOCallbacks temp_callbacks);
-
-/** Merge adjacent PADDING blocks into a single block.
- *
- * \note This function does not write to the FLAC file, it only
- * modifies the chain.
- *
- * \warning Any iterator on the current chain will become invalid after this
- * call.  You should delete the iterator and get a new one.
- *
- * \param chain               A pointer to an existing chain.
- * \assert
- *    \code chain != NULL \endcode
- */
-FLAC_API void FLAC__metadata_chain_merge_padding(FLAC__Metadata_Chain *chain);
-
-/** This function will move all PADDING blocks to the end on the metadata,
- *  then merge them into a single block.
- *
- * \note This function does not write to the FLAC file, it only
- * modifies the chain.
- *
- * \warning Any iterator on the current chain will become invalid after this
- * call.  You should delete the iterator and get a new one.
- *
- * \param chain  A pointer to an existing chain.
- * \assert
- *    \code chain != NULL \endcode
- */
-FLAC_API void FLAC__metadata_chain_sort_padding(FLAC__Metadata_Chain *chain);
-
-
-/*********** FLAC__Metadata_Iterator ***********/
-
-/** Create a new iterator instance.
- *
- * \retval FLAC__Metadata_Iterator*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__Metadata_Iterator *FLAC__metadata_iterator_new(void);
-
-/** Free an iterator instance.  Deletes the object pointed to by \a iterator.
- *
- * \param iterator  A pointer to an existing iterator.
- * \assert
- *    \code iterator != NULL \endcode
- */
-FLAC_API void FLAC__metadata_iterator_delete(FLAC__Metadata_Iterator *iterator);
-
-/** Initialize the iterator to point to the first metadata block in the
- *  given chain.
- *
- * \param iterator  A pointer to an existing iterator.
- * \param chain     A pointer to an existing and initialized (read) chain.
- * \assert
- *    \code iterator != NULL \endcode
- *    \code chain != NULL \endcode
- */
-FLAC_API void FLAC__metadata_iterator_init(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Chain *chain);
-
-/** Moves the iterator forward one metadata block, returning \c false if
- *  already at the end.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__bool
- *    \c false if already at the last metadata block of the chain, else
- *    \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_iterator_next(FLAC__Metadata_Iterator *iterator);
-
-/** Moves the iterator backward one metadata block, returning \c false if
- *  already at the beginning.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__bool
- *    \c false if already at the first metadata block of the chain, else
- *    \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_iterator_prev(FLAC__Metadata_Iterator *iterator);
-
-/** Get the type of the metadata block at the current position.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__MetadataType
- *    The type of the metadata block at the current iterator position.
- */
-FLAC_API FLAC__MetadataType FLAC__metadata_iterator_get_block_type(const FLAC__Metadata_Iterator *iterator);
-
-/** Get the metadata block at the current position.  You can modify
- *  the block in place but must write the chain before the changes
- *  are reflected to the FLAC file.  You do not need to call
- *  FLAC__metadata_iterator_set_block() to reflect the changes;
- *  the pointer returned by FLAC__metadata_iterator_get_block()
- *  points directly into the chain.
- *
- * \warning
- * Do not call FLAC__metadata_object_delete() on the returned object;
- * to delete a block use FLAC__metadata_iterator_delete_block().
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__StreamMetadata*
- *    The current metadata block.
- */
-FLAC_API FLAC__StreamMetadata *FLAC__metadata_iterator_get_block(FLAC__Metadata_Iterator *iterator);
-
-/** Set the metadata block at the current position, replacing the existing
- *  block.  The new block passed in becomes owned by the chain and it will be
- *  deleted when the chain is deleted.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \param block     A pointer to a metadata block.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- *    \code block != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the conditions in the above description are not met, or
- *    a memory allocation error occurs, otherwise \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_iterator_set_block(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block);
-
-/** Removes the current block from the chain.  If \a replace_with_padding is
- *  \c true, the block will instead be replaced with a padding block of equal
- *  size.  You can not delete the STREAMINFO block.  The iterator will be
- *  left pointing to the block before the one just "deleted", even if
- *  \a replace_with_padding is \c true.
- *
- * \param iterator              A pointer to an existing initialized iterator.
- * \param replace_with_padding  See above.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__bool
- *    \c false if the conditions in the above description are not met,
- *    otherwise \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_iterator_delete_block(FLAC__Metadata_Iterator *iterator, FLAC__bool replace_with_padding);
-
-/** Insert a new block before the current block.  You cannot insert a block
- *  before the first STREAMINFO block.  You cannot insert a STREAMINFO block
- *  as there can be only one, the one that already exists at the head when you
- *  read in a chain.  The chain takes ownership of the new block and it will be
- *  deleted when the chain is deleted.  The iterator will be left pointing to
- *  the new block.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \param block     A pointer to a metadata block to insert.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__bool
- *    \c false if the conditions in the above description are not met, or
- *    a memory allocation error occurs, otherwise \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_before(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block);
-
-/** Insert a new block after the current block.  You cannot insert a STREAMINFO
- *  block as there can be only one, the one that already exists at the head when
- *  you read in a chain.  The chain takes ownership of the new block and it will
- *  be deleted when the chain is deleted.  The iterator will be left pointing to
- *  the new block.
- *
- * \param iterator  A pointer to an existing initialized iterator.
- * \param block     A pointer to a metadata block to insert.
- * \assert
- *    \code iterator != NULL \endcode
- *    \a iterator has been successfully initialized with
- *    FLAC__metadata_iterator_init()
- * \retval FLAC__bool
- *    \c false if the conditions in the above description are not met, or
- *    a memory allocation error occurs, otherwise \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_after(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block);
-
-/* \} */
-
-
-/** \defgroup flac_metadata_object FLAC/metadata.h: metadata object methods
- *  \ingroup flac_metadata
- *
- * \brief
- * This module contains methods for manipulating FLAC metadata objects.
- *
- * Since many are variable length we have to be careful about the memory
- * management.  We decree that all pointers to data in the object are
- * owned by the object and memory-managed by the object.
- *
- * Use the FLAC__metadata_object_new() and FLAC__metadata_object_delete()
- * functions to create all instances.  When using the
- * FLAC__metadata_object_set_*() functions to set pointers to data, set
- * \a copy to \c true to have the function make it's own copy of the data, or
- * to \c false to give the object ownership of your data.  In the latter case
- * your pointer must be freeable by free() and will be free()d when the object
- * is FLAC__metadata_object_delete()d.  It is legal to pass a null pointer as
- * the data pointer to a FLAC__metadata_object_set_*() function as long as
- * the length argument is 0 and the \a copy argument is \c false.
- *
- * The FLAC__metadata_object_new() and FLAC__metadata_object_clone() function
- * will return \c NULL in the case of a memory allocation error, otherwise a new
- * object.  The FLAC__metadata_object_set_*() functions return \c false in the
- * case of a memory allocation error.
- *
- * We don't have the convenience of C++ here, so note that the library relies
- * on you to keep the types straight.  In other words, if you pass, for
- * example, a FLAC__StreamMetadata* that represents a STREAMINFO block to
- * FLAC__metadata_object_application_set_data(), you will get an assertion
- * failure.
- *
- * For convenience the FLAC__metadata_object_vorbiscomment_*() functions
- * maintain a trailing NUL on each Vorbis comment entry.  This is not counted
- * toward the length or stored in the stream, but it can make working with plain
- * comments (those that don't contain embedded-NULs in the value) easier.
- * Entries passed into these functions have trailing NULs added if missing, and
- * returned entries are guaranteed to have a trailing NUL.
- *
- * The FLAC__metadata_object_vorbiscomment_*() functions that take a Vorbis
- * comment entry/name/value will first validate that it complies with the Vorbis
- * comment specification and return false if it does not.
- *
- * There is no need to recalculate the length field on metadata blocks you
- * have modified.  They will be calculated automatically before they  are
- * written back to a file.
- *
- * \{
- */
-
-
-/** Create a new metadata object instance of the given type.
- *
- *  The object will be "empty"; i.e. values and data pointers will be \c 0,
- *  with the exception of FLAC__METADATA_TYPE_VORBIS_COMMENT, which will have
- *  the vendor string set (but zero comments).
- *
- *  Do not pass in a value greater than or equal to
- *  \a FLAC__METADATA_TYPE_UNDEFINED unless you really know what you're
- *  doing.
- *
- * \param type  Type of object to create
- * \retval FLAC__StreamMetadata*
- *    \c NULL if there was an error allocating memory or the type code is
- *    greater than FLAC__MAX_METADATA_TYPE_CODE, else the new instance.
- */
-FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_new(FLAC__MetadataType type);
-
-/** Create a copy of an existing metadata object.
- *
- *  The copy is a "deep" copy, i.e. dynamically allocated data within the
- *  object is also copied.  The caller takes ownership of the new block and
- *  is responsible for freeing it with FLAC__metadata_object_delete().
- *
- * \param object  Pointer to object to copy.
- * \assert
- *    \code object != NULL \endcode
- * \retval FLAC__StreamMetadata*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_clone(const FLAC__StreamMetadata *object);
-
-/** Free a metadata object.  Deletes the object pointed to by \a object.
- *
- *  The delete is a "deep" delete, i.e. dynamically allocated data within the
- *  object is also deleted.
- *
- * \param object  A pointer to an existing object.
- * \assert
- *    \code object != NULL \endcode
- */
-FLAC_API void FLAC__metadata_object_delete(FLAC__StreamMetadata *object);
-
-/** Compares two metadata objects.
- *
- *  The compare is "deep", i.e. dynamically allocated data within the
- *  object is also compared.
- *
- * \param block1  A pointer to an existing object.
- * \param block2  A pointer to an existing object.
- * \assert
- *    \code block1 != NULL \endcode
- *    \code block2 != NULL \endcode
- * \retval FLAC__bool
- *    \c true if objects are identical, else \c false.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_is_equal(const FLAC__StreamMetadata *block1, const FLAC__StreamMetadata *block2);
-
-/** Sets the application data of an APPLICATION block.
- *
- *  If \a copy is \c true, a copy of the data is stored; otherwise, the object
- *  takes ownership of the pointer.  The existing data will be freed if this
- *  function is successful, otherwise the original data will remain if \a copy
- *  is \c true and malloc() fails.
- *
- * \note It is safe to pass a const pointer to \a data if \a copy is \c true.
- *
- * \param object  A pointer to an existing APPLICATION object.
- * \param data    A pointer to the data to set.
- * \param length  The length of \a data in bytes.
- * \param copy    See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_APPLICATION \endcode
- *    \code (data != NULL && length > 0) ||
- * (data == NULL && length == 0 && copy == false) \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_application_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, unsigned length, FLAC__bool copy);
-
-/** Resize the seekpoint array.
- *
- *  If the size shrinks, elements will truncated; if it grows, new placeholder
- *  points will be added to the end.
- *
- * \param object          A pointer to an existing SEEKTABLE object.
- * \param new_num_points  The desired length of the array; may be \c 0.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- *    \code (object->data.seek_table.points == NULL && object->data.seek_table.num_points == 0) ||
- * (object->data.seek_table.points != NULL && object->data.seek_table.num_points > 0) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation error, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_resize_points(FLAC__StreamMetadata *object, unsigned new_num_points);
-
-/** Set a seekpoint in a seektable.
- *
- * \param object     A pointer to an existing SEEKTABLE object.
- * \param point_num  Index into seekpoint array to set.
- * \param point      The point to set.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- *    \code object->data.seek_table.num_points > point_num \endcode
- */
-FLAC_API void FLAC__metadata_object_seektable_set_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point);
-
-/** Insert a seekpoint into a seektable.
- *
- * \param object     A pointer to an existing SEEKTABLE object.
- * \param point_num  Index into seekpoint array to set.
- * \param point      The point to set.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- *    \code object->data.seek_table.num_points >= point_num \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation error, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_insert_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point);
-
-/** Delete a seekpoint from a seektable.
- *
- * \param object     A pointer to an existing SEEKTABLE object.
- * \param point_num  Index into seekpoint array to set.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- *    \code object->data.seek_table.num_points > point_num \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation error, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_delete_point(FLAC__StreamMetadata *object, unsigned point_num);
-
-/** Check a seektable to see if it conforms to the FLAC specification.
- *  See the format specification for limits on the contents of the
- *  seektable.
- *
- * \param object  A pointer to an existing SEEKTABLE object.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- * \retval FLAC__bool
- *    \c false if seek table is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_is_legal(const FLAC__StreamMetadata *object);
-
-/** Append a number of placeholder points to the end of a seek table.
- *
- * \note
- * As with the other ..._seektable_template_... functions, you should
- * call FLAC__metadata_object_seektable_template_sort() when finished
- * to make the seek table legal.
- *
- * \param object  A pointer to an existing SEEKTABLE object.
- * \param num     The number of placeholder points to append.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_placeholders(FLAC__StreamMetadata *object, unsigned num);
-
-/** Append a specific seek point template to the end of a seek table.
- *
- * \note
- * As with the other ..._seektable_template_... functions, you should
- * call FLAC__metadata_object_seektable_template_sort() when finished
- * to make the seek table legal.
- *
- * \param object  A pointer to an existing SEEKTABLE object.
- * \param sample_number  The sample number of the seek point template.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_point(FLAC__StreamMetadata *object, FLAC__uint64 sample_number);
-
-/** Append specific seek point templates to the end of a seek table.
- *
- * \note
- * As with the other ..._seektable_template_... functions, you should
- * call FLAC__metadata_object_seektable_template_sort() when finished
- * to make the seek table legal.
- *
- * \param object  A pointer to an existing SEEKTABLE object.
- * \param sample_numbers  An array of sample numbers for the seek points.
- * \param num     The number of seek point templates to append.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_points(FLAC__StreamMetadata *object, FLAC__uint64 sample_numbers[], unsigned num);
-
-/** Append a set of evenly-spaced seek point templates to the end of a
- *  seek table.
- *
- * \note
- * As with the other ..._seektable_template_... functions, you should
- * call FLAC__metadata_object_seektable_template_sort() when finished
- * to make the seek table legal.
- *
- * \param object  A pointer to an existing SEEKTABLE object.
- * \param num     The number of placeholder points to append.
- * \param total_samples  The total number of samples to be encoded;
- *                       the seekpoints will be spaced approximately
- *                       \a total_samples / \a num samples apart.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- *    \code total_samples > 0 \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points(FLAC__StreamMetadata *object, unsigned num, FLAC__uint64 total_samples);
-
-/** Append a set of evenly-spaced seek point templates to the end of a
- *  seek table.
- *
- * \note
- * As with the other ..._seektable_template_... functions, you should
- * call FLAC__metadata_object_seektable_template_sort() when finished
- * to make the seek table legal.
- *
- * \param object  A pointer to an existing SEEKTABLE object.
- * \param samples The number of samples apart to space the placeholder
- *                points.  The first point will be at sample \c 0, the
- *                second at sample \a samples, then 2*\a samples, and
- *                so on.  As long as \a samples and \a total_samples
- *                are greater than \c 0, there will always be at least
- *                one seekpoint at sample \c 0.
- * \param total_samples  The total number of samples to be encoded;
- *                       the seekpoints will be spaced
- *                       \a samples samples apart.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- *    \code samples > 0 \endcode
- *    \code total_samples > 0 \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(FLAC__StreamMetadata *object, unsigned samples, FLAC__uint64 total_samples);
-
-/** Sort a seek table's seek points according to the format specification,
- *  removing duplicates.
- *
- * \param object   A pointer to a seek table to be sorted.
- * \param compact  If \c false, behaves like FLAC__format_seektable_sort().
- *                 If \c true, duplicates are deleted and the seek table is
- *                 shrunk appropriately; the number of placeholder points
- *                 present in the seek table will be the same after the call
- *                 as before.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode
- * \retval FLAC__bool
- *    \c false if realloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_sort(FLAC__StreamMetadata *object, FLAC__bool compact);
-
-/** Sets the vendor string in a VORBIS_COMMENT block.
- *
- *  For convenience, a trailing NUL is added to the entry if it doesn't have
- *  one already.
- *
- *  If \a copy is \c true, a copy of the entry is stored; otherwise, the object
- *  takes ownership of the \c entry.entry pointer.
- *
- *  \note If this function returns \c false, the caller still owns the
- *  pointer.
- *
- * \param object  A pointer to an existing VORBIS_COMMENT object.
- * \param entry   The entry to set the vendor string to.
- * \param copy    See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code (entry.entry != NULL && entry.length > 0) ||
- * (entry.entry == NULL && entry.length == 0) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails or \a entry does not comply with the
- *    Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_vendor_string(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy);
-
-/** Resize the comment array.
- *
- *  If the size shrinks, elements will truncated; if it grows, new empty
- *  fields will be added to the end.
- *
- * \param object            A pointer to an existing VORBIS_COMMENT object.
- * \param new_num_comments  The desired length of the array; may be \c 0.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code (object->data.vorbis_comment.comments == NULL && object->data.vorbis_comment.num_comments == 0) ||
- * (object->data.vorbis_comment.comments != NULL && object->data.vorbis_comment.num_comments > 0) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_resize_comments(FLAC__StreamMetadata *object, unsigned new_num_comments);
-
-/** Sets a comment in a VORBIS_COMMENT block.
- *
- *  For convenience, a trailing NUL is added to the entry if it doesn't have
- *  one already.
- *
- *  If \a copy is \c true, a copy of the entry is stored; otherwise, the object
- *  takes ownership of the \c entry.entry pointer.
- *
- *  \note If this function returns \c false, the caller still owns the
- *  pointer.
- *
- * \param object       A pointer to an existing VORBIS_COMMENT object.
- * \param comment_num  Index into comment array to set.
- * \param entry        The entry to set the comment to.
- * \param copy         See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code comment_num < object->data.vorbis_comment.num_comments \endcode
- *    \code (entry.entry != NULL && entry.length > 0) ||
- * (entry.entry == NULL && entry.length == 0) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails or \a entry does not comply with the
- *    Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy);
-
-/** Insert a comment in a VORBIS_COMMENT block at the given index.
- *
- *  For convenience, a trailing NUL is added to the entry if it doesn't have
- *  one already.
- *
- *  If \a copy is \c true, a copy of the entry is stored; otherwise, the object
- *  takes ownership of the \c entry.entry pointer.
- *
- *  \note If this function returns \c false, the caller still owns the
- *  pointer.
- *
- * \param object       A pointer to an existing VORBIS_COMMENT object.
- * \param comment_num  The index at which to insert the comment.  The comments
- *                     at and after \a comment_num move right one position.
- *                     To append a comment to the end, set \a comment_num to
- *                     \c object->data.vorbis_comment.num_comments .
- * \param entry        The comment to insert.
- * \param copy         See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code object->data.vorbis_comment.num_comments >= comment_num \endcode
- *    \code (entry.entry != NULL && entry.length > 0) ||
- * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails or \a entry does not comply with the
- *    Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_insert_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy);
-
-/** Appends a comment to a VORBIS_COMMENT block.
- *
- *  For convenience, a trailing NUL is added to the entry if it doesn't have
- *  one already.
- *
- *  If \a copy is \c true, a copy of the entry is stored; otherwise, the object
- *  takes ownership of the \c entry.entry pointer.
- *
- *  \note If this function returns \c false, the caller still owns the
- *  pointer.
- *
- * \param object       A pointer to an existing VORBIS_COMMENT object.
- * \param entry        The comment to insert.
- * \param copy         See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code (entry.entry != NULL && entry.length > 0) ||
- * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails or \a entry does not comply with the
- *    Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_append_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy);
-
-/** Replaces comments in a VORBIS_COMMENT block with a new one.
- *
- *  For convenience, a trailing NUL is added to the entry if it doesn't have
- *  one already.
- *
- *  Depending on the the value of \a all, either all or just the first comment
- *  whose field name(s) match the given entry's name will be replaced by the
- *  given entry.  If no comments match, \a entry will simply be appended.
- *
- *  If \a copy is \c true, a copy of the entry is stored; otherwise, the object
- *  takes ownership of the \c entry.entry pointer.
- *
- *  \note If this function returns \c false, the caller still owns the
- *  pointer.
- *
- * \param object       A pointer to an existing VORBIS_COMMENT object.
- * \param entry        The comment to insert.
- * \param all          If \c true, all comments whose field name matches
- *                     \a entry's field name will be removed, and \a entry will
- *                     be inserted at the position of the first matching
- *                     comment.  If \c false, only the first comment whose
- *                     field name matches \a entry's field name will be
- *                     replaced with \a entry.
- * \param copy         See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code (entry.entry != NULL && entry.length > 0) ||
- * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails or \a entry does not comply with the
- *    Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_replace_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool all, FLAC__bool copy);
-
-/** Delete a comment in a VORBIS_COMMENT block at the given index.
- *
- * \param object       A pointer to an existing VORBIS_COMMENT object.
- * \param comment_num  The index of the comment to delete.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code object->data.vorbis_comment.num_comments > comment_num \endcode
- * \retval FLAC__bool
- *    \c false if realloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_delete_comment(FLAC__StreamMetadata *object, unsigned comment_num);
-
-/** Creates a Vorbis comment entry from NUL-terminated name and value strings.
- *
- *  On return, the filled-in \a entry->entry pointer will point to malloc()ed
- *  memory and shall be owned by the caller.  For convenience the entry will
- *  have a terminating NUL.
- *
- * \param entry              A pointer to a Vorbis comment entry.  The entry's
- *                           \c entry pointer should not point to allocated
- *                           memory as it will be overwritten.
- * \param field_name         The field name in ASCII, \c NUL terminated.
- * \param field_value        The field value in UTF-8, \c NUL terminated.
- * \assert
- *    \code entry != NULL \endcode
- *    \code field_name != NULL \endcode
- *    \code field_value != NULL \endcode
- * \retval FLAC__bool
- *    \c false if malloc() fails, or if \a field_name or \a field_value does
- *    not comply with the Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *field_name, const char *field_value);
-
-/** Splits a Vorbis comment entry into NUL-terminated name and value strings.
- *
- *  The returned pointers to name and value will be allocated by malloc()
- *  and shall be owned by the caller.
- *
- * \param entry              An existing Vorbis comment entry.
- * \param field_name         The address of where the returned pointer to the
- *                           field name will be stored.
- * \param field_value        The address of where the returned pointer to the
- *                           field value will be stored.
- * \assert
- *    \code (entry.entry != NULL && entry.length > 0) \endcode
- *    \code memchr(entry.entry, '=', entry.length) != NULL \endcode
- *    \code field_name != NULL \endcode
- *    \code field_value != NULL \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation fails or \a entry does not comply with the
- *    Vorbis comment specification, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(const FLAC__StreamMetadata_VorbisComment_Entry entry, char **field_name, char **field_value);
-
-/** Check if the given Vorbis comment entry's field name matches the given
- *  field name.
- *
- * \param entry              An existing Vorbis comment entry.
- * \param field_name         The field name to check.
- * \param field_name_length  The length of \a field_name, not including the
- *                           terminating \c NUL.
- * \assert
- *    \code (entry.entry != NULL && entry.length > 0) \endcode
- * \retval FLAC__bool
- *    \c true if the field names match, else \c false
- */
-FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_matches(const FLAC__StreamMetadata_VorbisComment_Entry entry, const char *field_name, unsigned field_name_length);
-
-/** Find a Vorbis comment with the given field name.
- *
- *  The search begins at entry number \a offset; use an offset of 0 to
- *  search from the beginning of the comment array.
- *
- * \param object      A pointer to an existing VORBIS_COMMENT object.
- * \param offset      The offset into the comment array from where to start
- *                    the search.
- * \param field_name  The field name of the comment to find.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- *    \code field_name != NULL \endcode
- * \retval int
- *    The offset in the comment array of the first comment whose field
- *    name matches \a field_name, or \c -1 if no match was found.
- */
-FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name);
-
-/** Remove first Vorbis comment matching the given field name.
- *
- * \param object      A pointer to an existing VORBIS_COMMENT object.
- * \param field_name  The field name of comment to delete.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- * \retval int
- *    \c -1 for memory allocation error, \c 0 for no matching entries,
- *    \c 1 for one matching entry deleted.
- */
-FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name);
-
-/** Remove all Vorbis comments matching the given field name.
- *
- * \param object      A pointer to an existing VORBIS_COMMENT object.
- * \param field_name  The field name of comments to delete.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode
- * \retval int
- *    \c -1 for memory allocation error, \c 0 for no matching entries,
- *    else the number of matching entries deleted.
- */
-FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name);
-
-/** Create a new CUESHEET track instance.
- *
- *  The object will be "empty"; i.e. values and data pointers will be \c 0.
- *
- * \retval FLAC__StreamMetadata_CueSheet_Track*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_new(void);
-
-/** Create a copy of an existing CUESHEET track object.
- *
- *  The copy is a "deep" copy, i.e. dynamically allocated data within the
- *  object is also copied.  The caller takes ownership of the new object and
- *  is responsible for freeing it with
- *  FLAC__metadata_object_cuesheet_track_delete().
- *
- * \param object  Pointer to object to copy.
- * \assert
- *    \code object != NULL \endcode
- * \retval FLAC__StreamMetadata_CueSheet_Track*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_clone(const FLAC__StreamMetadata_CueSheet_Track *object);
-
-/** Delete a CUESHEET track object
- *
- * \param object       A pointer to an existing CUESHEET track object.
- * \assert
- *    \code object != NULL \endcode
- */
-FLAC_API void FLAC__metadata_object_cuesheet_track_delete(FLAC__StreamMetadata_CueSheet_Track *object);
-
-/** Resize a track's index point array.
- *
- *  If the size shrinks, elements will truncated; if it grows, new blank
- *  indices will be added to the end.
- *
- * \param object           A pointer to an existing CUESHEET object.
- * \param track_num        The index of the track to modify.  NOTE: this is not
- *                         necessarily the same as the track's \a number field.
- * \param new_num_indices  The desired length of the array; may be \c 0.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks > track_num \endcode
- *    \code (object->data.cue_sheet.tracks[track_num].indices == NULL && object->data.cue_sheet.tracks[track_num].num_indices == 0) ||
- * (object->data.cue_sheet.tracks[track_num].indices != NULL && object->data.cue_sheet.tracks[track_num].num_indices > 0) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation error, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_resize_indices(FLAC__StreamMetadata *object, unsigned track_num, unsigned new_num_indices);
-
-/** Insert an index point in a CUESHEET track at the given index.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    The index of the track to modify.  NOTE: this is not
- *                     necessarily the same as the track's \a number field.
- * \param index_num    The index into the track's index array at which to
- *                     insert the index point.  NOTE: this is not necessarily
- *                     the same as the index point's \a number field.  The
- *                     indices at and after \a index_num move right one
- *                     position.  To append an index point to the end, set
- *                     \a index_num to
- *                     \c object->data.cue_sheet.tracks[track_num].num_indices .
- * \param index        The index point to insert.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks > track_num \endcode
- *    \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode
- * \retval FLAC__bool
- *    \c false if realloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num, FLAC__StreamMetadata_CueSheet_Index index);
-
-/** Insert a blank index point in a CUESHEET track at the given index.
- *
- *  A blank index point is one in which all field values are zero.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    The index of the track to modify.  NOTE: this is not
- *                     necessarily the same as the track's \a number field.
- * \param index_num    The index into the track's index array at which to
- *                     insert the index point.  NOTE: this is not necessarily
- *                     the same as the index point's \a number field.  The
- *                     indices at and after \a index_num move right one
- *                     position.  To append an index point to the end, set
- *                     \a index_num to
- *                     \c object->data.cue_sheet.tracks[track_num].num_indices .
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks > track_num \endcode
- *    \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode
- * \retval FLAC__bool
- *    \c false if realloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_blank_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num);
-
-/** Delete an index point in a CUESHEET track at the given index.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    The index into the track array of the track to
- *                     modify.  NOTE: this is not necessarily the same
- *                     as the track's \a number field.
- * \param index_num    The index into the track's index array of the index
- *                     to delete.  NOTE: this is not necessarily the same
- *                     as the index's \a number field.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks > track_num \endcode
- *    \code object->data.cue_sheet.tracks[track_num].num_indices > index_num \endcode
- * \retval FLAC__bool
- *    \c false if realloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_delete_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num);
-
-/** Resize the track array.
- *
- *  If the size shrinks, elements will truncated; if it grows, new blank
- *  tracks will be added to the end.
- *
- * \param object            A pointer to an existing CUESHEET object.
- * \param new_num_tracks    The desired length of the array; may be \c 0.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code (object->data.cue_sheet.tracks == NULL && object->data.cue_sheet.num_tracks == 0) ||
- * (object->data.cue_sheet.tracks != NULL && object->data.cue_sheet.num_tracks > 0) \endcode
- * \retval FLAC__bool
- *    \c false if memory allocation error, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_resize_tracks(FLAC__StreamMetadata *object, unsigned new_num_tracks);
-
-/** Sets a track in a CUESHEET block.
- *
- *  If \a copy is \c true, a copy of the track is stored; otherwise, the object
- *  takes ownership of the \a track pointer.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    Index into track array to set.  NOTE: this is not
- *                     necessarily the same as the track's \a number field.
- * \param track        The track to set the track to.  You may safely pass in
- *                     a const pointer if \a copy is \c true.
- * \param copy         See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code track_num < object->data.cue_sheet.num_tracks \endcode
- *    \code (track->indices != NULL && track->num_indices > 0) ||
- * (track->indices == NULL && track->num_indices == 0) \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_set_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy);
-
-/** Insert a track in a CUESHEET block at the given index.
- *
- *  If \a copy is \c true, a copy of the track is stored; otherwise, the object
- *  takes ownership of the \a track pointer.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    The index at which to insert the track.  NOTE: this
- *                     is not necessarily the same as the track's \a number
- *                     field.  The tracks at and after \a track_num move right
- *                     one position.  To append a track to the end, set
- *                     \a track_num to \c object->data.cue_sheet.num_tracks .
- * \param track        The track to insert.  You may safely pass in a const
- *                     pointer if \a copy is \c true.
- * \param copy         See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks >= track_num \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy);
-
-/** Insert a blank track in a CUESHEET block at the given index.
- *
- *  A blank track is one in which all field values are zero.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    The index at which to insert the track.  NOTE: this
- *                     is not necessarily the same as the track's \a number
- *                     field.  The tracks at and after \a track_num move right
- *                     one position.  To append a track to the end, set
- *                     \a track_num to \c object->data.cue_sheet.num_tracks .
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks >= track_num \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_blank_track(FLAC__StreamMetadata *object, unsigned track_num);
-
-/** Delete a track in a CUESHEET block at the given index.
- *
- * \param object       A pointer to an existing CUESHEET object.
- * \param track_num    The index into the track array of the track to
- *                     delete.  NOTE: this is not necessarily the same
- *                     as the track's \a number field.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- *    \code object->data.cue_sheet.num_tracks > track_num \endcode
- * \retval FLAC__bool
- *    \c false if realloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_delete_track(FLAC__StreamMetadata *object, unsigned track_num);
-
-/** Check a cue sheet to see if it conforms to the FLAC specification.
- *  See the format specification for limits on the contents of the
- *  cue sheet.
- *
- * \param object     A pointer to an existing CUESHEET object.
- * \param check_cd_da_subset  If \c true, check CUESHEET against more
- *                   stringent requirements for a CD-DA (audio) disc.
- * \param violation  Address of a pointer to a string.  If there is a
- *                   violation, a pointer to a string explanation of the
- *                   violation will be returned here. \a violation may be
- *                   \c NULL if you don't need the returned string.  Do not
- *                   free the returned string; it will always point to static
- *                   data.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- * \retval FLAC__bool
- *    \c false if cue sheet is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_is_legal(const FLAC__StreamMetadata *object, FLAC__bool check_cd_da_subset, const char **violation);
-
-/** Calculate and return the CDDB/freedb ID for a cue sheet.  The function
- *  assumes the cue sheet corresponds to a CD; the result is undefined
- *  if the cuesheet's is_cd bit is not set.
- *
- * \param object     A pointer to an existing CUESHEET object.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode
- * \retval FLAC__uint32
- *    The unsigned integer representation of the CDDB/freedb ID
- */
-FLAC_API FLAC__uint32 FLAC__metadata_object_cuesheet_calculate_cddb_id(const FLAC__StreamMetadata *object);
-
-/** Sets the MIME type of a PICTURE block.
- *
- *  If \a copy is \c true, a copy of the string is stored; otherwise, the object
- *  takes ownership of the pointer.  The existing string will be freed if this
- *  function is successful, otherwise the original string will remain if \a copy
- *  is \c true and malloc() fails.
- *
- * \note It is safe to pass a const pointer to \a mime_type if \a copy is \c true.
- *
- * \param object      A pointer to an existing PICTURE object.
- * \param mime_type   A pointer to the MIME type string.  The string must be
- *                    ASCII characters 0x20-0x7e, NUL-terminated.  No validation
- *                    is done.
- * \param copy        See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode
- *    \code (mime_type != NULL) \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_picture_set_mime_type(FLAC__StreamMetadata *object, char *mime_type, FLAC__bool copy);
-
-/** Sets the description of a PICTURE block.
- *
- *  If \a copy is \c true, a copy of the string is stored; otherwise, the object
- *  takes ownership of the pointer.  The existing string will be freed if this
- *  function is successful, otherwise the original string will remain if \a copy
- *  is \c true and malloc() fails.
- *
- * \note It is safe to pass a const pointer to \a description if \a copy is \c true.
- *
- * \param object      A pointer to an existing PICTURE object.
- * \param description A pointer to the description string.  The string must be
- *                    valid UTF-8, NUL-terminated.  No validation is done.
- * \param copy        See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode
- *    \code (description != NULL) \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_picture_set_description(FLAC__StreamMetadata *object, FLAC__byte *description, FLAC__bool copy);
-
-/** Sets the picture data of a PICTURE block.
- *
- *  If \a copy is \c true, a copy of the data is stored; otherwise, the object
- *  takes ownership of the pointer.  Also sets the \a data_length field of the
- *  metadata object to what is passed in as the \a length parameter.  The
- *  existing data will be freed if this function is successful, otherwise the
- *  original data and data_length will remain if \a copy is \c true and
- *  malloc() fails.
- *
- * \note It is safe to pass a const pointer to \a data if \a copy is \c true.
- *
- * \param object  A pointer to an existing PICTURE object.
- * \param data    A pointer to the data to set.
- * \param length  The length of \a data in bytes.
- * \param copy    See above.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode
- *    \code (data != NULL && length > 0) ||
- * (data == NULL && length == 0 && copy == false) \endcode
- * \retval FLAC__bool
- *    \c false if \a copy is \c true and malloc() fails, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_picture_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, FLAC__uint32 length, FLAC__bool copy);
-
-/** Check a PICTURE block to see if it conforms to the FLAC specification.
- *  See the format specification for limits on the contents of the
- *  PICTURE block.
- *
- * \param object     A pointer to existing PICTURE block to be checked.
- * \param violation  Address of a pointer to a string.  If there is a
- *                   violation, a pointer to a string explanation of the
- *                   violation will be returned here. \a violation may be
- *                   \c NULL if you don't need the returned string.  Do not
- *                   free the returned string; it will always point to static
- *                   data.
- * \assert
- *    \code object != NULL \endcode
- *    \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode
- * \retval FLAC__bool
- *    \c false if PICTURE block is illegal, else \c true.
- */
-FLAC_API FLAC__bool FLAC__metadata_object_picture_is_legal(const FLAC__StreamMetadata *object, const char **violation);
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/ordinals.h b/modules/juce_audio_formats/codecs/flac/ordinals.h
deleted file mode 100644
index 0bab9c2..0000000
--- a/modules/juce_audio_formats/codecs/flac/ordinals.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__ORDINALS_H
-#define FLAC__ORDINALS_H
-
-#if defined(_MSC_VER) && _MSC_VER < 1600
-
-/* Microsoft Visual Studio earlier than the 2010 version did not provide
- * the 1999 ISO C Standard header file <stdint.h>.
- */
-
-typedef __int8 FLAC__int8;
-typedef unsigned __int8 FLAC__uint8;
-
-typedef __int16 FLAC__int16;
-typedef __int32 FLAC__int32;
-typedef __int64 FLAC__int64;
-typedef unsigned __int16 FLAC__uint16;
-typedef unsigned __int32 FLAC__uint32;
-typedef unsigned __int64 FLAC__uint64;
-
-#else
-
-/* For MSVC 2010 and everything else which provides <stdint.h>. */
-
-#include <stdint.h>
-
-typedef int8_t FLAC__int8;
-typedef uint8_t FLAC__uint8;
-
-typedef int16_t FLAC__int16;
-typedef int32_t FLAC__int32;
-typedef int64_t FLAC__int64;
-typedef uint16_t FLAC__uint16;
-typedef uint32_t FLAC__uint32;
-typedef uint64_t FLAC__uint64;
-
-#endif
-
-typedef int FLAC__bool;
-
-typedef FLAC__uint8 FLAC__byte;
-
-
-#ifdef true
-#undef true
-#endif
-#ifdef false
-#undef false
-#endif
-#ifndef __cplusplus
-#define true 1
-#define false 0
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/stream_decoder.h b/modules/juce_audio_formats/codecs/flac/stream_decoder.h
deleted file mode 100644
index 50cd754..0000000
--- a/modules/juce_audio_formats/codecs/flac/stream_decoder.h
+++ /dev/null
@@ -1,1560 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__STREAM_DECODER_H
-#define FLAC__STREAM_DECODER_H
-
-#include <stdio.h> /* for FILE */
-#include "export.h"
-#include "format.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** \file include/FLAC/stream_decoder.h
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  decoder.
- *
- *  See the detailed documentation in the
- *  \link flac_stream_decoder stream decoder \endlink module.
- */
-
-/** \defgroup flac_decoder FLAC/ \*_decoder.h: decoder interfaces
- *  \ingroup flac
- *
- *  \brief
- *  This module describes the decoder layers provided by libFLAC.
- *
- * The stream decoder can be used to decode complete streams either from
- * the client via callbacks, or directly from a file, depending on how
- * it is initialized.  When decoding via callbacks, the client provides
- * callbacks for reading FLAC data and writing decoded samples, and
- * handling metadata and errors.  If the client also supplies seek-related
- * callback, the decoder function for sample-accurate seeking within the
- * FLAC input is also available.  When decoding from a file, the client
- * needs only supply a filename or open \c FILE* and write/metadata/error
- * callbacks; the rest of the callbacks are supplied internally.  For more
- * info see the \link flac_stream_decoder stream decoder \endlink module.
- */
-
-/** \defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface
- *  \ingroup flac_decoder
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  decoder.
- *
- * The stream decoder can decode native FLAC, and optionally Ogg FLAC
- * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files.
- *
- * The basic usage of this decoder is as follows:
- * - The program creates an instance of a decoder using
- *   FLAC__stream_decoder_new().
- * - The program overrides the default settings using
- *   FLAC__stream_decoder_set_*() functions.
- * - The program initializes the instance to validate the settings and
- *   prepare for decoding using
- *   - FLAC__stream_decoder_init_stream() or FLAC__stream_decoder_init_FILE()
- *     or FLAC__stream_decoder_init_file() for native FLAC,
- *   - FLAC__stream_decoder_init_ogg_stream() or FLAC__stream_decoder_init_ogg_FILE()
- *     or FLAC__stream_decoder_init_ogg_file() for Ogg FLAC
- * - The program calls the FLAC__stream_decoder_process_*() functions
- *   to decode data, which subsequently calls the callbacks.
- * - The program finishes the decoding with FLAC__stream_decoder_finish(),
- *   which flushes the input and output and resets the decoder to the
- *   uninitialized state.
- * - The instance may be used again or deleted with
- *   FLAC__stream_decoder_delete().
- *
- * In more detail, the program will create a new instance by calling
- * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*()
- * functions to override the default decoder options, and call
- * one of the FLAC__stream_decoder_init_*() functions.
- *
- * There are three initialization functions for native FLAC, one for
- * setting up the decoder to decode FLAC data from the client via
- * callbacks, and two for decoding directly from a FLAC file.
- *
- * For decoding via callbacks, use FLAC__stream_decoder_init_stream().
- * You must also supply several callbacks for handling I/O.  Some (like
- * seeking) are optional, depending on the capabilities of the input.
- *
- * For decoding directly from a file, use FLAC__stream_decoder_init_FILE()
- * or FLAC__stream_decoder_init_file().  Then you must only supply an open
- * \c FILE* or filename and fewer callbacks; the decoder will handle
- * the other callbacks internally.
- *
- * There are three similarly-named init functions for decoding from Ogg
- * FLAC streams.  Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the
- * library has been built with Ogg support.
- *
- * Once the decoder is initialized, your program will call one of several
- * functions to start the decoding process:
- *
- * - FLAC__stream_decoder_process_single() - Tells the decoder to process at
- *   most one metadata block or audio frame and return, calling either the
- *   metadata callback or write callback, respectively, once.  If the decoder
- *   loses sync it will return with only the error callback being called.
- * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder
- *   to process the stream from the current location and stop upon reaching
- *   the first audio frame.  The client will get one metadata, write, or error
- *   callback per metadata block, audio frame, or sync error, respectively.
- * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder
- *   to process the stream from the current location until the read callback
- *   returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or
- *   FLAC__STREAM_DECODER_READ_STATUS_ABORT.  The client will get one metadata,
- *   write, or error callback per metadata block, audio frame, or sync error,
- *   respectively.
- *
- * When the decoder has finished decoding (normally or through an abort),
- * the instance is finished by calling FLAC__stream_decoder_finish(), which
- * ensures the decoder is in the correct state and frees memory.  Then the
- * instance may be deleted with FLAC__stream_decoder_delete() or initialized
- * again to decode another stream.
- *
- * Seeking is exposed through the FLAC__stream_decoder_seek_absolute() method.
- * At any point after the stream decoder has been initialized, the client can
- * call this function to seek to an exact sample within the stream.
- * Subsequently, the first time the write callback is called it will be
- * passed a (possibly partial) block starting at that sample.
- *
- * If the client cannot seek via the callback interface provided, but still
- * has another way of seeking, it can flush the decoder using
- * FLAC__stream_decoder_flush() and start feeding data from the new position
- * through the read callback.
- *
- * The stream decoder also provides MD5 signature checking.  If this is
- * turned on before initialization, FLAC__stream_decoder_finish() will
- * report when the decoded MD5 signature does not match the one stored
- * in the STREAMINFO block.  MD5 checking is automatically turned off
- * (until the next FLAC__stream_decoder_reset()) if there is no signature
- * in the STREAMINFO block or when a seek is attempted.
- *
- * The FLAC__stream_decoder_set_metadata_*() functions deserve special
- * attention.  By default, the decoder only calls the metadata_callback for
- * the STREAMINFO block.  These functions allow you to tell the decoder
- * explicitly which blocks to parse and return via the metadata_callback
- * and/or which to skip.  Use a FLAC__stream_decoder_set_metadata_respond_all(),
- * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(),
- * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify
- * which blocks to return.  Remember that metadata blocks can potentially
- * be big (for example, cover art) so filtering out the ones you don't
- * use can reduce the memory requirements of the decoder.  Also note the
- * special forms FLAC__stream_decoder_set_metadata_respond_application(id)
- * and FLAC__stream_decoder_set_metadata_ignore_application(id) for
- * filtering APPLICATION blocks based on the application ID.
- *
- * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but
- * they still can legally be filtered from the metadata_callback.
- *
- * \note
- * The "set" functions may only be called when the decoder is in the
- * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after
- * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but
- * before FLAC__stream_decoder_init_*().  If this is the case they will
- * return \c true, otherwise \c false.
- *
- * \note
- * FLAC__stream_decoder_finish() resets all settings to the constructor
- * defaults, including the callbacks.
- *
- * \{
- */
-
-
-/** State values for a FLAC__StreamDecoder
- *
- * The decoder's state can be obtained by calling FLAC__stream_decoder_get_state().
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0,
-	/**< The decoder is ready to search for metadata. */
-
-	FLAC__STREAM_DECODER_READ_METADATA,
-	/**< The decoder is ready to or is in the process of reading metadata. */
-
-	FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC,
-	/**< The decoder is ready to or is in the process of searching for the
-	 * frame sync code.
-	 */
-
-	FLAC__STREAM_DECODER_READ_FRAME,
-	/**< The decoder is ready to or is in the process of reading a frame. */
-
-	FLAC__STREAM_DECODER_END_OF_STREAM,
-	/**< The decoder has reached the end of the stream. */
-
-	FLAC__STREAM_DECODER_OGG_ERROR,
-	/**< An error occurred in the underlying Ogg layer.  */
-
-	FLAC__STREAM_DECODER_SEEK_ERROR,
-	/**< An error occurred while seeking.  The decoder must be flushed
-	 * with FLAC__stream_decoder_flush() or reset with
-	 * FLAC__stream_decoder_reset() before decoding can continue.
-	 */
-
-	FLAC__STREAM_DECODER_ABORTED,
-	/**< The decoder was aborted by the read callback. */
-
-	FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
-	/**< An error occurred allocating memory.  The decoder is in an invalid
-	 * state and can no longer be used.
-	 */
-
-	FLAC__STREAM_DECODER_UNINITIALIZED
-	/**< The decoder is in the uninitialized state; one of the
-	 * FLAC__stream_decoder_init_*() functions must be called before samples
-	 * can be processed.
-	 */
-
-} FLAC__StreamDecoderState;
-
-/** Maps a FLAC__StreamDecoderState to a C string.
- *
- *  Using a FLAC__StreamDecoderState as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderStateString[];
-
-
-/** Possible return values for the FLAC__stream_decoder_init_*() functions.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_INIT_STATUS_OK = 0,
-	/**< Initialization was successful. */
-
-	FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
-	/**< The library was not compiled with support for the given container
-	 * format.
-	 */
-
-	FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS,
-	/**< A required callback was not supplied. */
-
-	FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR,
-	/**< An error occurred allocating memory. */
-
-	FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE,
-	/**< fopen() failed in FLAC__stream_decoder_init_file() or
-	 * FLAC__stream_decoder_init_ogg_file(). */
-
-	FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED
-	/**< FLAC__stream_decoder_init_*() was called when the decoder was
-	 * already initialized, usually because
-	 * FLAC__stream_decoder_finish() was not called.
-	 */
-
-} FLAC__StreamDecoderInitStatus;
-
-/** Maps a FLAC__StreamDecoderInitStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderInitStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[];
-
-
-/** Return values for the FLAC__StreamDecoder read callback.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_READ_STATUS_CONTINUE,
-	/**< The read was OK and decoding can continue. */
-
-	FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM,
-	/**< The read was attempted while at the end of the stream.  Note that
-	 * the client must only return this value when the read callback was
-	 * called when already at the end of the stream.  Otherwise, if the read
-	 * itself moves to the end of the stream, the client should still return
-	 * the data and \c FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, and then on
-	 * the next read callback it should return
-	 * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM with a byte count
-	 * of \c 0.
-	 */
-
-	FLAC__STREAM_DECODER_READ_STATUS_ABORT
-	/**< An unrecoverable error occurred.  The decoder will return from the process call. */
-
-} FLAC__StreamDecoderReadStatus;
-
-/** Maps a FLAC__StreamDecoderReadStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderReadStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[];
-
-
-/** Return values for the FLAC__StreamDecoder seek callback.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_SEEK_STATUS_OK,
-	/**< The seek was OK and decoding can continue. */
-
-	FLAC__STREAM_DECODER_SEEK_STATUS_ERROR,
-	/**< An unrecoverable error occurred.  The decoder will return from the process call. */
-
-	FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
-	/**< Client does not support seeking. */
-
-} FLAC__StreamDecoderSeekStatus;
-
-/** Maps a FLAC__StreamDecoderSeekStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderSeekStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[];
-
-
-/** Return values for the FLAC__StreamDecoder tell callback.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_TELL_STATUS_OK,
-	/**< The tell was OK and decoding can continue. */
-
-	FLAC__STREAM_DECODER_TELL_STATUS_ERROR,
-	/**< An unrecoverable error occurred.  The decoder will return from the process call. */
-
-	FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
-	/**< Client does not support telling the position. */
-
-} FLAC__StreamDecoderTellStatus;
-
-/** Maps a FLAC__StreamDecoderTellStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderTellStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[];
-
-
-/** Return values for the FLAC__StreamDecoder length callback.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_LENGTH_STATUS_OK,
-	/**< The length call was OK and decoding can continue. */
-
-	FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR,
-	/**< An unrecoverable error occurred.  The decoder will return from the process call. */
-
-	FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
-	/**< Client does not support reporting the length. */
-
-} FLAC__StreamDecoderLengthStatus;
-
-/** Maps a FLAC__StreamDecoderLengthStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderLengthStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[];
-
-
-/** Return values for the FLAC__StreamDecoder write callback.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE,
-	/**< The write was OK and decoding can continue. */
-
-	FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
-	/**< An unrecoverable error occurred.  The decoder will return from the process call. */
-
-} FLAC__StreamDecoderWriteStatus;
-
-/** Maps a FLAC__StreamDecoderWriteStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderWriteStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[];
-
-
-/** Possible values passed back to the FLAC__StreamDecoder error callback.
- *  \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC is the generic catch-
- *  all.  The rest could be caused by bad sync (false synchronization on
- *  data that is not the start of a frame) or corrupted data.  The error
- *  itself is the decoder's best guess at what happened assuming a correct
- *  sync.  For example \c FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER
- *  could be caused by a correct sync on the start of a frame, but some
- *  data in the frame header was corrupted.  Or it could be the result of
- *  syncing on a point the stream that looked like the starting of a frame
- *  but was not.  \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
- *  could be because the decoder encountered a valid frame made by a future
- *  version of the encoder which it cannot parse, or because of a false
- *  sync making it appear as though an encountered frame was generated by
- *  a future encoder.
- */
-typedef enum {
-
-	FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC,
-	/**< An error in the stream caused the decoder to lose synchronization. */
-
-	FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER,
-	/**< The decoder encountered a corrupted frame header. */
-
-	FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH,
-	/**< The frame's data did not match the CRC in the footer. */
-
-	FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
-	/**< The decoder encountered reserved fields in use in the stream. */
-
-} FLAC__StreamDecoderErrorStatus;
-
-/** Maps a FLAC__StreamDecoderErrorStatus to a C string.
- *
- *  Using a FLAC__StreamDecoderErrorStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[];
-
-
-/***********************************************************************
- *
- * class FLAC__StreamDecoder
- *
- ***********************************************************************/
-
-struct FLAC__StreamDecoderProtected;
-struct FLAC__StreamDecoderPrivate;
-/** The opaque structure definition for the stream decoder type.
- *  See the \link flac_stream_decoder stream decoder module \endlink
- *  for a detailed description.
- */
-typedef struct {
-	struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
-	struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
-} FLAC__StreamDecoder;
-
-/** Signature for the read callback.
- *
- *  A function pointer matching this signature must be passed to
- *  FLAC__stream_decoder_init*_stream(). The supplied function will be
- *  called when the decoder needs more input data.  The address of the
- *  buffer to be filled is supplied, along with the number of bytes the
- *  buffer can hold.  The callback may choose to supply less data and
- *  modify the byte count but must be careful not to overflow the buffer.
- *  The callback then returns a status code chosen from
- *  FLAC__StreamDecoderReadStatus.
- *
- * Here is an example of a read callback for stdio streams:
- * \code
- * FLAC__StreamDecoderReadStatus read_cb(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   if(*bytes > 0) {
- *     *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file);
- *     if(ferror(file))
- *       return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
- *     else if(*bytes == 0)
- *       return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
- *     else
- *       return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
- *   }
- *   else
- *     return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  buffer   A pointer to a location for the callee to store
- *                  data to be decoded.
- * \param  bytes    A pointer to the size of the buffer.  On entry
- *                  to the callback, it contains the maximum number
- *                  of bytes that may be stored in \a buffer.  The
- *                  callee must set it to the actual number of bytes
- *                  stored (0 in case of error or end-of-stream) before
- *                  returning.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- * \retval FLAC__StreamDecoderReadStatus
- *    The callee's return status.  Note that the callback should return
- *    \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM if and only if
- *    zero bytes were read and there is no more data to be read.
- */
-typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-
-/** Signature for the seek callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_decoder_init*_stream().  The supplied function will be
- *  called when the decoder needs to seek the input stream.  The decoder
- *  will pass the absolute byte offset to seek to, 0 meaning the
- *  beginning of the stream.
- *
- * Here is an example of a seek callback for stdio streams:
- * \code
- * FLAC__StreamDecoderSeekStatus seek_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   if(file == stdin)
- *     return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED;
- *   else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0)
- *     return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
- *   else
- *     return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  absolute_byte_offset  The offset from the beginning of the stream
- *                               to seek to.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- * \retval FLAC__StreamDecoderSeekStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
-
-/** Signature for the tell callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_decoder_init*_stream().  The supplied function will be
- *  called when the decoder wants to know the current position of the
- *  stream.  The callback should return the byte offset from the
- *  beginning of the stream.
- *
- * Here is an example of a tell callback for stdio streams:
- * \code
- * FLAC__StreamDecoderTellStatus tell_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   off_t pos;
- *   if(file == stdin)
- *     return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED;
- *   else if((pos = ftello(file)) < 0)
- *     return FLAC__STREAM_DECODER_TELL_STATUS_ERROR;
- *   else {
- *     *absolute_byte_offset = (FLAC__uint64)pos;
- *     return FLAC__STREAM_DECODER_TELL_STATUS_OK;
- *   }
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  absolute_byte_offset  A pointer to storage for the current offset
- *                               from the beginning of the stream.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- * \retval FLAC__StreamDecoderTellStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
-
-/** Signature for the length callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_decoder_init*_stream().  The supplied function will be
- *  called when the decoder wants to know the total length of the stream
- *  in bytes.
- *
- * Here is an example of a length callback for stdio streams:
- * \code
- * FLAC__StreamDecoderLengthStatus length_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   struct stat filestats;
- *
- *   if(file == stdin)
- *     return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED;
- *   else if(fstat(fileno(file), &filestats) != 0)
- *     return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR;
- *   else {
- *     *stream_length = (FLAC__uint64)filestats.st_size;
- *     return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
- *   }
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  stream_length  A pointer to storage for the length of the stream
- *                        in bytes.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- * \retval FLAC__StreamDecoderLengthStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
-
-/** Signature for the EOF callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_decoder_init*_stream().  The supplied function will be
- *  called when the decoder needs to know if the end of the stream has
- *  been reached.
- *
- * Here is an example of a EOF callback for stdio streams:
- * FLAC__bool eof_cb(const FLAC__StreamDecoder *decoder, void *client_data)
- * \code
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   return feof(file)? true : false;
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- * \retval FLAC__bool
- *    \c true if the currently at the end of the stream, else \c false.
- */
-typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data);
-
-/** Signature for the write callback.
- *
- *  A function pointer matching this signature must be passed to one of
- *  the FLAC__stream_decoder_init_*() functions.
- *  The supplied function will be called when the decoder has decoded a
- *  single audio frame.  The decoder will pass the frame metadata as well
- *  as an array of pointers (one for each channel) pointing to the
- *  decoded audio.
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  frame    The description of the decoded frame.  See
- *                  FLAC__Frame.
- * \param  buffer   An array of pointers to decoded channels of data.
- *                  Each pointer will point to an array of signed
- *                  samples of length \a frame->header.blocksize.
- *                  Channels will be ordered according to the FLAC
- *                  specification; see the documentation for the
- *                  <A HREF="../format.html#frame_header">frame header</A>.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- * \retval FLAC__StreamDecoderWriteStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
-
-/** Signature for the metadata callback.
- *
- *  A function pointer matching this signature must be passed to one of
- *  the FLAC__stream_decoder_init_*() functions.
- *  The supplied function will be called when the decoder has decoded a
- *  metadata block.  In a valid FLAC file there will always be one
- *  \c STREAMINFO block, followed by zero or more other metadata blocks.
- *  These will be supplied by the decoder in the same order as they
- *  appear in the stream and always before the first audio frame (i.e.
- *  write callback).  The metadata block that is passed in must not be
- *  modified, and it doesn't live beyond the callback, so you should make
- *  a copy of it with FLAC__metadata_object_clone() if you will need it
- *  elsewhere.  Since metadata blocks can potentially be large, by
- *  default the decoder only calls the metadata callback for the
- *  \c STREAMINFO block; you can instruct the decoder to pass or filter
- *  other blocks with FLAC__stream_decoder_set_metadata_*() calls.
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  metadata The decoded metadata block.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- */
-typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
-
-/** Signature for the error callback.
- *
- *  A function pointer matching this signature must be passed to one of
- *  the FLAC__stream_decoder_init_*() functions.
- *  The supplied function will be called whenever an error occurs during
- *  decoding.
- *
- * \note In general, FLAC__StreamDecoder functions which change the
- * state should not be called on the \a decoder while in the callback.
- *
- * \param  decoder  The decoder instance calling the callback.
- * \param  status   The error encountered by the decoder.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_decoder_init_*().
- */
-typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
-
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-
-/** Create a new stream decoder instance.  The instance is created with
- *  default settings; see the individual FLAC__stream_decoder_set_*()
- *  functions for each setting's default.
- *
- * \retval FLAC__StreamDecoder*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void);
-
-/** Free a decoder instance.  Deletes the object pointed to by \a decoder.
- *
- * \param decoder  A pointer to an existing decoder.
- * \assert
- *    \code decoder != NULL \endcode
- */
-FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder);
-
-
-/***********************************************************************
- *
- * Public class method prototypes
- *
- ***********************************************************************/
-
-/** Set the serial number for the FLAC stream within the Ogg container.
- *  The default behavior is to use the serial number of the first Ogg
- *  page.  Setting a serial number here will explicitly specify which
- *  stream is to be decoded.
- *
- * \note
- * This does not need to be set for native FLAC decoding.
- *
- * \default \c use serial number of first page
- * \param  decoder        A decoder instance to set.
- * \param  serial_number  See above.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number);
-
-/** Set the "MD5 signature checking" flag.  If \c true, the decoder will
- *  compute the MD5 signature of the unencoded audio data while decoding
- *  and compare it to the signature from the STREAMINFO block, if it
- *  exists, during FLAC__stream_decoder_finish().
- *
- *  MD5 signature checking will be turned off (until the next
- *  FLAC__stream_decoder_reset()) if there is no signature in the
- *  STREAMINFO block or when a seek is attempted.
- *
- *  Clients that do not use the MD5 check should leave this off to speed
- *  up decoding.
- *
- * \default \c false
- * \param  decoder  A decoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value);
-
-/** Direct the decoder to pass on all metadata blocks of type \a type.
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  type     See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \a type is valid
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
-
-/** Direct the decoder to pass on all APPLICATION metadata blocks of the
- *  given \a id.
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  id       See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code id != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
-
-/** Direct the decoder to pass on all metadata blocks of any type.
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder);
-
-/** Direct the decoder to filter out all metadata blocks of type \a type.
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  type     See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \a type is valid
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
-
-/** Direct the decoder to filter out all APPLICATION metadata blocks of
- *  the given \a id.
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \param  id       See above.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code id != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
-
-/** Direct the decoder to filter out all metadata blocks of any type.
- *
- * \default By default, only the \c STREAMINFO block is returned via the
- *          metadata callback.
- * \param  decoder  A decoder instance to set.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the decoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder);
-
-/** Get the current decoder state.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderState
- *    The current decoder state.
- */
-FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder);
-
-/** Get the current decoder state as a C string.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval const char *
- *    The decoder state as a C string.  Do not modify the contents.
- */
-FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder);
-
-/** Get the "MD5 signature checking" flag.
- *  This is the value of the setting, not whether or not the decoder is
- *  currently checking the MD5 (remember, it can be turned off automatically
- *  by a seek).  When the decoder is reset the flag will be restored to the
- *  value returned by this function.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    See above.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder);
-
-/** Get the total number of samples in the stream being decoded.
- *  Will only be valid after decoding has started and will contain the
- *  value from the \c STREAMINFO block.  A value of \c 0 means "unknown".
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder);
-
-/** Get the current number of channels in the stream being decoded.
- *  Will only be valid after decoding has started and will contain the
- *  value from the most recently decoded frame header.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder);
-
-/** Get the current channel assignment in the stream being decoded.
- *  Will only be valid after decoding has started and will contain the
- *  value from the most recently decoded frame header.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__ChannelAssignment
- *    See above.
- */
-FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder);
-
-/** Get the current sample resolution in the stream being decoded.
- *  Will only be valid after decoding has started and will contain the
- *  value from the most recently decoded frame header.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder);
-
-/** Get the current sample rate in Hz of the stream being decoded.
- *  Will only be valid after decoding has started and will contain the
- *  value from the most recently decoded frame header.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder);
-
-/** Get the current blocksize of the stream being decoded.
- *  Will only be valid after decoding has started and will contain the
- *  value from the most recently decoded frame header.
- *
- * \param  decoder  A decoder instance to query.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval unsigned
- *    See above.
- */
-FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder);
-
-/** Returns the decoder's current read position within the stream.
- *  The position is the byte offset from the start of the stream.
- *  Bytes before this position have been fully decoded.  Note that
- *  there may still be undecoded bytes in the decoder's read FIFO.
- *  The returned position is correct even after a seek.
- *
- *  \warning This function currently only works for native FLAC,
- *           not Ogg FLAC streams.
- *
- * \param  decoder   A decoder instance to query.
- * \param  position  Address at which to return the desired position.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code position != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, \c false if the stream is not native FLAC,
- *    or there was an error from the 'tell' callback or it returned
- *    \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position);
-
-/** Initialize the decoder instance to decode native FLAC streams.
- *
- *  This flavor of initialization sets up the decoder to decode from a
- *  native FLAC stream. I/O is performed via callbacks to the client.
- *  For decoding from a plain file via filename or open FILE*,
- *  FLAC__stream_decoder_init_file() and FLAC__stream_decoder_init_FILE()
- *  provide a simpler interface.
- *
- *  This function should be called after FLAC__stream_decoder_new() and
- *  FLAC__stream_decoder_set_*() but before any of the
- *  FLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
- *  if initialization succeeded.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  read_callback      See FLAC__StreamDecoderReadCallback.  This
- *                            pointer must not be \c NULL.
- * \param  seek_callback      See FLAC__StreamDecoderSeekCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  If \a seek_callback is not \c NULL then a
- *                            \a tell_callback, \a length_callback, and \a eof_callback must also be supplied.
- *                            Alternatively, a dummy seek callback that just
- *                            returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  tell_callback      See FLAC__StreamDecoderTellCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy tell callback that just
- *                            returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  length_callback    See FLAC__StreamDecoderLengthCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a length_callback must also be supplied.
- *                            Alternatively, a dummy length callback that just
- *                            returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  eof_callback       See FLAC__StreamDecoderEofCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a eof_callback must also be supplied.
- *                            Alternatively, a dummy length callback that just
- *                            returns \c false
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
-	FLAC__StreamDecoder *decoder,
-	FLAC__StreamDecoderReadCallback read_callback,
-	FLAC__StreamDecoderSeekCallback seek_callback,
-	FLAC__StreamDecoderTellCallback tell_callback,
-	FLAC__StreamDecoderLengthCallback length_callback,
-	FLAC__StreamDecoderEofCallback eof_callback,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-);
-
-/** Initialize the decoder instance to decode Ogg FLAC streams.
- *
- *  This flavor of initialization sets up the decoder to decode from a
- *  FLAC stream in an Ogg container. I/O is performed via callbacks to the
- *  client.  For decoding from a plain file via filename or open FILE*,
- *  FLAC__stream_decoder_init_ogg_file() and FLAC__stream_decoder_init_ogg_FILE()
- *  provide a simpler interface.
- *
- *  This function should be called after FLAC__stream_decoder_new() and
- *  FLAC__stream_decoder_set_*() but before any of the
- *  FLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
- *  if initialization succeeded.
- *
- *  \note Support for Ogg FLAC in the library is optional.  If this
- *  library has been built without support for Ogg FLAC, this function
- *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  read_callback      See FLAC__StreamDecoderReadCallback.  This
- *                            pointer must not be \c NULL.
- * \param  seek_callback      See FLAC__StreamDecoderSeekCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  If \a seek_callback is not \c NULL then a
- *                            \a tell_callback, \a length_callback, and \a eof_callback must also be supplied.
- *                            Alternatively, a dummy seek callback that just
- *                            returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  tell_callback      See FLAC__StreamDecoderTellCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy tell callback that just
- *                            returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  length_callback    See FLAC__StreamDecoderLengthCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a length_callback must also be supplied.
- *                            Alternatively, a dummy length callback that just
- *                            returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  eof_callback       See FLAC__StreamDecoderEofCallback.  This
- *                            pointer may be \c NULL if not supported by the client.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a eof_callback must also be supplied.
- *                            Alternatively, a dummy length callback that just
- *                            returns \c false
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the decoder.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
-	FLAC__StreamDecoder *decoder,
-	FLAC__StreamDecoderReadCallback read_callback,
-	FLAC__StreamDecoderSeekCallback seek_callback,
-	FLAC__StreamDecoderTellCallback tell_callback,
-	FLAC__StreamDecoderLengthCallback length_callback,
-	FLAC__StreamDecoderEofCallback eof_callback,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-);
-
-/** Initialize the decoder instance to decode native FLAC files.
- *
- *  This flavor of initialization sets up the decoder to decode from a
- *  plain native FLAC file.  For non-stdio streams, you must use
- *  FLAC__stream_decoder_init_stream() and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_decoder_new() and
- *  FLAC__stream_decoder_set_*() but before any of the
- *  FLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
- *  if initialization succeeded.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  file               An open FLAC file.  The file should have been
- *                            opened with mode \c "rb" and rewound.  The file
- *                            becomes owned by the decoder and should not be
- *                            manipulated by the client while decoding.
- *                            Unless \a file is \c stdin, it will be closed
- *                            when FLAC__stream_decoder_finish() is called.
- *                            Note however that seeking will not work when
- *                            decoding from \c stdout since it is not seekable.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code file != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
-	FLAC__StreamDecoder *decoder,
-	FILE *file,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-);
-
-/** Initialize the decoder instance to decode Ogg FLAC files.
- *
- *  This flavor of initialization sets up the decoder to decode from a
- *  plain Ogg FLAC file.  For non-stdio streams, you must use
- *  FLAC__stream_decoder_init_ogg_stream() and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_decoder_new() and
- *  FLAC__stream_decoder_set_*() but before any of the
- *  FLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
- *  if initialization succeeded.
- *
- *  \note Support for Ogg FLAC in the library is optional.  If this
- *  library has been built without support for Ogg FLAC, this function
- *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  file               An open FLAC file.  The file should have been
- *                            opened with mode \c "rb" and rewound.  The file
- *                            becomes owned by the decoder and should not be
- *                            manipulated by the client while decoding.
- *                            Unless \a file is \c stdin, it will be closed
- *                            when FLAC__stream_decoder_finish() is called.
- *                            Note however that seeking will not work when
- *                            decoding from \c stdout since it is not seekable.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- *    \code file != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
-	FLAC__StreamDecoder *decoder,
-	FILE *file,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-);
-
-/** Initialize the decoder instance to decode native FLAC files.
- *
- *  This flavor of initialization sets up the decoder to decode from a plain
- *  native FLAC file.  If POSIX fopen() semantics are not sufficient, (for
- *  example, with Unicode filenames on Windows), you must use
- *  FLAC__stream_decoder_init_FILE(), or FLAC__stream_decoder_init_stream()
- *  and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_decoder_new() and
- *  FLAC__stream_decoder_set_*() but before any of the
- *  FLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
- *  if initialization succeeded.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  filename           The name of the file to decode from.  The file will
- *                            be opened with fopen().  Use \c NULL to decode from
- *                            \c stdin.  Note that \c stdin is not seekable.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
-	FLAC__StreamDecoder *decoder,
-	const char *filename,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-);
-
-/** Initialize the decoder instance to decode Ogg FLAC files.
- *
- *  This flavor of initialization sets up the decoder to decode from a plain
- *  Ogg FLAC file.  If POSIX fopen() semantics are not sufficient, (for
- *  example, with Unicode filenames on Windows), you must use
- *  FLAC__stream_decoder_init_ogg_FILE(), or FLAC__stream_decoder_init_ogg_stream()
- *  and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_decoder_new() and
- *  FLAC__stream_decoder_set_*() but before any of the
- *  FLAC__stream_decoder_process_*() functions.  Will set and return the
- *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
- *  if initialization succeeded.
- *
- *  \note Support for Ogg FLAC in the library is optional.  If this
- *  library has been built without support for Ogg FLAC, this function
- *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
- *
- * \param  decoder            An uninitialized decoder instance.
- * \param  filename           The name of the file to decode from.  The file will
- *                            be opened with fopen().  Use \c NULL to decode from
- *                            \c stdin.  Note that \c stdin is not seekable.
- * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
- *                            pointer must not be \c NULL.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__StreamDecoderInitStatus
- *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
-	FLAC__StreamDecoder *decoder,
-	const char *filename,
-	FLAC__StreamDecoderWriteCallback write_callback,
-	FLAC__StreamDecoderMetadataCallback metadata_callback,
-	FLAC__StreamDecoderErrorCallback error_callback,
-	void *client_data
-);
-
-/** Finish the decoding process.
- *  Flushes the decoding buffer, releases resources, resets the decoder
- *  settings to their defaults, and returns the decoder state to
- *  FLAC__STREAM_DECODER_UNINITIALIZED.
- *
- *  In the event of a prematurely-terminated decode, it is not strictly
- *  necessary to call this immediately before FLAC__stream_decoder_delete()
- *  but it is good practice to match every FLAC__stream_decoder_init_*()
- *  with a FLAC__stream_decoder_finish().
- *
- * \param  decoder  An uninitialized decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if MD5 checking is on AND a STREAMINFO block was available
- *    AND the MD5 signature in the STREAMINFO block was non-zero AND the
- *    signature does not match the one computed by the decoder; else
- *    \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder);
-
-/** Flush the stream input.
- *  The decoder's input buffer will be cleared and the state set to
- *  \c FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC.  This will also turn
- *  off MD5 checking.
- *
- * \param  decoder  A decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false if a memory allocation
- *    error occurs (in which case the state will be set to
- *    \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR).
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder);
-
-/** Reset the decoding process.
- *  The decoder's input buffer will be cleared and the state set to
- *  \c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA.  This is similar to
- *  FLAC__stream_decoder_finish() except that the settings are
- *  preserved; there is no need to call FLAC__stream_decoder_init_*()
- *  before decoding again.  MD5 checking will be restored to its original
- *  setting.
- *
- *  If the decoder is seekable, or was initialized with
- *  FLAC__stream_decoder_init*_FILE() or FLAC__stream_decoder_init*_file(),
- *  the decoder will also attempt to seek to the beginning of the file.
- *  If this rewind fails, this function will return \c false.  It follows
- *  that FLAC__stream_decoder_reset() cannot be used when decoding from
- *  \c stdin.
- *
- *  If the decoder was initialized with FLAC__stream_encoder_init*_stream()
- *  and is not seekable (i.e. no seek callback was provided or the seek
- *  callback returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED), it
- *  is the duty of the client to start feeding data from the beginning of
- *  the stream on the next FLAC__stream_decoder_process() or
- *  FLAC__stream_decoder_process_interleaved() call.
- *
- * \param  decoder  A decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false if a memory allocation occurs
- *    (in which case the state will be set to
- *    \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR) or a seek error
- *    occurs (the state will be unchanged).
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder);
-
-/** Decode one metadata block or audio frame.
- *  This version instructs the decoder to decode a either a single metadata
- *  block or a single frame and stop, unless the callbacks return a fatal
- *  error or the read callback returns
- *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
- *
- *  As the decoder needs more input it will call the read callback.
- *  Depending on what was decoded, the metadata or write callback will be
- *  called with the decoded metadata block or audio frame.
- *
- *  Unless there is a fatal read error or end of stream, this function
- *  will return once one whole frame is decoded.  In other words, if the
- *  stream is not synchronized or points to a corrupt frame header, the
- *  decoder will continue to try and resync until it gets to a valid
- *  frame, then decode one frame, then return.  If the decoder points to
- *  a frame whose frame CRC in the frame footer does not match the
- *  computed frame CRC, this function will issue a
- *  FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH error to the
- *  error callback, and return, having decoded one complete, although
- *  corrupt, frame.  (Such corrupted frames are sent as silence of the
- *  correct length to the write callback.)
- *
- * \param  decoder  An initialized decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), else \c true; for more
- *    information about the decoder, check the decoder state with
- *    FLAC__stream_decoder_get_state().
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder);
-
-/** Decode until the end of the metadata.
- *  This version instructs the decoder to decode from the current position
- *  and continue until all the metadata has been read, or until the
- *  callbacks return a fatal error or the read callback returns
- *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
- *
- *  As the decoder needs more input it will call the read callback.
- *  As each metadata block is decoded, the metadata callback will be called
- *  with the decoded metadata.
- *
- * \param  decoder  An initialized decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), else \c true; for more
- *    information about the decoder, check the decoder state with
- *    FLAC__stream_decoder_get_state().
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder);
-
-/** Decode until the end of the stream.
- *  This version instructs the decoder to decode from the current position
- *  and continue until the end of stream (the read callback returns
- *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM), or until the
- *  callbacks return a fatal error.
- *
- *  As the decoder needs more input it will call the read callback.
- *  As each metadata block and frame is decoded, the metadata or write
- *  callback will be called with the decoded metadata or frame.
- *
- * \param  decoder  An initialized decoder instance.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), else \c true; for more
- *    information about the decoder, check the decoder state with
- *    FLAC__stream_decoder_get_state().
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder);
-
-/** Skip one audio frame.
- *  This version instructs the decoder to 'skip' a single frame and stop,
- *  unless the callbacks return a fatal error or the read callback returns
- *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
- *
- *  The decoding flow is the same as what occurs when
- *  FLAC__stream_decoder_process_single() is called to process an audio
- *  frame, except that this function does not decode the parsed data into
- *  PCM or call the write callback.  The integrity of the frame is still
- *  checked the same way as in the other process functions.
- *
- *  This function will return once one whole frame is skipped, in the
- *  same way that FLAC__stream_decoder_process_single() will return once
- *  one whole frame is decoded.
- *
- *  This function can be used in more quickly determining FLAC frame
- *  boundaries when decoding of the actual data is not needed, for
- *  example when an application is separating a FLAC stream into frames
- *  for editing or storing in a container.  To do this, the application
- *  can use FLAC__stream_decoder_skip_single_frame() to quickly advance
- *  to the next frame, then use
- *  FLAC__stream_decoder_get_decode_position() to find the new frame
- *  boundary.
- *
- *  This function should only be called when the stream has advanced
- *  past all the metadata, otherwise it will return \c false.
- *
- * \param  decoder  An initialized decoder instance not in a metadata
- *                  state.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if any fatal read, write, or memory allocation error
- *    occurred (meaning decoding must stop), or if the decoder
- *    is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or
- *    FLAC__STREAM_DECODER_READ_METADATA state, else \c true; for more
- *    information about the decoder, check the decoder state with
- *    FLAC__stream_decoder_get_state().
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder);
-
-/** Flush the input and seek to an absolute sample.
- *  Decoding will resume at the given sample.  Note that because of
- *  this, the next write callback may contain a partial block.  The
- *  client must support seeking the input or this function will fail
- *  and return \c false.  Furthermore, if the decoder state is
- *  \c FLAC__STREAM_DECODER_SEEK_ERROR, then the decoder must be flushed
- *  with FLAC__stream_decoder_flush() or reset with
- *  FLAC__stream_decoder_reset() before decoding can continue.
- *
- * \param  decoder  A decoder instance.
- * \param  sample   The target sample number to seek to.
- * \assert
- *    \code decoder != NULL \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false.
- */
-FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample);
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/stream_encoder.h b/modules/juce_audio_formats/codecs/flac/stream_encoder.h
deleted file mode 100644
index 646efb7..0000000
--- a/modules/juce_audio_formats/codecs/flac/stream_encoder.h
+++ /dev/null
@@ -1,1790 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2000-2009  Josh Coalson
- * Copyright (C) 2011-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef FLAC__STREAM_ENCODER_H
-#define FLAC__STREAM_ENCODER_H
-
-#include <stdio.h> /* for FILE */
-#include "export.h"
-#include "format.h"
-#include "stream_decoder.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/** \file include/FLAC/stream_encoder.h
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  encoder.
- *
- *  See the detailed documentation in the
- *  \link flac_stream_encoder stream encoder \endlink module.
- */
-
-/** \defgroup flac_encoder FLAC/ \*_encoder.h: encoder interfaces
- *  \ingroup flac
- *
- *  \brief
- *  This module describes the encoder layers provided by libFLAC.
- *
- * The stream encoder can be used to encode complete streams either to the
- * client via callbacks, or directly to a file, depending on how it is
- * initialized.  When encoding via callbacks, the client provides a write
- * callback which will be called whenever FLAC data is ready to be written.
- * If the client also supplies a seek callback, the encoder will also
- * automatically handle the writing back of metadata discovered while
- * encoding, like stream info, seek points offsets, etc.  When encoding to
- * a file, the client needs only supply a filename or open \c FILE* and an
- * optional progress callback for periodic notification of progress; the
- * write and seek callbacks are supplied internally.  For more info see the
- * \link flac_stream_encoder stream encoder \endlink module.
- */
-
-/** \defgroup flac_stream_encoder FLAC/stream_encoder.h: stream encoder interface
- *  \ingroup flac_encoder
- *
- *  \brief
- *  This module contains the functions which implement the stream
- *  encoder.
- *
- * The stream encoder can encode to native FLAC, and optionally Ogg FLAC
- * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files.
- *
- * The basic usage of this encoder is as follows:
- * - The program creates an instance of an encoder using
- *   FLAC__stream_encoder_new().
- * - The program overrides the default settings using
- *   FLAC__stream_encoder_set_*() functions.  At a minimum, the following
- *   functions should be called:
- *   - FLAC__stream_encoder_set_channels()
- *   - FLAC__stream_encoder_set_bits_per_sample()
- *   - FLAC__stream_encoder_set_sample_rate()
- *   - FLAC__stream_encoder_set_ogg_serial_number() (if encoding to Ogg FLAC)
- *   - FLAC__stream_encoder_set_total_samples_estimate() (if known)
- * - If the application wants to control the compression level or set its own
- *   metadata, then the following should also be called:
- *   - FLAC__stream_encoder_set_compression_level()
- *   - FLAC__stream_encoder_set_verify()
- *   - FLAC__stream_encoder_set_metadata()
- * - The rest of the set functions should only be called if the client needs
- *   exact control over how the audio is compressed; thorough understanding
- *   of the FLAC format is necessary to achieve good results.
- * - The program initializes the instance to validate the settings and
- *   prepare for encoding using
- *   - FLAC__stream_encoder_init_stream() or FLAC__stream_encoder_init_FILE()
- *     or FLAC__stream_encoder_init_file() for native FLAC
- *   - FLAC__stream_encoder_init_ogg_stream() or FLAC__stream_encoder_init_ogg_FILE()
- *     or FLAC__stream_encoder_init_ogg_file() for Ogg FLAC
- * - The program calls FLAC__stream_encoder_process() or
- *   FLAC__stream_encoder_process_interleaved() to encode data, which
- *   subsequently calls the callbacks when there is encoder data ready
- *   to be written.
- * - The program finishes the encoding with FLAC__stream_encoder_finish(),
- *   which causes the encoder to encode any data still in its input pipe,
- *   update the metadata with the final encoding statistics if output
- *   seeking is possible, and finally reset the encoder to the
- *   uninitialized state.
- * - The instance may be used again or deleted with
- *   FLAC__stream_encoder_delete().
- *
- * In more detail, the stream encoder functions similarly to the
- * \link flac_stream_decoder stream decoder \endlink, but has fewer
- * callbacks and more options.  Typically the client will create a new
- * instance by calling FLAC__stream_encoder_new(), then set the necessary
- * parameters with FLAC__stream_encoder_set_*(), and initialize it by
- * calling one of the FLAC__stream_encoder_init_*() functions.
- *
- * Unlike the decoders, the stream encoder has many options that can
- * affect the speed and compression ratio.  When setting these parameters
- * you should have some basic knowledge of the format (see the
- * <A HREF="../documentation_format_overview.html">user-level documentation</A>
- * or the <A HREF="../format.html">formal description</A>).  The
- * FLAC__stream_encoder_set_*() functions themselves do not validate the
- * values as many are interdependent.  The FLAC__stream_encoder_init_*()
- * functions will do this, so make sure to pay attention to the state
- * returned by FLAC__stream_encoder_init_*() to make sure that it is
- * FLAC__STREAM_ENCODER_INIT_STATUS_OK.  Any parameters that are not set
- * before FLAC__stream_encoder_init_*() will take on the defaults from
- * the constructor.
- *
- * There are three initialization functions for native FLAC, one for
- * setting up the encoder to encode FLAC data to the client via
- * callbacks, and two for encoding directly to a file.
- *
- * For encoding via callbacks, use FLAC__stream_encoder_init_stream().
- * You must also supply a write callback which will be called anytime
- * there is raw encoded data to write.  If the client can seek the output
- * it is best to also supply seek and tell callbacks, as this allows the
- * encoder to go back after encoding is finished to write back
- * information that was collected while encoding, like seek point offsets,
- * frame sizes, etc.
- *
- * For encoding directly to a file, use FLAC__stream_encoder_init_FILE()
- * or FLAC__stream_encoder_init_file().  Then you must only supply a
- * filename or open \c FILE*; the encoder will handle all the callbacks
- * internally.  You may also supply a progress callback for periodic
- * notification of the encoding progress.
- *
- * There are three similarly-named init functions for encoding to Ogg
- * FLAC streams.  Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the
- * library has been built with Ogg support.
- *
- * The call to FLAC__stream_encoder_init_*() currently will also immediately
- * call the write callback several times, once with the \c fLaC signature,
- * and once for each encoded metadata block.  Note that for Ogg FLAC
- * encoding you will usually get at least twice the number of callbacks than
- * with native FLAC, one for the Ogg page header and one for the page body.
- *
- * After initializing the instance, the client may feed audio data to the
- * encoder in one of two ways:
- *
- * - Channel separate, through FLAC__stream_encoder_process() - The client
- *   will pass an array of pointers to buffers, one for each channel, to
- *   the encoder, each of the same length.  The samples need not be
- *   block-aligned, but each channel should have the same number of samples.
- * - Channel interleaved, through
- *   FLAC__stream_encoder_process_interleaved() - The client will pass a single
- *   pointer to data that is channel-interleaved (i.e. channel0_sample0,
- *   channel1_sample0, ... , channelN_sample0, channel0_sample1, ...).
- *   Again, the samples need not be block-aligned but they must be
- *   sample-aligned, i.e. the first value should be channel0_sample0 and
- *   the last value channelN_sampleM.
- *
- * Note that for either process call, each sample in the buffers should be a
- * signed integer, right-justified to the resolution set by
- * FLAC__stream_encoder_set_bits_per_sample().  For example, if the resolution
- * is 16 bits per sample, the samples should all be in the range [-32768,32767].
- *
- * When the client is finished encoding data, it calls
- * FLAC__stream_encoder_finish(), which causes the encoder to encode any
- * data still in its input pipe, and call the metadata callback with the
- * final encoding statistics.  Then the instance may be deleted with
- * FLAC__stream_encoder_delete() or initialized again to encode another
- * stream.
- *
- * For programs that write their own metadata, but that do not know the
- * actual metadata until after encoding, it is advantageous to instruct
- * the encoder to write a PADDING block of the correct size, so that
- * instead of rewriting the whole stream after encoding, the program can
- * just overwrite the PADDING block.  If only the maximum size of the
- * metadata is known, the program can write a slightly larger padding
- * block, then split it after encoding.
- *
- * Make sure you understand how lengths are calculated.  All FLAC metadata
- * blocks have a 4 byte header which contains the type and length.  This
- * length does not include the 4 bytes of the header.  See the format page
- * for the specification of metadata blocks and their lengths.
- *
- * \note
- * If you are writing the FLAC data to a file via callbacks, make sure it
- * is open for update (e.g. mode "w+" for stdio streams).  This is because
- * after the first encoding pass, the encoder will try to seek back to the
- * beginning of the stream, to the STREAMINFO block, to write some data
- * there.  (If using FLAC__stream_encoder_init*_file() or
- * FLAC__stream_encoder_init*_FILE(), the file is managed internally.)
- *
- * \note
- * The "set" functions may only be called when the encoder is in the
- * state FLAC__STREAM_ENCODER_UNINITIALIZED, i.e. after
- * FLAC__stream_encoder_new() or FLAC__stream_encoder_finish(), but
- * before FLAC__stream_encoder_init_*().  If this is the case they will
- * return \c true, otherwise \c false.
- *
- * \note
- * FLAC__stream_encoder_finish() resets all settings to the constructor
- * defaults.
- *
- * \{
- */
-
-
-/** State values for a FLAC__StreamEncoder.
- *
- * The encoder's state can be obtained by calling FLAC__stream_encoder_get_state().
- *
- * If the encoder gets into any other state besides \c FLAC__STREAM_ENCODER_OK
- * or \c FLAC__STREAM_ENCODER_UNINITIALIZED, it becomes invalid for encoding and
- * must be deleted with FLAC__stream_encoder_delete().
- */
-typedef enum {
-
-	FLAC__STREAM_ENCODER_OK = 0,
-	/**< The encoder is in the normal OK state and samples can be processed. */
-
-	FLAC__STREAM_ENCODER_UNINITIALIZED,
-	/**< The encoder is in the uninitialized state; one of the
-	 * FLAC__stream_encoder_init_*() functions must be called before samples
-	 * can be processed.
-	 */
-
-	FLAC__STREAM_ENCODER_OGG_ERROR,
-	/**< An error occurred in the underlying Ogg layer.  */
-
-	FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
-	/**< An error occurred in the underlying verify stream decoder;
-	 * check FLAC__stream_encoder_get_verify_decoder_state().
-	 */
-
-	FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
-	/**< The verify decoder detected a mismatch between the original
-	 * audio signal and the decoded audio signal.
-	 */
-
-	FLAC__STREAM_ENCODER_CLIENT_ERROR,
-	/**< One of the callbacks returned a fatal error. */
-
-	FLAC__STREAM_ENCODER_IO_ERROR,
-	/**< An I/O error occurred while opening/reading/writing a file.
-	 * Check \c errno.
-	 */
-
-	FLAC__STREAM_ENCODER_FRAMING_ERROR,
-	/**< An error occurred while writing the stream; usually, the
-	 * write_callback returned an error.
-	 */
-
-	FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
-	/**< Memory allocation failed. */
-
-} FLAC__StreamEncoderState;
-
-/** Maps a FLAC__StreamEncoderState to a C string.
- *
- *  Using a FLAC__StreamEncoderState as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
-
-
-/** Possible return values for the FLAC__stream_encoder_init_*() functions.
- */
-typedef enum {
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0,
-	/**< Initialization was successful. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
-	/**< General failure to set up encoder; call FLAC__stream_encoder_get_state() for cause. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
-	/**< The library was not compiled with support for the given container
-	 * format.
-	 */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
-	/**< A required callback was not supplied. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS,
-	/**< The encoder has an invalid setting for number of channels. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE,
-	/**< The encoder has an invalid setting for bits-per-sample.
-	 * FLAC supports 4-32 bps but the reference encoder currently supports
-	 * only up to 24 bps.
-	 */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE,
-	/**< The encoder has an invalid setting for the input sample rate. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE,
-	/**< The encoder has an invalid setting for the block size. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER,
-	/**< The encoder has an invalid setting for the maximum LPC order. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION,
-	/**< The encoder has an invalid setting for the precision of the quantized linear predictor coefficients. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
-	/**< The specified block size is less than the maximum LPC order. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE,
-	/**< The encoder is bound to the <A HREF="../format.html#subset">Subset</A> but other settings violate it. */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA,
-	/**< The metadata input to the encoder is invalid, in one of the following ways:
-	 * - FLAC__stream_encoder_set_metadata() was called with a null pointer but a block count > 0
-	 * - One of the metadata blocks contains an undefined type
-	 * - It contains an illegal CUESHEET as checked by FLAC__format_cuesheet_is_legal()
-	 * - It contains an illegal SEEKTABLE as checked by FLAC__format_seektable_is_legal()
-	 * - It contains more than one SEEKTABLE block or more than one VORBIS_COMMENT block
-	 */
-
-	FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED
-	/**< FLAC__stream_encoder_init_*() was called when the encoder was
-	 * already initialized, usually because
-	 * FLAC__stream_encoder_finish() was not called.
-	 */
-
-} FLAC__StreamEncoderInitStatus;
-
-/** Maps a FLAC__StreamEncoderInitStatus to a C string.
- *
- *  Using a FLAC__StreamEncoderInitStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
-
-
-/** Return values for the FLAC__StreamEncoder read callback.
- */
-typedef enum {
-
-	FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
-	/**< The read was OK and decoding can continue. */
-
-	FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
-	/**< The read was attempted at the end of the stream. */
-
-	FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
-	/**< An unrecoverable error occurred. */
-
-	FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
-	/**< Client does not support reading back from the output. */
-
-} FLAC__StreamEncoderReadStatus;
-
-/** Maps a FLAC__StreamEncoderReadStatus to a C string.
- *
- *  Using a FLAC__StreamEncoderReadStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
-
-
-/** Return values for the FLAC__StreamEncoder write callback.
- */
-typedef enum {
-
-	FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
-	/**< The write was OK and encoding can continue. */
-
-	FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
-	/**< An unrecoverable error occurred.  The encoder will return from the process call. */
-
-} FLAC__StreamEncoderWriteStatus;
-
-/** Maps a FLAC__StreamEncoderWriteStatus to a C string.
- *
- *  Using a FLAC__StreamEncoderWriteStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
-
-
-/** Return values for the FLAC__StreamEncoder seek callback.
- */
-typedef enum {
-
-	FLAC__STREAM_ENCODER_SEEK_STATUS_OK,
-	/**< The seek was OK and encoding can continue. */
-
-	FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR,
-	/**< An unrecoverable error occurred. */
-
-	FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
-	/**< Client does not support seeking. */
-
-} FLAC__StreamEncoderSeekStatus;
-
-/** Maps a FLAC__StreamEncoderSeekStatus to a C string.
- *
- *  Using a FLAC__StreamEncoderSeekStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[];
-
-
-/** Return values for the FLAC__StreamEncoder tell callback.
- */
-typedef enum {
-
-	FLAC__STREAM_ENCODER_TELL_STATUS_OK,
-	/**< The tell was OK and encoding can continue. */
-
-	FLAC__STREAM_ENCODER_TELL_STATUS_ERROR,
-	/**< An unrecoverable error occurred. */
-
-	FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
-	/**< Client does not support seeking. */
-
-} FLAC__StreamEncoderTellStatus;
-
-/** Maps a FLAC__StreamEncoderTellStatus to a C string.
- *
- *  Using a FLAC__StreamEncoderTellStatus as the index to this array
- *  will give the string equivalent.  The contents should not be modified.
- */
-extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[];
-
-
-/***********************************************************************
- *
- * class FLAC__StreamEncoder
- *
- ***********************************************************************/
-
-struct FLAC__StreamEncoderProtected;
-struct FLAC__StreamEncoderPrivate;
-/** The opaque structure definition for the stream encoder type.
- *  See the \link flac_stream_encoder stream encoder module \endlink
- *  for a detailed description.
- */
-typedef struct {
-	struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
-	struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
-} FLAC__StreamEncoder;
-
-/** Signature for the read callback.
- *
- *  A function pointer matching this signature must be passed to
- *  FLAC__stream_encoder_init_ogg_stream() if seeking is supported.
- *  The supplied function will be called when the encoder needs to read back
- *  encoded data.  This happens during the metadata callback, when the encoder
- *  has to read, modify, and rewrite the metadata (e.g. seekpoints) gathered
- *  while encoding.  The address of the buffer to be filled is supplied, along
- *  with the number of bytes the buffer can hold.  The callback may choose to
- *  supply less data and modify the byte count but must be careful not to
- *  overflow the buffer.  The callback then returns a status code chosen from
- *  FLAC__StreamEncoderReadStatus.
- *
- * Here is an example of a read callback for stdio streams:
- * \code
- * FLAC__StreamEncoderReadStatus read_cb(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   if(*bytes > 0) {
- *     *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file);
- *     if(ferror(file))
- *       return FLAC__STREAM_ENCODER_READ_STATUS_ABORT;
- *     else if(*bytes == 0)
- *       return FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM;
- *     else
- *       return FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE;
- *   }
- *   else
- *     return FLAC__STREAM_ENCODER_READ_STATUS_ABORT;
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder  The encoder instance calling the callback.
- * \param  buffer   A pointer to a location for the callee to store
- *                  data to be encoded.
- * \param  bytes    A pointer to the size of the buffer.  On entry
- *                  to the callback, it contains the maximum number
- *                  of bytes that may be stored in \a buffer.  The
- *                  callee must set it to the actual number of bytes
- *                  stored (0 in case of error or end-of-stream) before
- *                  returning.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_encoder_set_client_data().
- * \retval FLAC__StreamEncoderReadStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
-
-/** Signature for the write callback.
- *
- *  A function pointer matching this signature must be passed to
- *  FLAC__stream_encoder_init*_stream().  The supplied function will be called
- *  by the encoder anytime there is raw encoded data ready to write.  It may
- *  include metadata mixed with encoded audio frames and the data is not
- *  guaranteed to be aligned on frame or metadata block boundaries.
- *
- *  The only duty of the callback is to write out the \a bytes worth of data
- *  in \a buffer to the current position in the output stream.  The arguments
- *  \a samples and \a current_frame are purely informational.  If \a samples
- *  is greater than \c 0, then \a current_frame will hold the current frame
- *  number that is being written; otherwise it indicates that the write
- *  callback is being called to write metadata.
- *
- * \note
- * Unlike when writing to native FLAC, when writing to Ogg FLAC the
- * write callback will be called twice when writing each audio
- * frame; once for the page header, and once for the page body.
- * When writing the page header, the \a samples argument to the
- * write callback will be \c 0.
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder  The encoder instance calling the callback.
- * \param  buffer   An array of encoded data of length \a bytes.
- * \param  bytes    The byte length of \a buffer.
- * \param  samples  The number of samples encoded by \a buffer.
- *                  \c 0 has a special meaning; see above.
- * \param  current_frame  The number of the current frame being encoded.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_encoder_init_*().
- * \retval FLAC__StreamEncoderWriteStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data);
-
-/** Signature for the seek callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_encoder_init*_stream().  The supplied function will be called
- *  when the encoder needs to seek the output stream.  The encoder will pass
- *  the absolute byte offset to seek to, 0 meaning the beginning of the stream.
- *
- * Here is an example of a seek callback for stdio streams:
- * \code
- * FLAC__StreamEncoderSeekStatus seek_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   if(file == stdin)
- *     return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED;
- *   else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0)
- *     return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR;
- *   else
- *     return FLAC__STREAM_ENCODER_SEEK_STATUS_OK;
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder  The encoder instance calling the callback.
- * \param  absolute_byte_offset  The offset from the beginning of the stream
- *                               to seek to.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_encoder_init_*().
- * \retval FLAC__StreamEncoderSeekStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
-
-/** Signature for the tell callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_encoder_init*_stream().  The supplied function will be called
- *  when the encoder needs to know the current position of the output stream.
- *
- * \warning
- * The callback must return the true current byte offset of the output to
- * which the encoder is writing.  If you are buffering the output, make
- * sure and take this into account.  If you are writing directly to a
- * FILE* from your write callback, ftell() is sufficient.  If you are
- * writing directly to a file descriptor from your write callback, you
- * can use lseek(fd, SEEK_CUR, 0).  The encoder may later seek back to
- * these points to rewrite metadata after encoding.
- *
- * Here is an example of a tell callback for stdio streams:
- * \code
- * FLAC__StreamEncoderTellStatus tell_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
- * {
- *   FILE *file = ((MyClientData*)client_data)->file;
- *   off_t pos;
- *   if(file == stdin)
- *     return FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED;
- *   else if((pos = ftello(file)) < 0)
- *     return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR;
- *   else {
- *     *absolute_byte_offset = (FLAC__uint64)pos;
- *     return FLAC__STREAM_ENCODER_TELL_STATUS_OK;
- *   }
- * }
- * \endcode
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder  The encoder instance calling the callback.
- * \param  absolute_byte_offset  The address at which to store the current
- *                               position of the output.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_encoder_init_*().
- * \retval FLAC__StreamEncoderTellStatus
- *    The callee's return status.
- */
-typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
-
-/** Signature for the metadata callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_encoder_init*_stream().  The supplied function will be called
- *  once at the end of encoding with the populated STREAMINFO structure.  This
- *  is so the client can seek back to the beginning of the file and write the
- *  STREAMINFO block with the correct statistics after encoding (like
- *  minimum/maximum frame size and total samples).
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder      The encoder instance calling the callback.
- * \param  metadata     The final populated STREAMINFO block.
- * \param  client_data  The callee's client data set through
- *                      FLAC__stream_encoder_init_*().
- */
-typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
-
-/** Signature for the progress callback.
- *
- *  A function pointer matching this signature may be passed to
- *  FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE().
- *  The supplied function will be called when the encoder has finished
- *  writing a frame.  The \c total_frames_estimate argument to the
- *  callback will be based on the value from
- *  FLAC__stream_encoder_set_total_samples_estimate().
- *
- * \note In general, FLAC__StreamEncoder functions which change the
- * state should not be called on the \a encoder while in the callback.
- *
- * \param  encoder          The encoder instance calling the callback.
- * \param  bytes_written    Bytes written so far.
- * \param  samples_written  Samples written so far.
- * \param  frames_written   Frames written so far.
- * \param  total_frames_estimate  The estimate of the total number of
- *                                frames to be written.
- * \param  client_data      The callee's client data set through
- *                          FLAC__stream_encoder_init_*().
- */
-typedef void (*FLAC__StreamEncoderProgressCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data);
-
-
-/***********************************************************************
- *
- * Class constructor/destructor
- *
- ***********************************************************************/
-
-/** Create a new stream encoder instance.  The instance is created with
- *  default settings; see the individual FLAC__stream_encoder_set_*()
- *  functions for each setting's default.
- *
- * \retval FLAC__StreamEncoder*
- *    \c NULL if there was an error allocating memory, else the new instance.
- */
-FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void);
-
-/** Free an encoder instance.  Deletes the object pointed to by \a encoder.
- *
- * \param encoder  A pointer to an existing encoder.
- * \assert
- *    \code encoder != NULL \endcode
- */
-FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
-
-
-/***********************************************************************
- *
- * Public class method prototypes
- *
- ***********************************************************************/
-
-/** Set the serial number for the FLAC stream to use in the Ogg container.
- *
- * \note
- * This does not need to be set for native FLAC encoding.
- *
- * \note
- * It is recommended to set a serial number explicitly as the default of '0'
- * may collide with other streams.
- *
- * \default \c 0
- * \param  encoder        An encoder instance to set.
- * \param  serial_number  See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
-
-/** Set the "verify" flag.  If \c true, the encoder will verify it's own
- *  encoded output by feeding it through an internal decoder and comparing
- *  the original signal against the decoded signal.  If a mismatch occurs,
- *  the process call will return \c false.  Note that this will slow the
- *  encoding process by the extra time required for decoding and comparison.
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Set the <A HREF="../format.html#subset">Subset</A> flag.  If \c true,
- *  the encoder will comply with the Subset and will check the
- *  settings during FLAC__stream_encoder_init_*() to see if all settings
- *  comply.  If \c false, the settings may take advantage of the full
- *  range that the format allows.
- *
- *  Make sure you know what it entails before setting this to \c false.
- *
- * \default \c true
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Set the number of channels to be encoded.
- *
- * \default \c 2
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set the sample resolution of the input to be encoded.
- *
- * \warning
- * Do not feed the encoder data that is wider than the value you
- * set here or you will generate an invalid stream.
- *
- * \default \c 16
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set the sample rate (in Hz) of the input to be encoded.
- *
- * \default \c 44100
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set the compression level
- *
- * The compression level is roughly proportional to the amount of effort
- * the encoder expends to compress the file.  A higher level usually
- * means more computation but higher compression.  The default level is
- * suitable for most applications.
- *
- * Currently the levels range from \c 0 (fastest, least compression) to
- * \c 8 (slowest, most compression).  A value larger than \c 8 will be
- * treated as \c 8.
- *
- * This function automatically calls the following other \c _set_
- * functions with appropriate values, so the client does not need to
- * unless it specifically wants to override them:
- * - FLAC__stream_encoder_set_do_mid_side_stereo()
- * - FLAC__stream_encoder_set_loose_mid_side_stereo()
- * - FLAC__stream_encoder_set_apodization()
- * - FLAC__stream_encoder_set_max_lpc_order()
- * - FLAC__stream_encoder_set_qlp_coeff_precision()
- * - FLAC__stream_encoder_set_do_qlp_coeff_prec_search()
- * - FLAC__stream_encoder_set_do_escape_coding()
- * - FLAC__stream_encoder_set_do_exhaustive_model_search()
- * - FLAC__stream_encoder_set_min_residual_partition_order()
- * - FLAC__stream_encoder_set_max_residual_partition_order()
- * - FLAC__stream_encoder_set_rice_parameter_search_dist()
- *
- * The actual values set for each level are:
- * <table>
- * <tr>
- *  <td><b>level</b></td>
- *  <td>do mid-side stereo</td>
- *  <td>loose mid-side stereo</td>
- *  <td>apodization</td>
- *  <td>max lpc order</td>
- *  <td>qlp coeff precision</td>
- *  <td>qlp coeff prec search</td>
- *  <td>escape coding</td>
- *  <td>exhaustive model search</td>
- *  <td>min residual partition order</td>
- *  <td>max residual partition order</td>
- *  <td>rice parameter search dist</td>
- * </tr>
- * <tr>  <td><b>0</b></td> <td>false</td> <td>false</td> <td>tukey(0.5)<td>                                     <td>0</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>3</td> <td>0</td> </tr>
- * <tr>  <td><b>1</b></td> <td>true</td>  <td>true</td>  <td>tukey(0.5)<td>                                     <td>0</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>3</td> <td>0</td> </tr>
- * <tr>  <td><b>2</b></td> <td>true</td>  <td>false</td> <td>tukey(0.5)<td>                                     <td>0</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>3</td> <td>0</td> </tr>
- * <tr>  <td><b>3</b></td> <td>false</td> <td>false</td> <td>tukey(0.5)<td>                                     <td>6</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>4</td> <td>0</td> </tr>
- * <tr>  <td><b>4</b></td> <td>true</td>  <td>true</td>  <td>tukey(0.5)<td>                                     <td>8</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>4</td> <td>0</td> </tr>
- * <tr>  <td><b>5</b></td> <td>true</td>  <td>false</td> <td>tukey(0.5)<td>                                     <td>8</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>5</td> <td>0</td> </tr>
- * <tr>  <td><b>6</b></td> <td>true</td>  <td>false</td> <td>tukey(0.5);partial_tukey(2)<td>                    <td>8</td>  <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>6</td> <td>0</td> </tr>
- * <tr>  <td><b>7</b></td> <td>true</td>  <td>false</td> <td>tukey(0.5);partial_tukey(2)<td>                    <td>12</td> <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>6</td> <td>0</td> </tr>
- * <tr>  <td><b>8</b></td> <td>true</td>  <td>false</td> <td>tukey(0.5);partial_tukey(2);punchout_tukey(3)</td> <td>12</td> <td>0</td> <td>false</td> <td>false</td> <td>false</td> <td>0</td> <td>6</td> <td>0</td> </tr>
- * </table>
- *
- * \default \c 5
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set the blocksize to use while encoding.
- *
- * The number of samples to use per frame.  Use \c 0 to let the encoder
- * estimate a blocksize; this is usually best.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set to \c true to enable mid-side encoding on stereo input.  The
- *  number of channels must be 2 for this to have any effect.  Set to
- *  \c false to use only independent channel coding.
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Set to \c true to enable adaptive switching between mid-side and
- *  left-right encoding on stereo input.  Set to \c false to use
- *  exhaustive searching.  Setting this to \c true requires
- *  FLAC__stream_encoder_set_do_mid_side_stereo() to also be set to
- *  \c true in order to have any effect.
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    Flag value (see above).
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Sets the apodization function(s) the encoder will use when windowing
- *  audio data for LPC analysis.
- *
- * The \a specification is a plain ASCII string which specifies exactly
- * which functions to use.  There may be more than one (up to 32),
- * separated by \c ';' characters.  Some functions take one or more
- * comma-separated arguments in parentheses.
- *
- * The available functions are \c bartlett, \c bartlett_hann,
- * \c blackman, \c blackman_harris_4term_92db, \c connes, \c flattop,
- * \c gauss(STDDEV), \c hamming, \c hann, \c kaiser_bessel, \c nuttall,
- * \c rectangle, \c triangle, \c tukey(P), \c partial_tukey(n[/ov[/P]]),
- * \c punchout_tukey(n[/ov[/P]]), \c welch.
- *
- * For \c gauss(STDDEV), STDDEV specifies the standard deviation
- * (0<STDDEV<=0.5).
- *
- * For \c tukey(P), P specifies the fraction of the window that is
- * tapered (0<=P<=1).  P=0 corresponds to \c rectangle and P=1
- * corresponds to \c hann.
- *
- * Specifying \c partial_tukey or \c punchout_tukey works a little
- * different. These do not specify a single apodization function, but
- * a series of them with some overlap. partial_tukey specifies a series
- * of small windows (all treated separately) while punchout_tukey
- * specifies a series of windows that have a hole in them. In this way,
- * the predictor is constructed with only a part of the block, which
- * helps in case a block consists of dissimilar parts.
- *
- * The three parameters that can be specified for the functions are
- * n, ov and P. n is the number of functions to add, ov is the overlap
- * of the windows in case of partial_tukey and the overlap in the gaps
- * in case of punchout_tukey. P is the fraction of the window that is
- * tapered, like with a regular tukey window. The function can be
- * specified with only a number, a number and an overlap, or a number
- * an overlap and a P, for example, partial_tukey(3), partial_tukey(3/0.3)
- * and partial_tukey(3/0.3/0.5) are all valid. ov should be smaller than 1
- * and can be negative.
- *
- * Example specifications are \c "blackman" or
- * \c "hann;triangle;tukey(0.5);tukey(0.25);tukey(0.125)"
- *
- * Any function that is specified erroneously is silently dropped.  Up
- * to 32 functions are kept, the rest are dropped.  If the specification
- * is empty the encoder defaults to \c "tukey(0.5)".
- *
- * When more than one function is specified, then for every subframe the
- * encoder will try each of them separately and choose the window that
- * results in the smallest compressed subframe.
- *
- * Note that each function specified causes the encoder to occupy a
- * floating point array in which to store the window. Also note that the
- * values of P, STDDEV and ov are locale-specific, so if the comma
- * separator specified by the locale is a comma, a comma should be used.
- *
- * \default \c "tukey(0.5)"
- * \param  encoder        An encoder instance to set.
- * \param  specification  See above.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code specification != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
-
-/** Set the maximum LPC order, or \c 0 to use only the fixed predictors.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set the precision, in bits, of the quantized linear predictor
- *  coefficients, or \c 0 to let the encoder select it based on the
- *  blocksize.
- *
- * \note
- * In the current implementation, qlp_coeff_precision + bits_per_sample must
- * be less than 32.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set to \c false to use only the specified quantized linear predictor
- *  coefficient precision, or \c true to search neighboring precision
- *  values and use the best one.
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Deprecated.  Setting this value has no effect.
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Set to \c false to let the encoder estimate the best model order
- *  based on the residual signal energy, or \c true to force the
- *  encoder to evaluate all order models and select the best.
- *
- * \default \c false
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
-
-/** Set the minimum partition order to search when coding the residual.
- *  This is used in tandem with
- *  FLAC__stream_encoder_set_max_residual_partition_order().
- *
- *  The partition order determines the context size in the residual.
- *  The context size will be approximately <tt>blocksize / (2 ^ order)</tt>.
- *
- *  Set both min and max values to \c 0 to force a single context,
- *  whose Rice parameter is based on the residual signal variance.
- *  Otherwise, set a min and max order, and the encoder will search
- *  all orders, using the mean of each context for its Rice parameter,
- *  and use the best.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set the maximum partition order to search when coding the residual.
- *  This is used in tandem with
- *  FLAC__stream_encoder_set_min_residual_partition_order().
- *
- *  The partition order determines the context size in the residual.
- *  The context size will be approximately <tt>blocksize / (2 ^ order)</tt>.
- *
- *  Set both min and max values to \c 0 to force a single context,
- *  whose Rice parameter is based on the residual signal variance.
- *  Otherwise, set a min and max order, and the encoder will search
- *  all orders, using the mean of each context for its Rice parameter,
- *  and use the best.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Deprecated.  Setting this value has no effect.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
-
-/** Set an estimate of the total samples that will be encoded.
- *  This is merely an estimate and may be set to \c 0 if unknown.
- *  This value will be written to the STREAMINFO block before encoding,
- *  and can remove the need for the caller to rewrite the value later
- *  if the value is known before encoding.
- *
- * \default \c 0
- * \param  encoder  An encoder instance to set.
- * \param  value    See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
-
-/** Set the metadata blocks to be emitted to the stream before encoding.
- *  A value of \c NULL, \c 0 implies no metadata; otherwise, supply an
- *  array of pointers to metadata blocks.  The array is non-const since
- *  the encoder may need to change the \a is_last flag inside them, and
- *  in some cases update seek point offsets.  Otherwise, the encoder will
- *  not modify or free the blocks.  It is up to the caller to free the
- *  metadata blocks after encoding finishes.
- *
- * \note
- * The encoder stores only copies of the pointers in the \a metadata array;
- * the metadata blocks themselves must survive at least until after
- * FLAC__stream_encoder_finish() returns.  Do not free the blocks until then.
- *
- * \note
- * The STREAMINFO block is always written and no STREAMINFO block may
- * occur in the supplied array.
- *
- * \note
- * By default the encoder does not create a SEEKTABLE.  If one is supplied
- * in the \a metadata array, but the client has specified that it does not
- * support seeking, then the SEEKTABLE will be written verbatim.  However
- * by itself this is not very useful as the client will not know the stream
- * offsets for the seekpoints ahead of time.  In order to get a proper
- * seektable the client must support seeking.  See next note.
- *
- * \note
- * SEEKTABLE blocks are handled specially.  Since you will not know
- * the values for the seek point stream offsets, you should pass in
- * a SEEKTABLE 'template', that is, a SEEKTABLE object with the
- * required sample numbers (or placeholder points), with \c 0 for the
- * \a frame_samples and \a stream_offset fields for each point.  If the
- * client has specified that it supports seeking by providing a seek
- * callback to FLAC__stream_encoder_init_stream() or both seek AND read
- * callback to FLAC__stream_encoder_init_ogg_stream() (or by using
- * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE()),
- * then while it is encoding the encoder will fill the stream offsets in
- * for you and when encoding is finished, it will seek back and write the
- * real values into the SEEKTABLE block in the stream.  There are helper
- * routines for manipulating seektable template blocks; see metadata.h:
- * FLAC__metadata_object_seektable_template_*().  If the client does
- * not support seeking, the SEEKTABLE will have inaccurate offsets which
- * will slow down or remove the ability to seek in the FLAC stream.
- *
- * \note
- * The encoder instance \b will modify the first \c SEEKTABLE block
- * as it transforms the template to a valid seektable while encoding,
- * but it is still up to the caller to free all metadata blocks after
- * encoding.
- *
- * \note
- * A VORBIS_COMMENT block may be supplied.  The vendor string in it
- * will be ignored.  libFLAC will use it's own vendor string. libFLAC
- * will not modify the passed-in VORBIS_COMMENT's vendor string, it
- * will simply write it's own into the stream.  If no VORBIS_COMMENT
- * block is present in the \a metadata array, libFLAC will write an
- * empty one, containing only the vendor string.
- *
- * \note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be
- * the second metadata block of the stream.  The encoder already supplies
- * the STREAMINFO block automatically.  If \a metadata does not contain a
- * VORBIS_COMMENT block, the encoder will supply that too.  Otherwise, if
- * \a metadata does contain a VORBIS_COMMENT block and it is not the
- * first, the init function will reorder \a metadata by moving the
- * VORBIS_COMMENT block to the front; the relative ordering of the other
- * blocks will remain as they were.
- *
- * \note The Ogg FLAC mapping limits the number of metadata blocks per
- * stream to \c 65535.  If \a num_blocks exceeds this the function will
- * return \c false.
- *
- * \default \c NULL, 0
- * \param  encoder     An encoder instance to set.
- * \param  metadata    See above.
- * \param  num_blocks  See above.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if the encoder is already initialized, else \c true.
- *    \c false if the encoder is already initialized, or if
- *    \a num_blocks > 65535 if encoding to Ogg FLAC, else \c true.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
-
-/** Get the current encoder state.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderState
- *    The current encoder state.
- */
-FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
-
-/** Get the state of the verify stream decoder.
- *  Useful when the stream encoder state is
- *  \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamDecoderState
- *    The verify stream decoder state.
- */
-FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
-
-/** Get the current encoder state as a C string.
- *  This version automatically resolves
- *  \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR by getting the
- *  verify decoder's state.
- *
- * \param  encoder  A encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval const char *
- *    The encoder state as a C string.  Do not modify the contents.
- */
-FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
-
-/** Get relevant values about the nature of a verify decoder error.
- *  Useful when the stream encoder state is
- *  \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.  The arguments should
- *  be addresses in which the stats will be returned, or NULL if value
- *  is not desired.
- *
- * \param  encoder  An encoder instance to query.
- * \param  absolute_sample  The absolute sample number of the mismatch.
- * \param  frame_number  The number of the frame in which the mismatch occurred.
- * \param  channel       The channel in which the mismatch occurred.
- * \param  sample        The number of the sample (relative to the frame) in
- *                       which the mismatch occurred.
- * \param  expected      The expected value for the sample in question.
- * \param  got           The actual value returned by the decoder.
- * \assert
- *    \code encoder != NULL \endcode
- */
-FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got);
-
-/** Get the "verify" flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_set_verify().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
-
-/** Get the <A HREF="../format.html#subset>Subset</A> flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_set_streamable_subset().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
-
-/** Get the number of input channels being processed.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_channels().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
-
-/** Get the input sample resolution setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_bits_per_sample().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
-
-/** Get the input sample rate setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_sample_rate().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
-
-/** Get the blocksize setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_blocksize().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
-
-/** Get the "mid/side stereo coding" flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_get_do_mid_side_stereo().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
-
-/** Get the "adaptive mid/side switching" flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_set_loose_mid_side_stereo().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
-
-/** Get the maximum LPC order setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_max_lpc_order().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
-
-/** Get the quantized linear predictor coefficient precision setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_qlp_coeff_precision().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
-
-/** Get the qlp coefficient precision search flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_set_do_qlp_coeff_prec_search().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
-
-/** Get the "escape coding" flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_set_do_escape_coding().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
-
-/** Get the exhaustive model search flag.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    See FLAC__stream_encoder_set_do_exhaustive_model_search().
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
-
-/** Get the minimum residual partition order setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_min_residual_partition_order().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
-
-/** Get maximum residual partition order setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_max_residual_partition_order().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
-
-/** Get the Rice parameter search distance setting.
- *
- * \param  encoder  An encoder instance to query.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval unsigned
- *    See FLAC__stream_encoder_set_rice_parameter_search_dist().
- */
-FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
-
-/** Get the previously set estimate of the total samples to be encoded.
- *  The encoder merely mimics back the value given to
- *  FLAC__stream_encoder_set_total_samples_estimate() since it has no
- *  other way of knowing how many samples the client will encode.
- *
- * \param  encoder  An encoder instance to set.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__uint64
- *    See FLAC__stream_encoder_get_total_samples_estimate().
- */
-FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
-
-/** Initialize the encoder instance to encode native FLAC streams.
- *
- *  This flavor of initialization sets up the encoder to encode to a
- *  native FLAC stream. I/O is performed via callbacks to the client.
- *  For encoding to a plain file via filename or open \c FILE*,
- *  FLAC__stream_encoder_init_file() and FLAC__stream_encoder_init_FILE()
- *  provide a simpler interface.
- *
- *  This function should be called after FLAC__stream_encoder_new() and
- *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
- *  or FLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- *  The call to FLAC__stream_encoder_init_stream() currently will also
- *  immediately call the write callback several times, once with the \c fLaC
- *  signature, and once for each encoded metadata block.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  write_callback     See FLAC__StreamEncoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  seek_callback      See FLAC__StreamEncoderSeekCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  The encoder uses seeking to go back
- *                            and write some some stream statistics to the
- *                            STREAMINFO block; this is recommended but not
- *                            necessary to create a valid FLAC stream.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy seek callback that just
- *                            returns \c FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the encoder.
- * \param  tell_callback      See FLAC__StreamEncoderTellCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  If \a seek_callback is \c NULL then
- *                            this argument will be ignored.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy tell callback that just
- *                            returns \c FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the encoder.
- * \param  metadata_callback  See FLAC__StreamEncoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.  If the client provides a seek callback,
- *                            this function is not necessary as the encoder
- *                            will automatically seek back and update the
- *                            STREAMINFO block.  It may also be \c NULL if the
- *                            client does not support seeking, since it will
- *                            have no way of going back to update the
- *                            STREAMINFO.  However the client can still supply
- *                            a callback if it would like to know the details
- *                            from the STREAMINFO.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_stream(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
-
-/** Initialize the encoder instance to encode Ogg FLAC streams.
- *
- *  This flavor of initialization sets up the encoder to encode to a FLAC
- *  stream in an Ogg container.  I/O is performed via callbacks to the
- *  client.  For encoding to a plain file via filename or open \c FILE*,
- *  FLAC__stream_encoder_init_ogg_file() and FLAC__stream_encoder_init_ogg_FILE()
- *  provide a simpler interface.
- *
- *  This function should be called after FLAC__stream_encoder_new() and
- *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
- *  or FLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- *  The call to FLAC__stream_encoder_init_ogg_stream() currently will also
- *  immediately call the write callback several times to write the metadata
- *  packets.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  read_callback      See FLAC__StreamEncoderReadCallback.  This
- *                            pointer must not be \c NULL if \a seek_callback
- *                            is non-NULL since they are both needed to be
- *                            able to write data back to the Ogg FLAC stream
- *                            in the post-encode phase.
- * \param  write_callback     See FLAC__StreamEncoderWriteCallback.  This
- *                            pointer must not be \c NULL.
- * \param  seek_callback      See FLAC__StreamEncoderSeekCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  The encoder uses seeking to go back
- *                            and write some some stream statistics to the
- *                            STREAMINFO block; this is recommended but not
- *                            necessary to create a valid FLAC stream.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy seek callback that just
- *                            returns \c FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the encoder.
- * \param  tell_callback      See FLAC__StreamEncoderTellCallback.  This
- *                            pointer may be \c NULL if seeking is not
- *                            supported.  If \a seek_callback is \c NULL then
- *                            this argument will be ignored.  If
- *                            \a seek_callback is not \c NULL then a
- *                            \a tell_callback must also be supplied.
- *                            Alternatively, a dummy tell callback that just
- *                            returns \c FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
- *                            may also be supplied, all though this is slightly
- *                            less efficient for the encoder.
- * \param  metadata_callback  See FLAC__StreamEncoderMetadataCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.  If the client provides a seek callback,
- *                            this function is not necessary as the encoder
- *                            will automatically seek back and update the
- *                            STREAMINFO block.  It may also be \c NULL if the
- *                            client does not support seeking, since it will
- *                            have no way of going back to update the
- *                            STREAMINFO.  However the client can still supply
- *                            a callback if it would like to know the details
- *                            from the STREAMINFO.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_stream(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderReadCallback read_callback, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
-
-/** Initialize the encoder instance to encode native FLAC files.
- *
- *  This flavor of initialization sets up the encoder to encode to a
- *  plain native FLAC file.  For non-stdio streams, you must use
- *  FLAC__stream_encoder_init_stream() and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_encoder_new() and
- *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
- *  or FLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  file               An open file.  The file should have been opened
- *                            with mode \c "w+b" and rewound.  The file
- *                            becomes owned by the encoder and should not be
- *                            manipulated by the client while encoding.
- *                            Unless \a file is \c stdout, it will be closed
- *                            when FLAC__stream_encoder_finish() is called.
- *                            Note however that a proper SEEKTABLE cannot be
- *                            created when encoding to \c stdout since it is
- *                            not seekable.
- * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code file != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
-
-/** Initialize the encoder instance to encode Ogg FLAC files.
- *
- *  This flavor of initialization sets up the encoder to encode to a
- *  plain Ogg FLAC file.  For non-stdio streams, you must use
- *  FLAC__stream_encoder_init_ogg_stream() and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_encoder_new() and
- *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
- *  or FLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  file               An open file.  The file should have been opened
- *                            with mode \c "w+b" and rewound.  The file
- *                            becomes owned by the encoder and should not be
- *                            manipulated by the client while encoding.
- *                            Unless \a file is \c stdout, it will be closed
- *                            when FLAC__stream_encoder_finish() is called.
- *                            Note however that a proper SEEKTABLE cannot be
- *                            created when encoding to \c stdout since it is
- *                            not seekable.
- * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code file != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
-
-/** Initialize the encoder instance to encode native FLAC files.
- *
- *  This flavor of initialization sets up the encoder to encode to a plain
- *  FLAC file.  If POSIX fopen() semantics are not sufficient (for example,
- *  with Unicode filenames on Windows), you must use
- *  FLAC__stream_encoder_init_FILE(), or FLAC__stream_encoder_init_stream()
- *  and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_encoder_new() and
- *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
- *  or FLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  filename           The name of the file to encode to.  The file will
- *                            be opened with fopen().  Use \c NULL to encode to
- *                            \c stdout.  Note however that a proper SEEKTABLE
- *                            cannot be created when encoding to \c stdout since
- *                            it is not seekable.
- * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
-
-/** Initialize the encoder instance to encode Ogg FLAC files.
- *
- *  This flavor of initialization sets up the encoder to encode to a plain
- *  Ogg FLAC file.  If POSIX fopen() semantics are not sufficient (for example,
- *  with Unicode filenames on Windows), you must use
- *  FLAC__stream_encoder_init_ogg_FILE(), or FLAC__stream_encoder_init_ogg_stream()
- *  and provide callbacks for the I/O.
- *
- *  This function should be called after FLAC__stream_encoder_new() and
- *  FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process()
- *  or FLAC__stream_encoder_process_interleaved().
- *  initialization succeeded.
- *
- * \param  encoder            An uninitialized encoder instance.
- * \param  filename           The name of the file to encode to.  The file will
- *                            be opened with fopen().  Use \c NULL to encode to
- *                            \c stdout.  Note however that a proper SEEKTABLE
- *                            cannot be created when encoding to \c stdout since
- *                            it is not seekable.
- * \param  progress_callback  See FLAC__StreamEncoderProgressCallback.  This
- *                            pointer may be \c NULL if the callback is not
- *                            desired.
- * \param  client_data        This value will be supplied to callbacks in their
- *                            \a client_data argument.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__StreamEncoderInitStatus
- *    \c FLAC__STREAM_ENCODER_INIT_STATUS_OK if initialization was successful;
- *    see FLAC__StreamEncoderInitStatus for the meanings of other return values.
- */
-FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
-
-/** Finish the encoding process.
- *  Flushes the encoding buffer, releases resources, resets the encoder
- *  settings to their defaults, and returns the encoder state to
- *  FLAC__STREAM_ENCODER_UNINITIALIZED.  Note that this can generate
- *  one or more write callbacks before returning, and will generate
- *  a metadata callback.
- *
- *  Note that in the course of processing the last frame, errors can
- *  occur, so the caller should be sure to check the return value to
- *  ensure the file was encoded properly.
- *
- *  In the event of a prematurely-terminated encode, it is not strictly
- *  necessary to call this immediately before FLAC__stream_encoder_delete()
- *  but it is good practice to match every FLAC__stream_encoder_init_*()
- *  with a FLAC__stream_encoder_finish().
- *
- * \param  encoder  An uninitialized encoder instance.
- * \assert
- *    \code encoder != NULL \endcode
- * \retval FLAC__bool
- *    \c false if an error occurred processing the last frame; or if verify
- *    mode is set (see FLAC__stream_encoder_set_verify()), there was a
- *    verify mismatch; else \c true.  If \c false, caller should check the
- *    state with FLAC__stream_encoder_get_state() for more information
- *    about the error.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
-
-/** Submit data for encoding.
- *  This version allows you to supply the input data via an array of
- *  pointers, each pointer pointing to an array of \a samples samples
- *  representing one channel.  The samples need not be block-aligned,
- *  but each channel should have the same number of samples.  Each sample
- *  should be a signed integer, right-justified to the resolution set by
- *  FLAC__stream_encoder_set_bits_per_sample().  For example, if the
- *  resolution is 16 bits per sample, the samples should all be in the
- *  range [-32768,32767].
- *
- *  For applications where channel order is important, channels must
- *  follow the order as described in the
- *  <A HREF="../format.html#frame_header">frame header</A>.
- *
- * \param  encoder  An initialized encoder instance in the OK state.
- * \param  buffer   An array of pointers to each channel's signal.
- * \param  samples  The number of samples in one channel.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false; in this case, check the
- *    encoder state with FLAC__stream_encoder_get_state() to see what
- *    went wrong.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
-
-/** Submit data for encoding.
- *  This version allows you to supply the input data where the channels
- *  are interleaved into a single array (i.e. channel0_sample0,
- *  channel1_sample0, ... , channelN_sample0, channel0_sample1, ...).
- *  The samples need not be block-aligned but they must be
- *  sample-aligned, i.e. the first value should be channel0_sample0
- *  and the last value channelN_sampleM.  Each sample should be a signed
- *  integer, right-justified to the resolution set by
- *  FLAC__stream_encoder_set_bits_per_sample().  For example, if the
- *  resolution is 16 bits per sample, the samples should all be in the
- *  range [-32768,32767].
- *
- *  For applications where channel order is important, channels must
- *  follow the order as described in the
- *  <A HREF="../format.html#frame_header">frame header</A>.
- *
- * \param  encoder  An initialized encoder instance in the OK state.
- * \param  buffer   An array of channel-interleaved data (see above).
- * \param  samples  The number of samples in one channel, the same as for
- *                  FLAC__stream_encoder_process().  For example, if
- *                  encoding two channels, \c 1000 \a samples corresponds
- *                  to a \a buffer of 2000 values.
- * \assert
- *    \code encoder != NULL \endcode
- *    \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode
- * \retval FLAC__bool
- *    \c true if successful, else \c false; in this case, check the
- *    encoder state with FLAC__stream_encoder_get_state() to see what
- *    went wrong.
- */
-FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
-
-/* \} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/flac/win_utf8_io.h b/modules/juce_audio_formats/codecs/flac/win_utf8_io.h
deleted file mode 100644
index 8834e10..0000000
--- a/modules/juce_audio_formats/codecs/flac/win_utf8_io.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* libFLAC - Free Lossless Audio Codec library
- * Copyright (C) 2013-2014  Xiph.Org Foundation
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of the Xiph.org Foundation nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef _WIN32
-
-#ifndef flac__win_utf8_io_h
-#define flac__win_utf8_io_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdio.h>
-#include <sys/stat.h>
-#include <stdarg.h>
-#include <windows.h>
-
-int get_utf8_argv(int *argc, char ***argv);
-
-int printf_utf8(const char *format, ...);
-int fprintf_utf8(FILE *stream, const char *format, ...);
-int vfprintf_utf8(FILE *stream, const char *format, va_list argptr);
-
-FILE *fopen_utf8(const char *filename, const char *mode);
-int stat_utf8(const char *path, struct stat *buffer);
-int _stat64_utf8(const char *path, struct __stat64 *buffer);
-int chmod_utf8(const char *filename, int pmode);
-int utime_utf8(const char *filename, struct utimbuf *times);
-int unlink_utf8(const char *filename);
-int rename_utf8(const char *oldname, const char *newname);
-size_t strlen_utf8(const char *str);
-int win_get_console_width(void);
-int print_console(FILE *stream, const wchar_t *text, size_t len);
-HANDLE WINAPI CreateFile_utf8(const char *lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt b/modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt
deleted file mode 100644
index 254dd52..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/Ogg Vorbis Licence.txt	
+++ /dev/null
@@ -1,47 +0,0 @@
-=====================================================================
-
-I've incorporated Ogg-Vorbis directly into the Juce codebase because it makes
-things much easier than having to make all your builds link correctly to
-the appropriate libraries on every different platform.
-
-I've made minimal changes to the Ogg-Vorbis code - just tweaked a few include 
-paths to make it build smoothly, and added some headers to allow you to exclude 
-it from the build.
-
-=====================================================================
-
-The following license is the BSD-style license that comes with the
-Ogg-Vorbis distribution, and which applies just to the header files I've
-included in this directory. For more info, and to get the rest of the
-distribution, visit the Ogg-Vorbis homepage: www.vorbis.com
-
-=====================================================================
-
-Copyright (c) 2002-2004 Xiph.org Foundation
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-- Neither the name of the Xiph.org Foundation nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/bitwise.c b/modules/juce_audio_formats/codecs/oggvorbis/bitwise.c
deleted file mode 100644
index 3f5244f..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/bitwise.c
+++ /dev/null
@@ -1,788 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: packing variable sized words into an octet stream
-  last mod: $Id: bitwise.c,v 1.1 2007/06/07 17:48:18 jules_rms Exp $
-
- ********************************************************************/
-
-#ifdef JUCE_MSVC
- #pragma warning (disable: 4456 4457 4459)
-#endif
-
-/* We're 'LSb' endian; if we write a word but read individual bits,
-   then we'll read the lsb first */
-
-#include <string.h>
-#include <stdlib.h>
-#include "ogg.h"
-
-#define BUFFER_INCREMENT 256
-
-static const unsigned long mask[]=
-{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,
- 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,
- 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,
- 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
- 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
- 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,
- 0x3fffffff,0x7fffffff,0xffffffff };
-
-static const unsigned int mask8B[]=
-{0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
-
-void oggpack_writeinit(oggpack_buffer *b){
-  memset(b,0,sizeof(*b));
-  b->ptr=b->buffer=(unsigned char*) _ogg_malloc(BUFFER_INCREMENT);
-  b->buffer[0]='\0';
-  b->storage=BUFFER_INCREMENT;
-}
-
-void oggpackB_writeinit(oggpack_buffer *b){
-  oggpack_writeinit(b);
-}
-
-void oggpack_writetrunc(oggpack_buffer *b,long bits){
-  long bytes=bits>>3;
-  bits-=bytes*8;
-  b->ptr=b->buffer+bytes;
-  b->endbit=bits;
-  b->endbyte=bytes;
-  *b->ptr&=mask[bits];
-}
-
-void oggpackB_writetrunc(oggpack_buffer *b,long bits){
-  long bytes=bits>>3;
-  bits-=bytes*8;
-  b->ptr=b->buffer+bytes;
-  b->endbit=bits;
-  b->endbyte=bytes;
-  *b->ptr&=mask8B[bits];
-}
-
-/* Takes only up to 32 bits. */
-void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){
-  if(b->endbyte+4>=b->storage){
-    b->buffer=(unsigned char*) _ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
-    b->storage+=BUFFER_INCREMENT;
-    b->ptr=b->buffer+b->endbyte;
-  }
-
-  value&=mask[bits];
-  bits+=b->endbit;
-
-  b->ptr[0]|=value<<b->endbit;
-
-  if(bits>=8){
-    b->ptr[1]=(unsigned char)(value>>(8-b->endbit));
-    if(bits>=16){
-      b->ptr[2]=(unsigned char)(value>>(16-b->endbit));
-      if(bits>=24){
-	b->ptr[3]=(unsigned char)(value>>(24-b->endbit));
-	if(bits>=32){
-	  if(b->endbit)
-	    b->ptr[4]=(unsigned char)(value>>(32-b->endbit));
-	  else
-	    b->ptr[4]=0;
-	}
-      }
-    }
-  }
-
-  b->endbyte+=bits/8;
-  b->ptr+=bits/8;
-  b->endbit=bits&7;
-}
-
-/* Takes only up to 32 bits. */
-void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){
-  if(b->endbyte+4>=b->storage){
-    b->buffer=(unsigned char*) _ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
-    b->storage+=BUFFER_INCREMENT;
-    b->ptr=b->buffer+b->endbyte;
-  }
-
-  value=(value&mask[bits])<<(32-bits);
-  bits+=b->endbit;
-
-  b->ptr[0]|=value>>(24+b->endbit);
-
-  if(bits>=8){
-    b->ptr[1]=(unsigned char)(value>>(16+b->endbit));
-    if(bits>=16){
-      b->ptr[2]=(unsigned char)(value>>(8+b->endbit));
-      if(bits>=24){
-	b->ptr[3]=(unsigned char)(value>>(b->endbit));
-	if(bits>=32){
-	  if(b->endbit)
-	    b->ptr[4]=(unsigned char)(value<<(8-b->endbit));
-	  else
-	    b->ptr[4]=0;
-	}
-      }
-    }
-  }
-
-  b->endbyte+=bits/8;
-  b->ptr+=bits/8;
-  b->endbit=bits&7;
-}
-
-void oggpack_writealign(oggpack_buffer *b){
-  int bits=8-b->endbit;
-  if(bits<8)
-    oggpack_write(b,0,bits);
-}
-
-void oggpackB_writealign(oggpack_buffer *b){
-  int bits=8-b->endbit;
-  if(bits<8)
-    oggpackB_write(b,0,bits);
-}
-
-static void oggpack_writecopy_helper(oggpack_buffer *b,
-				     void *source,
-				     long bits,
-				     void (*w)(oggpack_buffer *,
-					       unsigned long,
-					       int),
-				     int msb){
-  unsigned char *ptr=(unsigned char *)source;
-
-  long bytes=bits/8;
-  bits-=bytes*8;
-
-  if(b->endbit){
-    int i;
-    /* unaligned copy.  Do it the hard way. */
-    for(i=0;i<bytes;i++)
-      w(b,(unsigned long)(ptr[i]),8);
-  }else{
-    /* aligned block copy */
-    if(b->endbyte+bytes+1>=b->storage){
-      b->storage=b->endbyte+bytes+BUFFER_INCREMENT;
-      b->buffer=(unsigned char*) _ogg_realloc(b->buffer,b->storage);
-      b->ptr=b->buffer+b->endbyte;
-    }
-
-    memmove(b->ptr,source,bytes);
-    b->ptr+=bytes;
-    b->endbyte+=bytes;
-    *b->ptr=0;
-
-  }
-  if(bits){
-    if(msb)
-      w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits);
-    else
-      w(b,(unsigned long)(ptr[bytes]),bits);
-  }
-}
-
-void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){
-  oggpack_writecopy_helper(b,source,bits,oggpack_write,0);
-}
-
-void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){
-  oggpack_writecopy_helper(b,source,bits,oggpackB_write,1);
-}
-
-void oggpack_reset(oggpack_buffer *b){
-  b->ptr=b->buffer;
-  b->buffer[0]=0;
-  b->endbit=b->endbyte=0;
-}
-
-void oggpackB_reset(oggpack_buffer *b){
-  oggpack_reset(b);
-}
-
-void oggpack_writeclear(oggpack_buffer *b){
-  _ogg_free(b->buffer);
-  memset(b,0,sizeof(*b));
-}
-
-void oggpackB_writeclear(oggpack_buffer *b){
-  oggpack_writeclear(b);
-}
-
-void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
-  memset(b,0,sizeof(*b));
-  b->buffer=b->ptr=buf;
-  b->storage=bytes;
-}
-
-void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
-  oggpack_readinit(b,buf,bytes);
-}
-
-/* Read in bits without advancing the bitptr; bits <= 32 */
-long oggpack_look(oggpack_buffer *b,int bits){
-  unsigned long ret;
-  unsigned long m=mask[bits];
-
-  bits+=b->endbit;
-
-  if(b->endbyte+4>=b->storage){
-    /* not the main path */
-    if(b->endbyte*8+bits>b->storage*8)return(-1);
-  }
-
-  ret=b->ptr[0]>>b->endbit;
-  if(bits>8){
-    ret|=b->ptr[1]<<(8-b->endbit);
-    if(bits>16){
-      ret|=b->ptr[2]<<(16-b->endbit);
-      if(bits>24){
-	ret|=b->ptr[3]<<(24-b->endbit);
-	if(bits>32 && b->endbit)
-	  ret|=b->ptr[4]<<(32-b->endbit);
-      }
-    }
-  }
-  return(m&ret);
-}
-
-/* Read in bits without advancing the bitptr; bits <= 32 */
-long oggpackB_look(oggpack_buffer *b,int bits){
-  unsigned long ret;
-  int m=32-bits;
-
-  bits+=b->endbit;
-
-  if(b->endbyte+4>=b->storage){
-    /* not the main path */
-    if(b->endbyte*8+bits>b->storage*8)return(-1);
-  }
-
-  ret=b->ptr[0]<<(24+b->endbit);
-  if(bits>8){
-    ret|=b->ptr[1]<<(16+b->endbit);
-    if(bits>16){
-      ret|=b->ptr[2]<<(8+b->endbit);
-      if(bits>24){
-	ret|=b->ptr[3]<<(b->endbit);
-	if(bits>32 && b->endbit)
-	  ret|=b->ptr[4]>>(8-b->endbit);
-      }
-    }
-  }
-  return ((ret&0xffffffff)>>(m>>1))>>((m+1)>>1);
-}
-
-long oggpack_look1(oggpack_buffer *b){
-  if(b->endbyte>=b->storage)return(-1);
-  return((b->ptr[0]>>b->endbit)&1);
-}
-
-long oggpackB_look1(oggpack_buffer *b){
-  if(b->endbyte>=b->storage)return(-1);
-  return((b->ptr[0]>>(7-b->endbit))&1);
-}
-
-void oggpack_adv(oggpack_buffer *b,int bits){
-  bits+=b->endbit;
-  b->ptr+=bits/8;
-  b->endbyte+=bits/8;
-  b->endbit=bits&7;
-}
-
-void oggpackB_adv(oggpack_buffer *b,int bits){
-  oggpack_adv(b,bits);
-}
-
-void oggpack_adv1(oggpack_buffer *b){
-  if(++(b->endbit)>7){
-    b->endbit=0;
-    b->ptr++;
-    b->endbyte++;
-  }
-}
-
-void oggpackB_adv1(oggpack_buffer *b){
-  oggpack_adv1(b);
-}
-
-/* bits <= 32 */
-long oggpack_read(oggpack_buffer *b,int bits){
-  long ret;
-  unsigned long m=mask[bits];
-
-  bits+=b->endbit;
-
-  if(b->endbyte+4>=b->storage){
-    /* not the main path */
-    ret=-1L;
-    if(b->endbyte*8+bits>b->storage*8)goto overflow;
-  }
-
-  ret=b->ptr[0]>>b->endbit;
-  if(bits>8){
-    ret|=b->ptr[1]<<(8-b->endbit);
-    if(bits>16){
-      ret|=b->ptr[2]<<(16-b->endbit);
-      if(bits>24){
-	ret|=b->ptr[3]<<(24-b->endbit);
-	if(bits>32 && b->endbit){
-	  ret|=b->ptr[4]<<(32-b->endbit);
-	}
-      }
-    }
-  }
-  ret&=m;
-
- overflow:
-
-  b->ptr+=bits/8;
-  b->endbyte+=bits/8;
-  b->endbit=bits&7;
-  return(ret);
-}
-
-/* bits <= 32 */
-long oggpackB_read(oggpack_buffer *b,int bits){
-  long ret;
-  long m=32-bits;
-
-  bits+=b->endbit;
-
-  if(b->endbyte+4>=b->storage){
-    /* not the main path */
-    ret=-1L;
-    if(b->endbyte*8+bits>b->storage*8)goto overflow;
-  }
-
-  ret=b->ptr[0]<<(24+b->endbit);
-  if(bits>8){
-    ret|=b->ptr[1]<<(16+b->endbit);
-    if(bits>16){
-      ret|=b->ptr[2]<<(8+b->endbit);
-      if(bits>24){
-	ret|=b->ptr[3]<<(b->endbit);
-	if(bits>32 && b->endbit)
-	  ret|=b->ptr[4]>>(8-b->endbit);
-      }
-    }
-  }
-  ret=((ret&0xffffffffUL)>>(m>>1))>>((m+1)>>1);
-
- overflow:
-
-  b->ptr+=bits/8;
-  b->endbyte+=bits/8;
-  b->endbit=bits&7;
-  return(ret);
-}
-
-long oggpack_read1(oggpack_buffer *b){
-  long ret;
-
-  if(b->endbyte>=b->storage){
-    /* not the main path */
-    ret=-1L;
-    goto overflow;
-  }
-
-  ret=(b->ptr[0]>>b->endbit)&1;
-
- overflow:
-
-  b->endbit++;
-  if(b->endbit>7){
-    b->endbit=0;
-    b->ptr++;
-    b->endbyte++;
-  }
-  return(ret);
-}
-
-long oggpackB_read1(oggpack_buffer *b){
-  long ret;
-
-  if(b->endbyte>=b->storage){
-    /* not the main path */
-    ret=-1L;
-    goto overflow;
-  }
-
-  ret=(b->ptr[0]>>(7-b->endbit))&1;
-
- overflow:
-
-  b->endbit++;
-  if(b->endbit>7){
-    b->endbit=0;
-    b->ptr++;
-    b->endbyte++;
-  }
-  return(ret);
-}
-
-long oggpack_bytes(oggpack_buffer *b){
-  return(b->endbyte+(b->endbit+7)/8);
-}
-
-long oggpack_bits(oggpack_buffer *b){
-  return(b->endbyte*8+b->endbit);
-}
-
-long oggpackB_bytes(oggpack_buffer *b){
-  return oggpack_bytes(b);
-}
-
-long oggpackB_bits(oggpack_buffer *b){
-  return oggpack_bits(b);
-}
-
-unsigned char *oggpack_get_buffer(oggpack_buffer *b){
-  return(b->buffer);
-}
-
-unsigned char *oggpackB_get_buffer(oggpack_buffer *b){
-  return oggpack_get_buffer(b);
-}
-
-/* Self test of the bitwise routines; everything else is based on
-   them, so they damned well better be solid. */
-
-#ifdef _V_SELFTEST
-#include <stdio.h>
-
-static int ilog(unsigned int v){
-  int ret=0;
-  while(v){
-    ret++;
-    v>>=1;
-  }
-  return(ret);
-}
-
-oggpack_buffer o;
-oggpack_buffer r;
-
-void report(char *in){
-  fprintf(stderr,"%s",in);
-  exit(1);
-}
-
-void cliptest(unsigned long *b,int vals,int bits,int *comp,int compsize){
-  long bytes,i;
-  unsigned char *buffer;
-
-  oggpack_reset(&o);
-  for(i=0;i<vals;i++)
-    oggpack_write(&o,b[i],bits?bits:ilog(b[i]));
-  buffer=oggpack_get_buffer(&o);
-  bytes=oggpack_bytes(&o);
-  if(bytes!=compsize)report("wrong number of bytes!\n");
-  for(i=0;i<bytes;i++)if(buffer[i]!=comp[i]){
-    for(i=0;i<bytes;i++)fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]);
-    report("wrote incorrect value!\n");
-  }
-  oggpack_readinit(&r,buffer,bytes);
-  for(i=0;i<vals;i++){
-    int tbit=bits?bits:ilog(b[i]);
-    if(oggpack_look(&r,tbit)==-1)
-      report("out of data!\n");
-    if(oggpack_look(&r,tbit)!=(b[i]&mask[tbit]))
-      report("looked at incorrect value!\n");
-    if(tbit==1)
-      if(oggpack_look1(&r)!=(b[i]&mask[tbit]))
-	report("looked at single bit incorrect value!\n");
-    if(tbit==1){
-      if(oggpack_read1(&r)!=(b[i]&mask[tbit]))
-	report("read incorrect single bit value!\n");
-    }else{
-    if(oggpack_read(&r,tbit)!=(b[i]&mask[tbit]))
-      report("read incorrect value!\n");
-    }
-  }
-  if(oggpack_bytes(&r)!=bytes)report("leftover bytes after read!\n");
-}
-
-void cliptestB(unsigned long *b,int vals,int bits,int *comp,int compsize){
-  long bytes,i;
-  unsigned char *buffer;
-
-  oggpackB_reset(&o);
-  for(i=0;i<vals;i++)
-    oggpackB_write(&o,b[i],bits?bits:ilog(b[i]));
-  buffer=oggpackB_get_buffer(&o);
-  bytes=oggpackB_bytes(&o);
-  if(bytes!=compsize)report("wrong number of bytes!\n");
-  for(i=0;i<bytes;i++)if(buffer[i]!=comp[i]){
-    for(i=0;i<bytes;i++)fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]);
-    report("wrote incorrect value!\n");
-  }
-  oggpackB_readinit(&r,buffer,bytes);
-  for(i=0;i<vals;i++){
-    int tbit=bits?bits:ilog(b[i]);
-    if(oggpackB_look(&r,tbit)==-1)
-      report("out of data!\n");
-    if(oggpackB_look(&r,tbit)!=(b[i]&mask[tbit]))
-      report("looked at incorrect value!\n");
-    if(tbit==1)
-      if(oggpackB_look1(&r)!=(b[i]&mask[tbit]))
-	report("looked at single bit incorrect value!\n");
-    if(tbit==1){
-      if(oggpackB_read1(&r)!=(b[i]&mask[tbit]))
-	report("read incorrect single bit value!\n");
-    }else{
-    if(oggpackB_read(&r,tbit)!=(b[i]&mask[tbit]))
-      report("read incorrect value!\n");
-    }
-  }
-  if(oggpackB_bytes(&r)!=bytes)report("leftover bytes after read!\n");
-}
-
-int main(void){
-  unsigned char *buffer;
-  long bytes,i;
-  static unsigned long testbuffer1[]=
-    {18,12,103948,4325,543,76,432,52,3,65,4,56,32,42,34,21,1,23,32,546,456,7,
-       567,56,8,8,55,3,52,342,341,4,265,7,67,86,2199,21,7,1,5,1,4};
-  int test1size=43;
-
-  static unsigned long testbuffer2[]=
-    {216531625L,1237861823,56732452,131,3212421,12325343,34547562,12313212,
-       1233432,534,5,346435231,14436467,7869299,76326614,167548585,
-       85525151,0,12321,1,349528352};
-  int test2size=21;
-
-  static unsigned long testbuffer3[]=
-    {1,0,14,0,1,0,12,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1,
-       0,1,30,1,1,1,0,0,1,0,0,0,12,0,11,0,1,0,0,1};
-  int test3size=56;
-
-  static unsigned long large[]=
-    {2136531625L,2137861823,56732452,131,3212421,12325343,34547562,12313212,
-       1233432,534,5,2146435231,14436467,7869299,76326614,167548585,
-       85525151,0,12321,1,2146528352};
-
-  int onesize=33;
-  static int one[33]={146,25,44,151,195,15,153,176,233,131,196,65,85,172,47,40,
-                    34,242,223,136,35,222,211,86,171,50,225,135,214,75,172,
-                    223,4};
-  static int oneB[33]={150,101,131,33,203,15,204,216,105,193,156,65,84,85,222,
-		       8,139,145,227,126,34,55,244,171,85,100,39,195,173,18,
-		       245,251,128};
-
-  int twosize=6;
-  static int two[6]={61,255,255,251,231,29};
-  static int twoB[6]={247,63,255,253,249,120};
-
-  int threesize=54;
-  static int three[54]={169,2,232,252,91,132,156,36,89,13,123,176,144,32,254,
-                      142,224,85,59,121,144,79,124,23,67,90,90,216,79,23,83,
-                      58,135,196,61,55,129,183,54,101,100,170,37,127,126,10,
-                      100,52,4,14,18,86,77,1};
-  static int threeB[54]={206,128,42,153,57,8,183,251,13,89,36,30,32,144,183,
-			 130,59,240,121,59,85,223,19,228,180,134,33,107,74,98,
-			 233,253,196,135,63,2,110,114,50,155,90,127,37,170,104,
-			 200,20,254,4,58,106,176,144,0};
-
-  int foursize=38;
-  static int four[38]={18,6,163,252,97,194,104,131,32,1,7,82,137,42,129,11,72,
-                     132,60,220,112,8,196,109,64,179,86,9,137,195,208,122,169,
-                     28,2,133,0,1};
-  static int fourB[38]={36,48,102,83,243,24,52,7,4,35,132,10,145,21,2,93,2,41,
-			1,219,184,16,33,184,54,149,170,132,18,30,29,98,229,67,
-			129,10,4,32};
-
-  int fivesize=45;
-  static int five[45]={169,2,126,139,144,172,30,4,80,72,240,59,130,218,73,62,
-                     241,24,210,44,4,20,0,248,116,49,135,100,110,130,181,169,
-                     84,75,159,2,1,0,132,192,8,0,0,18,22};
-  static int fiveB[45]={1,84,145,111,245,100,128,8,56,36,40,71,126,78,213,226,
-			124,105,12,0,133,128,0,162,233,242,67,152,77,205,77,
-			172,150,169,129,79,128,0,6,4,32,0,27,9,0};
-
-  int sixsize=7;
-  static int six[7]={17,177,170,242,169,19,148};
-  static int sixB[7]={136,141,85,79,149,200,41};
-
-  /* Test read/write together */
-  /* Later we test against pregenerated bitstreams */
-  oggpack_writeinit(&o);
-
-  fprintf(stderr,"\nSmall preclipped packing (LSb): ");
-  cliptest(testbuffer1,test1size,0,one,onesize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nNull bit call (LSb): ");
-  cliptest(testbuffer3,test3size,0,two,twosize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nLarge preclipped packing (LSb): ");
-  cliptest(testbuffer2,test2size,0,three,threesize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\n32 bit preclipped packing (LSb): ");
-  oggpack_reset(&o);
-  for(i=0;i<test2size;i++)
-    oggpack_write(&o,large[i],32);
-  buffer=oggpack_get_buffer(&o);
-  bytes=oggpack_bytes(&o);
-  oggpack_readinit(&r,buffer,bytes);
-  for(i=0;i<test2size;i++){
-    if(oggpack_look(&r,32)==-1)report("out of data. failed!");
-    if(oggpack_look(&r,32)!=large[i]){
-      fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpack_look(&r,32),large[i],
-	      oggpack_look(&r,32),large[i]);
-      report("read incorrect value!\n");
-    }
-    oggpack_adv(&r,32);
-  }
-  if(oggpack_bytes(&r)!=bytes)report("leftover bytes after read!\n");
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nSmall unclipped packing (LSb): ");
-  cliptest(testbuffer1,test1size,7,four,foursize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nLarge unclipped packing (LSb): ");
-  cliptest(testbuffer2,test2size,17,five,fivesize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nSingle bit unclipped packing (LSb): ");
-  cliptest(testbuffer3,test3size,1,six,sixsize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nTesting read past end (LSb): ");
-  oggpack_readinit(&r,"\0\0\0\0\0\0\0\0",8);
-  for(i=0;i<64;i++){
-    if(oggpack_read(&r,1)!=0){
-      fprintf(stderr,"failed; got -1 prematurely.\n");
-      exit(1);
-    }
-  }
-  if(oggpack_look(&r,1)!=-1 ||
-     oggpack_read(&r,1)!=-1){
-      fprintf(stderr,"failed; read past end without -1.\n");
-      exit(1);
-  }
-  oggpack_readinit(&r,"\0\0\0\0\0\0\0\0",8);
-  if(oggpack_read(&r,30)!=0 || oggpack_read(&r,16)!=0){
-      fprintf(stderr,"failed 2; got -1 prematurely.\n");
-      exit(1);
-  }
-
-  if(oggpack_look(&r,18)!=0 ||
-     oggpack_look(&r,18)!=0){
-    fprintf(stderr,"failed 3; got -1 prematurely.\n");
-      exit(1);
-  }
-  if(oggpack_look(&r,19)!=-1 ||
-     oggpack_look(&r,19)!=-1){
-    fprintf(stderr,"failed; read past end without -1.\n");
-      exit(1);
-  }
-  if(oggpack_look(&r,32)!=-1 ||
-     oggpack_look(&r,32)!=-1){
-    fprintf(stderr,"failed; read past end without -1.\n");
-      exit(1);
-  }
-  oggpack_writeclear(&o);
-  fprintf(stderr,"ok.\n");
-
-  /********** lazy, cut-n-paste retest with MSb packing ***********/
-
-  /* Test read/write together */
-  /* Later we test against pregenerated bitstreams */
-  oggpackB_writeinit(&o);
-
-  fprintf(stderr,"\nSmall preclipped packing (MSb): ");
-  cliptestB(testbuffer1,test1size,0,oneB,onesize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nNull bit call (MSb): ");
-  cliptestB(testbuffer3,test3size,0,twoB,twosize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nLarge preclipped packing (MSb): ");
-  cliptestB(testbuffer2,test2size,0,threeB,threesize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\n32 bit preclipped packing (MSb): ");
-  oggpackB_reset(&o);
-  for(i=0;i<test2size;i++)
-    oggpackB_write(&o,large[i],32);
-  buffer=oggpackB_get_buffer(&o);
-  bytes=oggpackB_bytes(&o);
-  oggpackB_readinit(&r,buffer,bytes);
-  for(i=0;i<test2size;i++){
-    if(oggpackB_look(&r,32)==-1)report("out of data. failed!");
-    if(oggpackB_look(&r,32)!=large[i]){
-      fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpackB_look(&r,32),large[i],
-	      oggpackB_look(&r,32),large[i]);
-      report("read incorrect value!\n");
-    }
-    oggpackB_adv(&r,32);
-  }
-  if(oggpackB_bytes(&r)!=bytes)report("leftover bytes after read!\n");
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nSmall unclipped packing (MSb): ");
-  cliptestB(testbuffer1,test1size,7,fourB,foursize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nLarge unclipped packing (MSb): ");
-  cliptestB(testbuffer2,test2size,17,fiveB,fivesize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nSingle bit unclipped packing (MSb): ");
-  cliptestB(testbuffer3,test3size,1,sixB,sixsize);
-  fprintf(stderr,"ok.");
-
-  fprintf(stderr,"\nTesting read past end (MSb): ");
-  oggpackB_readinit(&r,"\0\0\0\0\0\0\0\0",8);
-  for(i=0;i<64;i++){
-    if(oggpackB_read(&r,1)!=0){
-      fprintf(stderr,"failed; got -1 prematurely.\n");
-      exit(1);
-    }
-  }
-  if(oggpackB_look(&r,1)!=-1 ||
-     oggpackB_read(&r,1)!=-1){
-      fprintf(stderr,"failed; read past end without -1.\n");
-      exit(1);
-  }
-  oggpackB_readinit(&r,"\0\0\0\0\0\0\0\0",8);
-  if(oggpackB_read(&r,30)!=0 || oggpackB_read(&r,16)!=0){
-      fprintf(stderr,"failed 2; got -1 prematurely.\n");
-      exit(1);
-  }
-
-  if(oggpackB_look(&r,18)!=0 ||
-     oggpackB_look(&r,18)!=0){
-    fprintf(stderr,"failed 3; got -1 prematurely.\n");
-      exit(1);
-  }
-  if(oggpackB_look(&r,19)!=-1 ||
-     oggpackB_look(&r,19)!=-1){
-    fprintf(stderr,"failed; read past end without -1.\n");
-      exit(1);
-  }
-  if(oggpackB_look(&r,32)!=-1 ||
-     oggpackB_look(&r,32)!=-1){
-    fprintf(stderr,"failed; read past end without -1.\n");
-      exit(1);
-  }
-  oggpackB_writeclear(&o);
-  fprintf(stderr,"ok.\n\n");
-
-
-  return(0);
-}
-#endif  /* _V_SELFTEST */
-
-#undef BUFFER_INCREMENT
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/codec.h b/modules/juce_audio_formats/codecs/oggvorbis/codec.h
deleted file mode 100644
index 03d5b65..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/codec.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
-
- ********************************************************************
-
- function: libvorbis codec headers
- last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _vorbis_codec_h_
-#define _vorbis_codec_h_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include "ogg.h"
-
-typedef struct vorbis_info{
-  int version;
-  int channels;
-  long rate;
-
-  /* The below bitrate declarations are *hints*.
-     Combinations of the three values carry the following implications:
-
-     all three set to the same value:
-       implies a fixed rate bitstream
-     only nominal set:
-       implies a VBR stream that averages the nominal bitrate.  No hard
-       upper/lower limit
-     upper and or lower set:
-       implies a VBR bitstream that obeys the bitrate limits. nominal
-       may also be set to give a nominal rate.
-     none set:
-       the coder does not care to speculate.
-  */
-
-  long bitrate_upper;
-  long bitrate_nominal;
-  long bitrate_lower;
-  long bitrate_window;
-
-  void *codec_setup;
-} vorbis_info;
-
-/* vorbis_dsp_state buffers the current vorbis audio
-   analysis/synthesis state.  The DSP state belongs to a specific
-   logical bitstream ****************************************************/
-typedef struct vorbis_dsp_state{
-  int analysisp;
-  vorbis_info *vi;
-
-  float **pcm;
-  float **pcmret;
-  int      pcm_storage;
-  int      pcm_current;
-  int      pcm_returned;
-
-  int  preextrapolate;
-  int  eofflag;
-
-  long lW;
-  long W;
-  long nW;
-  long centerW;
-
-  ogg_int64_t granulepos;
-  ogg_int64_t sequence;
-
-  ogg_int64_t glue_bits;
-  ogg_int64_t time_bits;
-  ogg_int64_t floor_bits;
-  ogg_int64_t res_bits;
-
-  void       *backend_state;
-} vorbis_dsp_state;
-
-typedef struct vorbis_block{
-  /* necessary stream state for linking to the framing abstraction */
-  float  **pcm;       /* this is a pointer into local storage */
-  oggpack_buffer opb;
-
-  long  lW;
-  long  W;
-  long  nW;
-  int   pcmend;
-  int   mode;
-
-  int         eofflag;
-  ogg_int64_t granulepos;
-  ogg_int64_t sequence;
-  vorbis_dsp_state *vd; /* For read-only access of configuration */
-
-  /* local storage to avoid remallocing; it's up to the mapping to
-     structure it */
-  void               *localstore;
-  long                localtop;
-  long                localalloc;
-  long                totaluse;
-  struct alloc_chain *reap;
-
-  /* bitmetrics for the frame */
-  long glue_bits;
-  long time_bits;
-  long floor_bits;
-  long res_bits;
-
-  void *internal;
-
-} vorbis_block;
-
-/* vorbis_block is a single block of data to be processed as part of
-the analysis/synthesis stream; it belongs to a specific logical
-bitstream, but is independent from other vorbis_blocks belonging to
-that logical bitstream. *************************************************/
-
-struct alloc_chain{
-  void *ptr;
-  struct alloc_chain *next;
-};
-
-/* vorbis_info contains all the setup information specific to the
-   specific compression/decompression mode in progress (eg,
-   psychoacoustic settings, channel setup, options, codebook
-   etc). vorbis_info and substructures are in backends.h.
-*********************************************************************/
-
-/* the comments are not part of vorbis_info so that vorbis_info can be
-   static storage */
-typedef struct vorbis_comment{
-  /* unlimited user comment fields.  libvorbis writes 'libvorbis'
-     whatever vendor is set to in encode */
-  char **user_comments;
-  int   *comment_lengths;
-  int    comments;
-  char  *vendor;
-
-} vorbis_comment;
-
-
-/* libvorbis encodes in two abstraction layers; first we perform DSP
-   and produce a packet (see docs/analysis.txt).  The packet is then
-   coded into a framed OggSquish bitstream by the second layer (see
-   docs/framing.txt).  Decode is the reverse process; we sync/frame
-   the bitstream and extract individual packets, then decode the
-   packet back into PCM audio.
-
-   The extra framing/packetizing is used in streaming formats, such as
-   files.  Over the net (such as with UDP), the framing and
-   packetization aren't necessary as they're provided by the transport
-   and the streaming layer is not used */
-
-/* Vorbis PRIMITIVES: general ***************************************/
-
-extern void     vorbis_info_init(vorbis_info *vi);
-extern void     vorbis_info_clear(vorbis_info *vi);
-extern int      vorbis_info_blocksize(vorbis_info *vi,int zo);
-extern void     vorbis_comment_init(vorbis_comment *vc);
-extern void     vorbis_comment_add(vorbis_comment *vc, const char *comment);
-extern void     vorbis_comment_add_tag(vorbis_comment *vc,
-                                       const char *tag, const char *contents);
-extern char    *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
-extern int      vorbis_comment_query_count(vorbis_comment *vc, const char *tag);
-extern void     vorbis_comment_clear(vorbis_comment *vc);
-
-extern int      vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
-extern int      vorbis_block_clear(vorbis_block *vb);
-extern void     vorbis_dsp_clear(vorbis_dsp_state *v);
-extern double   vorbis_granule_time(vorbis_dsp_state *v,
-                                    ogg_int64_t granulepos);
-
-extern const char *vorbis_version_string(void);
-
-/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
-
-extern int      vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
-extern int      vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
-extern int      vorbis_analysis_headerout(vorbis_dsp_state *v,
-                                          vorbis_comment *vc,
-                                          ogg_packet *op,
-                                          ogg_packet *op_comm,
-                                          ogg_packet *op_code);
-extern float  **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
-extern int      vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
-extern int      vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
-extern int      vorbis_analysis(vorbis_block *vb,ogg_packet *op);
-
-extern int      vorbis_bitrate_addblock(vorbis_block *vb);
-extern int      vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
-                                           ogg_packet *op);
-
-/* Vorbis PRIMITIVES: synthesis layer *******************************/
-extern int      vorbis_synthesis_idheader(ogg_packet *op);
-extern int      vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
-                                          ogg_packet *op);
-
-extern int      vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
-extern int      vorbis_synthesis_restart(vorbis_dsp_state *v);
-extern int      vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
-extern int      vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
-extern int      vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
-extern int      vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
-extern int      vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
-extern int      vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
-extern long     vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
-
-extern int      vorbis_synthesis_halfrate(vorbis_info *v,int flag);
-extern int      vorbis_synthesis_halfrate_p(vorbis_info *v);
-
-/* Vorbis ERRORS and return codes ***********************************/
-
-#define OV_FALSE      -1
-#define OV_EOF        -2
-#define OV_HOLE       -3
-
-#define OV_EREAD      -128
-#define OV_EFAULT     -129
-#define OV_EIMPL      -130
-#define OV_EINVAL     -131
-#define OV_ENOTVORBIS -132
-#define OV_EBADHEADER -133
-#define OV_EVERSION   -134
-#define OV_ENOTAUDIO  -135
-#define OV_EBADPACKET -136
-#define OV_EBADLINK   -137
-#define OV_ENOSEEK    -138
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/config_types.h b/modules/juce_audio_formats/codecs/oggvorbis/config_types.h
deleted file mode 100644
index 649390d..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/config_types.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __CONFIG_TYPES_H__
-#define __CONFIG_TYPES_H__
-
-typedef int16_t ogg_int16_t;
-typedef unsigned short ogg_uint16_t;
-typedef int32_t ogg_int32_t;
-typedef unsigned int ogg_uint32_t;
-typedef int64_t ogg_int64_t;
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/framing.c b/modules/juce_audio_formats/codecs/oggvorbis/framing.c
deleted file mode 100644
index 740321d..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/framing.c
+++ /dev/null
@@ -1,1796 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: code raw [Vorbis] packets into framed OggSquish stream and
-           decode Ogg streams back into raw packets
- last mod: $Id: framing.c,v 1.1 2007/06/07 17:48:18 jules_rms Exp $
-
- note: The CRC code is directly derived from public domain code by
- Ross Williams (ross at guest.adelaide.edu.au).  See docs/framing.html
- for details.
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include "ogg.h"
-
-/* A complete description of Ogg framing exists in docs/framing.html */
-
-int ogg_page_version(ogg_page *og){
-  return((int)(og->header[4]));
-}
-
-int ogg_page_continued(ogg_page *og){
-  return((int)(og->header[5]&0x01));
-}
-
-int ogg_page_bos(ogg_page *og){
-  return((int)(og->header[5]&0x02));
-}
-
-int ogg_page_eos(ogg_page *og){
-  return((int)(og->header[5]&0x04));
-}
-
-ogg_int64_t ogg_page_granulepos(ogg_page *og){
-  unsigned char *page=og->header;
-  ogg_int64_t granulepos=page[13]&(0xff);
-  granulepos= (granulepos<<8)|(page[12]&0xff);
-  granulepos= (granulepos<<8)|(page[11]&0xff);
-  granulepos= (granulepos<<8)|(page[10]&0xff);
-  granulepos= (granulepos<<8)|(page[9]&0xff);
-  granulepos= (granulepos<<8)|(page[8]&0xff);
-  granulepos= (granulepos<<8)|(page[7]&0xff);
-  granulepos= (granulepos<<8)|(page[6]&0xff);
-  return(granulepos);
-}
-
-int ogg_page_serialno(ogg_page *og){
-  return(og->header[14] |
-	 (og->header[15]<<8) |
-	 (og->header[16]<<16) |
-	 (og->header[17]<<24));
-}
-
-long ogg_page_pageno(ogg_page *og){
-  return(og->header[18] |
-	 (og->header[19]<<8) |
-	 (og->header[20]<<16) |
-	 (og->header[21]<<24));
-}
-
-
-
-/* returns the number of packets that are completed on this page (if
-   the leading packet is begun on a previous page, but ends on this
-   page, it's counted */
-
-/* NOTE:
-If a page consists of a packet begun on a previous page, and a new
-packet begun (but not completed) on this page, the return will be:
-  ogg_page_packets(page)   ==1,
-  ogg_page_continued(page) !=0
-
-If a page happens to be a single packet that was begun on a
-previous page, and spans to the next page (in the case of a three or
-more page packet), the return will be:
-  ogg_page_packets(page)   ==0,
-  ogg_page_continued(page) !=0
-*/
-
-int ogg_page_packets(ogg_page *og){
-  int i,n=og->header[26],count=0;
-  for(i=0;i<n;i++)
-    if(og->header[27+i]<255)count++;
-  return(count);
-}
-
-
-#if 0
-/* helper to initialize lookup for direct-table CRC (illustrative; we
-   use the static init below) */
-
-static ogg_uint32_t _ogg_crc_entry(unsigned long index){
-  int           i;
-  unsigned long r;
-
-  r = index << 24;
-  for (i=0; i<8; i++)
-    if (r & 0x80000000UL)
-      r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator
-				    polynomial, although we use an
-				    unreflected alg and an init/final
-				    of 0, not 0xffffffff */
-    else
-       r<<=1;
- return (r & 0xffffffffUL);
-}
-#endif
-
-static const ogg_uint32_t crc_lookup[256]={
-  0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,
-  0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
-  0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,
-  0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
-  0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,
-  0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
-  0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,
-  0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
-  0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,
-  0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
-  0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,
-  0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
-  0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,
-  0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
-  0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,
-  0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
-  0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,
-  0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
-  0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,
-  0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
-  0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,
-  0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
-  0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,
-  0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
-  0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,
-  0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
-  0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,
-  0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
-  0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,
-  0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
-  0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,
-  0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
-  0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,
-  0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
-  0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,
-  0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
-  0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,
-  0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
-  0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,
-  0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
-  0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,
-  0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
-  0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,
-  0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
-  0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,
-  0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
-  0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,
-  0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
-  0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,
-  0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
-  0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,
-  0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
-  0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,
-  0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
-  0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,
-  0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
-  0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,
-  0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
-  0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,
-  0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
-  0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,
-  0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
-  0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,
-  0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};
-
-/* init the encode/decode logical stream state */
-
-int ogg_stream_init(ogg_stream_state *os,int serialno){
-  if(os){
-    memset(os,0,sizeof(*os));
-    os->body_storage=16*1024;
-    os->body_data=(unsigned char*) _ogg_malloc(os->body_storage*sizeof(*os->body_data));
-
-    os->lacing_storage=1024;
-    os->lacing_vals=(int*) _ogg_malloc(os->lacing_storage*sizeof(*os->lacing_vals));
-    os->granule_vals=(ogg_int64_t*) _ogg_malloc(os->lacing_storage*sizeof(*os->granule_vals));
-
-    os->serialno=serialno;
-
-    return(0);
-  }
-  return(-1);
-}
-
-/* _clear does not free os, only the non-flat storage within */
-int ogg_stream_clear(ogg_stream_state *os){
-  if(os){
-    if(os->body_data)_ogg_free(os->body_data);
-    if(os->lacing_vals)_ogg_free(os->lacing_vals);
-    if(os->granule_vals)_ogg_free(os->granule_vals);
-
-    memset(os,0,sizeof(*os));
-  }
-  return(0);
-}
-
-int ogg_stream_destroy(ogg_stream_state *os){
-  if(os){
-    ogg_stream_clear(os);
-    _ogg_free(os);
-  }
-  return(0);
-}
-
-/* Helpers for ogg_stream_encode; this keeps the structure and
-   what's happening fairly clear */
-
-static void _os_body_expand(ogg_stream_state *os,int needed){
-  if(os->body_storage<=os->body_fill+needed){
-    os->body_storage+=(needed+1024);
-    os->body_data=(unsigned char*) _ogg_realloc(os->body_data,os->body_storage*sizeof(*os->body_data));
-  }
-}
-
-static void _os_lacing_expand(ogg_stream_state *os,int needed){
-  if(os->lacing_storage<=os->lacing_fill+needed){
-    os->lacing_storage+=(needed+32);
-    os->lacing_vals=(int*)_ogg_realloc(os->lacing_vals,os->lacing_storage*sizeof(*os->lacing_vals));
-    os->granule_vals=(ogg_int64_t*)_ogg_realloc(os->granule_vals,os->lacing_storage*sizeof(*os->granule_vals));
-  }
-}
-
-/* checksum the page */
-/* Direct table CRC; note that this will be faster in the future if we
-   perform the checksum silmultaneously with other copies */
-
-void ogg_page_checksum_set(ogg_page *og){
-  if(og){
-    ogg_uint32_t crc_reg=0;
-    int i;
-
-    /* safety; needed for API behavior, but not framing code */
-    og->header[22]=0;
-    og->header[23]=0;
-    og->header[24]=0;
-    og->header[25]=0;
-
-    for(i=0;i<og->header_len;i++)
-      crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]];
-    for(i=0;i<og->body_len;i++)
-      crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]];
-
-    og->header[22]=(unsigned char)(crc_reg&0xff);
-    og->header[23]=(unsigned char)((crc_reg>>8)&0xff);
-    og->header[24]=(unsigned char)((crc_reg>>16)&0xff);
-    og->header[25]=(unsigned char)((crc_reg>>24)&0xff);
-  }
-}
-
-/* submit data to the internal buffer of the framing engine */
-int ogg_stream_packetin(ogg_stream_state *os,ogg_packet *op){
-  int lacing_vals=op->bytes/255+1,i;
-
-  if(os->body_returned){
-    /* advance packet data according to the body_returned pointer. We
-       had to keep it around to return a pointer into the buffer last
-       call */
-
-    os->body_fill-=os->body_returned;
-    if(os->body_fill)
-      memmove(os->body_data,os->body_data+os->body_returned,
-	      os->body_fill);
-    os->body_returned=0;
-  }
-
-  /* make sure we have the buffer storage */
-  _os_body_expand(os,op->bytes);
-  _os_lacing_expand(os,lacing_vals);
-
-  /* Copy in the submitted packet.  Yes, the copy is a waste; this is
-     the liability of overly clean abstraction for the time being.  It
-     will actually be fairly easy to eliminate the extra copy in the
-     future */
-
-  memcpy(os->body_data+os->body_fill,op->packet,op->bytes);
-  os->body_fill+=op->bytes;
-
-  /* Store lacing vals for this packet */
-  for(i=0;i<lacing_vals-1;i++){
-    os->lacing_vals[os->lacing_fill+i]=255;
-    os->granule_vals[os->lacing_fill+i]=os->granulepos;
-  }
-  os->lacing_vals[os->lacing_fill+i]=(op->bytes)%255;
-  os->granulepos=os->granule_vals[os->lacing_fill+i]=op->granulepos;
-
-  /* flag the first segment as the beginning of the packet */
-  os->lacing_vals[os->lacing_fill]|= 0x100;
-
-  os->lacing_fill+=lacing_vals;
-
-  /* for the sake of completeness */
-  os->packetno++;
-
-  if(op->e_o_s)os->e_o_s=1;
-
-  return(0);
-}
-
-/* This will flush remaining packets into a page (returning nonzero),
-   even if there is not enough data to trigger a flush normally
-   (undersized page). If there are no packets or partial packets to
-   flush, ogg_stream_flush returns 0.  Note that ogg_stream_flush will
-   try to flush a normal sized page like ogg_stream_pageout; a call to
-   ogg_stream_flush does not guarantee that all packets have flushed.
-   Only a return value of 0 from ogg_stream_flush indicates all packet
-   data is flushed into pages.
-
-   since ogg_stream_flush will flush the last page in a stream even if
-   it's undersized, you almost certainly want to use ogg_stream_pageout
-   (and *not* ogg_stream_flush) unless you specifically need to flush
-   an page regardless of size in the middle of a stream. */
-
-int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){
-  int i;
-  int vals=0;
-  int maxvals=(os->lacing_fill>255?255:os->lacing_fill);
-  int bytes=0;
-  long acc=0;
-  ogg_int64_t granule_pos=-1;
-
-  if(maxvals==0)return(0);
-
-  /* construct a page */
-  /* decide how many segments to include */
-
-  /* If this is the initial header case, the first page must only include
-     the initial header packet */
-  if(os->b_o_s==0){  /* 'initial header page' case */
-    granule_pos=0;
-    for(vals=0;vals<maxvals;vals++){
-      if((os->lacing_vals[vals]&0x0ff)<255){
-	vals++;
-	break;
-      }
-    }
-  }else{
-    for(vals=0;vals<maxvals;vals++){
-      if(acc>4096)break;
-      acc+=os->lacing_vals[vals]&0x0ff;
-      if((os->lacing_vals[vals]&0xff)<255)
-        granule_pos=os->granule_vals[vals];
-    }
-  }
-
-  /* construct the header in temp storage */
-  memcpy(os->header,"OggS",4);
-
-  /* stream structure version */
-  os->header[4]=0x00;
-
-  /* continued packet flag? */
-  os->header[5]=0x00;
-  if((os->lacing_vals[0]&0x100)==0)os->header[5]|=0x01;
-  /* first page flag? */
-  if(os->b_o_s==0)os->header[5]|=0x02;
-  /* last page flag? */
-  if(os->e_o_s && os->lacing_fill==vals)os->header[5]|=0x04;
-  os->b_o_s=1;
-
-  /* 64 bits of PCM position */
-  for(i=6;i<14;i++){
-    os->header[i]=(unsigned char)(granule_pos&0xff);
-    granule_pos>>=8;
-  }
-
-  /* 32 bits of stream serial number */
-  {
-    long serialno=os->serialno;
-    for(i=14;i<18;i++){
-      os->header[i]=(unsigned char)(serialno&0xff);
-      serialno>>=8;
-    }
-  }
-
-  /* 32 bits of page counter (we have both counter and page header
-     because this val can roll over) */
-  if(os->pageno==-1)os->pageno=0; /* because someone called
-				     stream_reset; this would be a
-				     strange thing to do in an
-				     encode stream, but it has
-				     plausible uses */
-  {
-    long pageno=os->pageno++;
-    for(i=18;i<22;i++){
-      os->header[i]=(unsigned char)(pageno&0xff);
-      pageno>>=8;
-    }
-  }
-
-  /* zero for computation; filled in later */
-  os->header[22]=0;
-  os->header[23]=0;
-  os->header[24]=0;
-  os->header[25]=0;
-
-  /* segment table */
-  os->header[26]=(unsigned char)(vals&0xff);
-  for(i=0;i<vals;i++)
-    bytes+=os->header[i+27]=(unsigned char)(os->lacing_vals[i]&0xff);
-
-  /* set pointers in the ogg_page struct */
-  og->header=os->header;
-  og->header_len=os->header_fill=vals+27;
-  og->body=os->body_data+os->body_returned;
-  og->body_len=bytes;
-
-  /* advance the lacing data and set the body_returned pointer */
-
-  os->lacing_fill-=vals;
-  memmove(os->lacing_vals,os->lacing_vals+vals,os->lacing_fill*sizeof(*os->lacing_vals));
-  memmove(os->granule_vals,os->granule_vals+vals,os->lacing_fill*sizeof(*os->granule_vals));
-  os->body_returned+=bytes;
-
-  /* calculate the checksum */
-
-  ogg_page_checksum_set(og);
-
-  /* done */
-  return(1);
-}
-
-
-/* This constructs pages from buffered packet segments.  The pointers
-returned are to static buffers; do not free. The returned buffers are
-good only until the next call (using the same ogg_stream_state) */
-
-int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og){
-
-  if((os->e_o_s&&os->lacing_fill) ||          /* 'were done, now flush' case */
-     os->body_fill-os->body_returned > 4096 ||/* 'page nominal size' case */
-     os->lacing_fill>=255 ||                  /* 'segment table full' case */
-     (os->lacing_fill&&!os->b_o_s)){          /* 'initial header page' case */
-
-    return(ogg_stream_flush(os,og));
-  }
-
-  /* not enough data to construct a page and not end of stream */
-  return(0);
-}
-
-int ogg_stream_eos(ogg_stream_state *os){
-  return os->e_o_s;
-}
-
-/* DECODING PRIMITIVES: packet streaming layer **********************/
-
-/* This has two layers to place more of the multi-serialno and paging
-   control in the application's hands.  First, we expose a data buffer
-   using ogg_sync_buffer().  The app either copies into the
-   buffer, or passes it directly to read(), etc.  We then call
-   ogg_sync_wrote() to tell how many bytes we just added.
-
-   Pages are returned (pointers into the buffer in ogg_sync_state)
-   by ogg_sync_pageout().  The page is then submitted to
-   ogg_stream_pagein() along with the appropriate
-   ogg_stream_state* (ie, matching serialno).  We then get raw
-   packets out calling ogg_stream_packetout() with a
-   ogg_stream_state. */
-
-/* initialize the struct to a known state */
-int ogg_sync_init(ogg_sync_state *oy){
-  if(oy){
-    memset(oy,0,sizeof(*oy));
-  }
-  return(0);
-}
-
-/* clear non-flat storage within */
-int ogg_sync_clear(ogg_sync_state *oy){
-  if(oy){
-    if(oy->data)_ogg_free(oy->data);
-    ogg_sync_init(oy);
-  }
-  return(0);
-}
-
-int ogg_sync_destroy(ogg_sync_state *oy){
-  if(oy){
-    ogg_sync_clear(oy);
-    _ogg_free(oy);
-  }
-  return(0);
-}
-
-char *ogg_sync_buffer(ogg_sync_state *oy, long size){
-
-  /* first, clear out any space that has been previously returned */
-  if(oy->returned){
-    oy->fill-=oy->returned;
-    if(oy->fill>0)
-      memmove(oy->data,oy->data+oy->returned,oy->fill);
-    oy->returned=0;
-  }
-
-  if(size>oy->storage-oy->fill){
-    /* We need to extend the internal buffer */
-    long newsize=size+oy->fill+4096; /* an extra page to be nice */
-
-    if(oy->data)
-      oy->data=(unsigned char*) _ogg_realloc(oy->data,newsize);
-    else
-      oy->data=(unsigned char*) _ogg_malloc(newsize);
-    oy->storage=newsize;
-  }
-
-  /* expose a segment at least as large as requested at the fill mark */
-  return((char *)oy->data+oy->fill);
-}
-
-int ogg_sync_wrote(ogg_sync_state *oy, long bytes){
-  if(oy->fill+bytes>oy->storage)return(-1);
-  oy->fill+=bytes;
-  return(0);
-}
-
-/* sync the stream.  This is meant to be useful for finding page
-   boundaries.
-
-   return values for this:
-  -n) skipped n bytes
-   0) page not ready; more data (no bytes skipped)
-   n) page synced at current location; page length n bytes
-
-*/
-
-long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){
-  unsigned char *page=oy->data+oy->returned;
-  unsigned char *next;
-  long bytes=oy->fill-oy->returned;
-
-  if(oy->headerbytes==0){
-    int headerbytes,i;
-    if(bytes<27)return(0); /* not enough for a header */
-
-    /* verify capture pattern */
-    if(memcmp(page,"OggS",4))goto sync_fail;
-
-    headerbytes=page[26]+27;
-    if(bytes<headerbytes)return(0); /* not enough for header + seg table */
-
-    /* count up body length in the segment table */
-
-    for(i=0;i<page[26];i++)
-      oy->bodybytes+=page[27+i];
-    oy->headerbytes=headerbytes;
-  }
-
-  if(oy->bodybytes+oy->headerbytes>bytes)return(0);
-
-  /* The whole test page is buffered.  Verify the checksum */
-  {
-    /* Grab the checksum bytes, set the header field to zero */
-    char chksum[4];
-    ogg_page log;
-
-    memcpy(chksum,page+22,4);
-    memset(page+22,0,4);
-
-    /* set up a temp page struct and recompute the checksum */
-    log.header=page;
-    log.header_len=oy->headerbytes;
-    log.body=page+oy->headerbytes;
-    log.body_len=oy->bodybytes;
-    ogg_page_checksum_set(&log);
-
-    /* Compare */
-    if(memcmp(chksum,page+22,4)){
-      /* D'oh.  Mismatch! Corrupt page (or miscapture and not a page
-	 at all) */
-      /* replace the computed checksum with the one actually read in */
-      memcpy(page+22,chksum,4);
-
-      /* Bad checksum. Lose sync */
-      goto sync_fail;
-    }
-  }
-
-  /* yes, have a whole page all ready to go */
-  {
-    unsigned char *page=oy->data+oy->returned;
-    long bytes;
-
-    if(og){
-      og->header=page;
-      og->header_len=oy->headerbytes;
-      og->body=page+oy->headerbytes;
-      og->body_len=oy->bodybytes;
-    }
-
-    oy->unsynced=0;
-    oy->returned+=(bytes=oy->headerbytes+oy->bodybytes);
-    oy->headerbytes=0;
-    oy->bodybytes=0;
-    return(bytes);
-  }
-
- sync_fail:
-
-  oy->headerbytes=0;
-  oy->bodybytes=0;
-
-  /* search for possible capture */
-  next=(unsigned char*)memchr(page+1,'O',bytes-1);
-  if(!next)
-    next=oy->data+oy->fill;
-
-  oy->returned=next-oy->data;
-  return(-(next-page));
-}
-
-/* sync the stream and get a page.  Keep trying until we find a page.
-   Supress 'sync errors' after reporting the first.
-
-   return values:
-   -1) recapture (hole in data)
-    0) need more data
-    1) page returned
-
-   Returns pointers into buffered data; invalidated by next call to
-   _stream, _clear, _init, or _buffer */
-
-int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){
-
-  /* all we need to do is verify a page at the head of the stream
-     buffer.  If it doesn't verify, we look for the next potential
-     frame */
-
-  for(;;){
-    long ret=ogg_sync_pageseek(oy,og);
-    if(ret>0){
-      /* have a page */
-      return(1);
-    }
-    if(ret==0){
-      /* need more data */
-      return(0);
-    }
-
-    /* head did not start a synced page... skipped some bytes */
-    if(!oy->unsynced){
-      oy->unsynced=1;
-      return(-1);
-    }
-
-    /* loop. keep looking */
-
-  }
-}
-
-/* add the incoming page to the stream state; we decompose the page
-   into packet segments here as well. */
-
-int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
-  unsigned char *header=og->header;
-  unsigned char *body=og->body;
-  long           bodysize=og->body_len;
-  int            segptr=0;
-
-  int version=ogg_page_version(og);
-  int continued=ogg_page_continued(og);
-  int bos=ogg_page_bos(og);
-  int eos=ogg_page_eos(og);
-  ogg_int64_t granulepos=ogg_page_granulepos(og);
-  int serialno=ogg_page_serialno(og);
-  long pageno=ogg_page_pageno(og);
-  int segments=header[26];
-
-  /* clean up 'returned data' */
-  {
-    long lr=os->lacing_returned;
-    long br=os->body_returned;
-
-    /* body data */
-    if(br){
-      os->body_fill-=br;
-      if(os->body_fill)
-	memmove(os->body_data,os->body_data+br,os->body_fill);
-      os->body_returned=0;
-    }
-
-    if(lr){
-      /* segment table */
-      if(os->lacing_fill-lr){
-	memmove(os->lacing_vals,os->lacing_vals+lr,
-		(os->lacing_fill-lr)*sizeof(*os->lacing_vals));
-	memmove(os->granule_vals,os->granule_vals+lr,
-		(os->lacing_fill-lr)*sizeof(*os->granule_vals));
-      }
-      os->lacing_fill-=lr;
-      os->lacing_packet-=lr;
-      os->lacing_returned=0;
-    }
-  }
-
-  /* check the serial number */
-  if(serialno!=os->serialno)return(-1);
-  if(version>0)return(-1);
-
-  _os_lacing_expand(os,segments+1);
-
-  /* are we in sequence? */
-  if(pageno!=os->pageno){
-    int i;
-
-    /* unroll previous partial packet (if any) */
-    for(i=os->lacing_packet;i<os->lacing_fill;i++)
-      os->body_fill-=os->lacing_vals[i]&0xff;
-    os->lacing_fill=os->lacing_packet;
-
-    /* make a note of dropped data in segment table */
-    if(os->pageno!=-1){
-      os->lacing_vals[os->lacing_fill++]=0x400;
-      os->lacing_packet++;
-    }
-  }
-
-  /* are we a 'continued packet' page?  If so, we may need to skip
-     some segments */
-  if(continued){
-    if(os->lacing_fill<1 ||
-       os->lacing_vals[os->lacing_fill-1]==0x400){
-      bos=0;
-      for(;segptr<segments;segptr++){
-	int val=header[27+segptr];
-	body+=val;
-	bodysize-=val;
-	if(val<255){
-	  segptr++;
-	  break;
-	}
-      }
-    }
-  }
-
-  if(bodysize){
-    _os_body_expand(os,bodysize);
-    memcpy(os->body_data+os->body_fill,body,bodysize);
-    os->body_fill+=bodysize;
-  }
-
-  {
-    int saved=-1;
-    while(segptr<segments){
-      int val=header[27+segptr];
-      os->lacing_vals[os->lacing_fill]=val;
-      os->granule_vals[os->lacing_fill]=-1;
-
-      if(bos){
-	os->lacing_vals[os->lacing_fill]|=0x100;
-	bos=0;
-      }
-
-      if(val<255)saved=os->lacing_fill;
-
-      os->lacing_fill++;
-      segptr++;
-
-      if(val<255)os->lacing_packet=os->lacing_fill;
-    }
-
-    /* set the granulepos on the last granuleval of the last full packet */
-    if(saved!=-1){
-      os->granule_vals[saved]=granulepos;
-    }
-
-  }
-
-  if(eos){
-    os->e_o_s=1;
-    if(os->lacing_fill>0)
-      os->lacing_vals[os->lacing_fill-1]|=0x200;
-  }
-
-  os->pageno=pageno+1;
-
-  return(0);
-}
-
-/* clear things to an initial state.  Good to call, eg, before seeking */
-int ogg_sync_reset(ogg_sync_state *oy){
-  oy->fill=0;
-  oy->returned=0;
-  oy->unsynced=0;
-  oy->headerbytes=0;
-  oy->bodybytes=0;
-  return(0);
-}
-
-int ogg_stream_reset(ogg_stream_state *os){
-  os->body_fill=0;
-  os->body_returned=0;
-
-  os->lacing_fill=0;
-  os->lacing_packet=0;
-  os->lacing_returned=0;
-
-  os->header_fill=0;
-
-  os->e_o_s=0;
-  os->b_o_s=0;
-  os->pageno=-1;
-  os->packetno=0;
-  os->granulepos=0;
-
-  return(0);
-}
-
-int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){
-  ogg_stream_reset(os);
-  os->serialno=serialno;
-  return(0);
-}
-
-static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){
-
-  /* The last part of decode. We have the stream broken into packet
-     segments.  Now we need to group them into packets (or return the
-     out of sync markers) */
-
-  int ptr=os->lacing_returned;
-
-  if(os->lacing_packet<=ptr)return(0);
-
-  if(os->lacing_vals[ptr]&0x400){
-    /* we need to tell the codec there's a gap; it might need to
-       handle previous packet dependencies. */
-    os->lacing_returned++;
-    os->packetno++;
-    return(-1);
-  }
-
-  if(!op && !adv)return(1); /* just using peek as an inexpensive way
-                               to ask if there's a whole packet
-                               waiting */
-
-  /* Gather the whole packet. We'll have no holes or a partial packet */
-  {
-    int size=os->lacing_vals[ptr]&0xff;
-    int bytes=size;
-    int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */
-    int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */
-
-    while(size==255){
-      int val=os->lacing_vals[++ptr];
-      size=val&0xff;
-      if(val&0x200)eos=0x200;
-      bytes+=size;
-    }
-
-    if(op){
-      op->e_o_s=eos;
-      op->b_o_s=bos;
-      op->packet=os->body_data+os->body_returned;
-      op->packetno=os->packetno;
-      op->granulepos=os->granule_vals[ptr];
-      op->bytes=bytes;
-    }
-
-    if(adv){
-      os->body_returned+=bytes;
-      os->lacing_returned=ptr+1;
-      os->packetno++;
-    }
-  }
-  return(1);
-}
-
-int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){
-  return _packetout(os,op,1);
-}
-
-int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){
-  return _packetout(os,op,0);
-}
-
-void ogg_packet_clear(ogg_packet *op) {
-  _ogg_free(op->packet);
-  memset(op, 0, sizeof(*op));
-}
-
-#ifdef _V_SELFTEST
-#include <stdio.h>
-
-ogg_stream_state os_en, os_de;
-ogg_sync_state oy;
-
-void checkpacket(ogg_packet *op,int len, int no, int pos){
-  long j;
-  static int sequence=0;
-  static int lastno=0;
-
-  if(op->bytes!=len){
-    fprintf(stderr,"incorrect packet length!\n");
-    exit(1);
-  }
-  if(op->granulepos!=pos){
-    fprintf(stderr,"incorrect packet position!\n");
-    exit(1);
-  }
-
-  /* packet number just follows sequence/gap; adjust the input number
-     for that */
-  if(no==0){
-    sequence=0;
-  }else{
-    sequence++;
-    if(no>lastno+1)
-      sequence++;
-  }
-  lastno=no;
-  if(op->packetno!=sequence){
-    fprintf(stderr,"incorrect packet sequence %ld != %d\n",
-	    (long)(op->packetno),sequence);
-    exit(1);
-  }
-
-  /* Test data */
-  for(j=0;j<op->bytes;j++)
-    if(op->packet[j]!=((j+no)&0xff)){
-      fprintf(stderr,"body data mismatch (1) at pos %ld: %x!=%lx!\n\n",
-	      j,op->packet[j],(j+no)&0xff);
-      exit(1);
-    }
-}
-
-void check_page(unsigned char *data,const int *header,ogg_page *og){
-  long j;
-  /* Test data */
-  for(j=0;j<og->body_len;j++)
-    if(og->body[j]!=data[j]){
-      fprintf(stderr,"body data mismatch (2) at pos %ld: %x!=%x!\n\n",
-	      j,data[j],og->body[j]);
-      exit(1);
-    }
-
-  /* Test header */
-  for(j=0;j<og->header_len;j++){
-    if(og->header[j]!=header[j]){
-      fprintf(stderr,"header content mismatch at pos %ld:\n",j);
-      for(j=0;j<header[26]+27;j++)
-	fprintf(stderr," (%ld)%02x:%02x",j,header[j],og->header[j]);
-      fprintf(stderr,"\n");
-      exit(1);
-    }
-  }
-  if(og->header_len!=header[26]+27){
-    fprintf(stderr,"header length incorrect! (%ld!=%d)\n",
-	    og->header_len,header[26]+27);
-    exit(1);
-  }
-}
-
-void print_header(ogg_page *og){
-  int j;
-  fprintf(stderr,"\nHEADER:\n");
-  fprintf(stderr,"  capture: %c %c %c %c  version: %d  flags: %x\n",
-	  og->header[0],og->header[1],og->header[2],og->header[3],
-	  (int)og->header[4],(int)og->header[5]);
-
-  fprintf(stderr,"  granulepos: %d  serialno: %d  pageno: %ld\n",
-	  (og->header[9]<<24)|(og->header[8]<<16)|
-	  (og->header[7]<<8)|og->header[6],
-	  (og->header[17]<<24)|(og->header[16]<<16)|
-	  (og->header[15]<<8)|og->header[14],
-	  ((long)(og->header[21])<<24)|(og->header[20]<<16)|
-	  (og->header[19]<<8)|og->header[18]);
-
-  fprintf(stderr,"  checksum: %02x:%02x:%02x:%02x\n  segments: %d (",
-	  (int)og->header[22],(int)og->header[23],
-	  (int)og->header[24],(int)og->header[25],
-	  (int)og->header[26]);
-
-  for(j=27;j<og->header_len;j++)
-    fprintf(stderr,"%d ",(int)og->header[j]);
-  fprintf(stderr,")\n\n");
-}
-
-void copy_page(ogg_page *og){
-  unsigned char *temp=_ogg_malloc(og->header_len);
-  memcpy(temp,og->header,og->header_len);
-  og->header=temp;
-
-  temp=_ogg_malloc(og->body_len);
-  memcpy(temp,og->body,og->body_len);
-  og->body=temp;
-}
-
-void free_page(ogg_page *og){
-  _ogg_free (og->header);
-  _ogg_free (og->body);
-}
-
-void error(void){
-  fprintf(stderr,"error!\n");
-  exit(1);
-}
-
-/* 17 only */
-const int head1_0[] = {0x4f,0x67,0x67,0x53,0,0x06,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0x15,0xed,0xec,0x91,
-		       1,
-		       17};
-
-/* 17, 254, 255, 256, 500, 510, 600 byte, pad */
-const int head1_1[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0x59,0x10,0x6c,0x2c,
-		       1,
-		       17};
-const int head2_1[] = {0x4f,0x67,0x67,0x53,0,0x04,
-		       0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0x89,0x33,0x85,0xce,
-		       13,
-		       254,255,0,255,1,255,245,255,255,0,
-		       255,255,90};
-
-/* nil packets; beginning,middle,end */
-const int head1_2[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0xff,0x7b,0x23,0x17,
-		       1,
-		       0};
-const int head2_2[] = {0x4f,0x67,0x67,0x53,0,0x04,
-		       0x07,0x28,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0x5c,0x3f,0x66,0xcb,
-		       17,
-		       17,254,255,0,0,255,1,0,255,245,255,255,0,
-		       255,255,90,0};
-
-/* large initial packet */
-const int head1_3[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0x01,0x27,0x31,0xaa,
-		       18,
-		       255,255,255,255,255,255,255,255,
-		       255,255,255,255,255,255,255,255,255,10};
-
-const int head2_3[] = {0x4f,0x67,0x67,0x53,0,0x04,
-		       0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0x7f,0x4e,0x8a,0xd2,
-		       4,
-		       255,4,255,0};
-
-
-/* continuing packet test */
-const int head1_4[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0xff,0x7b,0x23,0x17,
-		       1,
-		       0};
-
-const int head2_4[] = {0x4f,0x67,0x67,0x53,0,0x00,
-		       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0x54,0x05,0x51,0xc8,
-		       17,
-		       255,255,255,255,255,255,255,255,
-		       255,255,255,255,255,255,255,255,255};
-
-const int head3_4[] = {0x4f,0x67,0x67,0x53,0,0x05,
-		       0x07,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,2,0,0,0,
-		       0xc8,0xc3,0xcb,0xed,
-		       5,
-		       10,255,4,255,0};
-
-
-/* page with the 255 segment limit */
-const int head1_5[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0xff,0x7b,0x23,0x17,
-		       1,
-		       0};
-
-const int head2_5[] = {0x4f,0x67,0x67,0x53,0,0x00,
-		       0x07,0xfc,0x03,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0xed,0x2a,0x2e,0xa7,
-		       255,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10,10,
-		       10,10,10,10,10,10,10};
-
-const int head3_5[] = {0x4f,0x67,0x67,0x53,0,0x04,
-		       0x07,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,2,0,0,0,
-		       0x6c,0x3b,0x82,0x3d,
-		       1,
-		       50};
-
-
-/* packet that overspans over an entire page */
-const int head1_6[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0xff,0x7b,0x23,0x17,
-		       1,
-		       0};
-
-const int head2_6[] = {0x4f,0x67,0x67,0x53,0,0x00,
-		       0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0x3c,0xd9,0x4d,0x3f,
-		       17,
-		       100,255,255,255,255,255,255,255,255,
-		       255,255,255,255,255,255,255,255};
-
-const int head3_6[] = {0x4f,0x67,0x67,0x53,0,0x01,
-		       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
-		       0x01,0x02,0x03,0x04,2,0,0,0,
-		       0x01,0xd2,0xe5,0xe5,
-		       17,
-		       255,255,255,255,255,255,255,255,
-		       255,255,255,255,255,255,255,255,255};
-
-const int head4_6[] = {0x4f,0x67,0x67,0x53,0,0x05,
-		       0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,3,0,0,0,
-		       0xef,0xdd,0x88,0xde,
-		       7,
-		       255,255,75,255,4,255,0};
-
-/* packet that overspans over an entire page */
-const int head1_7[] = {0x4f,0x67,0x67,0x53,0,0x02,
-		       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,0,0,0,0,
-		       0xff,0x7b,0x23,0x17,
-		       1,
-		       0};
-
-const int head2_7[] = {0x4f,0x67,0x67,0x53,0,0x00,
-		       0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,1,0,0,0,
-		       0x3c,0xd9,0x4d,0x3f,
-		       17,
-		       100,255,255,255,255,255,255,255,255,
-		       255,255,255,255,255,255,255,255};
-
-const int head3_7[] = {0x4f,0x67,0x67,0x53,0,0x05,
-		       0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
-		       0x01,0x02,0x03,0x04,2,0,0,0,
-		       0xd4,0xe0,0x60,0xe5,
-		       1,0};
-
-void test_pack(const int *pl, const int **headers, int byteskip,
-	       int pageskip, int packetskip){
-  unsigned char *data=_ogg_malloc(1024*1024); /* for scripted test cases only */
-  long inptr=0;
-  long outptr=0;
-  long deptr=0;
-  long depacket=0;
-  long granule_pos=7,pageno=0;
-  int i,j,packets,pageout=pageskip;
-  int eosflag=0;
-  int bosflag=0;
-
-  int byteskipcount=0;
-
-  ogg_stream_reset(&os_en);
-  ogg_stream_reset(&os_de);
-  ogg_sync_reset(&oy);
-
-  for(packets=0;packets<packetskip;packets++)
-    depacket+=pl[packets];
-
-  for(packets=0;;packets++)if(pl[packets]==-1)break;
-
-  for(i=0;i<packets;i++){
-    /* construct a test packet */
-    ogg_packet op;
-    int len=pl[i];
-
-    op.packet=data+inptr;
-    op.bytes=len;
-    op.e_o_s=(pl[i+1]<0?1:0);
-    op.granulepos=granule_pos;
-
-    granule_pos+=1024;
-
-    for(j=0;j<len;j++)data[inptr++]=i+j;
-
-    /* submit the test packet */
-    ogg_stream_packetin(&os_en,&op);
-
-    /* retrieve any finished pages */
-    {
-      ogg_page og;
-
-      while(ogg_stream_pageout(&os_en,&og)){
-	/* We have a page.  Check it carefully */
-
-	fprintf(stderr,"%ld, ",pageno);
-
-	if(headers[pageno]==NULL){
-	  fprintf(stderr,"coded too many pages!\n");
-	  exit(1);
-	}
-
-	check_page(data+outptr,headers[pageno],&og);
-
-	outptr+=og.body_len;
-	pageno++;
-	if(pageskip){
-	  bosflag=1;
-	  pageskip--;
-	  deptr+=og.body_len;
-	}
-
-	/* have a complete page; submit it to sync/decode */
-
-	{
-	  ogg_page og_de;
-	  ogg_packet op_de,op_de2;
-	  char *buf=ogg_sync_buffer(&oy,og.header_len+og.body_len);
-	  char *next=buf;
-	  byteskipcount+=og.header_len;
-	  if(byteskipcount>byteskip){
-	    memcpy(next,og.header,byteskipcount-byteskip);
-	    next+=byteskipcount-byteskip;
-	    byteskipcount=byteskip;
-	  }
-
-	  byteskipcount+=og.body_len;
-	  if(byteskipcount>byteskip){
-	    memcpy(next,og.body,byteskipcount-byteskip);
-	    next+=byteskipcount-byteskip;
-	    byteskipcount=byteskip;
-	  }
-
-	  ogg_sync_wrote(&oy,next-buf);
-
-	  while(1){
-	    int ret=ogg_sync_pageout(&oy,&og_de);
-	    if(ret==0)break;
-	    if(ret<0)continue;
-	    /* got a page.  Happy happy.  Verify that it's good. */
-
-	    fprintf(stderr,"(%ld), ",pageout);
-
-	    check_page(data+deptr,headers[pageout],&og_de);
-	    deptr+=og_de.body_len;
-	    pageout++;
-
-	    /* submit it to deconstitution */
-	    ogg_stream_pagein(&os_de,&og_de);
-
-	    /* packets out? */
-	    while(ogg_stream_packetpeek(&os_de,&op_de2)>0){
-	      ogg_stream_packetpeek(&os_de,NULL);
-	      ogg_stream_packetout(&os_de,&op_de); /* just catching them all */
-
-	      /* verify peek and out match */
-	      if(memcmp(&op_de,&op_de2,sizeof(op_de))){
-		fprintf(stderr,"packetout != packetpeek! pos=%ld\n",
-			depacket);
-		exit(1);
-	      }
-
-	      /* verify the packet! */
-	      /* check data */
-	      if(memcmp(data+depacket,op_de.packet,op_de.bytes)){
-		fprintf(stderr,"packet data mismatch in decode! pos=%ld\n",
-			depacket);
-		exit(1);
-	      }
-	      /* check bos flag */
-	      if(bosflag==0 && op_de.b_o_s==0){
-		fprintf(stderr,"b_o_s flag not set on packet!\n");
-		exit(1);
-	      }
-	      if(bosflag && op_de.b_o_s){
-		fprintf(stderr,"b_o_s flag incorrectly set on packet!\n");
-		exit(1);
-	      }
-	      bosflag=1;
-	      depacket+=op_de.bytes;
-
-	      /* check eos flag */
-	      if(eosflag){
-		fprintf(stderr,"Multiple decoded packets with eos flag!\n");
-		exit(1);
-	      }
-
-	      if(op_de.e_o_s)eosflag=1;
-
-	      /* check granulepos flag */
-	      if(op_de.granulepos!=-1){
-		fprintf(stderr," granule:%ld ",(long)op_de.granulepos);
-	      }
-	    }
-	  }
-	}
-      }
-    }
-  }
-  _ogg_free(data);
-  if(headers[pageno]!=NULL){
-    fprintf(stderr,"did not write last page!\n");
-    exit(1);
-  }
-  if(headers[pageout]!=NULL){
-    fprintf(stderr,"did not decode last page!\n");
-    exit(1);
-  }
-  if(inptr!=outptr){
-    fprintf(stderr,"encoded page data incomplete!\n");
-    exit(1);
-  }
-  if(inptr!=deptr){
-    fprintf(stderr,"decoded page data incomplete!\n");
-    exit(1);
-  }
-  if(inptr!=depacket){
-    fprintf(stderr,"decoded packet data incomplete!\n");
-    exit(1);
-  }
-  if(!eosflag){
-    fprintf(stderr,"Never got a packet with EOS set!\n");
-    exit(1);
-  }
-  fprintf(stderr,"ok.\n");
-}
-
-int main(void){
-
-  ogg_stream_init(&os_en,0x04030201);
-  ogg_stream_init(&os_de,0x04030201);
-  ogg_sync_init(&oy);
-
-  /* Exercise each code path in the framing code.  Also verify that
-     the checksums are working.  */
-
-  {
-    /* 17 only */
-    const int packets[]={17, -1};
-    const int *headret[]={head1_0,NULL};
-
-    fprintf(stderr,"testing single page encoding... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  {
-    /* 17, 254, 255, 256, 500, 510, 600 byte, pad */
-    const int packets[]={17, 254, 255, 256, 500, 510, 600, -1};
-    const int *headret[]={head1_1,head2_1,NULL};
-
-    fprintf(stderr,"testing basic page encoding... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  {
-    /* nil packets; beginning,middle,end */
-    const int packets[]={0,17, 254, 255, 0, 256, 0, 500, 510, 600, 0, -1};
-    const int *headret[]={head1_2,head2_2,NULL};
-
-    fprintf(stderr,"testing basic nil packets... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  {
-    /* large initial packet */
-    const int packets[]={4345,259,255,-1};
-    const int *headret[]={head1_3,head2_3,NULL};
-
-    fprintf(stderr,"testing initial-packet lacing > 4k... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  {
-    /* continuing packet test */
-    const int packets[]={0,4345,259,255,-1};
-    const int *headret[]={head1_4,head2_4,head3_4,NULL};
-
-    fprintf(stderr,"testing single packet page span... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  /* page with the 255 segment limit */
-  {
-
-    const int packets[]={0,10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,10,
-		   10,10,10,10,10,10,10,50,-1};
-    const int *headret[]={head1_5,head2_5,head3_5,NULL};
-
-    fprintf(stderr,"testing max packet segments... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  {
-    /* packet that overspans over an entire page */
-    const int packets[]={0,100,9000,259,255,-1};
-    const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL};
-
-    fprintf(stderr,"testing very large packets... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-  {
-    /* test for the libogg 1.1.1 resync in large continuation bug
-       found by Josh Coalson)  */
-    const int packets[]={0,100,9000,259,255,-1};
-    const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL};
-
-    fprintf(stderr,"testing continuation resync in very large packets... ");
-    test_pack(packets,headret,100,2,3);
-  }
-
-  {
-    /* term only page.  why not? */
-    const int packets[]={0,100,4080,-1};
-    const int *headret[]={head1_7,head2_7,head3_7,NULL};
-
-    fprintf(stderr,"testing zero data page (1 nil packet)... ");
-    test_pack(packets,headret,0,0,0);
-  }
-
-
-
-  {
-    /* build a bunch of pages for testing */
-    unsigned char *data=_ogg_malloc(1024*1024);
-    int pl[]={0,100,4079,2956,2057,76,34,912,0,234,1000,1000,1000,300,-1};
-    int inptr=0,i,j;
-    ogg_page og[5];
-
-    ogg_stream_reset(&os_en);
-
-    for(i=0;pl[i]!=-1;i++){
-      ogg_packet op;
-      int len=pl[i];
-
-      op.packet=data+inptr;
-      op.bytes=len;
-      op.e_o_s=(pl[i+1]<0?1:0);
-      op.granulepos=(i+1)*1000;
-
-      for(j=0;j<len;j++)data[inptr++]=i+j;
-      ogg_stream_packetin(&os_en,&op);
-    }
-
-    _ogg_free(data);
-
-    /* retrieve finished pages */
-    for(i=0;i<5;i++){
-      if(ogg_stream_pageout(&os_en,&og[i])==0){
-	fprintf(stderr,"Too few pages output building sync tests!\n");
-	exit(1);
-      }
-      copy_page(&og[i]);
-    }
-
-    /* Test lost pages on pagein/packetout: no rollback */
-    {
-      ogg_page temp;
-      ogg_packet test;
-
-      fprintf(stderr,"Testing loss of pages... ");
-
-      ogg_sync_reset(&oy);
-      ogg_stream_reset(&os_de);
-      for(i=0;i<5;i++){
-	memcpy(ogg_sync_buffer(&oy,og[i].header_len),og[i].header,
-	       og[i].header_len);
-	ogg_sync_wrote(&oy,og[i].header_len);
-	memcpy(ogg_sync_buffer(&oy,og[i].body_len),og[i].body,og[i].body_len);
-	ogg_sync_wrote(&oy,og[i].body_len);
-      }
-
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-      ogg_sync_pageout(&oy,&temp);
-      /* skip */
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-
-      /* do we get the expected results/packets? */
-
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,0,0);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,100,1,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,4079,2,3000);
-      if(ogg_stream_packetout(&os_de,&test)!=-1){
-	fprintf(stderr,"Error: loss of page did not return error\n");
-	exit(1);
-      }
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,76,5,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,34,6,-1);
-      fprintf(stderr,"ok.\n");
-    }
-
-    /* Test lost pages on pagein/packetout: rollback with continuation */
-    {
-      ogg_page temp;
-      ogg_packet test;
-
-      fprintf(stderr,"Testing loss of pages (rollback required)... ");
-
-      ogg_sync_reset(&oy);
-      ogg_stream_reset(&os_de);
-      for(i=0;i<5;i++){
-	memcpy(ogg_sync_buffer(&oy,og[i].header_len),og[i].header,
-	       og[i].header_len);
-	ogg_sync_wrote(&oy,og[i].header_len);
-	memcpy(ogg_sync_buffer(&oy,og[i].body_len),og[i].body,og[i].body_len);
-	ogg_sync_wrote(&oy,og[i].body_len);
-      }
-
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-      ogg_sync_pageout(&oy,&temp);
-      /* skip */
-      ogg_sync_pageout(&oy,&temp);
-      ogg_stream_pagein(&os_de,&temp);
-
-      /* do we get the expected results/packets? */
-
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,0,0,0);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,100,1,-1);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,4079,2,3000);
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,2956,3,4000);
-      if(ogg_stream_packetout(&os_de,&test)!=-1){
-	fprintf(stderr,"Error: loss of page did not return error\n");
-	exit(1);
-      }
-      if(ogg_stream_packetout(&os_de,&test)!=1)error();
-      checkpacket(&test,300,13,14000);
-      fprintf(stderr,"ok.\n");
-    }
-
-    /* the rest only test sync */
-    {
-      ogg_page og_de;
-      /* Test fractional page inputs: incomplete capture */
-      fprintf(stderr,"Testing sync on partial inputs... ");
-      ogg_sync_reset(&oy);
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
-	     3);
-      ogg_sync_wrote(&oy,3);
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      /* Test fractional page inputs: incomplete fixed header */
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+3,
-	     20);
-      ogg_sync_wrote(&oy,20);
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      /* Test fractional page inputs: incomplete header */
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+23,
-	     5);
-      ogg_sync_wrote(&oy,5);
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      /* Test fractional page inputs: incomplete body */
-
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+28,
-	     og[1].header_len-28);
-      ogg_sync_wrote(&oy,og[1].header_len-28);
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,1000);
-      ogg_sync_wrote(&oy,1000);
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body+1000,
-	     og[1].body_len-1000);
-      ogg_sync_wrote(&oy,og[1].body_len-1000);
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
-      fprintf(stderr,"ok.\n");
-    }
-
-    /* Test fractional page inputs: page + incomplete capture */
-    {
-      ogg_page og_de;
-      fprintf(stderr,"Testing sync on 1+partial inputs... ");
-      ogg_sync_reset(&oy);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
-	     og[1].header_len);
-      ogg_sync_wrote(&oy,og[1].header_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
-	     og[1].body_len);
-      ogg_sync_wrote(&oy,og[1].body_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
-	     20);
-      ogg_sync_wrote(&oy,20);
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+20,
-	     og[1].header_len-20);
-      ogg_sync_wrote(&oy,og[1].header_len-20);
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
-	     og[1].body_len);
-      ogg_sync_wrote(&oy,og[1].body_len);
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
-      fprintf(stderr,"ok.\n");
-    }
-
-    /* Test recapture: garbage + page */
-    {
-      ogg_page og_de;
-      fprintf(stderr,"Testing search for capture... ");
-      ogg_sync_reset(&oy);
-
-      /* 'garbage' */
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
-	     og[1].body_len);
-      ogg_sync_wrote(&oy,og[1].body_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
-	     og[1].header_len);
-      ogg_sync_wrote(&oy,og[1].header_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
-	     og[1].body_len);
-      ogg_sync_wrote(&oy,og[1].body_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header,
-	     20);
-      ogg_sync_wrote(&oy,20);
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
-      memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header+20,
-	     og[2].header_len-20);
-      ogg_sync_wrote(&oy,og[2].header_len-20);
-      memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body,
-	     og[2].body_len);
-      ogg_sync_wrote(&oy,og[2].body_len);
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
-      fprintf(stderr,"ok.\n");
-    }
-
-    /* Test recapture: page + garbage + page */
-    {
-      ogg_page og_de;
-      fprintf(stderr,"Testing recapture... ");
-      ogg_sync_reset(&oy);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
-	     og[1].header_len);
-      ogg_sync_wrote(&oy,og[1].header_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
-	     og[1].body_len);
-      ogg_sync_wrote(&oy,og[1].body_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header,
-	     og[2].header_len);
-      ogg_sync_wrote(&oy,og[2].header_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header,
-	     og[2].header_len);
-      ogg_sync_wrote(&oy,og[2].header_len);
-
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
-      memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body,
-	     og[2].body_len-5);
-      ogg_sync_wrote(&oy,og[2].body_len-5);
-
-      memcpy(ogg_sync_buffer(&oy,og[3].header_len),og[3].header,
-	     og[3].header_len);
-      ogg_sync_wrote(&oy,og[3].header_len);
-
-      memcpy(ogg_sync_buffer(&oy,og[3].body_len),og[3].body,
-	     og[3].body_len);
-      ogg_sync_wrote(&oy,og[3].body_len);
-
-      if(ogg_sync_pageout(&oy,&og_de)>0)error();
-      if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
-      fprintf(stderr,"ok.\n");
-    }
-
-    /* Free page data that was previously copied */
-    {
-      for(i=0;i<5;i++){
-	free_page(&og[i]);
-      }
-    }
-  }
-
-  return(0);
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/AUTHORS b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/AUTHORS
deleted file mode 100644
index 0da1036..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Monty <monty at xiph.org>
-
-and the rest of the Xiph.org Foundation.
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/CHANGES b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/CHANGES
deleted file mode 100644
index e7d5dd3..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/CHANGES
+++ /dev/null
@@ -1,126 +0,0 @@
-libvorbis 1.3.2 (2010-11-01) -- "Xiph.Org libVorbis I 20101101 (Schaufenugget)"
-
- * vorbis: additional proofing against invalid/malicious 
-   streams in floor, residue, and bos/eos packet trimming 
-   code (see SVN for details). 
- * vorbis: Added programming documentation tree for the 
-   low-level calls
- * vorbisfile: Correct handling of serial numbers array 
-   element [0] on non-seekable streams
- * vorbisenc: Back out an [old] AoTuV HF weighting that was 
-   first enabled in 1.3.0; there are a few samples where I 
-   really don't like the effect it causes.
- * vorbis: return correct timestamp for granule positions 
-   with high bit set.
- * vorbisfile: the [undocumented] half-rate decode api made no 
-   attempt to keep the pcm offset tracking consistent in seeks. 
-   Fix and add a testing mode to seeking_example.c to torture 
-   test seeking in halfrate mode.  Also remove requirement that 
-   halfrate mode only work with seekable files.
- * vorbisfile:  Fix a chaining bug in raw_seeks where seeking 
-   out of the current link would fail due to not 
-   reinitializing the decode machinery.  
- * vorbisfile: improve seeking strategy. Reduces the 
-   necessary number of seek callbacks in an open or seek 
-   operation by well over 2/3.
-
-libvorbis 1.3.1 (2010-02-26) -- "Xiph.Org libVorbis I 20100325 (Everywhere)"
-
- * tweak + minor arithmetic fix in floor1 fit
- * revert noise norm to conservative 1.2.3 behavior pending 
-   more listening testing
-
-libvorbis 1.3.0 (2010-02-25) -- unreleased staging snapshot
-
- * Optimized surround support for 5.1 encoding at 44.1/48kHz
- * Added encoder control call to disable channel coupling
- * Correct an overflow bug in very low-bitrate encoding on 32 bit 
-   machines that caused inflated bitrates
- * Numerous API hardening, leak and build fixes 
- * Correct bug in 22kHz compand setup that could cause a crash
- * Correct bug in 16kHz codebooks that could cause unstable pure 
-   tones at high bitrates
-
-libvorbis 1.2.3 (2009-07-09) -- "Xiph.Org libVorbis I 20090709"
-
- * correct a vorbisfile bug that prevented proper playback of
-   Vorbis files where all audio in a logical stream is in a
-   single page
- * Additional decode setup hardening against malicious streams
- * Add 'OV_EXCLUDE_STATIC_CALLBACKS' define for developers who 
-   wish to avoid unused symbol warnings from the static callbacks 
-   defined in vorbisfile.h
-
-libvorbis 1.2.2 (2009-06-24) -- "Xiph.Org libVorbis I 20090624"
-
- * define VENDOR and ENCODER strings
- * seek correctly in files bigger than 2 GB (Windows)
- * fix regression from CVE-2008-1420; 1.0b1 files work again
- * mark all tables as constant to reduce memory occupation
- * additional decoder hardening against malicious streams
- * substantially reduce amount of seeking performed by Vorbisfile
- * Multichannel decode bugfix 
- * build system updates
- * minor specification clarifications/fixes
-
-libvorbis 1.2.1 (unreleased) -- "Xiph.Org libVorbis I 20080501"
-
- * Improved robustness with corrupt streams.
- * New ov_read_filter() vorbisfile call allows filtering decoded
-   audio as floats before converting to integer samples.
- * Fix an encoder bug with multichannel streams.
- * Replaced RTP payload format draft with RFC 5215.
- * Bare bones self test under 'make check'.
- * Fix a problem encoding some streams between 14 and 28 kHz.
- * Fix a numerical instability in the edge extrapolation filter.
- * Build system improvements.
- * Specification correction.
-
-libvorbis 1.2.0 (2007-07-25) -- "Xiph.Org libVorbis I 20070622"
-
- * new ov_fopen() convenience call that avoids the common
-   stdio conflicts with ov_open() and MSVC runtimes.
- * libvorbisfile now handles multiplexed streams
- * improve robustness to corrupt input streams
- * fix a minor encoder bug
- * updated RTP draft
- * build system updates
- * minor corrections to the specification
-
-libvorbis 1.1.2 (2005-11-27) -- "Xiph.Org libVorbis I 20050304"
-
- * fix a serious encoder bug with gcc 4 optimized builds
- * documentation and spec fixes
- * updated VS2003 and XCode builds
- * new draft RTP encapsulation spec
-
-libvorbis 1.1.1 (2005-06-27) -- "Xiph.Org libVorbis I 20050304"
-
- * bug fix to the bitrate management encoder interface
- * bug fix to properly set packetno field in the encoder
- * new draft RTP encapsulation spec
- * library API documentation improvements
-
-libvorbis 1.1.0 (2004-09-22) -- "Xiph.Org libVorbis I 20040629"
-
- * merges tuning improvements from Aoyumi's aoTuV with fixups
- * new managed bitrate (CBR) mode support
- * new vorbis_encoder_ctl() interface
- * extensive documentation updates
- * application/ogg mimetype is now official
- * autotools cleanup from Thomas Vander Stichele
- * SymbianOS build support from Colin Ward at CSIRO
- * various bugfixes
- * various packaging improvements
-
-libvorbis 1.0.1 (2003-11-17) -- "Xiph.Org libVorbis I 20030909"
-
- * numerous bug fixes
- * specification corrections
- * new crosslap and halfrate APIs for game use
- * packaging and build updates
-
-libvorbis 1.0.0 (2002-07-19) -- "Xiph.Org libVorbis I 20020717"
-
- * first stable release
-
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/COPYING b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/COPYING
deleted file mode 100644
index 28de72a..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/COPYING
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2002-2008 Xiph.org Foundation
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-- Neither the name of the Xiph.org Foundation nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/README b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/README
deleted file mode 100644
index 3e969e0..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/README
+++ /dev/null
@@ -1,134 +0,0 @@
-********************************************************************
-*                                                                  *
-* THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
-* USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
-* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
-* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
-*                                                                  *
-* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
-* by the Xiph.org Foundation, http://www.xiph.org/                 *
-*                                                                  *
-********************************************************************
-
-Vorbis is a general purpose audio and music encoding format
-contemporary to MPEG-4's AAC and TwinVQ, the next generation beyond
-MPEG audio layer 3. Unlike the MPEG sponsored formats (and other
-proprietary formats such as RealAudio G2 and Windows' flavor of the
-month), the Vorbis CODEC specification belongs to the public domain.
-All the technical details are published and documented, and any
-software entity may make full use of the format without license 
-fee, royalty or patent concerns.
-
-This package contains:
-
-* libvorbis, a BSD-style license software implementation of
-  the Vorbis specification by the Xiph.Org Foundation 
-  (http://www.xiph.org/) 
-
-* libvorbisfile, a BSD-style license convenience library
-  built on Vorbis designed to simplify common uses
-
-* libvorbisenc, a BSD-style license library that provides a simple,
-  programmatic encoding setup interface 
-
-* example code making use of libogg, libvorbis, libvorbisfile and
-  libvorbisenc
-
-WHAT'S HERE:
-
-This source distribution includes libvorbis and an example
-encoder/player to demonstrate use of libvorbis as well as
-documentation on the Ogg Vorbis audio coding format.
-
-You'll need libogg (distributed separately) to compile this library.
-A more comprehensive set of utilities is available in the vorbis-tools
-package.
-
-Directory:
-
-./lib  		The source for the libraries, a BSD-license implementation
-		of the public domain Ogg Vorbis audio encoding format.
-
-./include       Library API headers
-
-./debian        Rules/spec files for building Debian .deb packages
-
-./doc           Vorbis documentation
-
-./examples	Example code illustrating programmatic use of libvorbis, 
-		libvorbisfile and libvorbisenc
-
-./mac 		Codewarrior project files and build tweaks for MacOS.
-
-./macosx 	Project files for MacOS X.
-
-./win32		Win32 projects files and build automation
-
-./vq 		Internal utilities for training/building new LSP/residue 
-		and auxiliary codebooks.
-
-CONTACT:
-
-The Ogg homepage is located at 'http://www.xiph.org/ogg/'.
-Vorbis's homepage is located at 'http://www.xiph.org/vorbis/'.
-Up to date technical documents, contact information, source code and
-pre-built utilities may be found there.
-
-The user website for Ogg Vorbis software and audio is http://vorbis.com/
-
-BUILDING FROM TRUNK:
-
-Development source is under subversion revision control at 
-https://svn.xiph.org/trunk/vorbis/. You will also need the 
-newest versions of autoconf, automake, libtool and pkg-config in
-order to compile Vorbis from development source. A configure script
-is provided for you in the source tarball distributions.
-
-  [update or checkout latest source]
-  ./autogen.sh
-  make
-
-and as root if desired:
-
-  make install
-
-This will install the Vorbis libraries (static and shared) into
-/usr/local/lib, includes into /usr/local/include and API manpages
-(once we write some) into /usr/local/man.
-
-Documentation building requires xsltproc and pdfxmltex.
-
-BUILDING FROM TARBALL DISTRIBUTIONS:
-
-  ./configure
-  make
-
-and optionally (as root):
-  make install
-
-BUILDING RPMS:
-
-after normal configuring:
-
-  make dist
-  rpm -ta libvorbis-<version>.tar.gz
-
-BUILDING ON MACOS 9:
-
-Vorbis on MacOS 9 is built using Metroworks CodeWarrior.  To build it, 
-first verify that the Ogg libraries are already built following the
-instructions in the Ogg module README.  Open vorbis/mac/libvorbis.mcp,
-switch to the "Targets" pane, select everything, and make the project.
-Do the same thing to build libvorbisenc.mcp, and libvorbisfile.mcp (in
-that order).  In vorbis/mac/Output you will now have both debug and final
-versions of Vorbis shared libraries to link your projects against.
-
-To build a project using Ogg Vorbis, add access paths to your
-CodeWarrior project for the ogg/include, ogg/mac/Output,
-vorbis/include, and vorbis/mac/Output folders.  Be sure that
-"interpret DOS and Unix paths" is turned on in your project; it can
-be found in the "access paths" pane in your project settings.  Now
-simply add the shared libraries you need to your project (OggLib and
-VorbisLib at least) and #include "ogg/ogg.h" and "vorbis/codec.h"
-wherever you need to access Ogg and Vorbis functionality.
-
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/analysis.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/analysis.c
deleted file mode 100644
index 4391a44..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/analysis.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: single-block PCM analysis mode dispatch
- last mod: $Id: analysis.c 16226 2009-07-08 06:43:49Z xiphmont $
-
- ********************************************************************/
-
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "scales.h"
-#include "os.h"
-#include "misc.h"
-
-/* decides between modes, dispatches to the appropriate mapping. */
-int vorbis_analysis(vorbis_block *vb, ogg_packet *op){
-  int ret,i;
-  vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
-
-  vb->glue_bits=0;
-  vb->time_bits=0;
-  vb->floor_bits=0;
-  vb->res_bits=0;
-
-  /* first things first.  Make sure encode is ready */
-  for(i=0;i<PACKETBLOBS;i++)
-    oggpack_reset(vbi->packetblob[i]);
-
-  /* we only have one mapping type (0), and we let the mapping code
-     itself figure out what soft mode to use.  This allows easier
-     bitrate management */
-
-  if((ret=_mapping_P[0]->forward(vb)))
-    return(ret);
-
-  if(op){
-    if(vorbis_bitrate_managed(vb))
-      /* The app is using a bitmanaged mode... but not using the
-         bitrate management interface. */
-      return(OV_EINVAL);
-
-    op->packet=oggpack_get_buffer(&vb->opb);
-    op->bytes=oggpack_bytes(&vb->opb);
-    op->b_o_s=0;
-    op->e_o_s=vb->eofflag;
-    op->granulepos=vb->granulepos;
-    op->packetno=vb->sequence; /* for sake of completeness */
-  }
-  return(0);
-}
-
-#ifdef ANALYSIS
-int analysis_noisy=1;
-
-/* there was no great place to put this.... */
-void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,ogg_int64_t off){
-  int j;
-  FILE *of;
-  char buffer[80];
-
-  sprintf(buffer,"%s_%d.m",base,i);
-  of=fopen(buffer,"w");
-
-  if(!of)perror("failed to open data dump file");
-
-  for(j=0;j<n;j++){
-    if(bark){
-      float b=toBARK((4000.f*j/n)+.25);
-      fprintf(of,"%f ",b);
-    }else
-      if(off!=0)
-        fprintf(of,"%f ",(double)(j+off)/8000.);
-      else
-        fprintf(of,"%f ",(double)j);
-
-    if(dB){
-      float val;
-      if(v[j]==0.)
-        val=-140.;
-      else
-        val=todB(v+j);
-      fprintf(of,"%f\n",val);
-    }else{
-      fprintf(of,"%f\n",v[j]);
-    }
-  }
-  fclose(of);
-}
-
-void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
-                      ogg_int64_t off){
-  if(analysis_noisy)_analysis_output_always(base,i,v,n,bark,dB,off);
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h
deleted file mode 100644
index 9c96e17..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/backends.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: libvorbis backend and mapping structures; needed for
-           static mode headers
- last mod: $Id: backends.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-/* this is exposed up here because we need it for static modes.
-   Lookups for each backend aren't exposed because there's no reason
-   to do so */
-
-#ifndef _vorbis_backend_h_
-#define _vorbis_backend_h_
-
-#include "codec_internal.h"
-
-/* this would all be simpler/shorter with templates, but.... */
-/* Floor backend generic *****************************************/
-typedef struct{
-  void                   (*pack)  (vorbis_info_floor *,oggpack_buffer *);
-  vorbis_info_floor     *(*unpack)(vorbis_info *,oggpack_buffer *);
-  vorbis_look_floor     *(*look)  (vorbis_dsp_state *,vorbis_info_floor *);
-  void (*free_info) (vorbis_info_floor *);
-  void (*free_look) (vorbis_look_floor *);
-  void *(*inverse1)  (struct vorbis_block *,vorbis_look_floor *);
-  int   (*inverse2)  (struct vorbis_block *,vorbis_look_floor *,
-                     void *buffer,float *);
-} vorbis_func_floor;
-
-typedef struct{
-  int   order;
-  long  rate;
-  long  barkmap;
-
-  int   ampbits;
-  int   ampdB;
-
-  int   numbooks; /* <= 16 */
-  int   books[16];
-
-  float lessthan;     /* encode-only config setting hacks for libvorbis */
-  float greaterthan;  /* encode-only config setting hacks for libvorbis */
-
-} vorbis_info_floor0;
-
-
-#define VIF_POSIT 63
-#define VIF_CLASS 16
-#define VIF_PARTS 31
-typedef struct{
-  int   partitions;                /* 0 to 31 */
-  int   partitionclass[VIF_PARTS]; /* 0 to 15 */
-
-  int   class_dim[VIF_CLASS];        /* 1 to 8 */
-  int   class_subs[VIF_CLASS];       /* 0,1,2,3 (bits: 1<<n poss) */
-  int   class_book[VIF_CLASS];       /* subs ^ dim entries */
-  int   class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */
-
-
-  int   mult;                      /* 1 2 3 or 4 */
-  int   postlist[VIF_POSIT+2];    /* first two implicit */
-
-
-  /* encode side analysis parameters */
-  float maxover;
-  float maxunder;
-  float maxerr;
-
-  float twofitweight;
-  float twofitatten;
-
-  int   n;
-
-} vorbis_info_floor1;
-
-/* Residue backend generic *****************************************/
-typedef struct{
-  void                 (*pack)  (vorbis_info_residue *,oggpack_buffer *);
-  vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *);
-  vorbis_look_residue *(*look)  (vorbis_dsp_state *,
-                                 vorbis_info_residue *);
-  void (*free_info)    (vorbis_info_residue *);
-  void (*free_look)    (vorbis_look_residue *);
-  long **(*classx)      (struct vorbis_block *,vorbis_look_residue *,
-			int **,int *,int);
-  int  (*forward)      (oggpack_buffer *,struct vorbis_block *,
-                        vorbis_look_residue *,
-                        int **,int *,int,long **,int);
-  int  (*inverse)      (struct vorbis_block *,vorbis_look_residue *,
-                        float **,int *,int);
-} vorbis_func_residue;
-
-typedef struct vorbis_info_residue0{
-/* block-partitioned VQ coded straight residue */
-  long  begin;
-  long  end;
-
-  /* first stage (lossless partitioning) */
-  int    grouping;         /* group n vectors per partition */
-  int    partitions;       /* possible codebooks for a partition */
-  int    partvals;         /* partitions ^ groupbook dim */
-  int    groupbook;        /* huffbook for partitioning */
-  int    secondstages[64]; /* expanded out to pointers in lookup */
-  int    booklist[512];    /* list of second stage books */
-
-  /*const*/ int classmetric1[64];
-  /*const*/ int classmetric2[64];
-} vorbis_info_residue0;
-
-/* Mapping backend generic *****************************************/
-typedef struct{
-  void                 (*pack)  (vorbis_info *,vorbis_info_mapping *,
-                                 oggpack_buffer *);
-  vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *);
-  void (*free_info)    (vorbis_info_mapping *);
-  int  (*forward)      (struct vorbis_block *vb);
-  int  (*inverse)      (struct vorbis_block *vb,vorbis_info_mapping *);
-} vorbis_func_mapping;
-
-typedef struct vorbis_info_mapping0{
-  int   submaps;  /* <= 16 */
-  int   chmuxlist[256];   /* up to 256 channels in a Vorbis stream */
-
-  int   floorsubmap[16];   /* [mux] submap to floors */
-  int   residuesubmap[16]; /* [mux] submap to residue */
-
-  int   coupling_steps;
-  int   coupling_mag[256];
-  int   coupling_ang[256];
-
-} vorbis_info_mapping0;
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.c
deleted file mode 100644
index 6d9a386..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: bitrate tracking and management
- last mod: $Id: bitrate.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "os.h"
-#include "misc.h"
-#include "bitrate.h"
-
-/* compute bitrate tracking setup  */
-void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){
-  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
-  bitrate_manager_info *bi=&ci->bi;
-
-  memset(bm,0,sizeof(*bm));
-
-  if(bi && (bi->reservoir_bits>0)){
-    long ratesamples=vi->rate;
-    int  halfsamples=ci->blocksizes[0]>>1;
-
-    bm->short_per_long=ci->blocksizes[1]/ci->blocksizes[0];
-    bm->managed=1;
-
-    bm->avg_bitsper= (int) rint(1.*bi->avg_rate*halfsamples/ratesamples);
-    bm->min_bitsper= (int) rint(1.*bi->min_rate*halfsamples/ratesamples);
-    bm->max_bitsper= (int) rint(1.*bi->max_rate*halfsamples/ratesamples);
-
-    bm->avgfloat=PACKETBLOBS/2;
-
-    /* not a necessary fix, but one that leads to a more balanced
-       typical initialization */
-    {
-      long desired_fill = (long) (bi->reservoir_bits*bi->reservoir_bias);
-      bm->minmax_reservoir=desired_fill;
-      bm->avg_reservoir=desired_fill;
-    }
-
-  }
-}
-
-void vorbis_bitrate_clear(bitrate_manager_state *bm){
-  memset(bm,0,sizeof(*bm));
-  return;
-}
-
-int vorbis_bitrate_managed(vorbis_block *vb){
-  vorbis_dsp_state      *vd=vb->vd;
-  private_state         *b=(private_state*)vd->backend_state;
-  bitrate_manager_state *bm=&b->bms;
-
-  if(bm && bm->managed)return(1);
-  return(0);
-}
-
-/* finish taking in the block we just processed */
-int vorbis_bitrate_addblock(vorbis_block *vb){
-  vorbis_block_internal *vbi=(vorbis_block_internal*)vb->internal;
-  vorbis_dsp_state      *vd=vb->vd;
-  private_state         *b=(private_state*)vd->backend_state;
-  bitrate_manager_state *bm=&b->bms;
-  vorbis_info           *vi=vd->vi;
-  codec_setup_info      *ci=(codec_setup_info*)vi->codec_setup;
-  bitrate_manager_info  *bi=&ci->bi;
-
-  int  choice = (int) rint(bm->avgfloat);
-  long this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-  long min_target_bits=(vb->W?bm->min_bitsper*bm->short_per_long:bm->min_bitsper);
-  long max_target_bits=(vb->W?bm->max_bitsper*bm->short_per_long:bm->max_bitsper);
-  int  samples=ci->blocksizes[vb->W]>>1;
-  long desired_fill = (long) (bi->reservoir_bits*bi->reservoir_bias);
-  if(!bm->managed){
-    /* not a bitrate managed stream, but for API simplicity, we'll
-       buffer the packet to keep the code path clean */
-
-    if(bm->vb)return(-1); /* one has been submitted without
-                             being claimed */
-    bm->vb=vb;
-    return(0);
-  }
-
-  bm->vb=vb;
-
-  /* look ahead for avg floater */
-  if(bm->avg_bitsper>0){
-    double slew=0.;
-    long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);
-    double slewlimit= 15./bi->slew_damp;
-
-    /* choosing a new floater:
-       if we're over target, we slew down
-       if we're under target, we slew up
-
-       choose slew as follows: look through packetblobs of this frame
-       and set slew as the first in the appropriate direction that
-       gives us the slew we want.  This may mean no slew if delta is
-       already favorable.
-
-       Then limit slew to slew max */
-
-    if(bm->avg_reservoir+(this_bits-avg_target_bits)>desired_fill){
-      while(choice>0 && this_bits>avg_target_bits &&
-            bm->avg_reservoir+(this_bits-avg_target_bits)>desired_fill){
-        choice--;
-        this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-      }
-    }else if(bm->avg_reservoir+(this_bits-avg_target_bits)<desired_fill){
-      while(choice+1<PACKETBLOBS && this_bits<avg_target_bits &&
-            bm->avg_reservoir+(this_bits-avg_target_bits)<desired_fill){
-        choice++;
-        this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-      }
-    }
-
-    slew=rint(choice-bm->avgfloat)/samples*vi->rate;
-    if(slew<-slewlimit)slew=-slewlimit;
-    if(slew>slewlimit)slew=slewlimit;
-    choice = (int) rint(bm->avgfloat+= slew/vi->rate*samples);
-    this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-  }
-
-
-
-  /* enforce min(if used) on the current floater (if used) */
-  if(bm->min_bitsper>0){
-    /* do we need to force the bitrate up? */
-    if(this_bits<min_target_bits){
-      while(bm->minmax_reservoir-(min_target_bits-this_bits)<0){
-        choice++;
-        if(choice>=PACKETBLOBS)break;
-        this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-      }
-    }
-  }
-
-  /* enforce max (if used) on the current floater (if used) */
-  if(bm->max_bitsper>0){
-    /* do we need to force the bitrate down? */
-    if(this_bits>max_target_bits){
-      while(bm->minmax_reservoir+(this_bits-max_target_bits)>bi->reservoir_bits){
-        choice--;
-        if(choice<0)break;
-        this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-      }
-    }
-  }
-
-  /* Choice of packetblobs now made based on floater, and min/max
-     requirements. Now boundary check extreme choices */
-
-  if(choice<0){
-    /* choosing a smaller packetblob is insufficient to trim bitrate.
-       frame will need to be truncated */
-    long maxsize=(max_target_bits+(bi->reservoir_bits-bm->minmax_reservoir))/8;
-    bm->choice=choice=0;
-
-    if(oggpack_bytes(vbi->packetblob[choice])>maxsize){
-
-      oggpack_writetrunc(vbi->packetblob[choice],maxsize*8);
-      this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-    }
-  }else{
-    long minsize=(min_target_bits-bm->minmax_reservoir+7)/8;
-    if(choice>=PACKETBLOBS)
-      choice=PACKETBLOBS-1;
-
-    bm->choice=choice;
-
-    /* prop up bitrate according to demand. pad this frame out with zeroes */
-    minsize-=oggpack_bytes(vbi->packetblob[choice]);
-    while(minsize-->0)oggpack_write(vbi->packetblob[choice],0,8);
-    this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-
-  }
-
-  /* now we have the final packet and the final packet size.  Update statistics */
-  /* min and max reservoir */
-  if(bm->min_bitsper>0 || bm->max_bitsper>0){
-
-    if(max_target_bits>0 && this_bits>max_target_bits){
-      bm->minmax_reservoir+=(this_bits-max_target_bits);
-    }else if(min_target_bits>0 && this_bits<min_target_bits){
-      bm->minmax_reservoir+=(this_bits-min_target_bits);
-    }else{
-      /* inbetween; we want to take reservoir toward but not past desired_fill */
-      if(bm->minmax_reservoir>desired_fill){
-        if(max_target_bits>0){ /* logical bulletproofing against initialization state */
-          bm->minmax_reservoir+=(this_bits-max_target_bits);
-          if(bm->minmax_reservoir<desired_fill)bm->minmax_reservoir=desired_fill;
-        }else{
-          bm->minmax_reservoir=desired_fill;
-        }
-      }else{
-        if(min_target_bits>0){ /* logical bulletproofing against initialization state */
-          bm->minmax_reservoir+=(this_bits-min_target_bits);
-          if(bm->minmax_reservoir>desired_fill)bm->minmax_reservoir=desired_fill;
-        }else{
-          bm->minmax_reservoir=desired_fill;
-        }
-      }
-    }
-  }
-
-  /* avg reservoir */
-  if(bm->avg_bitsper>0){
-    long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);
-    bm->avg_reservoir+=this_bits-avg_target_bits;
-  }
-
-  return(0);
-}
-
-int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){
-  private_state         *b=(private_state*)vd->backend_state;
-  bitrate_manager_state *bm=&b->bms;
-  vorbis_block          *vb=bm->vb;
-  int                    choice=PACKETBLOBS/2;
-  if(!vb)return 0;
-
-  if(op){
-    vorbis_block_internal *vbi=(vorbis_block_internal*)vb->internal;
-
-    if(vorbis_bitrate_managed(vb))
-      choice=bm->choice;
-
-    op->packet=oggpack_get_buffer(vbi->packetblob[choice]);
-    op->bytes=oggpack_bytes(vbi->packetblob[choice]);
-    op->b_o_s=0;
-    op->e_o_s=vb->eofflag;
-    op->granulepos=vb->granulepos;
-    op->packetno=vb->sequence; /* for sake of completeness */
-  }
-
-  bm->vb=0;
-  return(1);
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h
deleted file mode 100644
index c2dd37d..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/bitrate.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: bitrate tracking and management
- last mod: $Id: bitrate.h 13293 2007-07-24 00:09:47Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_BITRATE_H_
-#define _V_BITRATE_H_
-
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "os.h"
-
-/* encode side bitrate tracking */
-typedef struct bitrate_manager_state {
-  int            managed;
-
-  long           avg_reservoir;
-  long           minmax_reservoir;
-  long           avg_bitsper;
-  long           min_bitsper;
-  long           max_bitsper;
-
-  long           short_per_long;
-  double         avgfloat;
-
-  vorbis_block  *vb;
-  int            choice;
-} bitrate_manager_state;
-
-typedef struct bitrate_manager_info{
-  long           avg_rate;
-  long           min_rate;
-  long           max_rate;
-  long           reservoir_bits;
-  double         reservoir_bias;
-
-  double         slew_damp;
-
-} bitrate_manager_info;
-
-extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs);
-extern void vorbis_bitrate_clear(bitrate_manager_state *bs);
-extern int vorbis_bitrate_managed(vorbis_block *vb);
-extern int vorbis_bitrate_addblock(vorbis_block *vb);
-extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c
deleted file mode 100644
index ba1acae..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/block.c
+++ /dev/null
@@ -1,1033 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: PCM data vector blocking, windowing and dis/reassembly
- last mod: $Id: block.c 17561 2010-10-23 10:34:24Z xiphmont $
-
- Handle windowing, overlap-add, etc of the PCM vectors.  This is made
- more amusing by Vorbis' current two allowed block sizes.
-
- ********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-
-#include "window.h"
-#include "mdct.h"
-#include "lpc.h"
-#include "registry.h"
-#include "misc.h"
-
-/* pcm accumulator examples (not exhaustive):
-
- <-------------- lW ---------------->
-                   <--------------- W ---------------->
-:            .....|.....       _______________         |
-:        .'''     |     '''_---      |       |\        |
-:.....'''         |_____--- '''......|       | \_______|
-:.................|__________________|_______|__|______|
-                  |<------ Sl ------>|      > Sr <     |endW
-                  |beginSl           |endSl  |  |endSr
-                  |beginW            |endlW  |beginSr
-
-
-                      |< lW >|
-                   <--------------- W ---------------->
-                  |   |  ..  ______________            |
-                  |   | '  `/        |     ---_        |
-                  |___.'___/`.       |         ---_____|
-                  |_______|__|_______|_________________|
-                  |      >|Sl|<      |<------ Sr ----->|endW
-                  |       |  |endSl  |beginSr          |endSr
-                  |beginW |  |endlW
-                  mult[0] |beginSl                     mult[n]
-
- <-------------- lW ----------------->
-                          |<--W-->|
-:            ..............  ___  |   |
-:        .'''             |`/   \ |   |
-:.....'''                 |/`....\|...|
-:.........................|___|___|___|
-                          |Sl |Sr |endW
-                          |   |   |endSr
-                          |   |beginSr
-                          |   |endSl
-                          |beginSl
-                          |beginW
-*/
-
-/* block abstraction setup *********************************************/
-
-#ifndef WORD_ALIGN
-#define WORD_ALIGN 8
-#endif
-
-int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){
-  int i;
-  memset(vb,0,sizeof(*vb));
-  vb->vd=v;
-  vb->localalloc=0;
-  vb->localstore=NULL;
-  if(v->analysisp){
-    vorbis_block_internal *vbi=(vorbis_block_internal*)
-      (vb->internal=(vorbis_block_internal*)_ogg_calloc(1,sizeof(vorbis_block_internal)));
-    vbi->ampmax=-9999;
-
-    for(i=0;i<PACKETBLOBS;i++){
-      if(i==PACKETBLOBS/2){
-        vbi->packetblob[i]=&vb->opb;
-      }else{
-        vbi->packetblob[i]=
-	  (oggpack_buffer*) _ogg_calloc(1,sizeof(oggpack_buffer));
-      }
-      oggpack_writeinit(vbi->packetblob[i]);
-    }
-  }
-
-  return(0);
-}
-
-void *_vorbis_block_alloc(vorbis_block *vb,long bytes){
-  bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1);
-  if(bytes+vb->localtop>vb->localalloc){
-    /* can't just _ogg_realloc... there are outstanding pointers */
-    if(vb->localstore){
-      struct alloc_chain *link=(struct alloc_chain*)_ogg_malloc(sizeof(*link));
-      vb->totaluse+=vb->localtop;
-      link->next=vb->reap;
-      link->ptr=vb->localstore;
-      vb->reap=link;
-    }
-    /* highly conservative */
-    vb->localalloc=bytes;
-    vb->localstore=_ogg_malloc(vb->localalloc);
-    vb->localtop=0;
-  }
-  {
-    void *ret=(void *)(((char *)vb->localstore)+vb->localtop);
-    vb->localtop+=bytes;
-    return ret;
-  }
-}
-
-/* reap the chain, pull the ripcord */
-void _vorbis_block_ripcord(vorbis_block *vb){
-  /* reap the chain */
-  struct alloc_chain *reap=vb->reap;
-  while(reap){
-    struct alloc_chain *next=reap->next;
-    _ogg_free(reap->ptr);
-    memset(reap,0,sizeof(*reap));
-    _ogg_free(reap);
-    reap=next;
-  }
-  /* consolidate storage */
-  if(vb->totaluse){
-    vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc);
-    vb->localalloc+=vb->totaluse;
-    vb->totaluse=0;
-  }
-
-  /* pull the ripcord */
-  vb->localtop=0;
-  vb->reap=NULL;
-}
-
-int vorbis_block_clear(vorbis_block *vb){
-  int i;
-  vorbis_block_internal *vbi=(vorbis_block_internal*)vb->internal;
-
-  _vorbis_block_ripcord(vb);
-  if(vb->localstore)_ogg_free(vb->localstore);
-
-  if(vbi){
-    for(i=0;i<PACKETBLOBS;i++){
-      oggpack_writeclear(vbi->packetblob[i]);
-      if(i!=PACKETBLOBS/2)_ogg_free(vbi->packetblob[i]);
-    }
-    _ogg_free(vbi);
-  }
-  memset(vb,0,sizeof(*vb));
-  return(0);
-}
-
-/* Analysis side code, but directly related to blocking.  Thus it's
-   here and not in analysis.c (which is for analysis transforms only).
-   The init is here because some of it is shared */
-
-static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  private_state *b=NULL;
-  int hs;
-
-  if(ci==NULL) return 1;
-  hs=ci->halfrate_flag;
-
-  memset(v,0,sizeof(*v));
-  b=(private_state*) (v->backend_state=(private_state*)_ogg_calloc(1,sizeof(*b)));
-
-  v->vi=vi;
-  b->modebits=ilog2(ci->modes);
-
-  b->transform[0]=(vorbis_look_transform**)_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[0]));
-  b->transform[1]=(vorbis_look_transform**)_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[1]));
-
-  /* MDCT is tranform 0 */
-
-  b->transform[0][0]=_ogg_calloc(1,sizeof(mdct_lookup));
-  b->transform[1][0]=_ogg_calloc(1,sizeof(mdct_lookup));
-  mdct_init((mdct_lookup*)b->transform[0][0],ci->blocksizes[0]>>hs);
-  mdct_init((mdct_lookup*)b->transform[1][0],ci->blocksizes[1]>>hs);
-
-  /* Vorbis I uses only window type 0 */
-  b->window[0]=ilog2(ci->blocksizes[0])-6;
-  b->window[1]=ilog2(ci->blocksizes[1])-6;
-
-  if(encp){ /* encode/decode differ here */
-
-    /* analysis always needs an fft */
-    drft_init(&b->fft_look[0],ci->blocksizes[0]);
-    drft_init(&b->fft_look[1],ci->blocksizes[1]);
-
-    /* finish the codebooks */
-    if(!ci->fullbooks){
-      ci->fullbooks=(codebook*) _ogg_calloc(ci->books,sizeof(*ci->fullbooks));
-      for(int i=0;i<ci->books;i++)
-        vorbis_book_init_encode(ci->fullbooks+i,ci->book_param[i]);
-    }
-
-    b->psy=(vorbis_look_psy*)_ogg_calloc(ci->psys,sizeof(*b->psy));
-    for(int i=0;i<ci->psys;i++){
-      _vp_psy_init(b->psy+i,
-                   ci->psy_param[i],
-                   &ci->psy_g_param,
-                   ci->blocksizes[ci->psy_param[i]->blockflag]/2,
-                   vi->rate);
-    }
-
-    v->analysisp=1;
-  }else{
-    /* finish the codebooks */
-    if(!ci->fullbooks){
-      ci->fullbooks=(codebook*) _ogg_calloc(ci->books,sizeof(*ci->fullbooks));
-      for(int i=0;i<ci->books;i++){
-        if(ci->book_param[i]==NULL)
-          goto abort_books;
-        if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]))
-          goto abort_books;
-        /* decode codebooks are now standalone after init */
-        vorbis_staticbook_destroy(ci->book_param[i]);
-        ci->book_param[i]=NULL;
-      }
-    }
-  }
-
-  /* initialize the storage vectors. blocksize[1] is small for encode,
-     but the correct size for decode */
-  v->pcm_storage=ci->blocksizes[1];
-  v->pcm=(float**)_ogg_malloc(vi->channels*sizeof(*v->pcm));
-  v->pcmret=(float**)_ogg_malloc(vi->channels*sizeof(*v->pcmret));
-  {
-    int i;
-    for(i=0;i<vi->channels;i++)
-      v->pcm[i]=(float*)_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i]));
-  }
-
-  /* all 1 (large block) or 0 (small block) */
-  /* explicitly set for the sake of clarity */
-  v->lW=0; /* previous window size */
-  v->W=0;  /* current window size */
-
-  /* all vector indexes */
-  v->centerW=ci->blocksizes[1]/2;
-
-  v->pcm_current=v->centerW;
-
-  /* initialize all the backend lookups */
-  b->flr=(vorbis_look_floor**)_ogg_calloc(ci->floors,sizeof(*b->flr));
-  b->residue=(vorbis_look_residue**)_ogg_calloc(ci->residues,sizeof(*b->residue));
-
-  for(int i=0;i<ci->floors;i++)
-    b->flr[i]=_floor_P[ci->floor_type[i]]->
-      look(v,ci->floor_param[i]);
-
-  for(int i=0;i<ci->residues;i++)
-    b->residue[i]=_residue_P[ci->residue_type[i]]->
-      look(v,ci->residue_param[i]);
-
-  return 0;
- abort_books:
-  for(int i=0;i<ci->books;i++){
-    if(ci->book_param[i]!=NULL){
-      vorbis_staticbook_destroy(ci->book_param[i]);
-      ci->book_param[i]=NULL;
-    }
-  }
-  vorbis_dsp_clear(v);
-  return -1;
-}
-
-/* arbitrary settings and spec-mandated numbers get filled in here */
-int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi){
-  private_state *b=NULL;
-
-  if(_vds_shared_init(v,vi,1))return 1;
-  b=(private_state*)v->backend_state;
-  b->psy_g_look=_vp_global_look(vi);
-
-  /* Initialize the envelope state storage */
-  b->ve=(envelope_lookup*)_ogg_calloc(1,sizeof(*b->ve));
-  _ve_envelope_init(b->ve,vi);
-
-  vorbis_bitrate_init(vi,&b->bms);
-
-  /* compressed audio packets start after the headers
-     with sequence number 3 */
-  v->sequence=3;
-
-  return(0);
-}
-
-void vorbis_dsp_clear(vorbis_dsp_state *v){
-  int i;
-  if(v){
-    vorbis_info *vi=v->vi;
-    codec_setup_info *ci=(codec_setup_info*)(vi?vi->codec_setup:NULL);
-    private_state *b=(private_state*)v->backend_state;
-
-    if(b){
-
-      if(b->ve){
-        _ve_envelope_clear(b->ve);
-        _ogg_free(b->ve);
-      }
-
-      if(b->transform[0]){
-	mdct_clear((mdct_lookup*) b->transform[0][0]);
-        _ogg_free(b->transform[0][0]);
-        _ogg_free(b->transform[0]);
-      }
-      if(b->transform[1]){
-	mdct_clear((mdct_lookup*) b->transform[1][0]);
-        _ogg_free(b->transform[1][0]);
-        _ogg_free(b->transform[1]);
-      }
-
-      if(b->flr){
-        if(ci)
-          for(i=0;i<ci->floors;i++)
-            _floor_P[ci->floor_type[i]]->
-              free_look(b->flr[i]);
-        _ogg_free(b->flr);
-      }
-      if(b->residue){
-        if(ci)
-          for(i=0;i<ci->residues;i++)
-            _residue_P[ci->residue_type[i]]->
-              free_look(b->residue[i]);
-        _ogg_free(b->residue);
-      }
-      if(b->psy){
-        if(ci)
-          for(i=0;i<ci->psys;i++)
-            _vp_psy_clear(b->psy+i);
-        _ogg_free(b->psy);
-      }
-
-      if(b->psy_g_look)_vp_global_free(b->psy_g_look);
-      vorbis_bitrate_clear(&b->bms);
-
-      drft_clear(&b->fft_look[0]);
-      drft_clear(&b->fft_look[1]);
-
-    }
-
-    if(v->pcm){
-      if(vi)
-        for(i=0;i<vi->channels;i++)
-          if(v->pcm[i])_ogg_free(v->pcm[i]);
-      _ogg_free(v->pcm);
-      if(v->pcmret)_ogg_free(v->pcmret);
-    }
-
-    if(b){
-      /* free header, header1, header2 */
-      if(b->header)_ogg_free(b->header);
-      if(b->header1)_ogg_free(b->header1);
-      if(b->header2)_ogg_free(b->header2);
-      _ogg_free(b);
-    }
-
-    memset(v,0,sizeof(*v));
-  }
-}
-
-float **vorbis_analysis_buffer(vorbis_dsp_state *v, int vals){
-  int i;
-  vorbis_info *vi=v->vi;
-  private_state *b=(private_state*)v->backend_state;
-
-  /* free header, header1, header2 */
-  if(b->header)_ogg_free(b->header);b->header=NULL;
-  if(b->header1)_ogg_free(b->header1);b->header1=NULL;
-  if(b->header2)_ogg_free(b->header2);b->header2=NULL;
-
-  /* Do we have enough storage space for the requested buffer? If not,
-     expand the PCM (and envelope) storage */
-
-  if(v->pcm_current+vals>=v->pcm_storage){
-    v->pcm_storage=v->pcm_current+vals*2;
-
-    for(i=0;i<vi->channels;i++){
-      v->pcm[i]=(float*)_ogg_realloc(v->pcm[i],v->pcm_storage*sizeof(*v->pcm[i]));
-    }
-  }
-
-  for(i=0;i<vi->channels;i++)
-    v->pcmret[i]=v->pcm[i]+v->pcm_current;
-
-  return(v->pcmret);
-}
-
-static void _preextrapolate_helper(vorbis_dsp_state *v){
-  int i;
-  int order=32;
-  float *lpc=(float*)alloca(order*sizeof(*lpc));
-  float *work=(float*)alloca(v->pcm_current*sizeof(*work));
-  long j;
-  v->preextrapolate=1;
-
-  if(v->pcm_current-v->centerW>order*2){ /* safety */
-    for(i=0;i<v->vi->channels;i++){
-      /* need to run the extrapolation in reverse! */
-      for(j=0;j<v->pcm_current;j++)
-        work[j]=v->pcm[i][v->pcm_current-j-1];
-
-      /* prime as above */
-      vorbis_lpc_from_data(work,lpc,v->pcm_current-v->centerW,order);
-
-#if 0
-      if(v->vi->channels==2){
-        if(i==0)
-          _analysis_output("predataL",0,work,v->pcm_current-v->centerW,0,0,0);
-        else
-          _analysis_output("predataR",0,work,v->pcm_current-v->centerW,0,0,0);
-      }else{
-        _analysis_output("predata",0,work,v->pcm_current-v->centerW,0,0,0);
-      }
-#endif
-
-      /* run the predictor filter */
-      vorbis_lpc_predict(lpc,work+v->pcm_current-v->centerW-order,
-                         order,
-                         work+v->pcm_current-v->centerW,
-                         v->centerW);
-
-      for(j=0;j<v->pcm_current;j++)
-        v->pcm[i][v->pcm_current-j-1]=work[j];
-
-    }
-  }
-}
-
-
-/* call with val<=0 to set eof */
-
-int vorbis_analysis_wrote(vorbis_dsp_state *v, int vals){
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-
-  if(vals<=0){
-    int order=32;
-    int i;
-    float *lpc=(float*) alloca(order*sizeof(*lpc));
-
-    /* if it wasn't done earlier (very short sample) */
-    if(!v->preextrapolate)
-      _preextrapolate_helper(v);
-
-    /* We're encoding the end of the stream.  Just make sure we have
-       [at least] a few full blocks of zeroes at the end. */
-    /* actually, we don't want zeroes; that could drop a large
-       amplitude off a cliff, creating spread spectrum noise that will
-       suck to encode.  Extrapolate for the sake of cleanliness. */
-
-    vorbis_analysis_buffer(v,ci->blocksizes[1]*3);
-    v->eofflag=v->pcm_current;
-    v->pcm_current+=ci->blocksizes[1]*3;
-
-    for(i=0;i<vi->channels;i++){
-      if(v->eofflag>order*2){
-        /* extrapolate with LPC to fill in */
-        long n;
-
-        /* make a predictor filter */
-        n=v->eofflag;
-        if(n>ci->blocksizes[1])n=ci->blocksizes[1];
-        vorbis_lpc_from_data(v->pcm[i]+v->eofflag-n,lpc,n,order);
-
-        /* run the predictor filter */
-        vorbis_lpc_predict(lpc,v->pcm[i]+v->eofflag-order,order,
-                           v->pcm[i]+v->eofflag,v->pcm_current-v->eofflag);
-      }else{
-        /* not enough data to extrapolate (unlikely to happen due to
-           guarding the overlap, but bulletproof in case that
-           assumtion goes away). zeroes will do. */
-        memset(v->pcm[i]+v->eofflag,0,
-               (v->pcm_current-v->eofflag)*sizeof(*v->pcm[i]));
-
-      }
-    }
-  }else{
-
-    if(v->pcm_current+vals>v->pcm_storage)
-      return(OV_EINVAL);
-
-    v->pcm_current+=vals;
-
-    /* we may want to reverse extrapolate the beginning of a stream
-       too... in case we're beginning on a cliff! */
-    /* clumsy, but simple.  It only runs once, so simple is good. */
-    if(!v->preextrapolate && v->pcm_current-v->centerW>ci->blocksizes[1])
-      _preextrapolate_helper(v);
-
-  }
-  return(0);
-}
-
-/* do the deltas, envelope shaping, pre-echo and determine the size of
-   the next block on which to continue analysis */
-int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb){
-  int i;
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  private_state *b=(private_state*)v->backend_state;
-  vorbis_look_psy_global *g=b->psy_g_look;
-  long beginW=v->centerW-ci->blocksizes[v->W]/2,centerNext;
-  vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
-
-  /* check to see if we're started... */
-  if(!v->preextrapolate)return(0);
-
-  /* check to see if we're done... */
-  if(v->eofflag==-1)return(0);
-
-  /* By our invariant, we have lW, W and centerW set.  Search for
-     the next boundary so we can determine nW (the next window size)
-     which lets us compute the shape of the current block's window */
-
-  /* we do an envelope search even on a single blocksize; we may still
-     be throwing more bits at impulses, and envelope search handles
-     marking impulses too. */
-  {
-    long bp=_ve_envelope_search(v);
-    if(bp==-1){
-
-      if(v->eofflag==0)return(0); /* not enough data currently to search for a
-                                     full long block */
-      v->nW=0;
-    }else{
-
-      if(ci->blocksizes[0]==ci->blocksizes[1])
-        v->nW=0;
-      else
-        v->nW=bp;
-    }
-  }
-
-  centerNext=v->centerW+ci->blocksizes[v->W]/4+ci->blocksizes[v->nW]/4;
-
-  {
-    /* center of next block + next block maximum right side. */
-
-    long blockbound=centerNext+ci->blocksizes[v->nW]/2;
-    if(v->pcm_current<blockbound)return(0); /* not enough data yet;
-                                               although this check is
-                                               less strict that the
-                                               _ve_envelope_search,
-                                               the search is not run
-                                               if we only use one
-                                               block size */
-
-
-  }
-
-  /* fill in the block.  Note that for a short window, lW and nW are *short*
-     regardless of actual settings in the stream */
-
-  _vorbis_block_ripcord(vb);
-  vb->lW=v->lW;
-  vb->W=v->W;
-  vb->nW=v->nW;
-
-  if(v->W){
-    if(!v->lW || !v->nW){
-      vbi->blocktype=BLOCKTYPE_TRANSITION;
-      /*fprintf(stderr,"-");*/
-    }else{
-      vbi->blocktype=BLOCKTYPE_LONG;
-      /*fprintf(stderr,"_");*/
-    }
-  }else{
-    if(_ve_envelope_mark(v)){
-      vbi->blocktype=BLOCKTYPE_IMPULSE;
-      /*fprintf(stderr,"|");*/
-
-    }else{
-      vbi->blocktype=BLOCKTYPE_PADDING;
-      /*fprintf(stderr,".");*/
-
-    }
-  }
-
-  vb->vd=v;
-  vb->sequence=v->sequence++;
-  vb->granulepos=v->granulepos;
-  vb->pcmend=ci->blocksizes[v->W];
-
-  /* copy the vectors; this uses the local storage in vb */
-
-  /* this tracks 'strongest peak' for later psychoacoustics */
-  /* moved to the global psy state; clean this mess up */
-  if(vbi->ampmax>g->ampmax)g->ampmax=vbi->ampmax;
-  g->ampmax=_vp_ampmax_decay(g->ampmax,v);
-  vbi->ampmax=g->ampmax;
-
-  vb->pcm=(float**)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
-  vbi->pcmdelay=(float**)_vorbis_block_alloc(vb,sizeof(*vbi->pcmdelay)*vi->channels);
-  for(i=0;i<vi->channels;i++){
-    vbi->pcmdelay[i]=
-      (float*) _vorbis_block_alloc(vb,(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i]));
-    memcpy(vbi->pcmdelay[i],v->pcm[i],(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i]));
-    vb->pcm[i]=vbi->pcmdelay[i]+beginW;
-
-    /* before we added the delay
-       vb->pcm[i]=_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
-       memcpy(vb->pcm[i],v->pcm[i]+beginW,ci->blocksizes[v->W]*sizeof(*vb->pcm[i]));
-    */
-
-  }
-
-  /* handle eof detection: eof==0 means that we've not yet received EOF
-                           eof>0  marks the last 'real' sample in pcm[]
-                           eof<0  'no more to do'; doesn't get here */
-
-  if(v->eofflag){
-    if(v->centerW>=v->eofflag){
-      v->eofflag=-1;
-      vb->eofflag=1;
-      return(1);
-    }
-  }
-
-  /* advance storage vectors and clean up */
-  {
-    int new_centerNext=ci->blocksizes[1]/2;
-    int movementW=centerNext-new_centerNext;
-
-    if(movementW>0){
-
-      _ve_envelope_shift(b->ve,movementW);
-      v->pcm_current-=movementW;
-
-      for(i=0;i<vi->channels;i++)
-        memmove(v->pcm[i],v->pcm[i]+movementW,
-                v->pcm_current*sizeof(*v->pcm[i]));
-
-
-      v->lW=v->W;
-      v->W=v->nW;
-      v->centerW=new_centerNext;
-
-      if(v->eofflag){
-        v->eofflag-=movementW;
-        if(v->eofflag<=0)v->eofflag=-1;
-        /* do not add padding to end of stream! */
-        if(v->centerW>=v->eofflag){
-          v->granulepos+=movementW-(v->centerW-v->eofflag);
-        }else{
-          v->granulepos+=movementW;
-        }
-      }else{
-        v->granulepos+=movementW;
-      }
-    }
-  }
-
-  /* done */
-  return(1);
-}
-
-int vorbis_synthesis_restart(vorbis_dsp_state *v){
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci;
-  int hs;
-
-  if(!v->backend_state)return -1;
-  if(!vi)return -1;
-  ci=(codec_setup_info*) vi->codec_setup;
-  if(!ci)return -1;
-  hs=ci->halfrate_flag;
-
-  v->centerW=ci->blocksizes[1]>>(hs+1);
-  v->pcm_current=v->centerW>>hs;
-
-  v->pcm_returned=-1;
-  v->granulepos=-1;
-  v->sequence=-1;
-  v->eofflag=0;
-  ((private_state *)(v->backend_state))->sample_count=-1;
-
-  return(0);
-}
-
-int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){
-  if(_vds_shared_init(v,vi,0)){
-    vorbis_dsp_clear(v);
-    return 1;
-  }
-  vorbis_synthesis_restart(v);
-  return 0;
-}
-
-/* Unlike in analysis, the window is only partially applied for each
-   block.  The time domain envelope is not yet handled at the point of
-   calling (as it relies on the previous block). */
-
-int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  private_state *b=(private_state*)v->backend_state;
-  int hs=ci->halfrate_flag;
-  int i,j;
-
-  if(!vb)return(OV_EINVAL);
-  if(v->pcm_current>v->pcm_returned  && v->pcm_returned!=-1)return(OV_EINVAL);
-
-  v->lW=v->W;
-  v->W=vb->W;
-  v->nW=-1;
-
-  if((v->sequence==-1)||
-     (v->sequence+1 != vb->sequence)){
-    v->granulepos=-1; /* out of sequence; lose count */
-    b->sample_count=-1;
-  }
-
-  v->sequence=vb->sequence;
-
-  if(vb->pcm){  /* no pcm to process if vorbis_synthesis_trackonly
-                   was called on block */
-    int n=ci->blocksizes[v->W]>>(hs+1);
-    int n0=ci->blocksizes[0]>>(hs+1);
-    int n1=ci->blocksizes[1]>>(hs+1);
-
-    int thisCenter;
-    int prevCenter;
-
-    v->glue_bits+=vb->glue_bits;
-    v->time_bits+=vb->time_bits;
-    v->floor_bits+=vb->floor_bits;
-    v->res_bits+=vb->res_bits;
-
-    if(v->centerW){
-      thisCenter=n1;
-      prevCenter=0;
-    }else{
-      thisCenter=0;
-      prevCenter=n1;
-    }
-
-    /* v->pcm is now used like a two-stage double buffer.  We don't want
-       to have to constantly shift *or* adjust memory usage.  Don't
-       accept a new block until the old is shifted out */
-
-    for(j=0;j<vi->channels;j++){
-      /* the overlap/add section */
-      if(v->lW){
-        if(v->W){
-          /* large/large */
-          const float *w=_vorbis_window_get(b->window[1]-hs);
-          float *pcm=v->pcm[j]+prevCenter;
-          float *p=vb->pcm[j];
-          for(i=0;i<n1;i++)
-            pcm[i]=pcm[i]*w[n1-i-1] + p[i]*w[i];
-        }else{
-          /* large/small */
-          const float *w=_vorbis_window_get(b->window[0]-hs);
-          float *pcm=v->pcm[j]+prevCenter+n1/2-n0/2;
-          float *p=vb->pcm[j];
-          for(i=0;i<n0;i++)
-            pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
-        }
-      }else{
-        if(v->W){
-          /* small/large */
-          const float *w=_vorbis_window_get(b->window[0]-hs);
-          float *pcm=v->pcm[j]+prevCenter;
-          float *p=vb->pcm[j]+n1/2-n0/2;
-          for(i=0;i<n0;i++)
-            pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
-          for(;i<n1/2+n0/2;i++)
-            pcm[i]=p[i];
-        }else{
-          /* small/small */
-          const float *w=_vorbis_window_get(b->window[0]-hs);
-          float *pcm=v->pcm[j]+prevCenter;
-          float *p=vb->pcm[j];
-          for(i=0;i<n0;i++)
-            pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
-        }
-      }
-
-      /* the copy section */
-      {
-        float *pcm=v->pcm[j]+thisCenter;
-        float *p=vb->pcm[j]+n;
-        for(i=0;i<n;i++)
-          pcm[i]=p[i];
-      }
-    }
-
-    if(v->centerW)
-      v->centerW=0;
-    else
-      v->centerW=n1;
-
-    /* deal with initial packet state; we do this using the explicit
-       pcm_returned==-1 flag otherwise we're sensitive to first block
-       being short or long */
-
-    if(v->pcm_returned==-1){
-      v->pcm_returned=thisCenter;
-      v->pcm_current=thisCenter;
-    }else{
-      v->pcm_returned=prevCenter;
-      v->pcm_current=prevCenter+
-        ((ci->blocksizes[v->lW]/4+
-        ci->blocksizes[v->W]/4)>>hs);
-    }
-
-  }
-
-  /* track the frame number... This is for convenience, but also
-     making sure our last packet doesn't end with added padding.  If
-     the last packet is partial, the number of samples we'll have to
-     return will be past the vb->granulepos.
-
-     This is not foolproof!  It will be confused if we begin
-     decoding at the last page after a seek or hole.  In that case,
-     we don't have a starting point to judge where the last frame
-     is.  For this reason, vorbisfile will always try to make sure
-     it reads the last two marked pages in proper sequence */
-
-  if(b->sample_count==-1){
-    b->sample_count=0;
-  }else{
-    b->sample_count+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
-  }
-
-  if(v->granulepos==-1){
-    if(vb->granulepos!=-1){ /* only set if we have a position to set to */
-
-      v->granulepos=vb->granulepos;
-
-      /* is this a short page? */
-      if(b->sample_count>v->granulepos){
-        /* corner case; if this is both the first and last audio page,
-           then spec says the end is cut, not beginning */
-       long extra = (long) (b->sample_count-vb->granulepos);
-
-        /* we use ogg_int64_t for granule positions because a
-           uint64 isn't universally available.  Unfortunately,
-           that means granposes can be 'negative' and result in
-           extra being negative */
-        if(extra<0)
-          extra=0;
-
-        if(vb->eofflag){
-          /* trim the end */
-          /* no preceding granulepos; assume we started at zero (we'd
-             have to in a short single-page stream) */
-          /* granulepos could be -1 due to a seek, but that would result
-             in a long count, not short count */
-
-          /* Guard against corrupt/malicious frames that set EOP and
-             a backdated granpos; don't rewind more samples than we
-             actually have */
-          if(extra > (v->pcm_current - v->pcm_returned)<<hs)
-            extra = (v->pcm_current - v->pcm_returned)<<hs;
-
-          v->pcm_current-=extra>>hs;
-        }else{
-          /* trim the beginning */
-          v->pcm_returned+=extra>>hs;
-          if(v->pcm_returned>v->pcm_current)
-            v->pcm_returned=v->pcm_current;
-        }
-
-      }
-
-    }
-  }else{
-    v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
-    if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){
-
-      if(v->granulepos>vb->granulepos){
-        long extra=v->granulepos-vb->granulepos;
-
-        if(extra)
-          if(vb->eofflag){
-            /* partial last frame.  Strip the extra samples off */
-
-            /* Guard against corrupt/malicious frames that set EOP and
-               a backdated granpos; don't rewind more samples than we
-               actually have */
-            if(extra > (v->pcm_current - v->pcm_returned)<<hs)
-              extra = (v->pcm_current - v->pcm_returned)<<hs;
-
-            /* we use ogg_int64_t for granule positions because a
-               uint64 isn't universally available.  Unfortunately,
-               that means granposes can be 'negative' and result in
-               extra being negative */
-            if(extra<0)
-              extra=0;
-
-            v->pcm_current-=extra>>hs;
-          } /* else {Shouldn't happen *unless* the bitstream is out of
-               spec.  Either way, believe the bitstream } */
-      } /* else {Shouldn't happen *unless* the bitstream is out of
-           spec.  Either way, believe the bitstream } */
-      v->granulepos=vb->granulepos;
-    }
-  }
-
-  /* Update, cleanup */
-
-  if(vb->eofflag)v->eofflag=1;
-  return(0);
-
-}
-
-/* pcm==NULL indicates we just want the pending samples, no more */
-int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm){
-  vorbis_info *vi=v->vi;
-
-  if(v->pcm_returned>-1 && v->pcm_returned<v->pcm_current){
-    if(pcm){
-      int i;
-      for(i=0;i<vi->channels;i++)
-        v->pcmret[i]=v->pcm[i]+v->pcm_returned;
-      *pcm=v->pcmret;
-    }
-    return(v->pcm_current-v->pcm_returned);
-  }
-  return(0);
-}
-
-int vorbis_synthesis_read(vorbis_dsp_state *v,int n){
-  if(n && v->pcm_returned+n>v->pcm_current)return(OV_EINVAL);
-  v->pcm_returned+=n;
-  return(0);
-}
-
-/* intended for use with a specific vorbisfile feature; we want access
-   to the [usually synthetic/postextrapolated] buffer and lapping at
-   the end of a decode cycle, specifically, a half-short-block worth.
-   This funtion works like pcmout above, except it will also expose
-   this implicit buffer data not normally decoded. */
-int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm){
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
-  int hs=ci->halfrate_flag;
-
-  int n=ci->blocksizes[v->W]>>(hs+1);
-  int n0=ci->blocksizes[0]>>(hs+1);
-  int n1=ci->blocksizes[1]>>(hs+1);
-
-  if(v->pcm_returned<0)return 0;
-
-  /* our returned data ends at pcm_returned; because the synthesis pcm
-     buffer is a two-fragment ring, that means our data block may be
-     fragmented by buffering, wrapping or a short block not filling
-     out a buffer.  To simplify things, we unfragment if it's at all
-     possibly needed. Otherwise, we'd need to call lapout more than
-     once as well as hold additional dsp state.  Opt for
-     simplicity. */
-
-  /* centerW was advanced by blockin; it would be the center of the
-     *next* block */
-  if(v->centerW==n1){
-    /* the data buffer wraps; swap the halves */
-    /* slow, sure, small */
-    for(int j=0;j<vi->channels;j++){
-      float *p=v->pcm[j];
-      for(int i=0;i<n1;i++){
-        float temp=p[i];
-        p[i]=p[i+n1];
-        p[i+n1]=temp;
-      }
-    }
-
-    v->pcm_current-=n1;
-    v->pcm_returned-=n1;
-    v->centerW=0;
-  }
-
-  /* solidify buffer into contiguous space */
-  if((v->lW^v->W)==1){
-    /* long/short or short/long */
-    for(int j=0;j<vi->channels;j++){
-      float *s=v->pcm[j];
-      float *d=v->pcm[j]+(n1-n0)/2;
-      for(int i=(n1+n0)/2-1;i>=0;--i)
-        d[i]=s[i];
-    }
-    v->pcm_returned+=(n1-n0)/2;
-    v->pcm_current+=(n1-n0)/2;
-  }else{
-    if(v->lW==0){
-      /* short/short */
-      for(int j=0;j<vi->channels;j++){
-        float *s=v->pcm[j];
-        float *d=v->pcm[j]+n1-n0;
-        for(int i=n0-1;i>=0;--i)
-          d[i]=s[i];
-      }
-      v->pcm_returned+=n1-n0;
-      v->pcm_current+=n1-n0;
-    }
-  }
-
-  if(pcm){
-    for(int i=0;i<vi->channels;i++)
-      v->pcmret[i]=v->pcm[i]+v->pcm_returned;
-    *pcm=v->pcmret;
-  }
-
-  return(n1+n-v->pcm_returned);
-
-}
-
-static float *vorbis_window(vorbis_dsp_state *v,int W){
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info*) vi->codec_setup;
-  int hs=ci->halfrate_flag;
-  private_state *b=(private_state*)v->backend_state;
-
-  if(b->window[W]-1<0)return NULL;
-  return _vorbis_window_get(b->window[W]-hs);
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h
deleted file mode 100644
index 488c8a4..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h
+++ /dev/null
@@ -1,12256 +0,0 @@
-static const long _vq_quantlist__44p0_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p0_l0_0[] = {
-	 1, 3, 4, 7, 7, 8, 8, 9, 9, 9,10,10,10, 5, 6, 5,
-	 8, 7, 9, 8, 9, 9,10, 9,11,10, 5, 5, 7, 7, 8, 8,
-	 9, 9, 9, 9,10,10,11, 8, 9, 8,10, 9,10, 9,10, 9,
-	11,10,11,10, 8, 8, 9, 9,10, 9,10, 9,11,10,11,10,
-	11,10,11,11,11,11,11,11,11,11,11,11,11,11,10,11,
-	11,11,12,11,11,11,11,11,11,10,12,12,12,12,12,12,
-	12,11,12,12,12,11,11,11,12,12,12,12,12,12,12,11,
-	12,11,12,11,11,13,12,12,12,13,12,12,12,12,11,12,
-	11,11,13,13,13,12,12,12,12,12,12,11,11,11,10,13,
-	13,13,12,13,12,13,11,13,10,12,11,11,13,13,12,13,
-	12,12,12,12,11,12,11,11,11,
-};
-
-static const static_codebook _44p0_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p0_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p0_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p0_l0_1[] = {
-	 1, 4, 4, 6, 6, 5, 5, 5, 7, 5, 5, 5, 5, 6, 7, 7,
-	 6, 7, 7, 7, 6, 7, 7, 7, 7,
-};
-
-static const static_codebook _44p0_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p0_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p0_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p0_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p0_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p0_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p0_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p0_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p0_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p0_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p0_long[] = {
-	 2, 3, 6, 7,10,14,16, 3, 2, 5, 7,11,14,17, 6, 5,
-	 5, 7,10,12,14, 7, 7, 6, 6, 7, 9,13,10,11, 9, 6,
-	 6, 9,11,15,15,13,10, 9,10,12,18,18,16,14,12,13,
-	16,
-};
-
-static const static_codebook _huff_book__44p0_long = {
-	2, 49,
-	(long *)_huff_lengthlist__44p0_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p0_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p1_0[] = {
-	 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p0_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p0_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_p2_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p2_0[] = {
-	 1, 5, 5, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,12,12, 0,
-	 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 0, 6, 6, 0,11,
-	11, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0,12,12,
-	 0,15,15, 0,12,12, 0, 5, 5, 0, 5, 5, 0, 6, 6, 0,
-	 7, 7, 0,11,11, 0, 6, 6, 0, 7, 7, 0,10,11, 0, 6,
-	 6, 0, 7, 7, 0,11,11, 0,12,12, 0,11,11, 0,15,15,
-	 0,10,10, 0,12,12, 0,15,15, 0,12,12, 0, 6, 6, 0,
-	12,12, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0,12,
-	12, 0,15,15, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 8, 8, 0,12,12, 0,12,12, 0,12,12, 0,15,
-	15, 0,12,12, 0,11,12, 0,15,16, 0,11,11, 0, 6, 6,
-	 0,11,12, 0,12,12, 0,12,12, 0,16,15, 0,12,12, 0,
-	13,12, 0,15,14, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p0_p2_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p2_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p0_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_p2_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p2_1[] = {
-	 1, 3, 3, 0, 9, 9, 0, 9, 9, 0,10,10, 0, 9, 9, 0,
-	10,10, 0,10,10, 0, 9, 9, 0,10,10, 0, 7, 7, 0, 7,
-	 7, 0, 6, 6, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 9,
-	 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 9, 9, 0, 8, 8, 0,
-	10,10, 0, 9, 9, 0,10,10, 0,10,10, 0, 9, 9, 0,10,
-	10, 0, 9, 9, 0,11,11, 0,11,11, 0,12,12, 0,11,11,
-	 0,12,12, 0,13,13, 0,12,12, 0,13,12, 0, 8, 8, 0,
-	12,12, 0,12,12, 0,13,13, 0,12,12, 0,13,13, 0,13,
-	13, 0,13,13, 0,13,13, 0, 7, 7, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0,11,11, 0,12,12, 0,13,13, 0,12,
-	12, 0,13,13, 0,13,13, 0,12,12, 0,12,12, 0, 8, 8,
-	 0,12,12, 0,12,12, 0,13,13, 0,13,13, 0,13,14, 0,
-	14,13, 0,13,13, 0,13,13, 0, 7, 7, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p0_p2_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p2_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p0_p2_1,
-	0
-};
-
-static const long _vq_quantlist__44p0_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p3_0[] = {
-	 1, 6, 6, 7, 8, 8, 7, 8, 8, 7, 9, 9,10,12,11, 9,
-	 8, 8, 7, 9, 9,11,12,12, 9, 9, 9, 6, 7, 7,10,11,
-	11,10,11,11,10,11,11,13,13,14,12,12,12,11,11,11,
-	14,14,14,12,12,12, 6, 5, 5, 9, 6, 5, 9, 6, 6, 9,
-	 7, 7,12,10,10,11, 6, 6,10, 7, 7,13,10,10,12, 7,
-	 7, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
-	13, 9, 9,12,11,11,16,13,13,15,11,11, 8, 7, 7,12,
-	12,12,12,11,11,12,11,11,14,14,14,14,12,12,12,12,
-	12,16,15,15,14,12,12, 0,10,10, 0,12,12, 0,12,12,
-	 0,11,11, 0,14,14, 0,11,11, 0,12,12, 0,15,15, 0,
-	11,11, 8, 8, 8,13,11,11,13,10,10,13,11,11,15,13,
-	13,14,11,11,12,10,10,16,14,14,14,10,10, 9, 7, 7,
-	13,11,11,13,11,11,12,11,11,16,14,14,14,12,12,13,
-	12,12,15,14,14,15,13,12, 0,11,11, 0,12,12, 0,12,
-	12, 0,12,12, 0,15,15, 0,12,12, 0,13,12, 0,14,15,
-	 0,12,12,
-};
-
-static const static_codebook _44p0_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p3_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p0_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_p3_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p0_p3_1[] = {
-	 2, 4, 4, 8, 8,10,12,12,11,11, 9,11,11,12,13,11,
-	12,12,11,11,11,12,12,12,12,10,13,12,13,13,11,12,
-	12,13,13,11,12,12,13,13,11,12,13,13,13,11,13,13,
-	13,13,10,13,13,12,13,11,12,12,14,14,11,13,12,12,
-	12,11,12,12,13,13,11,13,13,12,12,11,13,13,13,13,
-	11,12,12,13,13,11,13,13,12,12,11,12,12,13,13,11,
-	13,13,12,12,11,13,13,13,13,11,12,12,14,14,11,13,
-	13,12,12,11,12,12,13,13,11,13,13,12,12,11,10,10,
-	10,10,12,10,10,11,11,11, 8, 8,11,11,13,10,10,10,
-	10,12,10,10,10,10,13,11,11,11,11,13,10,10,11,11,
-	13,11,11,12,12,13,11,11,11,11,13,11,11,12,12,13,
-	11,11,12,12,13,10,10,11,11,13,11,11,11,11,13,11,
-	10,11,11,13,11,11,11,11,13,11,11,11,11,13,10,10,
-	11,11,13,11,11,11,11,12,10,11,11,11,13,11,11,11,
-	11,13,11,11,11,11,13,10,10,11,11,13,11,11,11,11,
-	13,11,11,11,11,13,11,11,11,11,11,10,10,10,10,12,
-	10,10, 9, 9,12,12,12,11,11,13,12,12, 9, 9,13,12,
-	12,10,10,12,12,12,12,12,13,13,13,14,14,13,12,12,
-	11,11,13,13,13,12,12,13,12,12,11,11,13,12,13,11,
-	11,13,13,13,14,14,13,12,12,10,10,13,13,13,11,11,
-	13,12,12,10,10,13,13,13,11,11,13,13,13,14,14,13,
-	12,12,10,10,13,13,13,11,11,13,12,13,10,10,13,13,
-	13,11,11,13,13,13,14,14,13,12,12,10,10,13,13,13,
-	11,11,13,13,12,10,10,14,12,12, 8, 8,14,12,12, 9,
-	 9,14,11,11, 9, 9,14,12,12, 8, 8,14,11,11, 7, 7,
-	14,13,13,10,10,15,12,12,10,10,15,13,13,10,10,15,
-	12,12, 9, 9,15,13,13,10,10,15,13,13,10,10,15,12,
-	12,10,10,15,13,13,10,10,14,12,12, 9, 9,14,13,13,
-	 9, 9,14,13,13, 9, 9,15,12,12, 9, 9,15,13,13, 9,
-	 9,14,12,12, 9, 9,14,13,13, 9, 9,14,13,13, 9, 9,
-	15,12,12, 9, 9,14,13,13, 9, 9,14,12,12, 9, 9,14,
-	13,13, 9, 9,13,12,12, 8, 8,13,13,13, 8, 8,14,13,
-	13, 9, 9,13,13,13, 7, 7,14,13,13, 8, 8,14,14,14,
-	10,10,14,14,14,11,11,14,14,14, 9, 9,14,14,14,10,
-	10,14,14,14, 9, 9,14,14,14,10, 9,15,14,14,11,11,
-	14,14,14, 9, 9,14,14,14,10,10,14,14,14, 9, 9,14,
-	14,14, 9, 9,15,14,14,11,11,14,14,14, 8, 8,14,14,
-	14, 9, 9,14,14,14, 8, 8,14,14,14, 9, 9,15,14,14,
-	11,11,14,14,14, 8, 8,14,14,14, 9, 9,14,14,14, 8,
-	 8,12,12,12,13,13,16,15,15,11,11,16,15,16,12,12,
-	17,16,16,11,11,17,15,15,12,11,16,16,16,12,13,16,
-	15,15,13,13,16,16,16,12,12,16,16,15,13,13,16,16,
-	16,12,12,16,16,16,13,13,17,16,16,14,14,17,17,16,
-	12,12,17,16,16,13,13,17,17,16,12,13,16,16,17,13,
-	12,17,16,16,14,13,17,16,16,12,12,17,16,16,12,12,
-	17,16,17,12,12,17,17,17,13,13,16,16,16,13,14,17,
-	17,16,12,12,16,16,16,13,13,17,17,17,12,12,13,14,
-	14,10,10,16,14,14,12,12,16,15,15,14,14,16,14,14,
-	12,12,15,14,14,13,13,17,15,15,14,13,16,16,15,15,
-	15,16,15,15,14,14,16,15,15,14,14,17,15,15,14,14,
-	16,15,15,14,14,16,16,15,15,15,17,15,15,13,13,16,
-	15,15,14,14,17,15,15,13,13,17,15,15,14,14,16,15,
-	15,15,15,16,14,14,13,13,16,15,15,14,14,16,14,14,
-	13,13,17,15,15,14,14,16,16,15,15,15,17,14,14,13,
-	13,16,15,15,14,14,17,14,14,13,13,13,11,11,10,10,
-	16,14,14,13,13,15,14,14,13,13,16,14,14,12,12,16,
-	14,14,12,12,15,15,15,14,14,16,14,14,14,14,16,15,
-	14,14,14,16,14,14,14,14,16,15,15,14,13,16,15,15,
-	14,14,16,14,14,14,14,17,15,15,14,14,16,14,14,14,
-	14,16,15,15,13,14,16,15,15,14,14,16,14,14,14,14,
-	16,15,15,13,13,16,14,14,13,13,16,15,15,13,13,16,
-	15,15,14,14,16,14,14,14,14,17,15,15,13,13,16,15,
-	14,13,13,17,15,15,13,13,14,14,14, 9, 9,14,14,14,
-	17,17,14,15,15,18,18,14,14,14,18,19,14,14,14,18,
-	18,15,15,15,19,18,15,16,15,18,20,15,15,15,18,19,
-	15,15,15,19,19,15,15,15,18,20,15,15,15,18,19,15,
-	15,16,20,18,15,15,15,18,18,15,15,15,19,19,15,15,
-	15,18,19,15,15,15,18,19,15,15,15,19,19,14,15,14,
-	19,19,15,15,15,20,19,15,14,14,19,18,14,15,15,18,
-	19,15,15,16,20,20,14,14,14,18,19,15,15,15,19,18,
-	14,14,14,18,18,14,12,12, 9, 9,13,14,14,18,18,14,
-	13,13,18,19,14,14,14,18,18,14,14,14,18,18,15,15,
-	15,19,19,15,14,14,19,18,14,15,15,19,18,15,14,14,
-	18,18,15,15,15,19,18,14,15,15,19,19,15,14,14,19,
-	18,14,15,15,19,18,15,14,14,19,18,14,15,15,19,18,
-	15,15,15,21,18,15,14,14,19,18,14,15,15,18,19,14,
-	15,14,20,19,14,15,15,18,19,14,15,15,19,19,15,14,
-	14,19,20,14,15,15,18,18,14,14,14,19,19,14,15,15,
-	19,18,12,12,12,13,13,16,15,15,11,11,16,15,15,12,
-	12,16,16,16,11,11,16,15,15,11,11,16,16,16,13,13,
-	17,16,16,13,13,17,17,17,12,12,16,16,16,13,13,17,
-	16,17,13,12,15,16,16,12,12,16,15,15,13,13,17,16,
-	16,12,12,16,16,15,12,12,16,16,16,12,12,17,17,16,
-	13,12,16,16,16,13,13,17,16,16,12,12,17,16,16,12,
-	12,17,17,16,12,12,16,17,16,12,12,17,15,15,13,13,
-	17,16,16,12,12,16,16,16,12,12,16,16,16,12,12,13,
-	13,13, 9, 9,15,14,14,13,13,16,15,14,14,14,16,14,
-	14,13,13,15,14,14,13,13,17,15,15,14,14,16,15,15,
-	15,15,16,15,15,14,14,16,15,15,15,15,17,15,15,14,
-	14,16,15,15,14,14,16,15,15,15,15,17,14,15,14,14,
-	16,15,15,14,14,17,15,15,13,14,17,15,15,14,14,16,
-	15,15,15,15,17,14,14,13,13,16,15,15,14,14,17,14,
-	14,13,13,17,15,15,14,14,16,15,16,15,15,17,14,14,
-	13,13,16,15,15,14,14,18,14,14,13,13,13,11,11,11,
-	11,15,14,14,12,12,15,14,14,13,13,16,14,14,12,12,
-	16,13,14,12,12,16,15,15,13,13,16,14,14,14,14,16,
-	15,15,13,13,16,14,14,13,13,16,14,15,13,13,15,15,
-	15,13,13,16,14,14,14,13,16,14,14,13,13,16,14,14,
-	13,13,16,15,15,13,13,16,15,15,13,13,16,14,14,14,
-	14,16,15,15,12,12,16,14,14,13,13,16,15,15,12,12,
-	16,15,15,13,13,16,14,14,14,14,17,15,14,12,12,16,
-	14,14,13,13,16,15,15,12,12,14,14,14, 8, 8,14,14,
-	14,17,18,14,15,15,17,18,14,14,14,17,18,14,14,14,
-	18,18,14,15,15,18,18,14,16,15,19,19,15,15,15,18,
-	19,15,16,15,20,19,15,15,15,18,18,14,15,15,18,19,
-	15,16,16,20,19,15,15,15,19,17,14,15,15,20,18,14,
-	15,15,18,18,14,15,15,18,19,14,15,15,19,20,14,14,
-	14,18,18,14,15,15,18,19,14,14,14,18,19,14,15,15,
-	19,18,15,16,16,20,21,14,14,15,19,19,14,15,15,19,
-	19,14,14,14,19,18,13,12,12, 9, 9,13,14,14,18,19,
-	14,14,14,18,19,14,14,14,18,18,14,14,14,18,18,14,
-	15,15,19,19,15,14,14,19,18,15,15,15,19,19,15,14,
-	14,19,20,14,15,15,18,19,14,15,15,20,18,15,14,14,
-	18,18,14,15,15,18,18,14,14,14,19,19,14,15,15,18,
-	18,14,15,15,19,18,15,14,14,19,19,14,15,15,19,18,
-	15,14,14,19,18,14,14,15,18,19,14,15,15,19,18,15,
-	14,14,18,19,14,15,14,19,20,14,14,14,19,19,14,15,
-	15,19,19,12,12,12,13,13,16,16,16,11,11,16,16,16,
-	12,12,17,16,16,11,11,17,15,15,11,11,16,16,16,13,
-	13,17,15,16,13,13,16,16,16,12,12,17,16,16,13,13,
-	17,17,16,12,12,17,17,16,13,13,17,16,16,13,13,17,
-	17,17,12,12,17,16,16,13,13,17,17,17,12,12,16,16,
-	16,12,12,17,15,15,13,13,17,16,16,11,11,17,16,16,
-	12,12,16,16,16,11,11,16,17,16,12,12,17,16,16,13,
-	13,17,17,16,12,12,17,17,16,12,12,17,16,16,11,11,
-	13,14,14, 9, 9,16,14,14,13,13,16,14,15,14,14,16,
-	14,14,12,12,16,14,14,13,13,17,15,15,14,14,16,15,
-	15,15,15,17,15,15,14,14,16,15,15,14,14,17,15,15,
-	14,14,16,15,15,14,14,16,15,15,15,16,17,14,15,14,
-	14,16,15,15,14,14,17,15,15,14,14,16,15,15,14,14,
-	16,15,15,15,15,17,14,14,13,13,16,15,15,14,14,16,
-	14,14,13,13,17,15,15,14,14,16,16,15,15,15,17,14,
-	14,13,13,16,15,15,14,14,17,14,14,13,13,13,11,11,
-	10,10,16,14,14,12,12,15,13,13,13,12,16,14,14,11,
-	11,16,14,14,11,11,16,14,15,13,14,16,14,14,13,13,
-	16,15,15,13,13,16,14,14,13,13,16,15,15,13,13,16,
-	15,15,13,13,17,14,14,14,14,17,15,15,13,13,16,14,
-	15,13,13,16,15,15,13,13,16,15,15,13,13,16,14,14,
-	13,13,17,15,15,12,12,16,14,14,12,12,16,15,15,12,
-	12,16,15,15,13,13,16,14,14,13,13,17,15,15,12,12,
-	17,14,14,12,12,16,15,15,12,12,13,14,14, 8, 8,13,
-	14,14,18,18,13,15,15,17,18,14,14,14,18,19,14,14,
-	14,19,18,14,15,15,19,18,15,15,16,21,18,15,15,15,
-	19,19,14,16,16,19,19,14,15,15,18,19,14,15,15,19,
-	20,14,16,16,19,18,15,15,15,18,19,14,15,15,19,18,
-	15,15,15,18,18,15,15,15,20,18,15,16,16,20,19,14,
-	15,14,18,19,14,15,16,19,20,14,15,15,19,18,15,15,
-	15,19,18,15,16,16,20,19,15,14,14,18,18,14,15,15,
-	19,19,14,15,15,18,18,13,12,12, 8, 8,13,14,14,19,
-	18,14,13,13,20,18,14,14,14,19,18,14,13,13,18,19,
-	14,15,15,20,19,15,14,14,19,19,14,15,15,19,18,15,
-	14,14,20,20,15,15,15,19,18,14,15,15,19,18,15,14,
-	14,19,18,14,15,15,20,19,14,14,14,20,19,14,15,15,
-	19,18,15,15,15,18,18,15,14,14,18,18,14,15,15,19,
-	19,14,14,14,19,19,14,15,15,19,19,15,15,15,19,18,
-	15,14,14,20,19,15,15,15,19,19,14,14,14,20,19,14,
-	15,15,20,20,12,12,12,13,13,17,16,16,11,11,16,16,
-	15,12,12,17,16,16,11,11,17,15,15,11,11,17,17,17,
-	13,13,17,16,16,13,13,17,17,17,12,12,17,16,16,13,
-	13,17,17,16,12,13,16,17,16,13,13,17,16,15,13,13,
-	17,16,16,12,12,17,16,16,12,13,17,16,17,12,12,17,
-	17,17,12,12,17,16,15,13,13,17,16,16,12,12,17,16,
-	16,12,12,17,16,16,11,11,16,16,16,12,12,17,15,15,
-	13,13,17,16,15,11,11,16,16,16,12,12,17,16,16,11,
-	11,13,14,14, 9, 9,16,14,14,13,13,16,14,15,14,14,
-	16,14,14,12,12,16,14,14,13,13,17,15,15,14,15,16,
-	15,15,15,15,17,15,15,14,14,16,15,15,15,14,16,15,
-	15,14,14,16,15,15,14,14,16,15,16,15,15,17,15,14,
-	14,14,16,15,15,14,14,17,15,15,13,13,16,15,15,14,
-	14,16,16,16,15,15,17,14,14,13,13,16,15,15,14,14,
-	18,14,15,13,13,16,15,15,14,14,16,16,15,15,15,16,
-	14,14,13,13,16,15,15,14,14,17,14,15,13,13,13,11,
-	11,10,10,15,14,14,12,12,15,14,14,13,13,16,14,14,
-	12,12,16,13,14,12,12,16,14,15,14,13,16,14,14,14,
-	14,16,15,15,13,13,16,14,14,13,13,16,15,15,13,13,
-	15,15,15,13,13,16,14,14,14,14,17,15,15,13,13,16,
-	14,14,13,13,16,15,15,13,13,16,15,15,13,13,16,14,
-	14,13,13,17,15,15,12,12,16,14,14,12,12,16,14,15,
-	12,12,16,15,15,13,13,16,14,14,13,13,17,15,15,12,
-	12,16,14,14,12,12,16,15,15,12,12,14,14,14, 8, 8,
-	14,14,14,17,17,14,15,15,18,18,14,14,14,18,17,14,
-	14,14,18,18,14,15,15,18,20,15,16,15,19,18,15,15,
-	15,19,18,15,15,16,19,18,15,15,15,18,18,14,15,15,
-	18,18,15,16,16,18,19,15,15,15,18,18,15,15,15,19,
-	20,15,15,15,18,18,15,15,15,18,18,15,16,16,19,19,
-	15,14,15,19,19,15,15,15,19,20,14,14,15,18,18,15,
-	15,15,19,19,15,16,16,19,19,15,15,14,18,19,15,15,
-	15,20,20,15,15,14,18,18,13,12,12, 8, 8,13,14,14,
-	18,18,14,14,14,18,18,14,14,14,18,20,14,14,14,18,
-	18,14,15,15,19,18,15,14,14,18,19,15,15,15,18,19,
-	15,14,14,18,19,15,15,15,18,18,14,15,14,18,19,15,
-	14,14,21,19,15,15,15,19,18,14,14,14,19,18,14,15,
-	15,19,18,15,15,15,20,19,15,14,14,20,18,14,15,15,
-	18,19,14,14,14,19,18,14,15,15,18,19,15,15,15,18,
-	19,15,14,14,19,19,15,15,15,19,19,14,14,14,19,20,
-	14,15,15,18,19,
-};
-
-static const static_codebook _44p0_p3_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p0_p3_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p0_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p0_p4_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p0_p4_0[] = {
-	 2, 6, 6,14,14, 6, 8, 8,14,14, 7, 7, 7,14,14, 0,
-	13,13,15,16, 0,13,13,15,15, 7, 8, 8,15,15, 9,10,
-	10,16,16, 9, 8, 8,14,15, 0,13,13,17,17, 0,13,13,
-	16,16, 8, 8, 8,15,15,12,11,11,16,16, 9, 8, 8,14,
-	14, 0,13,13,17,17, 0,13,13,15,15, 0,14,14,16,16,
-	 0, 0, 0,18,19, 0,12,12,16,15, 0,16,16, 0,20, 0,
-	14,14,16,16, 0,14,14,17,17, 0, 0, 0,19,19, 0,12,
-	12,15,15, 0,18,17,21,21, 0,14,14,16,16, 5, 7, 7,
-	12,13, 9,10, 9,14,14,11,10,10,14,14, 0, 0, 0,18,
-	17, 0,20,21,18,18, 9,10,10,14,14,12,12,12,17,16,
-	12,10,10,14,14, 0,20,20,18,17, 0,21,21,17,17,11,
-	10,10,14,14,15,13,13,18,18,13,11,11,14,14, 0,20,
-	 0,18,18, 0,20,21,18,17, 0,21, 0,18,19, 0, 0, 0,
-	 0,21, 0,21,20,16,17, 0, 0, 0,21,21, 0, 0, 0,20,
-	18, 0,20, 0,17,18, 0, 0, 0, 0, 0, 0, 0,20,16,17,
-	 0, 0, 0,20, 0, 0, 0, 0,18,18, 6, 6, 6,13,13, 8,
-	 5, 5,11,11, 9, 6, 6,13,13, 0, 9, 9,12,12, 0,10,
-	10,14,14, 9, 7, 7,13,13,12, 9, 9,13,13,10, 6, 6,
-	13,13, 0,10,10,14,14, 0,10,10,13,13, 9, 7, 7,13,
-	13,13,10,10,13,13,11, 6, 6,13,13, 0,10,10,15,15,
-	 0,10,10,13,13, 0,12,11,15,15, 0,20,19,17,16, 0,
-	 9, 9,13,13, 0,13,13,20,19, 0,11,11,13,13, 0,11,
-	11,15,15, 0,20,19,17,17, 0,10,10,13,13, 0,14,15,
-	 0,21, 0,12,12,13,13, 0,10,10,12,12, 0,11,11,15,
-	15, 0,11,11,15,15, 0,15,15,20,20, 0,16,16, 0, 0,
-	 0,11,11,15,15, 0,14,14,17,17, 0,11,11,15,15, 0,
-	15,15,20,21, 0,16,16,21,21, 0,12,12,15,15, 0,15,
-	15,18,20, 0,11,11,16,15, 0,15,15,21,21, 0,16,16,
-	 0,21, 0,16,16, 0, 0, 0, 0, 0, 0, 0, 0,14,14,21,
-	21, 0,17,18, 0, 0, 0,16,17,20, 0, 0,16,16, 0, 0,
-	 0, 0, 0, 0, 0, 0,15,15,20,20, 0,19,18, 0,21, 0,
-	18,17, 0, 0, 0,10,10,11,11, 0,10,10,10,10, 0,11,
-	11,12,12, 0,11,11, 9, 9, 0,13,13,12,12, 0,11,11,
-	12,12, 0,13,13,12,12, 0,10,10,12,12, 0,12,12,13,
-	13, 0,12,12,12,12, 0,11,11,12,12, 0,13,13,12,12,
-	 0,10,10,12,12, 0,13,13,13,13, 0,12,12,12,12, 0,
-	14,13,13,13, 0,19,21,15,15, 0,12,11,12,12, 0,16,
-	15,19,19, 0,13,13,11,11, 0,13,13,13,13, 0, 0,21,
-	15,16, 0,12,12,12,12, 0,16,16,19,21, 0,13,13,12,
-	12, 7, 7, 7,16,16,11, 9, 9,16,16,12, 9, 9,16,16,
-	 0,13,13,16,16, 0,14,14,17,16,11, 9, 9,16,16,14,
-	12,11,17,17,13, 8, 9,15,15, 0,13,13,19,19, 0,13,
-	13,16,15,12,10,10,17,17,15,12,12,19,18,14, 9, 9,
-	17,16, 0,14,14,18, 0, 0,14,13,16,16, 0,14,15,18,
-	17, 0,21, 0,19,21, 0,12,12,16,16, 0,16,16, 0, 0,
-	 0,14,14,16,16, 0,14,14,18,18, 0, 0,21,20, 0, 0,
-	13,13,16,17, 0,18,18, 0, 0, 0,15,14,17,16, 8, 7,
-	 7,14,14,11,10,10,15,15,13,10,10,15,15, 0,21,20,
-	19,19, 0,21, 0,17,18,11,10,10,15,16,14,12,12,18,
-	18,14,11,11,15,14, 0,21,20,18,19, 0, 0,21,18,18,
-	12,11,11,16,16,16,14,14,18,20,14,11,11,16,15, 0,
-	20,20,19,19, 0, 0,20,18,18, 0,21, 0,18,19, 0, 0,
-	 0, 0, 0, 0,20,20,17,18, 0, 0, 0,20,20, 0, 0, 0,
-	19,19, 0, 0, 0,20,18, 0, 0, 0, 0, 0, 0, 0,21,18,
-	18, 0,21,21, 0,21, 0, 0, 0,19,20,11, 9, 9,14,14,
-	13,10,10,14,14,13,11,11,15,15, 0,13,13,13,13, 0,
-	14,14,16,16,13,11,11,15,15,16,12,12,15,15,14,10,
-	10,14,14, 0,14,14,16,16, 0,14,14,15,15,13,10,10,
-	15,15,17,13,14,15,16,15,10,10,15,15, 0,14,14,17,
-	16, 0,14,14,15,15, 0,15,15,17,17, 0, 0,21,18,18,
-	 0,13,13,15,15, 0,16,16,21,20, 0,14,14,15,14, 0,
-	15,14,16,17, 0, 0,20,20,19, 0,13,13,15,15, 0,19,
-	18, 0, 0, 0,15,15,15,15, 0,11,11,14,14, 0,12,12,
-	16,16, 0,12,12,16,16, 0,15,16,21,21, 0,16,17,21,
-	 0, 0,12,12,17,16, 0,14,14,18,19, 0,11,11,16,16,
-	 0,15,15,20,21, 0,16,16,21, 0, 0,12,12,17,16, 0,
-	15,15,19,19, 0,12,12,16,17, 0,16,15, 0, 0, 0,16,
-	16, 0, 0, 0,17,17, 0,21, 0, 0, 0, 0, 0, 0,14,15,
-	20, 0, 0,17,17, 0, 0, 0,17,17, 0, 0, 0,17,16, 0,
-	 0, 0, 0, 0, 0, 0, 0,15,15, 0, 0, 0,18,18, 0, 0,
-	 0,18,17, 0, 0, 0,11,11,14,14, 0,12,12,15,15, 0,
-	12,12,15,15, 0,13,13,14,14, 0,14,14,17,17, 0,12,
-	12,16,16, 0,14,14,16,16, 0,11,11,15,15, 0,13,13,
-	16,17, 0,13,13,16,16, 0,12,12,15,15, 0,14,14,17,
-	16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,16,16,
-	 0,15,15,17,18, 0,21,20,20,21, 0,12,12,15,15, 0,
-	16,16,20,21, 0,14,14,15,15, 0,14,14,17,17, 0, 0,
-	 0,18,19, 0,12,13,15,15, 0,18,17,21, 0, 0,14,15,
-	15,15, 8, 8, 8,16,16,12,10,10,16,16,13, 9, 9,16,
-	16, 0,14,14,18,17, 0,14,14,16,17,12,10,10,18,17,
-	14,12,11,18,18,14, 9, 9,16,16, 0,13,13,18,18, 0,
-	13,13,17,16,12, 9, 9,16,17,17,13,13,17,17,14, 9,
-	 9,15,15, 0,14,14,20,19, 0,13,13,16,16, 0,15,15,
-	19,18, 0, 0, 0,20,19, 0,12,13,17,17, 0,16,16,20,
-	 0, 0,14,14,16,17, 0,14,14,19,18, 0, 0, 0,20,20,
-	 0,13,13,16,16, 0,18,17, 0, 0, 0,15,15,16,16, 9,
-	 7, 7,14,14,12,10,10,15,15,13,10,10,15,15, 0,21,
-	 0,18,19, 0,20,21,19,18,12,10,10,16,15,15,13,13,
-	18,18,14,11,11,15,15, 0, 0, 0,19,18, 0, 0,21,18,
-	18,13,11,11,15,15,16,14,14,17,19,15,11,11,15,15,
-	 0,21,21,20,18, 0, 0,21,18,18, 0, 0,21,21,19, 0,
-	 0, 0, 0, 0, 0,19,20,18,17, 0, 0, 0,21,21, 0,21,
-	 0,20,18, 0, 0,21,19,19, 0, 0, 0, 0, 0, 0,20,21,
-	17,17, 0, 0, 0, 0, 0, 0,21, 0,18,20, 0,10,10,14,
-	14, 0,11,11,15,15, 0,11,11,15,15, 0,14,14,15,15,
-	 0,15,15,16,16, 0,11,12,16,16, 0,13,13,16,16, 0,
-	11,11,15,15, 0,14,14,17,17, 0,14,14,15,15, 0,11,
-	11,16,15, 0,14,14,15,15, 0,11,11,15,15, 0,15,15,
-	17,17, 0,14,14,15,15, 0,16,16,18,18, 0, 0, 0,20,
-	19, 0,14,13,16,15, 0,17,17,21, 0, 0,15,15,15,15,
-	 0,16,15,17,16, 0,20, 0,20,18, 0,13,14,15,15, 0,
-	19,18, 0,21, 0,15,15,15,15, 0,11,11,14,14, 0,12,
-	12,16,16, 0,12,12,16,16, 0,16,15,20,21, 0,17,16,
-	 0, 0, 0,12,12,16,16, 0,14,14,18,18, 0,11,11,16,
-	16, 0,15,15,21,20, 0,16,16, 0, 0, 0,12,12,16,17,
-	 0,15,14,19,19, 0,11,12,16,16, 0,15,15,21, 0, 0,
-	16,16, 0, 0, 0,16,17, 0, 0, 0, 0, 0, 0, 0, 0,15,
-	15,21, 0, 0,17,17, 0, 0, 0,17,17, 0, 0, 0,17,16,
-	 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0,20, 0,19,20, 0,
-	 0, 0,17,17, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
-	 0,12,12,16,16, 0,13,13,15,15, 0,15,15,17,17, 0,
-	13,13,17,16, 0,14,14,17,17, 0,11,11,16,16, 0,14,
-	14,17,17, 0,13,13,16,16, 0,12,12,16,16, 0,15,15,
-	16,17, 0,11,11,15,16, 0,14,14,17,17, 0,13,14,16,
-	16, 0,15,15,18,18, 0,21,20,20,19, 0,13,13,16,17,
-	 0,16,16, 0, 0, 0,14,14,16,16, 0,15,15,18,18, 0,
-	 0, 0,20,19, 0,13,13,16,16, 0,17,17, 0, 0, 0,14,
-	14,16,16, 0,11,11,16,16, 0,13,13,18,17, 0,13,13,
-	17,17, 0,16,16,17,17, 0,16,16,17,18, 0,12,12,17,
-	17, 0,15,15,18,18, 0,12,12,16,16, 0,16,16,19,19,
-	 0,15,15,16,17, 0,12,12,17,17, 0,17,17,18,18, 0,
-	12,12,17,17, 0,16,16,19,19, 0,15,16,17,17, 0,16,
-	16,18,17, 0, 0, 0,21,21, 0,13,13,16,16, 0,17,17,
-	 0,20, 0,15,15,16,17, 0,16,16,19,18, 0, 0,21,20,
-	21, 0,14,14,17,16, 0,20, 0, 0, 0, 0,15,16,16,17,
-	 0, 9, 9,14,14, 0,13,13,16,16, 0,14,14,15,15, 0,
-	 0,20,19,19, 0, 0, 0,19,19, 0,12,12,15,15, 0,15,
-	16,19,18, 0,14,14,15,15, 0,21, 0,18,18, 0,20, 0,
-	17,18, 0,13,13,16,16, 0,17,17,17,19, 0,14,14,16,
-	15, 0,21,20,20,19, 0, 0, 0,19,19, 0, 0, 0,19,18,
-	 0, 0, 0, 0, 0, 0,20,20,17,18, 0, 0, 0,21,21, 0,
-	 0, 0,18,18, 0,21, 0,18,19, 0, 0, 0, 0, 0, 0,20,
-	21,18,18, 0, 0, 0,20,21, 0, 0, 0,19,19, 0,18,18,
-	15,15, 0,20,21,17,17, 0,19,21,17,17, 0, 0, 0,17,
-	18, 0, 0, 0,20,19, 0,19,19,17,17, 0, 0, 0,18,18,
-	 0,19,20,16,17, 0, 0,21,20,20, 0,19,20,19,18, 0,
-	19,20,16,16, 0, 0, 0,18,19, 0,19,20,17,17, 0, 0,
-	21, 0,20, 0,21,21,17,19, 0,20, 0,19,20, 0, 0, 0,
-	20, 0, 0,19,18,17,16, 0, 0, 0, 0, 0, 0, 0,20,17,
-	17, 0,20,21,18,20, 0, 0, 0, 0,21, 0,19,20,17,17,
-	 0, 0, 0, 0, 0, 0,20,21,17,17, 0,11,11,14,14, 0,
-	13,13,16,17, 0,13,13,16,16, 0,17,17, 0,21, 0,18,
-	17,21, 0, 0,13,13,16,16, 0,15,15,18,18, 0,12,12,
-	16,16, 0,17,16,21, 0, 0,17,17, 0, 0, 0,12,12,17,
-	17, 0,17,17,19,21, 0,13,12,16,16, 0,17,17, 0, 0,
-	 0,17,17, 0, 0, 0,18,17, 0,21, 0, 0, 0, 0, 0, 0,
-	15,15,20, 0, 0,20,18, 0, 0, 0,17,18, 0, 0, 0,16,
-	17, 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0, 0, 0,19,19,
-	 0, 0, 0,18,18, 0, 0, 0,14,14,18,18, 0,16,16, 0,
-	21, 0,16,16,21,21, 0,17,17, 0,20, 0,17,17,20, 0,
-	 0,16,15, 0, 0, 0,20,20, 0, 0, 0,15,15,20,20, 0,
-	17,17,21, 0, 0,17,18,20,20, 0,15,15,20,20, 0,18,
-	18, 0, 0, 0,15,15,19,20, 0,17,18, 0, 0, 0,17,17,
-	20,20, 0,18,17,21, 0, 0, 0, 0, 0,21, 0,15,15,20,
-	20, 0,19,19, 0, 0, 0,17,17,21, 0, 0,17,17, 0, 0,
-	 0, 0, 0,21, 0, 0,15,15,19,19, 0,20,21, 0, 0, 0,
-	18,17,21,21, 0,12,12,16,16, 0,14,14,17,17, 0,13,
-	13,17,18, 0,16,16,18,17, 0,16,16,18,18, 0,13,13,
-	18,18, 0,15,16,19,18, 0,13,13,16,16, 0,16,16,20,
-	18, 0,16,16,17,17, 0,12,13,17,17, 0,17,16,18,18,
-	 0,12,12,16,16, 0,17,16,20,19, 0,16,16,16,16, 0,
-	16,17,18,20, 0, 0, 0,21,20, 0,14,14,17,16, 0,19,
-	18, 0,20, 0,16,16,17,16, 0,16,16,17,18, 0, 0,21,
-	21,21, 0,14,14,16,16, 0,20,20,21, 0, 0,16,16,16,
-	16, 0,10,10,14,14, 0,14,14,15,16, 0,14,14,15,15,
-	 0, 0,21,18,18, 0, 0,21,18,19, 0,13,13,16,16, 0,
-	16,16,18,18, 0,14,14,15,15, 0,21, 0,18,18, 0,21,
-	 0,18,18, 0,13,13,16,16, 0,17,17,19,20, 0,14,14,
-	15,15, 0, 0, 0,18,20, 0, 0,21,18,18, 0, 0,21,19,
-	18, 0, 0, 0, 0, 0, 0,20,21,18,17, 0, 0, 0,21,21,
-	 0, 0, 0,19,19, 0,21, 0,18,19, 0, 0, 0, 0, 0, 0,
-	21,20,17,17, 0, 0,21,20, 0, 0, 0, 0,19,19, 0,19,
-	20,15,16, 0, 0,20,18,17, 0,20,21,17,18, 0,21, 0,
-	18,18, 0, 0, 0,19,19, 0,20,20,17,18, 0, 0, 0,18,
-	19, 0,20,20,18,17, 0, 0, 0, 0,20, 0, 0,21,17,18,
-	 0,20,21,17,17, 0, 0, 0,18,18, 0,19,19,17,17, 0,
-	 0, 0,21,21, 0,20,20,17,17, 0, 0, 0,21,19, 0, 0,
-	 0,20,19, 0,21,20,17,18, 0, 0, 0, 0, 0, 0, 0,20,
-	18,17, 0,21,20,18,18, 0, 0, 0,20,21, 0,20,20,17,
-	17, 0, 0, 0, 0, 0, 0,20, 0,17,17, 0,11,11,13,14,
-	 0,13,13,16,16, 0,13,13,16,16, 0,17,17, 0, 0, 0,
-	17,18, 0, 0, 0,13,13,16,16, 0,15,16,18,18, 0,13,
-	13,16,17, 0,16,17,20, 0, 0,17,18,20, 0, 0,13,13,
-	17,17, 0,16,16,20,21, 0,13,13,16,16, 0,17,17,21,
-	 0, 0,17,18, 0, 0, 0,17,18, 0,21, 0, 0, 0, 0, 0,
-	 0,15,15,20, 0, 0,19,19, 0, 0, 0,17,17, 0, 0, 0,
-	18,17,21,20, 0, 0, 0, 0, 0, 0,16,16,20,21, 0,21,
-	20, 0,21, 0,19,21, 0, 0, 0,15,15, 0, 0, 0,16,17,
-	 0,19, 0,16,16, 0, 0, 0,17,17, 0, 0, 0,19,18, 0,
-	 0, 0,16,16,20,20, 0,20,18,21, 0, 0,15,15,21,21,
-	 0,18,18, 0, 0, 0,18,19, 0, 0, 0,16,15, 0,21, 0,
-	20,19, 0, 0, 0,16,16, 0, 0, 0,20,18, 0,21, 0,17,
-	18,21, 0, 0,18,19, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
-	20,20, 0,19,20, 0, 0, 0,17,17, 0, 0, 0,18,17,20,
-	21, 0, 0, 0, 0, 0, 0,16,16, 0,20, 0,20,22, 0, 0,
-	 0,18,18, 0,22,
-};
-
-static const static_codebook _44p0_p4_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p0_p4_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p0_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_p4_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p0_p4_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p0_p4_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p0_p4_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p0_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p0_p5_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p5_0[] = {
-	 1, 6, 6, 6, 8, 8, 7, 8, 8, 7, 9, 8,10,11,11, 9,
-	 8, 8, 7, 8, 8,11,11,11, 9, 8, 8, 6, 7, 7,10,10,
-	10,10,10,10,10,10,10,14,13,13,12,11,11,10,10,10,
-	14,14,13,13,11,11, 6, 6, 6, 8, 5, 5, 8, 7, 7, 8,
-	 7, 7,11, 9, 9, 9, 7, 7, 8, 7, 7,12,10,10,10, 7,
-	 7, 7, 8, 8,12,11,11,12,10,10,11,10,10,14,13,13,
-	13,10,10,11,10,11,16,14,14,13,10,10, 7, 8, 7,12,
-	12,12,12,11,11,12,11,11,16,14,15,13,12,12,11,11,
-	11,17,15,14,14,13,13,10, 9, 9,13,11,11,13,11,11,
-	12,11,11,16,14,13,14,11,11,12,11,11,16,15,14,14,
-	11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,16,14,
-	13,13,11,11,12,10,10,16,14,14,13,10,10, 8, 8, 8,
-	12,12,12,12,11,11,12,11,11,16,14,15,14,12,12,12,
-	11,11,16,15,15,14,12,12,10,10,10,13,11,11,13,11,
-	11,12,12,12,16,14,14,14,11,11,12,11,11,17,14,15,
-	14,11,11,
-};
-
-static const static_codebook _44p0_p5_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p5_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p0_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_p5_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p5_1[] = {
-	 2, 7, 7, 7, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 9, 8,
-	 7, 7, 8, 8, 8, 9, 9, 9, 9, 7, 7, 6, 6, 6, 9, 7,
-	 7, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
-	10, 8, 8,10, 8, 8, 7, 6, 6, 9, 6, 6, 9, 6, 6, 9,
-	 7, 7,10, 8, 8, 9, 6, 6, 9, 7, 7,10, 8, 8, 9, 7,
-	 7, 7, 8, 8,11, 9, 9,11, 9, 9,11, 9, 9,12, 9, 9,
-	12, 8, 8,12, 9, 9,12,10, 9,12, 8, 8, 8, 7, 7,10,
-	 9, 9,11, 9, 9,11, 9, 9,11,11,10,11, 9, 9,11,10,
-	 9,11,10,11,11, 9, 9,10, 8, 8,11, 9, 9,11, 9, 9,
-	11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
-	 9, 9, 9, 8, 8,12, 9, 9,12, 9, 9,11, 9, 9,12, 9,
-	 9,12, 8, 8,12, 9, 9,12, 9, 9,12, 8, 8, 9, 7, 7,
-	11, 9,10,11,10, 9,11, 9, 9,11,11,11,11, 9, 9,11,
-	10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11,10,
-	10,11,10, 9,11,10,10,11, 9, 9,11,10,10,11,10,11,
-	11, 9, 9,
-};
-
-static const static_codebook _44p0_p5_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p5_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p0_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p0_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p0_p6_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p0_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p0_p6_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p0_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p0_p6_1[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p0_p6_1[] = {
-	 1, 3, 2, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
-	11,12,12,12,14,14,14,15,15,
-};
-
-static const static_codebook _44p0_p6_1 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p0_p6_1,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p0_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p0_p6_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p0_p6_2[] = {
-	 3, 4, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p0_p6_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p0_p6_2,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p0_p6_2,
-	0
-};
-
-static const long _huff_lengthlist__44p0_short[] = {
-	 3, 3, 7, 8,10,13,16, 3, 2, 5, 7, 9,13,16, 6, 4,
-	 4, 6,10,14,15, 7, 5, 5, 7,10,13,14, 9, 8, 9, 9,
-	 9,11,13,12,11,12, 9, 7, 8,11,14,12,10, 6, 5, 7,
-	10,
-};
-
-static const static_codebook _huff_book__44p0_short = {
-	2, 49,
-	(long *)_huff_lengthlist__44p0_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p1_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p1_l0_0[] = {
-	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 4, 6, 5,
-	 8, 6, 9, 8,10, 9,10,10,11,10, 5, 5, 6, 6, 8, 8,
-	 9, 9,10,10,10,10,11, 7, 8, 8, 9, 8,10, 9,10, 9,
-	11,10,11,10, 7, 8, 8, 8,10, 9,10,10,10,10,11,10,
-	11, 9,10,10,11,11,11,11,12,11,12,11,12,11, 9,10,
-	10,11,11,11,11,11,11,11,12,11,12,11,11,11,12,12,
-	12,12,12,12,12,12,12,11,11,12,11,12,12,12,12,12,
-	12,12,12,11,12,12,12,12,12,13,12,13,12,12,12,12,
-	12,12,12,12,12,13,13,13,13,12,13,12,12,12,12,12,
-	13,13,12,13,12,13,12,13,12,12,12,12,13,13,13,13,
-	13,13,12,12,12,12,12,11,12,
-};
-
-static const static_codebook _44p1_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p1_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p1_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p1_l0_1[] = {
-	 1, 4, 4, 6, 6, 5, 5, 5, 6, 6, 5, 6, 5, 6, 6, 6,
-	 6, 7, 7, 7, 6, 7, 6, 7, 7,
-};
-
-static const static_codebook _44p1_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p1_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p1_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p1_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p1_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p1_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p1_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p1_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p1_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p1_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p1_long[] = {
-	 3, 3, 7, 7, 9,13,16, 3, 2, 4, 6,10,13,17, 7, 4,
-	 4, 6, 9,12,14, 7, 6, 6, 5, 7, 9,12,10,10, 9, 6,
-	 6, 9,12,14,14,13, 9, 8,10,11,18,18,15,13,11,10,
-	11,
-};
-
-static const static_codebook _huff_book__44p1_long = {
-	2, 49,
-	(long *)_huff_lengthlist__44p1_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p1_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p1_0[] = {
-	 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p1_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p1_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_p2_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p2_0[] = {
-	 1, 4, 4, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,12,12, 0,
-	 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 0, 6, 6, 0,11,
-	11, 0,11,11, 0,12,12, 0,14,14, 0,11,11, 0,12,12,
-	 0,14,14, 0,11,11, 0, 6, 6, 0, 6, 5, 0, 7, 6, 0,
-	 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,10,10, 0, 7,
-	 7, 0, 7, 7, 0,10,10, 0,11,11, 0,11,11, 0,14,14,
-	 0,10,10, 0,12,12, 0,14,14, 0,12,12, 0, 6, 6, 0,
-	11,11, 0,11,11, 0,12,12, 0,14,14, 0,11,11, 0,12,
-	12, 0,15,15, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 8, 8, 0,11,11, 0,11,11, 0,12,12, 0,15,
-	15, 0,12,12, 0,11,11, 0,15,15, 0,11,11, 0, 6, 6,
-	 0,11,11, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0,
-	12,12, 0,14,14, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p1_p2_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p2_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p1_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_p2_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p2_1[] = {
-	 1, 3, 3, 0, 8, 8, 0, 8, 8, 0,10,10, 0, 9, 9, 0,
-	10,10, 0,10,10, 0, 9, 9, 0,10,10, 0, 7, 7, 0, 7,
-	 7, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 9, 9,
-	 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0,
-	10,10, 0, 9, 9, 0, 9, 9, 0,10,10, 0, 9, 9, 0,10,
-	10, 0, 8, 8, 0,11,11, 0,11,11, 0,12,12, 0,11,11,
-	 0,12,12, 0,12,12, 0,12,12, 0,12,12, 0, 8, 8, 0,
-	11,11, 0,11,11, 0,13,12, 0,12,12, 0,13,12, 0,13,
-	13, 0,12,12, 0,13,13, 0, 7, 7, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 8, 8, 0,11,11, 0,11,11, 0,13,12, 0,12,
-	12, 0,12,12, 0,12,12, 0,11,11, 0,12,12, 0, 8, 8,
-	 0,12,12, 0,12,12, 0,13,13, 0,12,12, 0,13,13, 0,
-	13,13, 0,12,13, 0,13,13, 0, 7, 7, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p1_p2_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p2_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p1_p2_1,
-	0
-};
-
-static const long _vq_quantlist__44p1_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p3_0[] = {
-	 1, 6, 6, 6, 7, 7, 7, 8, 8, 7, 8, 8,10,11,11, 9,
-	 8, 8, 7, 9, 9,11,12,12, 9, 8, 8, 6, 7, 7, 9,11,
-	11,10,11,11,10,11,11,13,13,13,11,12,12,10,11,11,
-	13,14,14,12,12,12, 6, 6, 6, 8, 6, 6, 8, 6, 6, 9,
-	 7, 7,12,10,10,10, 6, 6, 9, 7, 7,12,10,10,11, 7,
-	 6, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
-	13,10,10,12,11,11,15,13,13,14,11,11, 8, 7, 7,12,
-	11,11,12,11,11,11,11,11,14,14,14,13,12,12,12,11,
-	11,16,15,15,14,12,12, 0,10,10, 0,11,11, 0,12,12,
-	 0,11,11, 0,14,14, 0,11,11, 0,11,11, 0,15,15, 0,
-	11,11, 7, 8, 8,13,10,10,12,10,10,12,11,11,15,13,
-	13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
-	12,11,11,13,11,11,12,11,11,15,14,14,14,12,12,13,
-	12,12,15,14,14,15,12,12, 0,11,11, 0,12,12, 0,12,
-	12, 0,12,12, 0,15,15, 0,12,12, 0,12,12, 0,15,14,
-	 0,12,12,
-};
-
-static const static_codebook _44p1_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p3_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p1_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_p3_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p1_p3_1[] = {
-	 2, 3, 4, 7, 7,10,12,12,12,12,10,11,11,13,13,11,
-	12,12,11,11,12,12,12,12,12,11,13,13,13,13,12,12,
-	12,13,14,12,13,13,13,13,12,13,13,13,13,12,13,13,
-	13,13,11,13,13,13,13,12,12,12,14,14,12,13,13,12,
-	12,12,12,13,13,13,12,13,13,13,13,12,13,13,13,13,
-	12,12,12,14,14,12,13,13,12,12,12,13,13,13,13,12,
-	13,13,12,12,12,13,13,13,13,12,12,12,14,14,12,13,
-	13,12,12,12,13,13,13,13,12,13,13,12,12,10,10,11,
-	10,10,11,11,11,11,11,11, 9, 9,10,10,12,11,11,10,
-	10,12,10,10,10,10,13,12,12,12,12,13,11,11,11,11,
-	13,12,12,12,12,13,11,11,11,11,13,12,12,12,12,13,
-	12,12,12,12,13,11,11,11,11,13,12,12,12,12,13,11,
-	11,11,11,13,12,12,11,11,13,12,12,11,11,13,11,11,
-	11,11,13,12,12,11,11,13,11,11,11,11,13,12,12,11,
-	11,13,12,12,11,11,13,11,11,11,11,13,12,12,11,11,
-	13,11,11,11,11,13,12,12,11,11,11,11,11,10,10,11,
-	11,11, 9, 9,11,12,12,11,11,12,12,12, 9, 9,13,13,
-	13,10,10,13,13,13,11,11,13,13,13,14,14,13,13,13,
-	11,10,13,13,14,12,12,13,13,13,11,11,13,13,13,11,
-	11,13,13,13,14,14,13,13,13,10,10,13,13,13,11,11,
-	13,13,13,10,10,13,14,13,11,11,13,14,14,14,14,13,
-	13,13,10,10,13,14,14,11,11,13,13,13,10,10,13,14,
-	14,11,11,13,13,13,14,14,14,13,13,10,10,13,14,14,
-	11,11,13,13,13,10,10,14,12,12, 9, 9,14,12,12, 9,
-	 9,14,11,11, 9, 9,14,12,12, 8, 8,14,11,11, 7, 7,
-	15,13,13,10,10,15,12,12,10,10,15,13,13,10,10,15,
-	12,12,10,10,15,13,13,10,10,15,13,13,10,10,15,12,
-	12,10,10,15,13,13,10,10,15,12,12,10,10,15,13,13,
-	10,10,15,13,13,10,10,15,12,12,10,10,15,13,13, 9,
-	 9,15,12,12, 9, 9,14,13,13, 9, 9,15,13,13,10,10,
-	15,12,12,10,10,15,13,13, 9, 9,15,12,12, 9, 9,15,
-	13,13, 9, 9,13,12,12, 9, 9,13,13,13, 8, 8,13,13,
-	13, 9, 9,13,13,13, 7, 7,14,13,13, 8, 8,14,14,14,
-	10,10,15,14,14,11,11,14,14,14, 9, 9,15,14,14,10,
-	10,15,14,14, 9, 9,14,14,14,10,10,15,14,14,11,11,
-	15,14,14, 9, 9,14,14,14,10,10,14,14,14, 9, 9,15,
-	14,15,10,10,15,14,14,11,11,14,14,14, 9, 9,14,14,
-	14, 9, 9,14,14,14, 8, 8,15,14,14,10,10,15,14,14,
-	11,11,14,14,14, 9, 9,15,14,14, 9, 9,14,14,14, 8,
-	 8,12,12,12,13,13,16,16,16,11,11,17,16,16,12,12,
-	17,16,16,11,11,17,16,16,11,11,17,17,16,13,13,17,
-	16,16,13,13,18,17,16,12,12,17,16,16,13,13,17,16,
-	17,12,12,18,17,17,13,13,17,16,16,14,14,18,17,17,
-	12,12,18,16,16,13,13,17,17,17,13,12,17,17,17,13,
-	13,17,16,16,13,13,18,17,17,12,12,17,16,16,13,12,
-	17,17,17,12,12,18,17,17,13,13,18,16,16,14,14,18,
-	17,17,12,12,17,17,17,13,13,18,17,18,12,12,13,14,
-	14,10,10,16,14,14,13,13,17,15,15,14,14,17,14,14,
-	12,13,16,14,14,13,13,17,15,15,14,14,16,16,16,15,
-	15,17,15,15,14,14,17,16,16,14,15,17,15,15,14,14,
-	17,15,16,14,14,17,16,16,15,15,17,15,15,13,13,17,
-	15,15,14,14,18,15,15,13,14,17,15,15,14,14,16,16,
-	16,15,15,17,15,15,13,13,17,15,15,14,14,17,15,15,
-	13,13,17,15,15,14,14,16,16,16,15,15,17,15,15,13,
-	13,17,15,15,14,14,18,15,15,13,13,13,11,11,10,10,
-	16,14,14,13,12,16,14,14,13,13,16,15,14,12,12,16,
-	14,14,12,12,16,15,15,14,14,16,14,14,14,14,17,15,
-	15,13,13,16,15,15,14,14,17,15,15,13,14,17,15,15,
-	14,14,17,15,14,14,14,17,15,15,13,13,17,15,15,14,
-	14,17,15,15,13,13,17,15,15,14,14,17,14,14,14,14,
-	17,15,15,13,13,17,15,15,13,13,17,15,15,13,13,17,
-	15,15,14,14,17,15,15,14,14,17,15,15,13,13,17,15,
-	15,13,13,17,15,15,13,13,14,14,15, 8, 8,14,14,14,
-	19,19,14,15,15,18,19,14,14,14,19,18,14,14,14,19,
-	19,15,15,15,19,18,15,16,16,19,19,15,15,15,19,19,
-	15,16,16,20,19,15,15,15,19,19,15,15,15,19,19,16,
-	16,16,20,19,15,15,15,19,18,15,16,16,20,19,15,15,
-	15,18,18,15,15,15,19,20,15,16,16,19,19,15,15,15,
-	20,19,15,15,15,20,19,15,15,15,19,18,15,15,15,19,
-	19,15,16,16,19,20,15,15,15,19,19,15,15,15,19,20,
-	15,15,15,19,19,14,12,12, 9, 9,14,14,14,19,19,14,
-	14,14,19,19,14,14,15,20,19,15,14,14,18,19,15,15,
-	15,19,19,15,15,14,20,19,15,15,15,20,19,15,15,14,
-	20,19,15,15,15,20,19,15,15,15,19,20,15,14,14,19,
-	20,15,15,15,20,20,15,14,14,20,19,15,15,15,19,19,
-	15,15,15,19,19,15,14,14,19,19,15,15,15,19,20,15,
-	15,15,20,20,15,15,15,19,19,15,15,15,20,19,16,14,
-	14,19,19,15,15,15,20,19,15,14,15,20,19,14,15,15,
-	20,19,12,12,12,13,13,16,16,16,11,11,16,16,16,12,
-	12,17,16,16,11,11,17,15,16,11,11,17,17,17,13,13,
-	18,16,17,13,13,18,17,17,13,12,17,16,17,13,13,17,
-	17,17,13,13,16,16,16,12,12,17,16,16,13,13,17,16,
-	16,12,12,17,16,16,12,13,17,17,17,12,12,17,17,17,
-	13,13,18,16,16,13,13,18,17,17,12,12,18,17,17,12,
-	12,17,17,17,12,12,17,17,17,12,12,17,16,16,13,13,
-	17,17,17,12,12,17,16,16,12,12,17,17,17,12,12,13,
-	14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,17,14,
-	14,13,13,16,14,14,13,13,17,15,15,15,15,16,16,16,
-	15,15,17,15,15,14,14,17,15,15,15,15,17,15,15,14,
-	14,17,15,15,14,14,16,16,16,15,15,17,15,15,14,14,
-	17,15,15,14,14,17,15,15,14,14,17,15,15,14,14,16,
-	16,16,15,15,18,15,15,14,13,17,15,15,14,14,17,15,
-	15,13,13,17,15,15,14,14,16,16,16,15,15,17,15,15,
-	14,13,17,15,15,14,14,17,15,15,13,13,13,11,11,11,
-	11,16,14,14,12,12,16,14,14,13,13,16,15,14,12,12,
-	17,14,14,12,12,17,15,15,13,13,17,14,14,14,14,17,
-	15,15,13,13,17,14,15,14,13,17,15,15,13,13,16,15,
-	15,13,13,16,14,14,14,14,17,15,15,13,13,16,14,14,
-	13,13,16,15,15,13,13,17,15,15,13,13,17,14,14,14,
-	14,17,15,15,12,12,17,15,15,13,13,17,15,15,12,12,
-	16,15,15,13,13,17,14,14,13,14,17,15,15,12,12,17,
-	14,14,13,13,17,15,15,12,12,14,14,14, 8, 8,14,14,
-	14,18,18,14,15,15,19,19,14,14,14,19,19,14,15,14,
-	18,19,15,15,15,18,19,15,16,16,20,20,15,15,15,19,
-	20,15,16,16,19,20,15,15,15,19,20,15,15,16,19,19,
-	15,16,16,20,20,15,15,15,20,19,15,16,16,20,19,15,
-	15,15,19,20,15,15,15,19,19,15,16,16,20,19,15,15,
-	15,19,19,15,16,15,20,19,15,15,15,19,19,15,15,15,
-	19,20,15,16,16,20,20,15,15,15,19,19,15,15,15,20,
-	20,15,15,15,19,19,14,12,12, 9, 9,14,14,14,18,18,
-	14,14,14,19,20,14,14,14,18,18,14,14,14,18,19,15,
-	15,15,19,20,15,14,14,19,19,15,15,15,19,19,15,14,
-	15,19,19,15,15,15,18,20,15,15,15,19,19,15,14,14,
-	19,19,15,15,15,20,19,15,15,14,20,20,15,15,15,19,
-	19,15,15,15,19,19,15,14,14,19,19,15,15,15,19,19,
-	15,14,14,19,20,14,15,15,19,19,15,15,15,19,19,15,
-	14,14,20,19,15,15,15,19,19,15,14,14,20,19,15,15,
-	15,19,19,13,12,12,13,13,17,17,16,11,11,16,16,16,
-	12,12,17,17,16,11,11,17,16,16,11,11,17,17,17,13,
-	13,17,16,16,13,13,18,17,17,12,12,17,16,16,13,13,
-	18,17,17,12,12,18,17,17,13,13,18,16,17,13,13,17,
-	17,17,12,12,18,17,17,13,13,18,17,17,12,12,17,16,
-	17,12,12,17,16,16,13,13,17,16,16,11,11,17,16,16,
-	12,12,17,17,17,11,11,17,17,17,12,12,18,16,16,13,
-	13,18,17,17,12,11,17,16,16,12,12,18,17,17,11,11,
-	13,14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,17,
-	14,14,12,12,16,14,14,13,13,17,15,15,14,14,17,16,
-	16,15,16,18,15,15,14,14,17,15,15,14,14,17,15,15,
-	14,14,18,15,15,14,14,16,16,16,15,16,18,15,15,14,
-	14,17,16,15,14,14,18,15,15,14,14,17,15,15,14,14,
-	17,16,16,15,15,18,14,15,13,13,17,15,15,14,14,18,
-	15,15,13,13,17,15,15,14,14,17,16,15,15,15,17,15,
-	15,13,13,17,15,15,14,14,18,15,15,13,13,13,11,11,
-	10,10,16,14,14,12,12,16,14,14,12,12,17,14,15,11,
-	11,17,14,14,11,11,17,15,15,13,13,17,14,14,14,13,
-	17,15,15,13,13,16,15,15,13,13,17,15,15,13,13,17,
-	15,15,13,13,17,14,14,14,14,17,15,15,13,13,17,14,
-	15,13,13,16,15,15,13,13,17,15,15,13,13,17,14,14,
-	13,13,17,15,15,12,12,16,14,14,12,12,17,15,15,12,
-	12,17,15,15,13,13,17,14,14,13,13,17,15,15,12,12,
-	17,14,14,12,12,17,15,15,12,12,13,15,14, 8, 8,14,
-	14,14,19,19,14,15,15,18,19,14,14,14,18,19,14,15,
-	14,19,19,15,16,15,19,19,15,16,16,19,20,15,15,15,
-	19,19,15,16,16,19,19,15,16,16,19,19,15,15,15,19,
-	19,15,16,16,20,20,15,15,15,19,19,15,15,15,19,19,
-	15,15,15,19,19,15,15,15,19,19,15,16,16,20,19,15,
-	15,15,19,19,15,15,15,19,19,15,15,15,19,19,15,16,
-	15,19,19,15,16,16,21,19,15,15,15,20,20,15,15,15,
-	20,21,15,15,15,19,20,14,12,12, 8, 8,14,14,14,19,
-	19,14,13,13,19,19,14,14,14,19,19,14,13,14,19,19,
-	15,15,15,20,20,15,14,14,20,19,15,15,15,19,20,15,
-	14,14,19,20,15,15,15,20,19,15,15,15,19,20,15,14,
-	14,20,20,15,15,15,20,19,15,14,14,19,19,15,15,15,
-	19,19,15,15,15,20,19,15,14,14,21,19,15,15,15,20,
-	21,15,14,14,21,19,15,15,15,19,19,15,15,15,20,20,
-	15,14,14,19,21,15,15,15,19,19,15,14,14,19,20,15,
-	15,15,19,19,13,12,12,13,13,17,16,16,11,11,17,16,
-	15,12,12,18,16,16,11,11,17,16,16,11,11,18,17,17,
-	13,13,18,16,16,13,13,17,17,17,12,13,18,17,16,13,
-	13,18,17,17,13,13,17,17,17,13,13,17,16,16,13,13,
-	18,16,17,12,12,17,16,16,13,12,17,17,17,12,12,18,
-	17,17,13,12,18,16,16,13,13,18,17,17,12,12,17,16,
-	16,12,12,17,17,17,11,11,17,16,16,12,12,17,16,16,
-	13,13,17,16,16,11,11,17,16,16,12,12,17,17,17,11,
-	11,13,14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,
-	17,14,14,12,12,16,14,14,13,13,17,15,15,14,14,17,
-	15,16,15,15,17,15,15,14,14,17,15,16,14,15,18,15,
-	15,14,14,17,15,15,14,14,16,16,16,15,15,18,15,15,
-	13,14,17,15,15,14,14,18,15,15,14,14,17,15,15,14,
-	14,17,16,16,15,15,17,15,15,13,13,17,15,15,14,14,
-	18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,17,
-	15,15,13,13,17,15,15,14,14,18,15,15,13,13,13,11,
-	11,10,10,16,14,14,12,12,16,14,14,13,13,17,14,14,
-	11,11,17,14,14,12,12,17,15,15,14,14,17,14,14,14,
-	14,17,15,15,13,13,17,15,14,13,13,16,15,15,13,13,
-	16,15,15,13,13,17,14,14,14,14,17,15,15,13,13,17,
-	14,14,13,13,16,15,15,13,13,16,15,15,13,13,17,14,
-	14,13,13,17,15,15,12,12,17,14,14,12,12,16,15,15,
-	12,12,17,15,15,13,13,17,14,14,13,13,17,15,15,12,
-	12,17,14,14,12,12,16,15,15,12,12,14,14,14, 8, 8,
-	14,14,14,18,18,14,15,15,19,18,14,14,14,18,18,14,
-	14,14,18,19,15,16,15,19,19,15,17,16,20,20,15,15,
-	15,19,19,15,16,16,19,19,15,15,15,19,19,15,16,15,
-	18,19,15,16,16,20,20,15,15,15,19,19,15,16,16,19,
-	20,15,15,15,19,19,15,15,16,19,19,15,16,16,20,20,
-	15,15,15,19,19,15,15,15,19,20,15,15,15,19,19,15,
-	15,15,19,19,15,16,16,20,20,15,15,15,19,20,15,16,
-	16,20,20,15,15,15,19,19,13,12,12, 8, 8,14,14,14,
-	19,20,14,14,14,19,19,14,14,14,18,19,14,14,14,19,
-	20,15,15,15,19,20,15,14,14,21,20,15,15,15,20,20,
-	15,15,14,19,19,15,15,15,19,19,15,15,15,19,19,15,
-	14,14,19,20,15,15,15,19,20,15,14,14,19,19,15,15,
-	15,19,19,15,15,15,19,19,16,14,14,19,19,15,15,15,
-	20,20,15,14,14,21,19,15,15,15,19,19,15,15,15,19,
-	20,16,14,14,19,20,15,15,15,19,19,15,14,14,19,19,
-	15,15,15,20,19,
-};
-
-static const static_codebook _44p1_p3_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p1_p3_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p1_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p1_p4_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p1_p4_0[] = {
-	 2, 6, 6,14,14, 6, 7, 7,14,14, 7, 7, 7,14,14, 0,
-	13,13,16,16, 0,13,13,15,14, 7, 8, 8,15,15, 9,10,
-	10,16,16, 9, 8, 8,15,15, 0,13,13,17,16, 0,13,13,
-	15,16, 8, 8, 8,15,15,12,11,11,16,16, 9, 8, 8,14,
-	14, 0,13,13,17,18, 0,13,13,15,15, 0,14,14,16,16,
-	 0, 0, 0,19,18, 0,12,12,16,15, 0,15,16, 0,20, 0,
-	14,14,16,16, 0,14,14,17,17, 0, 0, 0,19,18, 0,12,
-	12,15,15, 0,17,17, 0,20, 0,14,14,16,16, 5, 6, 7,
-	12,12, 9, 9, 9,14,14,10,10,10,14,14, 0,21,21,18,
-	17, 0,20,20,18,17, 9,10,10,14,14,12,12,12,16,16,
-	12,10,10,14,14, 0,20,19,18,17, 0, 0,20,17,18,11,
-	10,10,14,14,14,13,13,18,18,13,11,11,14,14, 0,20,
-	20,17,18, 0,21,21,17,17, 0,21, 0,18,18, 0, 0, 0,
-	 0, 0, 0,20,19,16,17, 0, 0, 0,19,19, 0, 0, 0,18,
-	18, 0,21,21,18,18, 0, 0, 0, 0, 0, 0,20,20,16,17,
-	 0, 0, 0,21,21, 0, 0, 0,18,19, 6, 6, 6,13,12, 8,
-	 6, 6,11,11, 8, 6, 6,13,13, 0, 9, 9,11,11, 0,11,
-	10,14,14, 9, 7, 7,13,13,11, 9, 9,13,13,10, 6, 6,
-	13,13, 0,10,10,14,15, 0,10,10,13,13, 9, 7, 7,13,
-	13,13,10, 9,13,13,10, 6, 6,13,13, 0,10,10,15,14,
-	 0,10,10,13,13, 0,11,11,15,15, 0,19,20,17,17, 0,
-	 9, 9,13,13, 0,13,13,20,20, 0,11,11,13,13, 0,11,
-	11,15,15, 0,19,19,17,17, 0,10,10,13,13, 0,15,15,
-	20,20, 0,12,12,13,13, 0,10,10,12,12, 0,11,11,15,
-	15, 0,11,11,15,15, 0,15,15,20, 0, 0,16,16, 0,21,
-	 0,11,11,15,15, 0,14,14,18,17, 0,11,11,15,15, 0,
-	15,16,19,20, 0,16,16,21,21, 0,12,12,15,15, 0,15,
-	14,18,18, 0,11,11,16,16, 0,15,15,21,21, 0,16,15,
-	 0, 0, 0,16,16,21, 0, 0, 0, 0, 0, 0, 0,14,14,20,
-	20, 0,18,18, 0, 0, 0,16,17,21, 0, 0,16,16,21,21,
-	 0, 0, 0, 0, 0, 0,15,15,21,21, 0,20,19, 0,21, 0,
-	17,17, 0, 0, 0,10,10,12,11, 0,10,10,10,11, 0,11,
-	11,12,12, 0,11,11, 9, 9, 0,13,13,11,12, 0,11,11,
-	12,12, 0,13,13,12,12, 0,10,10,12,12, 0,12,12,13,
-	13, 0,12,12,12,12, 0,11,11,12,12, 0,13,13,12,12,
-	 0,10,10,12,12, 0,13,13,14,14, 0,12,12,12,12, 0,
-	14,14,14,13, 0,19,20,15,15, 0,12,11,12,12, 0,15,
-	15,21,20, 0,13,13,11,11, 0,13,13,13,13, 0,19, 0,
-	15,15, 0,12,12,12,12, 0,17,16,19, 0, 0,13,13,12,
-	12, 7, 7, 7,16,16,11, 9, 9,15,15,12, 9, 9,16,16,
-	 0,13,13,15,14, 0,14,14,17,16,10, 9, 9,16,16,14,
-	11,11,17,16,12, 9, 8,15,15, 0,13,13,18,18, 0,13,
-	13,15,15,12,10,10,18,17,15,12,12,17,17,14, 9, 9,
-	16,16, 0,13,13,18,19, 0,14,13,17,16, 0,14,14,18,
-	18, 0, 0, 0,20,21, 0,12,12,16,16, 0,16,16,20,21,
-	 0,14,14,17,16, 0,14,14,18,19, 0, 0, 0,19,21, 0,
-	13,13,17,17, 0,17,17, 0,21, 0,15,15,16,16, 8, 7,
-	 7,14,14,11,10,10,15,15,12,10,10,15,15, 0,20,20,
-	18,18, 0, 0, 0,17,17,11,10,10,16,16,14,12,12,18,
-	17,14,11,11,15,15, 0,20,21,18,18, 0, 0,19,18,17,
-	12,10,10,16,16,17,14,14,19,19,14,11,11,15,15, 0,
-	21,21,19,19, 0,21,20,19,18, 0,21, 0,18,19, 0, 0,
-	 0, 0, 0, 0,20,20,18,17, 0,21, 0, 0, 0, 0, 0, 0,
-	19,18, 0, 0, 0,18,19, 0, 0, 0, 0, 0, 0, 0,21,17,
-	18, 0, 0, 0, 0,21, 0, 0,21,18,19,11, 9, 9,14,14,
-	13,10,10,13,13,13,11,11,15,15, 0,13,13,12,12, 0,
-	15,15,16,16,13,10,10,15,15,16,12,12,15,15,15,10,
-	10,15,15, 0,14,13,16,15, 0,14,13,15,15,13,10,10,
-	15,15,18,14,14,15,15,15,10,10,14,15, 0,14,14,16,
-	16, 0,14,14,16,15, 0,15,15,17,16, 0,21, 0,18,18,
-	 0,12,13,15,15, 0,16,16, 0, 0, 0,14,14,15,15, 0,
-	15,15,16,16, 0,21,20,18,18, 0,13,13,15,15, 0,19,
-	18, 0, 0, 0,15,15,15,15, 0,11,11,13,13, 0,12,12,
-	16,16, 0,12,12,16,16, 0,15,16,20, 0, 0,16,17, 0,
-	 0, 0,12,12,16,16, 0,14,14,18,18, 0,11,11,16,17,
-	 0,15,15,20, 0, 0,16,16, 0, 0, 0,12,12,16,16, 0,
-	15,15,19,19, 0,11,11,17,17, 0,16,16,21, 0, 0,16,
-	16, 0, 0, 0,17,17,20,20, 0, 0, 0, 0, 0, 0,15,15,
-	20, 0, 0,17,18, 0, 0, 0,17,17, 0, 0, 0,16,16, 0,
-	21, 0, 0, 0, 0, 0, 0,15,15,21, 0, 0,19,18, 0, 0,
-	 0,18,17, 0, 0, 0,11,11,14,14, 0,11,11,15,15, 0,
-	12,12,16,16, 0,13,13,14,14, 0,14,14,17,17, 0,12,
-	12,16,16, 0,14,14,16,16, 0,11,11,16,15, 0,13,13,
-	16,17, 0,13,13,16,16, 0,12,12,15,16, 0,15,14,16,
-	16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,16,16,
-	 0,15,14,18,18, 0,21, 0,19,19, 0,13,13,15,15, 0,
-	16,16,20,20, 0,14,14,16,15, 0,14,14,17,17, 0,21,
-	 0,20,18, 0,13,13,15,15, 0,17,17, 0, 0, 0,14,14,
-	16,15, 8, 8, 8,16,16,12, 9, 9,16,16,13, 9, 9,16,
-	16, 0,14,14,18,17, 0,14,14,16,17,12,10,10,18,17,
-	14,11,11,18,18,14, 9, 9,16,16, 0,13,13,18,18, 0,
-	13,13,17,16,12, 9, 9,16,17,17,13,13,16,16,14, 9,
-	 9,15,15, 0,14,14,20,20, 0,13,13,15,15, 0,15,14,
-	18,18, 0, 0, 0,20,21, 0,12,13,16,17, 0,16,16,20,
-	21, 0,14,14,16,17, 0,14,14,18,17, 0, 0, 0,20,21,
-	 0,13,13,16,16, 0,19,17, 0,21, 0,14,15,16,16, 8,
-	 7, 7,14,13,12,10,10,15,15,13,10,10,15,15, 0,21,
-	21,18,19, 0,20,21,18,18,12,10,10,16,15,15,12,12,
-	17,17,14,11,11,15,15, 0,21,21,19,18, 0, 0,21,17,
-	18,13,11,11,15,15,16,13,13,18,19,15,11,11,15,14,
-	 0,21, 0,19,19, 0, 0,21,18,18, 0, 0,21,19,19, 0,
-	 0, 0, 0, 0, 0,20,19,17,17, 0, 0, 0,21, 0, 0,21,
-	 0,18,19, 0, 0,20,20,19, 0, 0, 0, 0, 0, 0,21,20,
-	18,17, 0, 0, 0, 0,20, 0, 0, 0,18,19, 0,10,10,15,
-	14, 0,11,11,14,14, 0,11,11,15,16, 0,14,14,15,15,
-	 0,15,15,16,16, 0,11,11,16,16, 0,14,13,16,16, 0,
-	11,11,15,15, 0,14,14,16,16, 0,14,14,15,15, 0,11,
-	11,15,15, 0,13,13,15,15, 0,11,11,15,15, 0,15,15,
-	18,17, 0,14,14,15,15, 0,15,16,18,18, 0, 0, 0,20,
-	20, 0,14,13,16,15, 0,17,17,21, 0, 0,15,15,15,15,
-	 0,16,15,17,17, 0, 0, 0,19,19, 0,13,13,15,15, 0,
-	20,19, 0, 0, 0,15,15,15,15, 0,11,11,13,13, 0,12,
-	12,16,16, 0,12,12,16,16, 0,15,15,21,21, 0,17,16,
-	 0, 0, 0,12,12,16,16, 0,14,14,17,17, 0,11,11,16,
-	16, 0,15,15, 0, 0, 0,16,16,21, 0, 0,12,12,17,16,
-	 0,14,15,20,20, 0,11,11,16,16, 0,15,15, 0,20, 0,
-	16,16, 0,21, 0,16,17,21, 0, 0, 0, 0, 0, 0, 0,15,
-	15, 0,21, 0,18,18, 0, 0, 0,17,16, 0, 0, 0,17,17,
-	21, 0, 0, 0, 0, 0, 0, 0,15,15, 0,20, 0,19,20,21,
-	 0, 0,17,18, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
-	 0,12,12,16,16, 0,13,13,15,15, 0,15,15,17,17, 0,
-	13,12,17,16, 0,14,14,17,16, 0,11,11,16,16, 0,14,
-	14,17,17, 0,14,14,17,17, 0,12,12,16,16, 0,15,15,
-	17,17, 0,11,11,16,16, 0,14,14,17,17, 0,14,14,16,
-	16, 0,15,15,18,17, 0, 0, 0,19, 0, 0,13,13,16,16,
-	 0,16,16, 0,21, 0,14,14,16,16, 0,15,15,18,17, 0,
-	 0, 0,19,19, 0,13,13,16,16, 0,18,17, 0,21, 0,14,
-	15,16,16, 0,11,11,16,16, 0,13,13,17,17, 0,13,13,
-	17,17, 0,16,16,16,17, 0,16,16,18,18, 0,12,12,17,
-	17, 0,16,15,18,17, 0,12,12,16,16, 0,16,15,19,19,
-	 0,16,15,17,17, 0,12,12,17,18, 0,16,16,18,18, 0,
-	12,12,16,16, 0,16,16,19,19, 0,15,16,17,17, 0,15,
-	16,18,18, 0, 0, 0,20,20, 0,13,13,16,16, 0,18,18,
-	21,20, 0,15,15,16,16, 0,16,16,19,18, 0, 0, 0,19,
-	20, 0,14,14,17,17, 0,19,19, 0,21, 0,15,16,16,16,
-	 0, 9, 9,14,14, 0,13,13,15,15, 0,14,14,15,15, 0,
-	 0,21,19,19, 0, 0,21,18,18, 0,12,12,15,15, 0,15,
-	15,18,18, 0,14,13,15,15, 0,21,21,18,19, 0,21,20,
-	18,18, 0,13,13,16,16, 0,17,17,18,19, 0,14,14,15,
-	15, 0, 0,21,19,19, 0,21,20,18,19, 0,20,20,19,19,
-	 0, 0, 0, 0, 0, 0,19,20,17,17, 0, 0, 0,21,21, 0,
-	21, 0,18,20, 0,21, 0,18,21, 0, 0, 0, 0, 0, 0,21,
-	21,19,18, 0, 0, 0, 0, 0, 0, 0, 0,19,19, 0,18,18,
-	15,15, 0,18,20,17,16, 0,20, 0,17,17, 0,21, 0,17,
-	17, 0,21,20,19,20, 0,19,19,16,16, 0,21,21,17,18,
-	 0,19,19,17,17, 0,20,21,21,21, 0,20,20,18,18, 0,
-	19,19,16,16, 0, 0,21,18,19, 0,18,19,16,17, 0,21,
-	21,19,20, 0,21,19,18,18, 0,21,20,19,21, 0, 0, 0,
-	20,21, 0,19,19,17,16, 0, 0, 0, 0, 0, 0,21,20,17,
-	17, 0,20,21,19,18, 0, 0, 0, 0,21, 0,19,18,16,17,
-	 0, 0, 0, 0, 0, 0,20,20,17,17, 0,11,11,14,14, 0,
-	13,13,16,16, 0,13,13,16,16, 0,17,17,21, 0, 0,17,
-	18, 0, 0, 0,12,12,16,16, 0,15,15,17,18, 0,12,12,
-	16,16, 0,16,16, 0,20, 0,17,17, 0,21, 0,12,12,17,
-	17, 0,16,16,19,20, 0,12,12,17,17, 0,17,17, 0,20,
-	 0,17,17, 0, 0, 0,17,17,21, 0, 0, 0, 0, 0, 0, 0,
-	15,15, 0,20, 0,19,19, 0, 0, 0,18,18, 0, 0, 0,17,
-	17, 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0, 0, 0,20,19,
-	 0, 0, 0,19,18, 0, 0, 0,14,14,21,19, 0,16,16,20,
-	21, 0,16,16,20,20, 0,17,17,20, 0, 0,17,17,20,20,
-	 0,15,15,20,20, 0,19,18,20, 0, 0,15,15,20,20, 0,
-	17,18,21,20, 0,17,17,20,21, 0,15,15,19,19, 0,19,
-	18,21,21, 0,15,15,19,20, 0,17,18, 0, 0, 0,17,17,
-	20,20, 0,17,18,20,21, 0, 0, 0, 0, 0, 0,15,15,20,
-	20, 0,19,19, 0, 0, 0,17,17,19,21, 0,17,17, 0,21,
-	 0, 0, 0, 0,21, 0,15,15,20,19, 0, 0,20, 0, 0, 0,
-	17,17,21,20, 0,12,12,16,16, 0,14,14,17,17, 0,13,
-	13,17,17, 0,16,16,17,18, 0,17,16,18,18, 0,13,13,
-	18,17, 0,15,16,19,18, 0,13,13,16,16, 0,16,16,19,
-	19, 0,16,16,17,17, 0,13,12,17,17, 0,16,16,18,17,
-	 0,12,12,16,16, 0,17,17,19,18, 0,16,15,16,16, 0,
-	16,17,18,19, 0, 0, 0,20,20, 0,14,14,17,16, 0,18,
-	18,21, 0, 0,16,16,16,16, 0,16,16,18,17, 0, 0,21,
-	21,21, 0,14,14,16,16, 0,21,20,21, 0, 0,16,16,16,
-	16, 0,10,10,14,14, 0,14,14,15,16, 0,14,14,15,15,
-	 0, 0,21,18,18, 0, 0,21,18,19, 0,13,13,16,16, 0,
-	16,16,18,17, 0,14,14,15,15, 0,20, 0,18,18, 0,21,
-	 0,18,17, 0,13,13,16,15, 0,17,17,19,19, 0,14,14,
-	15,15, 0,20,20,18,19, 0, 0, 0,18,17, 0, 0,21,18,
-	18, 0, 0, 0, 0, 0, 0,20,21,18,17, 0, 0, 0, 0, 0,
-	 0, 0, 0,19,19, 0, 0,21,18,18, 0, 0, 0, 0, 0, 0,
-	21, 0,18,17, 0, 0, 0, 0,21, 0, 0, 0,19,20, 0,19,
-	19,16,16, 0, 0,21,18,17, 0,21, 0,18,18, 0,20, 0,
-	19,18, 0,21,20,19,19, 0,21,19,17,18, 0, 0,21,19,
-	19, 0,21,19,18,18, 0,21, 0,20,18, 0, 0,21,18,18,
-	 0,20,21,17,17, 0,21, 0,18,18, 0,21,19,17,17, 0,
-	21, 0, 0,20, 0, 0,20,17,18, 0, 0, 0,19,20, 0, 0,
-	 0,20,19, 0,19,21,17,18, 0,21, 0, 0, 0, 0,21,21,
-	18,17, 0, 0,21,18,18, 0, 0, 0, 0,21, 0,20,19,16,
-	17, 0, 0, 0, 0, 0, 0,21,20,17,17, 0,11,11,13,13,
-	 0,13,13,16,16, 0,13,13,16,16, 0,17,17, 0,21, 0,
-	18,19,21, 0, 0,12,12,16,16, 0,15,15,19,18, 0,13,
-	13,16,16, 0,16,17,21,19, 0,17,17,21,21, 0,13,13,
-	16,16, 0,16,16,20,18, 0,13,13,16,16, 0,17,17, 0,
-	 0, 0,18,18, 0, 0, 0,18,17, 0,20, 0, 0, 0, 0, 0,
-	 0,15,15,21,21, 0,19,18, 0, 0, 0,17,17,21,21, 0,
-	17,17, 0, 0, 0, 0, 0, 0, 0, 0,15,15,20,21, 0,20,
-	20, 0, 0, 0,19,19, 0, 0, 0,14,15,21,19, 0,16,16,
-	 0,21, 0,17,16,21,21, 0,17,18,21,20, 0,18,18, 0,
-	21, 0,16,16, 0,20, 0,19,19, 0, 0, 0,16,15, 0,20,
-	 0,18,18, 0, 0, 0,17,17, 0,21, 0,16,16,20,20, 0,
-	20,19, 0, 0, 0,15,16,21,22, 0,18,18, 0, 0, 0,18,
-	17, 0, 0, 0,18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
-	21,20, 0,19,20, 0, 0, 0,18,17,21, 0, 0,17,18, 0,
-	 0, 0, 0, 0, 0, 0, 0,16,16, 0,20, 0, 0,20, 0, 0,
-	 0,18,18,22, 0,
-};
-
-static const static_codebook _44p1_p4_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p1_p4_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p1_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_p4_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p1_p4_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p1_p4_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p1_p4_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p1_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p1_p5_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p5_0[] = {
-	 1, 6, 6, 7, 8, 8, 7, 8, 8, 7, 9, 8,10,11,11, 9,
-	 8, 8, 7, 8, 8,11,11,11, 9, 8, 8, 6, 7, 7,10,10,
-	10,10,10,10,10,10,10,14,13,13,12,11,11,10,10,10,
-	14,14,13,12,11,11, 6, 6, 6, 8, 5, 5, 8, 7, 7, 9,
-	 7, 7,11,10,10, 9, 7, 7, 9, 7, 7,12,10,10,10, 7,
-	 7, 7, 8, 8,12,11,10,12,10,10,11,10,10,15,13,13,
-	13,10,10,11,10,10,17,14,13,13,10,10, 7, 7, 7,12,
-	11,12,12,11,11,12,11,11,16,14,14,13,12,12,12,11,
-	11,17,15,14,14,12,12,10, 9, 9,13,11,11,13,11,11,
-	13,11,11,17,14,13,14,11,11,12,11,11,16,15,14,14,
-	11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,15,13,
-	13,14,11,10,12,10,10,16,14,14,14,10,10, 8, 7, 7,
-	12,11,11,12,11,11,12,11,11,17,14,14,14,12,12,12,
-	11,11,16,15,15,14,12,12,10,10,10,13,11,11,13,11,
-	11,13,11,12,16,14,14,14,11,11,13,12,11,16,15,15,
-	14,11,11,
-};
-
-static const static_codebook _44p1_p5_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p5_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p1_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_p5_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p5_1[] = {
-	 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 8, 8, 8,
-	 7, 7, 8, 8, 8, 9, 8, 8, 9, 7, 7, 6, 6, 6, 9, 8,
-	 7, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
-	10, 8, 8,10, 8, 8, 7, 6, 6, 9, 6, 6, 9, 7, 7, 9,
-	 7, 7,10, 8, 8, 9, 6, 6, 9, 7, 7,10, 8, 8, 9, 7,
-	 7, 7, 8, 8,11, 9, 9,11, 9, 9,11, 8, 9,12, 9, 9,
-	12, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,10,
-	 9, 9,10,10, 9,10, 9, 9,11,10,10,11, 9, 9,11, 9,
-	 9,11,10,11,11, 9, 9,10, 8, 8,11, 9, 9,10, 9, 9,
-	11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
-	 9, 9, 9, 8, 8,11, 9, 9,12, 9, 9,11, 9, 9,12, 9,
-	 9,12, 8, 8,12, 9, 9,12, 9, 9,12, 8, 8, 9, 7, 7,
-	11, 9, 9,11,10,10,11, 9, 9,11,11,11,11, 9, 9,11,
-	10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11,10,
-	10,11, 9, 9,11,10,10,11, 9, 9,11, 9,10,11,10,10,
-	11, 9, 9,
-};
-
-static const static_codebook _44p1_p5_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p5_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p1_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p1_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p1_p6_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p1_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p1_p6_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p1_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p1_p6_1[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p1_p6_1[] = {
-	 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,13,14,16,16,16,16,
-};
-
-static const static_codebook _44p1_p6_1 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p1_p6_1,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p1_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p1_p6_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p1_p6_2[] = {
-	 3, 4, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p1_p6_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p1_p6_2,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p1_p6_2,
-	0
-};
-
-static const long _huff_lengthlist__44p1_short[] = {
-	 4, 5, 7, 8,10,13,14, 4, 2, 4, 6, 8,11,12, 7, 4,
-	 3, 5, 8,12,14, 8, 5, 4, 4, 8,12,12, 9, 7, 7, 7,
-	 9,10,11,13,11,11, 9, 7, 8,10,13,11,10, 6, 5, 7,
-	 9,
-};
-
-static const static_codebook _huff_book__44p1_short = {
-	2, 49,
-	(long *)_huff_lengthlist__44p1_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p2_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p2_l0_0[] = {
-	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 4, 6, 5,
-	 8, 7, 9, 8,10, 9,11,10,11,11, 4, 5, 6, 7, 8, 8,
-	 9, 9,10,10,10,10,11, 8, 9, 8,10, 8,10, 9,11,10,
-	11,11,11,11, 8, 8, 9, 8,10, 9,10,10,11,11,11,11,
-	11, 9,10,10,11,11,11,11,11,11,12,11,12,11, 9,10,
-	10,10,11,11,11,11,11,11,12,11,12,10,11,11,12,11,
-	12,12,12,12,12,12,12,12,10,11,11,11,11,12,12,12,
-	13,12,12,12,12,11,12,12,12,12,13,13,12,12,12,12,
-	12,12,11,12,12,12,12,13,13,12,13,12,12,12,12,12,
-	13,13,13,13,13,13,12,13,12,13,12,12,12,13,13,13,
-	13,13,13,13,12,13,12,12,12,
-};
-
-static const static_codebook _44p2_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p2_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p2_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p2_l0_1[] = {
-	 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
-	 5, 6, 6, 6, 5, 6, 5, 6, 6,
-};
-
-static const static_codebook _44p2_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p2_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p2_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p2_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p2_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p2_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p2_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p2_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p2_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p2_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p2_long[] = {
-	 3, 4, 9, 8, 8,10,13,16, 4, 2, 9, 5, 7,10,14,18,
-	 9, 7, 6, 5, 7, 9,12,16, 7, 5, 5, 3, 5, 8,11,13,
-	 8, 7, 7, 5, 5, 7, 9,11,10,10, 9, 8, 6, 6, 8,10,
-	13,14,13,11, 9, 8, 9,10,17,18,16,14,11,10,10,10,
-};
-
-static const static_codebook _huff_book__44p2_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p2_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p2_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p1_0[] = {
-	 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p2_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p2_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p2_p2_0[] = {
-	 1, 4, 4, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
-	10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0, 0, 0, 0,
-	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
-	 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0,
-	 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0,11,11, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0,
-	 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0, 0, 0, 0,
-	 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0,
-	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
-	 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-	 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
-	 0, 0,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-	 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
-	11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,11,10, 0, 0, 0, 0, 0,
-	 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
-	 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0,11,11, 0, 0,
-	 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,
-	 0, 0, 0, 0, 0,10,10, 0, 0, 0,13,13, 0, 0, 0, 0,
-	 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12,
-	 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0,
-	 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
-	 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11,
-	 0, 0, 0,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0,
-	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,11, 0, 0,
-	 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0, 0, 0,
-	 0, 0, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0, 0, 0,
-	 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12,
-	 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0,11,11, 0,
-	 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0, 0,
-	 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0, 0,
-	 0, 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,
-	10, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,14,13,
-	 0, 0, 0, 0, 0, 0, 0, 0,13,12, 0, 0, 0,13,13, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,
-	11, 0, 0, 0,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0,
-	 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0,
-	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0, 0,
-	 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,12,12, 0, 0, 0,
-	 0, 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,
-	12, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0, 0,12,12,
-	 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0,
-	 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,14,14, 0, 0,
-	 0, 0, 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,
-	12,12, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0,12,
-	12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,14,13,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
-	11,11, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0, 0, 0,
-	 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12,
-	 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0,
-	 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,14,14, 0, 0,
-	 0, 0, 0, 0, 0, 0,14,14, 0, 0, 0, 0, 0, 0, 0, 0,
-	12,12, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44p2_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p2_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p2_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p3_0[] = {
-	 1, 5, 5, 6, 7, 7, 0, 8, 8, 6, 9, 9, 8,11,11, 0,
-	 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 5, 7, 7, 7,10,
-	10, 0,12,12, 8,11,11, 9,12,12, 0,11,12, 0,12,12,
-	 0,15,15, 0,12,12, 0, 6, 6, 0, 6, 6, 0, 7, 7, 0,
-	 7, 7, 0,10,10, 0, 7, 7, 0, 8, 8, 0,11,11, 0, 7,
-	 7, 6, 7, 7,10, 9, 9, 0,11,10,10, 9, 9,12,12,12,
-	 0,10,10, 0,11,11, 0,13,13, 0,11,11, 7, 6, 6,10,
-	10,10, 0,11,11,11,11,11,12,12,12, 0,11,11, 0,12,
-	12, 0,15,15, 0,11,11, 0,11,11, 0,11,11, 0,12,12,
-	 0,12,12, 0,14,14, 0,12,12, 0,12,12, 0,15,15, 0,
-	11,11, 0, 8, 8, 0,10,10, 0,11,11, 0,11,11, 0,12,
-	12, 0,12,12, 0,11,11, 0,15,15, 0,11,11, 0, 6, 6,
-	 0,10,10, 0,12,12, 0,10,10, 0,13,13, 0,12,12, 0,
-	13,13, 0,14,14, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p2_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p2_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p3_1[] = {
-	 2, 3, 3, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0, 9, 9, 0,
-	 9, 9, 0, 9, 9, 0, 9, 9, 0, 8, 8, 0, 6, 6, 0, 7,
-	 7, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8,
-	 0, 8, 8, 0, 8, 8, 0, 6, 6, 0, 6, 6, 0, 6, 6, 0,
-	 8, 8, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0, 6,
-	 6, 0, 8, 8, 0, 9, 9, 0, 9, 9, 0,10,10, 0,10,10,
-	 0,10,10, 0,10,10, 0,11,11, 0, 9, 9, 0, 7, 7, 0,
-	10,10, 0,10,10, 0,12,11, 0,12,12, 0,11,11, 0,11,
-	11, 0,12,12, 0,10,10, 0, 7, 7, 0,10,10, 0,10,10,
-	 0,12,12, 0,11,12, 0,11,11, 0,11,11, 0,11,11, 0,
-	10,10, 0, 8, 8, 0, 9, 9, 0, 9, 9, 0,10,10, 0,10,
-	10, 0,10, 9, 0,10,10, 0,10,10, 0, 9, 9, 0, 6, 6,
-	 0,10,10, 0,10,10, 0,11,11, 0,12,12, 0,11,11, 0,
-	11,11, 0,12,12, 0,11,11, 0, 7, 7, 0, 9, 9, 0, 9,
-	 9, 0,11,11, 0,11,11, 0,10,10, 0,10,10, 0,11,11,
-	 0, 9, 9,
-};
-
-static const static_codebook _44p2_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p2_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p2_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p4_0[] = {
-	 1, 6, 6, 6, 7, 7, 7, 8, 8, 7, 8, 8,10,11,11, 9,
-	 8, 8, 7, 8, 8,11,11,11, 9, 8, 8, 6, 7, 7, 9,11,
-	11, 9,11,11,10,11,11,12,13,13,11,12,12,10,11,11,
-	13,14,14,12,12,12, 6, 6, 6, 8, 6, 6, 8, 7, 7, 9,
-	 7, 7,11,10,10,10, 6, 6, 9, 7, 7,12,10,10,11, 6,
-	 7, 7, 7, 7,11,10,10,12,10,10,11,10,10,14,13,13,
-	13,10,10,12,11,11,15,13,13,14,10,10, 8, 7, 7,12,
-	11,11,12,11,11,11,11,11,14,14,14,13,12,12,12,11,
-	11,15,15,15,13,12,12, 0,10,10, 0,11,11, 0,11,11,
-	 0,11,11, 0,14,14, 0,11,11, 0,11,11, 0,15,15, 0,
-	11,11, 7, 8, 8,12,10,10,12,10,10,12,11,11,15,13,
-	13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
-	12,11,11,12,11,11,12,11,11,16,14,14,14,12,12,13,
-	12,12,15,14,14,15,12,12, 0,11,11, 0,12,12, 0,12,
-	12, 0,12,12, 0,15,15, 0,12,12, 0,12,12, 0,14,14,
-	 0,12,12,
-};
-
-static const static_codebook _44p2_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p2_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p2_p4_1[] = {
-	 3, 4, 4, 8, 8,11, 9, 9,12,12,11,10,10,12,12,12,
-	10,10,11,11,12,12,12,12,12,12,11,11,13,13,12,12,
-	12,13,13,12,10,10,12,12,12,11,11,13,13,12,13,13,
-	13,13,12,11,11,13,13,12,12,12,13,13,12,10,10,12,
-	12,12,11,11,13,13,12,13,13,12,12,12,11,11,13,13,
-	12,13,13,13,13,12,11,11,12,12,12,11,11,12,12,12,
-	13,13,12,12,12,13,13,13,13,12,13,13,13,13,13,13,
-	13,12,12,12,13,13,13,13,12,13,13,12,12,11, 8, 8,
-	10,10,12,11,11,11,11,12,10,10,10,10,13,11,11,10,
-	10,13,11,11,10,10,13,12,12,12,12,13,11,11,11,11,
-	13,12,12,11,11,13,12,12,11,11,13,12,12,12,11,13,
-	12,12,12,12,13,11,11,11,11,13,12,12,11,11,13,11,
-	12,11,11,13,12,12,11,11,14,12,12,11,11,13,11,11,
-	11,11,14,12,12,11,11,13,11,12,10,10,14,12,12,11,
-	11,14,12,12,11,11,14,11,11,11,11,14,12,12,11,11,
-	13,12,12,11,11,14,12,12,11,11,11, 8, 8,10,10,12,
-	 7, 7,10,10,12, 9, 9,11,11,13, 9, 9, 9, 9,13,13,
-	13,10,10,13, 9, 9,12,12,13,13,13,12,12,13, 9, 8,
-	11,11,13,10,10,12,12,14,13,13,11,11,13, 9, 9,11,
-	11,13,13,13,12,12,13, 9, 9,10,10,13,10,10,11,11,
-	13,13,13,10,10,14,10,10,11,11,14,14,14,12,12,13,
-	 9, 9,10,10,13,10,10,11,11,14,13,14,10,10,14,14,
-	14,11,12,14,14,14,14,14,14,13,13,10,10,13,14,14,
-	11,11,14,14,14,10,10,14, 9, 9, 9, 9,14, 9, 9, 9,
-	 9,14,10,10, 9, 9,14,10,10, 8, 8,14,11,11, 8, 8,
-	15,11,11,10,10,15,12,12,10,10,15,10,10,10,10,15,
-	11,11,10,10,15,13,13,10,10,15,11,11,10,10,15,12,
-	12,10,10,15,10,10,10,10,15,11,11,10,10,15,13,13,
-	10,10,15,11,11,10,10,15,12,12,10,10,15,11,11, 9,
-	 9,15,11,11, 9, 9,15,13,13, 9, 9,15,13,13,10,10,
-	15,12,12,10,10,15,13,13,10,10,15,13,12, 9, 9,15,
-	13,13, 9, 9,14,12,12, 9, 9,14,13,13, 9, 9,14,13,
-	13, 9, 9,14,13,13, 7, 7,14,13,13, 8, 8,15,14,14,
-	10,10,15,14,14,10,10,15,14,14,10,10,15,14,14,10,
-	10,15,14,14, 9, 9,15,14,14,10,10,15,14,14,10,10,
-	14,14,14, 9, 9,15,14,14,10,10,14,14,14, 9, 9,15,
-	14,14,10,10,15,14,14,10,10,14,14,14, 9, 9,14,14,
-	14, 9, 9,14,14,14, 8, 8,15,14,14,10,10,15,14,14,
-	11,11,15,14,14, 9, 9,15,14,14, 9, 9,14,14,14, 8,
-	 8,13, 9, 9,12,12,17,11,11,12,12,17,12,12,12,12,
-	17,12,12,11,11,18,15,15,12,12,17,12,12,12,12,17,
-	14,15,13,13,17,12,12,12,12,17,13,13,12,13,17,15,
-	15,12,12,18,13,13,13,13,18,15,15,13,13,18,12,12,
-	12,12,18,13,13,13,13,18,15,15,12,12,18,13,13,12,
-	12,18,15,15,13,13,18,13,13,12,12,17,13,13,12,12,
-	17,15,15,12,12,18,15,15,13,13,18,15,15,13,14,18,
-	15,16,12,12,18,15,15,12,12,18,16,16,12,12,13, 8,
-	 8,10,10,14,15,14,11,11,14,15,15,12,12,15,14,14,
-	12,11,15,15,15,12,12,15,15,15,12,12,15,15,15,13,
-	13,15,15,15,12,12,15,15,15,13,13,15,15,15,13,13,
-	15,15,15,13,13,15,15,16,13,13,15,15,15,12,12,15,
-	15,15,13,13,15,15,15,13,13,15,15,15,13,13,15,15,
-	15,13,13,15,15,14,12,12,15,15,15,12,12,16,15,14,
-	12,12,16,15,15,13,13,16,16,16,13,13,16,15,15,12,
-	12,15,15,15,13,13,15,15,15,12,12,13,12,12,10,10,
-	14,14,14,11,11,15,14,14,12,12,15,14,14,11,11,15,
-	14,14,11,11,15,15,15,13,13,15,14,14,13,13,15,15,
-	15,12,12,15,14,15,13,13,16,15,15,12,12,15,15,15,
-	13,13,16,14,14,13,13,15,15,15,12,12,15,15,15,13,
-	13,16,15,15,12,12,16,15,15,12,12,16,14,14,13,13,
-	15,15,15,11,11,15,15,15,12,12,16,15,15,11,11,16,
-	15,15,13,13,16,14,15,14,14,16,15,15,12,12,16,15,
-	14,12,12,16,15,15,12,12,14,10,10, 9, 9,14,11,11,
-	12,12,14,12,12,13,13,14,12,12,12,12,15,14,14,13,
-	13,15,13,13,14,14,15,14,14,15,15,15,12,12,13,13,
-	15,13,13,14,14,15,14,14,13,13,15,13,13,13,14,15,
-	14,14,15,15,15,12,12,13,13,15,13,13,14,14,15,14,
-	14,13,13,15,13,13,14,14,15,14,14,15,15,15,13,13,
-	12,12,15,13,13,13,13,15,14,14,13,12,15,15,15,14,
-	15,15,15,14,20,20,15,14,14,13,13,15,14,14,13,13,
-	15,14,14,13,13,14,12,12, 9, 9,14,14,14,12,12,14,
-	13,13,12,13,14,14,14,12,12,15,14,14,12,12,15,14,
-	14,14,13,15,14,14,14,14,15,14,14,13,13,15,14,14,
-	13,13,15,15,15,14,14,15,14,14,13,13,15,14,14,14,
-	14,15,14,14,13,13,15,14,14,13,13,15,15,15,15,14,
-	15,15,15,13,13,15,14,14,14,14,15,14,14,13,13,15,
-	14,14,13,13,14,15,15,14,14,15,15,15,14,14,15,14,
-	14,14,14,15,15,15,14,14,15,14,14,13,14,15,15,15,
-	14,14,13,10,10,12,12,17,11,11,12,12,17,12,12,12,
-	12,17,12,12,11,11,17,15,15,12,11,18,13,13,13,13,
-	18,15,15,13,13,17,12,12,12,12,18,13,13,13,13,17,
-	15,15,12,12,17,12,12,12,12,17,15,15,13,13,17,12,
-	12,12,12,17,13,13,12,12,17,15,15,12,12,18,14,13,
-	12,12,18,15,15,13,13,18,13,13,12,12,18,13,13,12,
-	12,18,16,16,12,12,18,16,16,12,12,18,15,15,13,13,
-	18,16,16,12,12,17,15,15,12,12,17,16,16,12,12,13,
-	 8, 8,10,10,14,14,15,12,12,14,15,15,12,12,15,14,
-	14,12,12,15,15,14,12,12,15,15,15,13,13,15,15,15,
-	13,13,15,15,15,12,12,16,15,15,13,13,16,15,15,13,
-	13,15,15,15,12,12,15,15,15,14,14,15,15,15,12,12,
-	15,15,15,13,13,16,15,15,13,13,15,15,15,13,13,16,
-	15,15,13,13,15,15,14,12,12,15,15,15,12,12,16,14,
-	15,13,13,16,15,15,13,13,15,16,15,13,13,16,15,14,
-	13,13,16,15,15,13,13,16,15,15,13,13,13,12,12,11,
-	11,14,14,14,11,11,14,14,14,12,12,15,14,14,11,11,
-	16,14,14,11,11,15,15,15,12,13,16,14,14,13,13,15,
-	15,15,12,12,15,14,14,13,13,16,15,15,12,12,15,15,
-	15,12,12,15,14,14,13,13,15,15,15,12,12,15,14,14,
-	12,12,16,15,15,12,12,16,15,15,12,12,16,14,14,13,
-	13,15,15,15,11,11,15,15,14,12,12,16,15,15,11,11,
-	16,15,15,12,12,16,14,14,13,13,16,15,15,11,11,16,
-	14,14,12,12,16,15,15,11,11,14,10,10, 9, 9,14,11,
-	11,12,12,14,12,12,13,14,14,12,12,12,12,14,14,14,
-	13,13,15,13,13,14,14,15,14,14,15,15,15,12,12,13,
-	13,15,13,13,14,14,15,15,15,14,14,15,13,13,14,14,
-	15,15,15,15,15,15,12,12,13,13,15,13,13,14,14,15,
-	14,14,13,13,15,13,13,14,14,15,14,14,15,15,15,12,
-	12,13,13,15,13,13,13,13,14,14,14,13,13,15,15,15,
-	14,15,15,15,15,21,19,15,14,14,13,13,15,14,14,14,
-	14,14,14,14,13,13,14,12,12, 9, 9,14,14,14,12,12,
-	14,14,13,13,13,14,14,14,12,12,14,14,14,12,12,15,
-	14,14,13,13,15,14,14,14,14,15,14,14,13,13,15,14,
-	14,13,13,15,15,15,15,15,15,14,14,13,13,15,14,14,
-	14,14,15,14,14,13,13,15,14,14,13,13,14,15,15,15,
-	15,15,14,15,13,13,15,14,14,14,14,15,14,14,13,13,
-	15,14,14,13,13,14,15,15,14,14,15,15,15,14,14,15,
-	14,14,14,14,15,15,15,15,15,15,14,14,14,13,14,15,
-	15,14,14,13,10,10,12,12,18,12,12,12,12,17,12,12,
-	12,12,18,13,13,11,11,18,15,14,11,11,17,13,13,13,
-	13,18,15,15,12,12,18,12,12,12,12,17,13,13,12,12,
-	18,15,15,12,12,18,13,13,13,12,18,15,15,13,13,18,
-	13,13,12,12,18,13,13,12,12,18,15,15,12,12,17,13,
-	13,12,12,17,15,15,12,12,17,12,12,11,11,17,13,13,
-	11,11,17,15,15,11,11,18,16,16,12,12,18,15,15,13,
-	13,18,15,15,11,11,17,15,15,12,12,18,15,15,11,11,
-	13, 8, 8,10,10,14,14,14,11,11,15,15,15,12,12,15,
-	14,14,11,11,16,14,14,12,12,15,15,15,12,12,15,15,
-	15,13,13,15,15,15,12,12,15,15,15,12,12,16,15,15,
-	13,13,15,15,15,12,12,15,15,15,13,13,16,15,15,12,
-	12,15,15,15,12,12,16,15,15,13,13,16,15,15,12,12,
-	15,15,15,13,13,15,14,14,12,12,15,15,15,12,12,16,
-	15,14,12,12,16,15,15,13,13,16,16,16,13,13,16,14,
-	15,13,13,15,15,15,13,13,16,15,15,12,12,13,12,12,
-	10,10,14,14,14,11,11,15,14,14,12,12,15,14,14,11,
-	11,16,14,14,11,11,15,14,15,12,12,15,14,14,13,13,
-	15,15,15,12,12,15,14,14,12,12,15,14,15,12,12,15,
-	15,15,12,12,16,14,14,13,13,15,15,15,11,12,16,14,
-	14,12,12,16,15,15,12,12,15,15,15,12,12,16,14,14,
-	12,12,15,15,15,11,11,15,14,14,11,12,15,15,14,11,
-	11,16,15,15,12,12,16,14,14,13,13,16,15,15,11,11,
-	16,14,14,12,12,16,15,15,11,11,13,10,10, 8, 8,14,
-	12,12,12,12,14,12,12,13,13,14,12,12,12,12,14,14,
-	14,13,13,15,13,13,14,14,15,15,14,15,15,15,13,13,
-	13,13,15,13,13,14,14,15,14,15,14,14,15,13,13,13,
-	13,15,15,15,15,15,15,12,12,13,12,15,13,13,14,14,
-	15,14,14,13,13,15,13,13,14,13,15,15,15,16,16,15,
-	13,13,12,12,15,13,13,13,13,14,14,14,12,12,15,15,
-	15,14,14,15,15,15,20,20,15,14,14,13,13,15,15,14,
-	14,14,15,14,14,13,13,13,12,12, 9, 9,14,13,13,12,
-	12,14,13,13,12,12,14,14,14,12,12,14,14,14,13,13,
-	15,14,14,13,13,15,14,14,14,14,15,15,14,12,12,15,
-	14,14,13,13,15,14,15,14,15,15,14,14,13,13,15,14,
-	14,14,14,15,14,14,12,12,15,14,14,13,13,14,15,14,
-	15,14,15,14,14,13,13,15,14,14,14,14,15,14,14,12,
-	12,15,14,14,13,13,15,15,15,14,14,15,15,15,14,14,
-	16,14,14,14,14,15,15,15,14,14,15,14,14,14,14,14,
-	15,15,14,14,13,13,13,12,13,17,15,15,12,12,17,15,
-	15,12,12,18,15,15,11,11,17,16,16,11,11,18,16,16,
-	13,13,18,17,16,13,13,18,16,16,12,12,18,16,16,12,
-	12,18,17,17,12,12,17,16,16,12,13,17,16,16,12,13,
-	17,16,16,12,12,17,16,16,12,12,18,17,16,12,12,18,
-	16,16,12,12,17,16,17,12,12,18,15,15,11,11,18,15,
-	15,12,12,17,17,17,11,11,17,17,17,12,12,17,16,16,
-	13,13,18,16,16,11,11,18,16,16,12,12,18,17,16,11,
-	11,14,14,14,10,10,16,15,14,11,11,16,15,15,12,12,
-	16,14,14,12,12,17,14,14,13,13,17,15,15,13,13,17,
-	15,15,14,14,16,15,15,12,12,16,15,15,13,13,18,15,
-	15,14,14,16,15,15,12,12,16,15,15,14,14,16,15,15,
-	12,12,16,15,15,13,13,17,15,15,13,13,17,15,15,13,
-	13,17,15,15,14,14,16,14,14,12,12,17,15,15,12,12,
-	18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,17,
-	15,14,13,13,17,15,15,14,14,17,15,15,13,13,14,12,
-	12,11,11,15,14,14,12,12,16,14,14,12,12,16,14,14,
-	11,11,17,14,14,12,12,16,15,14,13,13,16,14,14,13,
-	13,16,15,15,12,12,16,14,14,13,13,17,15,15,13,13,
-	16,15,15,13,13,17,14,14,13,13,16,15,15,12,12,16,
-	14,14,12,12,16,15,15,12,12,17,15,15,12,12,17,14,
-	14,13,13,16,15,15,12,12,16,14,14,12,12,16,15,15,
-	12,12,17,15,15,13,13,17,14,14,13,13,17,15,15,12,
-	12,17,14,14,12,12,17,15,15,12,12,14,14,14, 8, 8,
-	14,14,14,13,13,14,15,15,14,14,14,14,14,14,14,15,
-	15,15,19,19,15,15,15,14,14,15,15,16,20,19,15,15,
-	15,14,14,15,16,16,15,15,15,15,15,19,19,15,15,15,
-	14,14,15,16,16,19,20,15,15,15,14,14,15,15,15,15,
-	15,15,15,15,19,19,15,15,15,15,15,15,15,16,19,20,
-	15,14,15,14,14,15,15,15,15,15,15,15,15,20,19,15,
-	15,15,21,19,15,16,16,20,20,15,15,14,19,19,15,15,
-	16,20,21,15,15,15,20,19,13,12,12, 9, 9,14,14,14,
-	12,12,14,13,13,13,13,14,14,14,13,13,15,14,14,20,
-	19,15,14,14,14,13,15,14,14,19,19,15,15,14,13,13,
-	15,14,14,14,14,15,15,15,19,20,15,14,14,13,13,15,
-	14,14,20,19,14,15,14,13,13,15,14,14,14,13,15,15,
-	15,19,20,15,15,14,14,14,15,14,14,21,19,15,15,15,
-	13,13,15,14,14,14,14,14,15,15,20,20,15,15,15,21,
-	20,15,14,14,19,20,15,15,15,20,20,15,14,14,19,20,
-	15,15,15,21,19,
-};
-
-static const static_codebook _44p2_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p2_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p2_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p2_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p2_p5_0[] = {
-	 2, 6, 6,14,14, 6, 7, 7,14,14, 7, 7, 7,15,15, 0,
-	13,13,16,16, 0,13,13,15,15, 7, 8, 8,15,15, 9,10,
-	10,17,16, 9, 8, 8,15,15, 0,13,13,18,17, 0,13,13,
-	16,16, 8, 8, 8,15,15,12,11,11,16,17, 9, 8, 8,14,
-	14, 0,13,13,18,17, 0,13,13,16,15, 0,14,14,18,17,
-	 0,20,22,18,20, 0,12,12,16,16, 0,16,16,22,20, 0,
-	14,14,16,16, 0,14,14,17,17, 0,22,22,22,19, 0,12,
-	13,16,16, 0,17,17, 0, 0, 0,15,15,16,16, 5, 7, 7,
-	13,13, 9, 9, 9,15,14,10,10,10,14,14, 0,21,21,18,
-	17, 0,21,22,18,17, 9,10,10,14,14,12,12,12,17,17,
-	12,10,10,14,14, 0,19,21,18,17, 0,20,22,18,18,11,
-	10,10,14,14,14,13,13,18,17,12,11,11,14,14, 0,22,
-	19,17,18, 0,20, 0,18,17, 0,22,21,17,17, 0, 0, 0,
-	 0, 0, 0,20,22,17,17, 0,22, 0,21,19, 0,22, 0,18,
-	18, 0, 0,22,18,19, 0, 0, 0, 0, 0, 0,19,21,17,17,
-	 0, 0, 0,20,20, 0, 0, 0,18,18, 6, 6, 6,13,12, 8,
-	 6, 6,11,11, 8, 6, 6,13,13, 0, 9, 9,11,11, 0,11,
-	11,14,14, 9, 7, 7,13,13,11, 9, 9,13,13,10, 6, 6,
-	13,13, 0,10,10,14,14, 0,10,10,13,13, 9, 7, 7,13,
-	14,13, 9, 9,13,13,10, 6, 6,13,12, 0,11,11,15,15,
-	 0,10,10,13,13, 0,12,12,15,15, 0,19, 0,17,17, 0,
-	 9, 9,13,13, 0,13,14,19,20, 0,11,11,13,13, 0,11,
-	11,14,14, 0,19,20,17,18, 0,10,10,13,13, 0,15,15,
-	21,19, 0,12,12,13,13, 0,10,10,12,13, 0,11,11,15,
-	15, 0,11,11,15,15, 0,15,15,22, 0, 0,16,17,22, 0,
-	 0,11,11,15,15, 0,14,14,18,17, 0,11,11,15,16, 0,
-	15,15,22,21, 0,16,16, 0,20, 0,12,12,16,15, 0,15,
-	14,19,19, 0,11,11,16,16, 0,15,15,21, 0, 0,16,15,
-	 0, 0, 0,16,16,22,21, 0, 0, 0, 0, 0, 0,15,15,20,
-	20, 0,18,18, 0, 0, 0,16,17, 0, 0, 0,17,17, 0,22,
-	 0, 0, 0, 0, 0, 0,15,15,21,22, 0,20,18, 0, 0, 0,
-	18,17,22, 0, 0,10,10,12,11, 0,10,10,10,10, 0,11,
-	11,12,12, 0,11,11, 9, 9, 0,13,13,12,12, 0,11,11,
-	12,12, 0,13,13,12,12, 0,10,10,12,12, 0,13,12,13,
-	13, 0,12,12,12,12, 0,11,11,12,12, 0,13,13,12,12,
-	 0,10,10,12,12, 0,13,13,13,14, 0,12,12,12,12, 0,
-	13,14,14,14, 0,20,21,15,15, 0,12,11,12,12, 0,15,
-	16,20,22, 0,13,12,11,11, 0,13,13,14,13, 0,20, 0,
-	16,15, 0,12,12,12,12, 0,16,16,22,21, 0,13,13,12,
-	12, 6, 7, 7,16,16,11, 9, 9,15,15,12, 9, 9,16,16,
-	 0,13,13,14,14, 0,14,14,16,17,10, 9, 9,16,16,14,
-	12,12,16,16,12, 9, 9,15,15, 0,13,13,18,18, 0,13,
-	13,15,16,12,10,10,17,18,15,12,12,17,17,13, 9, 9,
-	16,16, 0,13,13,17,18, 0,14,14,16,16, 0,15,15,18,
-	18, 0,22, 0,20,20, 0,12,12,16,16, 0,16,16,20,22,
-	 0,14,14,16,16, 0,15,14,18,18, 0, 0,22,19,21, 0,
-	13,13,16,17, 0,17,17,22,22, 0,15,15,16,16, 7, 7,
-	 7,14,14,11,10,10,15,15,12,10,10,15,14, 0,22, 0,
-	18,18, 0, 0,21,17,18,11,10,10,15,15,14,12,12,17,
-	17,14,11,11,15,15, 0,22,20,18,18, 0, 0,20,18,17,
-	12,10,10,16,16,17,14,14,19,18,14,11,11,15,15, 0,
-	21,22,19,19, 0,21,22,18,18, 0,22, 0,19,21, 0, 0,
-	 0, 0, 0, 0,22,22,18,17, 0, 0, 0,21,20, 0,22,22,
-	20,19, 0, 0,22,20,20, 0, 0, 0, 0, 0, 0,20,21,17,
-	17, 0, 0,22,21,21, 0, 0, 0,18,18,10, 9, 9,14,14,
-	13,10,10,13,13,13,10,11,14,14, 0,13,13,12,12, 0,
-	15,15,16,16,13,10,10,15,15,15,12,12,14,14,15,10,
-	10,14,15, 0,14,14,16,15, 0,14,14,15,15,13,10,10,
-	15,15,18,13,13,15,15,15,10,10,14,15, 0,14,14,16,
-	16, 0,14,14,15,15, 0,15,15,16,16, 0,22, 0,18,18,
-	 0,12,13,14,14, 0,17,17,22, 0, 0,14,14,14,14, 0,
-	15,15,16,16, 0,22, 0,18,17, 0,13,13,14,14, 0,19,
-	18,21,22, 0,15,15,14,14, 0,11,11,13,13, 0,12,12,
-	16,16, 0,12,12,16,16, 0,15,16,21, 0, 0,16,17, 0,
-	22, 0,12,12,16,16, 0,14,14,17,18, 0,11,11,16,16,
-	 0,15,15,21,22, 0,16,16, 0, 0, 0,12,12,16,16, 0,
-	15,15, 0,19, 0,12,12,16,17, 0,16,16,22, 0, 0,16,
-	16, 0,22, 0,17,17, 0,22, 0, 0, 0, 0, 0, 0,15,15,
-	20,19, 0,18,18, 0, 0, 0,17,18, 0, 0, 0,17,17, 0,
-	 0, 0, 0, 0, 0, 0, 0,15,15, 0,22, 0,20,18, 0, 0,
-	 0,18,18,22,22, 0,11,11,14,14, 0,12,12,14,14, 0,
-	12,12,15,15, 0,13,13,14,14, 0,14,14,17,16, 0,12,
-	12,16,16, 0,14,14,16,16, 0,11,11,15,15, 0,13,13,
-	16,16, 0,13,13,15,15, 0,12,12,15,15, 0,15,14,16,
-	16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,15,15,
-	 0,15,15,17,17, 0, 0, 0,19,18, 0,13,12,15,15, 0,
-	16,16, 0, 0, 0,14,14,15,15, 0,14,14,16,17, 0,22,
-	 0,18,18, 0,13,13,15,15, 0,17,17, 0, 0, 0,14,14,
-	15,15, 8, 8, 8,16,16,12,10,10,16,16,13, 9, 9,16,
-	16, 0,14,14,17,17, 0,14,14,17,16,12,10,10,18,17,
-	14,11,11,18,18,14, 9,10,16,16, 0,13,13,18,19, 0,
-	14,13,16,16,12, 9, 9,16,16,17,13,13,17,17,14, 9,
-	 9,15,15, 0,14,14,19,20, 0,13,13,15,15, 0,15,15,
-	18,19, 0, 0,22,22,22, 0,13,13,17,17, 0,16,16,19,
-	21, 0,14,14,16,16, 0,14,14,18,18, 0, 0, 0, 0, 0,
-	 0,13,13,16,16, 0,18,18, 0, 0, 0,15,15,16,16, 8,
-	 7, 7,14,14,12,10,10,15,15,13,10,10,15,14, 0,22,
-	 0,18,18, 0,22, 0,18,18,12,10,10,16,15,15,12,12,
-	17,17,14,11,11,15,15, 0,20,21,19,18, 0, 0, 0,17,
-	18,13,11,11,15,15,16,13,13,18,18,15,11,11,14,14,
-	 0,22,21,19,19, 0,21,22,18,18, 0,22,22,20,18, 0,
-	 0, 0, 0, 0, 0,22,19,17,17, 0, 0, 0,22,21, 0, 0,
-	22,19,17, 0, 0,22,19,19, 0, 0, 0, 0, 0, 0,22,21,
-	18,17, 0, 0, 0,22, 0, 0, 0, 0,19,19, 0,10,10,14,
-	14, 0,11,11,15,14, 0,11,11,15,15, 0,14,14,15,14,
-	 0,15,15,16,16, 0,11,11,16,16, 0,13,13,16,16, 0,
-	11,11,15,15, 0,14,14,17,16, 0,14,14,15,15, 0,11,
-	11,16,16, 0,14,13,15,15, 0,11,11,15,15, 0,15,15,
-	17,17, 0,14,14,15,14, 0,16,16,17,17, 0, 0,22,18,
-	18, 0,13,13,15,15, 0,17,17,22, 0, 0,15,15,15,14,
-	 0,15,16,16,17, 0, 0,22,18,19, 0,13,13,15,15, 0,
-	20,18,21, 0, 0,15,15,14,14, 0,11,11,13,13, 0,12,
-	12,16,16, 0,12,12,16,15, 0,15,16,22,22, 0,17,17,
-	 0, 0, 0,12,12,16,16, 0,14,14,18,18, 0,11,11,16,
-	16, 0,15,16,22,20, 0,16,16, 0,22, 0,12,12,16,16,
-	 0,15,15,18,20, 0,11,11,16,16, 0,15,15, 0, 0, 0,
-	16,16, 0, 0, 0,17,17,22, 0, 0, 0, 0, 0, 0, 0,15,
-	15, 0,21, 0,18,18, 0, 0, 0,17,16, 0, 0, 0,17,17,
-	22,22, 0, 0, 0, 0, 0, 0,15,15,21, 0, 0,20,22, 0,
-	 0, 0,18,18, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
-	 0,12,12,16,16, 0,13,13,15,15, 0,15,15,17,17, 0,
-	13,12,16,16, 0,14,14,16,16, 0,12,11,16,16, 0,14,
-	14,17,17, 0,14,14,16,16, 0,12,12,16,16, 0,15,15,
-	17,16, 0,11,11,15,16, 0,14,14,17,17, 0,14,14,16,
-	16, 0,15,15,18,18, 0, 0, 0,22,19, 0,13,13,15,16,
-	 0,16,17, 0, 0, 0,14,14,16,16, 0,15,15,18,17, 0,
-	 0, 0,20,20, 0,13,13,16,15, 0,17,17,22,22, 0,14,
-	14,15,15, 0,11,11,16,16, 0,13,13,16,17, 0,13,13,
-	17,18, 0,16,16,17,17, 0,17,17,18,18, 0,12,12,17,
-	17, 0,16,15,18,18, 0,12,12,16,16, 0,16,16,18,18,
-	 0,15,15,17,17, 0,12,12,17,17, 0,16,16,19,18, 0,
-	12,12,16,17, 0,16,16,19,19, 0,15,16,16,17, 0,16,
-	16,19,17, 0, 0, 0,20,22, 0,13,13,16,16, 0,19,18,
-	21, 0, 0,15,15,16,16, 0,16,16,18,18, 0, 0, 0,22,
-	21, 0,14,14,16,16, 0,21,19,21,22, 0,16,16,16,16,
-	 0, 9, 9,14,14, 0,13,13,15,15, 0,14,14,15,15, 0,
-	 0,20,18,19, 0, 0,22,18,18, 0,12,12,15,15, 0,15,
-	15,17,18, 0,14,13,14,14, 0,20, 0,18,18, 0,21, 0,
-	18,17, 0,13,13,15,16, 0,17,17,18,18, 0,14,14,15,
-	15, 0,22,22,20,19, 0,20,21,18,18, 0,20,22,19,19,
-	 0, 0, 0, 0, 0, 0,20,20,17,17, 0, 0,22,22,21, 0,
-	22, 0,18,18, 0,20,22,19,19, 0, 0, 0, 0, 0, 0,21,
-	21,17,18, 0, 0, 0,21,20, 0, 0,22,19,18, 0,18,18,
-	15,15, 0,22,21,17,16, 0, 0,22,17,17, 0,20,22,18,
-	18, 0, 0,22,20,20, 0,21,19,16,16, 0,21,21,18,18,
-	 0,19,19,17,17, 0, 0,22,19,19, 0,22,20,17,17, 0,
-	21,19,16,16, 0,22,22,19,18, 0,19,20,16,16, 0,22,
-	21,19,21, 0,21,22,17,18, 0,21,20,18,18, 0, 0, 0,
-	19,20, 0,20,19,16,16, 0,22,22, 0, 0, 0,21,21,17,
-	16, 0,22,20,19,18, 0, 0, 0,20,20, 0,20,19,16,16,
-	 0, 0, 0, 0, 0, 0,21,22,17,17, 0,11,11,13,13, 0,
-	13,13,15,16, 0,13,13,16,16, 0,17,18,21, 0, 0,17,
-	18, 0, 0, 0,12,12,15,16, 0,15,15,19,18, 0,12,12,
-	16,16, 0,17,17,22, 0, 0,17,17, 0,22, 0,12,12,17,
-	16, 0,16,16,19,20, 0,12,12,16,16, 0,17,17, 0, 0,
-	 0,17,17, 0,21, 0,17,16,22, 0, 0, 0, 0, 0, 0, 0,
-	15,15,20,22, 0,20,18, 0, 0, 0,18,18, 0, 0, 0,17,
-	17,21, 0, 0, 0, 0, 0, 0, 0,15,15,21,22, 0,19,20,
-	22, 0, 0,19,18, 0, 0, 0,14,14,18,18, 0,16,16,22,
-	20, 0,16,16,22,19, 0,17,17,20,22, 0,19,19, 0, 0,
-	 0,15,15,20, 0, 0,18,21, 0,20, 0,15,15,21,20, 0,
-	18,17, 0, 0, 0,17,17, 0,22, 0,15,15,19,19, 0,19,
-	18, 0, 0, 0,15,15,20, 0, 0,18,18,22,22, 0,17,17,
-	 0,20, 0,18,18, 0, 0, 0, 0,22, 0, 0, 0,15,15,19,
-	20, 0,20,19, 0, 0, 0,17,17,20,21, 0,17,18,20,22,
-	 0, 0, 0, 0,22, 0,15,15,20,20, 0,22,20, 0, 0, 0,
-	17,18,20, 0, 0,12,12,17,16, 0,14,14,17,17, 0,13,
-	13,17,17, 0,16,16,18,18, 0,17,16,17,17, 0,13,13,
-	17,17, 0,15,16,18,18, 0,13,13,16,16, 0,16,16,18,
-	18, 0,16,16,17,16, 0,13,13,16,16, 0,17,17,18,17,
-	 0,12,12,15,16, 0,17,17,19,19, 0,16,16,16,16, 0,
-	16,17,19,18, 0, 0, 0,21,22, 0,14,14,16,16, 0,18,
-	18, 0,22, 0,16,16,16,16, 0,16,16,18,17, 0, 0, 0,
-	21,20, 0,14,14,16,16, 0,21,22,22, 0, 0,16,16,16,
-	16, 0, 9, 9,14,13, 0,13,14,15,16, 0,14,13,15,14,
-	 0,22, 0,18,18, 0,21, 0,17,18, 0,13,13,15,15, 0,
-	15,16,18,17, 0,14,14,15,14, 0,20,22,18,18, 0,22,
-	21,17,17, 0,13,13,15,15, 0,17,17,19,19, 0,14,14,
-	14,14, 0, 0,22,18,18, 0, 0,22,17,17, 0, 0,22,19,
-	20, 0, 0, 0, 0, 0, 0,21,20,17,16, 0, 0, 0,21,22,
-	 0, 0, 0,18,19, 0, 0, 0,18,18, 0, 0, 0, 0, 0, 0,
-	22, 0,17,17, 0, 0, 0,20,22, 0, 0, 0,18,19, 0,18,
-	19,16,16, 0,22,20,17,17, 0,22,22,17,18, 0,22,22,
-	18,17, 0, 0,22,18,19, 0,20,20,17,18, 0, 0,22,19,
-	18, 0,22,22,17,17, 0,22, 0,19,19, 0, 0,22,18,18,
-	 0,20,22,17,17, 0, 0,22,18,18, 0,19,20,17,17, 0,
-	22, 0,20,19, 0,22,21,17,17, 0, 0, 0,18,18, 0, 0,
-	 0,22,19, 0,20, 0,17,17, 0,22, 0, 0,22, 0, 0,20,
-	17,18, 0,22, 0,19,19, 0, 0, 0, 0,19, 0,19,21,17,
-	17, 0, 0, 0, 0, 0, 0,20,21,17,16, 0,11,11,13,13,
-	 0,13,13,16,16, 0,13,13,15,16, 0,17,17,21,22, 0,
-	17,18, 0, 0, 0,12,12,16,16, 0,15,15,18,18, 0,13,
-	13,16,16, 0,17,16,21,21, 0,17,17, 0, 0, 0,13,13,
-	16,16, 0,16,16,19,18, 0,13,13,16,16, 0,17,17, 0,
-	22, 0,17,18,20,22, 0,17,18, 0, 0, 0, 0, 0, 0, 0,
-	 0,15,15,20, 0, 0,18,19, 0, 0, 0,17,17, 0, 0, 0,
-	18,17,22, 0, 0, 0, 0, 0, 0, 0,15,16,21,20, 0,20,
-	20, 0, 0, 0,18,19, 0, 0, 0,15,15,22,22, 0,17,16,
-	20,22, 0,17,17,20,22, 0,18,18, 0,21, 0,19,18, 0,
-	 0, 0,16,16,20,20, 0,19,19,22, 0, 0,15,16,21,22,
-	 0,18,19,22, 0, 0,17,18, 0, 0, 0,16,16,22, 0, 0,
-	19,19, 0,21, 0,15,16,20, 0, 0,18,18, 0,22, 0,18,
-	17, 0, 0, 0,18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
-	22,21, 0,20,21, 0, 0, 0,17,18,22, 0, 0,18,18, 0,
-	 0, 0, 0, 0, 0, 0, 0,16,16,20,19, 0,22,21, 0, 0,
-	 0,18,18,22,22,
-};
-
-static const static_codebook _44p2_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p2_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p2_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p2_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p2_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p2_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p2_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p2_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p6_0[] = {
-	 1, 7, 7, 7, 8, 8, 7, 8, 8, 7, 9, 9,10,11,11, 9,
-	 8, 8, 7, 8, 9,11,11,11, 9, 8, 8, 6, 7, 7,10,10,
-	10,10,10,10,10,10,10,14,14,14,12,11,11,10,11,11,
-	15,14,14,13,11,11, 6, 6, 6, 8, 5, 5, 8, 7, 7, 8,
-	 7, 7,11,10,10, 9, 7, 7, 9, 7, 7,12,10,10,10, 7,
-	 7, 6, 8, 7,12,10,10,12,10,10,11,10,10,15,14,13,
-	13,10,10,11,10,10,16,14,14,14,10,10, 7, 7, 7,12,
-	11,11,12,11,11,11,11,11,16,14,14,13,12,12,11,11,
-	11,17,15,15,14,12,12,10, 9, 9,13,11,11,13,11,11,
-	12,11,11,16,14,13,14,11,11,12,11,11,17,15,14,14,
-	11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,16,13,
-	14,13,10,10,11,10,10,17,14,14,14,10,10, 7, 7, 7,
-	12,11,11,12,11,11,12,11,11,15,14,15,14,12,12,12,
-	11,11,17,15,15,14,12,12,10,10, 9,13,11,11,13,11,
-	11,13,11,11,16,14,14,14,11,11,13,11,11,16,15,15,
-	15,11,11,
-};
-
-static const static_codebook _44p2_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p2_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p6_1[] = {
-	 2, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 8,
-	 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 6, 7, 7, 9, 8,
-	 8, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
-	10, 8, 9,10, 8, 8, 7, 6, 6, 8, 6, 6, 9, 6, 6, 9,
-	 7, 7,10, 8, 8, 9, 6, 6, 9, 7, 7,10, 9, 8, 9, 7,
-	 7, 7, 7, 7,11, 8, 8,11, 9, 9,10, 9, 9,12, 9, 9,
-	12, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,10,
-	 9, 9,10, 9, 9,10, 9, 9,11,10,11,11, 9, 9,11, 9,
-	 9,11,11,11,11, 9, 9,10, 8, 8,11, 9, 9,10, 9, 9,
-	11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,12,10,10,11,
-	 9, 9, 8, 8, 8,11, 9, 9,12, 9, 9,11, 9, 9,12, 9,
-	 9,12, 8, 8,12, 9, 9,12, 9,10,12, 8, 8, 9, 7, 7,
-	11, 9, 9,11,10,10,11, 9, 9,11,11,11,11, 9, 9,11,
-	10,10,12,11,11,11, 9,10,10, 9, 9,11, 9, 9,11,10,
-	10,11,10,10,11,11,11,11, 9, 9,11, 9,10,11,11,11,
-	11, 9, 9,
-};
-
-static const static_codebook _44p2_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p2_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p2_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p2_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p7_0,
-	1, -513979392, 1633504256, 2, 0,
-	(long *)_vq_quantlist__44p2_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p2_p7_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p2_p7_1[] = {
-	 1, 9, 9, 6, 9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,
-};
-
-static const static_codebook _44p2_p7_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p2_p7_1,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p2_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p2_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p2_p7_2[] = {
-	 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p2_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p2_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p2_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p2_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p2_p7_3[] = {
-	 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p2_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p2_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p2_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p2_short[] = {
-	 4, 4,12, 9, 8,12,15,17, 4, 2,11, 6, 5, 9,13,15,
-	11, 7, 8, 7, 7,10,14,13, 8, 5, 7, 5, 5, 8,12,12,
-	 8, 4, 7, 4, 3, 6,11,12,11, 8, 9, 7, 6, 8,11,12,
-	15,13,14,12, 9, 7,10,13,16,12,17,12, 7, 5, 8,11,
-};
-
-static const static_codebook _huff_book__44p2_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p2_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p3_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p3_l0_0[] = {
-	 1, 4, 4, 8, 8, 8, 8, 9, 9,10,10,10,10, 4, 6, 5,
-	 8, 7, 9, 9, 9, 9,10, 9,11, 9, 4, 5, 6, 7, 8, 9,
-	 9, 9, 9, 9,10, 9,10, 8, 9, 8, 9, 8,10, 9,11, 9,
-	12,10,12,10, 8, 8, 9, 8, 9, 9,10, 9,11,10,12,10,
-	12, 9,10,10,11,10,12,11,12,11,12,12,12,12, 9,10,
-	10,11,11,11,11,11,12,12,12,12,12,10,11,11,12,12,
-	12,12,12,12,12,12,12,12,10,11,11,12,12,12,12,12,
-	12,12,12,12,12,11,12,12,12,12,12,13,12,13,12,13,
-	12,12,11,12,12,12,12,12,12,13,12,12,12,12,12,12,
-	12,12,13,13,12,13,12,13,12,13,12,12,12,13,12,13,
-	12,13,12,13,12,13,12,12,12,
-};
-
-static const static_codebook _44p3_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p3_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p3_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p3_l0_1[] = {
-	 3, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
-	 5, 6, 5, 6, 5, 6, 5, 6, 5,
-};
-
-static const static_codebook _44p3_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p3_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p3_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p3_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p3_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p3_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p3_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p3_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p3_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p3_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p3_long[] = {
-	 3, 4,13, 9, 9,12,15,17, 4, 2,18, 5, 7,10,14,18,
-	11, 8, 6, 5, 6, 8,11,14, 8, 5, 5, 3, 5, 8,11,13,
-	 9, 6, 7, 5, 5, 7, 9,10,11,10, 9, 8, 6, 6, 8,10,
-	14,14,11,11, 9, 8, 9,10,17,17,14,13,10, 9,10,10,
-};
-
-static const static_codebook _huff_book__44p3_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p3_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p3_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p1_0[] = {
-	 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p3_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p3_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p3_p2_0[] = {
-	 3, 7, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,
-	11,11, 0, 0, 0, 0, 0, 0, 0, 0,10, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,10,11, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
-	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0,
-	 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,12,12, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0,
-	 5, 5, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
-	 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
-	 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 7, 7, 0, 0,
-	 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-	 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0, 9, 9, 0,
-	 0, 0,10,10, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0,
-	 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
-	10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-	 0, 0, 0,11,12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0,
-	 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 9, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0, 0,
-	 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,
-	 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
-	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
-	 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 7, 7,
-	 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0,
-	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0,
-	 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
-	 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0,
-	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
-	 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 9, 9, 0, 0, 0,
-	 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7,
-	 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,11,11,
-	 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 7,
-	 7, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
-	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
-	 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
-	 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-	 9, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0,10,10, 0, 0, 0, 9, 9, 0, 0, 0,10,10,
-	 0, 0, 0,11,12, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,11,11, 0, 0,
-	 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,
-	 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,11,
-	11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,12,12,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0,
-	 9, 9, 0, 0, 0,10,10, 0, 0, 0,12,12, 0, 0, 0, 0,
-	 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-	 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0,
-	 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	10,10, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44p3_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p3_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p3_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p3_0[] = {
-	 1, 5, 5, 5, 8, 8, 0, 8, 8, 6, 9, 9, 8,10,10, 0,
-	 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 4, 7, 7, 6,10,
-	10, 0,12,12, 7,11,11, 9,12,12, 0,12,12, 0,13,13,
-	 0,15,15, 0,12,12, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0,
-	 8, 8, 0,10,10, 0, 7, 7, 0, 8, 8, 0,11,11, 0, 7,
-	 7, 5, 7, 7, 9, 9, 9, 0,11,10, 9, 9, 9,11,12,12,
-	 0,10,10, 0,11,11, 0,13,13, 0,11,11, 6, 7, 7, 9,
-	10,10, 0,12,12,10,11,11,11,12,12, 0,12,12, 0,13,
-	13, 0,15,15, 0,12,12, 0,10,10, 0,11,11, 0,11,11,
-	 0,12,12, 0,13,13, 0,11,11, 0,12,12, 0,15,15, 0,
-	11,11, 0, 8, 8, 0,10,10, 0,12,12, 0,11,11, 0,12,
-	12, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0, 7, 7,
-	 0,10,10, 0,12,12, 0,10,10, 0,12,13, 0,12,12, 0,
-	13,13, 0,14,14, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p3_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p3_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p3_1[] = {
-	 3, 4, 4, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0,10,10, 0,
-	 8, 8, 0, 9, 9, 0,10,10, 0, 8, 8, 0, 7, 7, 0, 8,
-	 8, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8,
-	 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 6, 6, 0, 7, 7, 0,
-	 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,10,10, 0, 6,
-	 5, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 9, 9,
-	 0, 7, 7, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 6, 6, 0,
-	 9,10, 0,10,10, 0,10,10, 0,11,11, 0, 9, 9, 0,10,
-	10, 0,11,11, 0, 9, 9, 0, 8, 8, 0, 8, 8, 0, 8, 8,
-	 0, 9, 9, 0, 9, 9, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0,
-	 7, 7, 0, 8, 8, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0, 9,
-	 9, 0, 7, 7, 0, 7, 7, 0, 9, 9, 0, 6, 6, 0, 6, 6,
-	 0,10,10, 0,10,10, 0,10,10, 0,12,12, 0, 9, 9, 0,
-	10,10, 0,12,12, 0, 9, 9, 0, 8, 8, 0, 7, 7, 0, 8,
-	 8, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9,
-	 0, 7, 7,
-};
-
-static const static_codebook _44p3_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p3_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p3_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p4_0[] = {
-	 1, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8,10,11,11, 9,
-	 8, 8, 8, 8, 8,11,11,11,10, 8, 8, 5, 7, 7, 9,11,
-	11,10,11,11,10,11,11,12,13,14,11,12,12,10,11,11,
-	13,14,14,12,12,12, 5, 6, 6, 8, 6, 6, 8, 7, 7, 8,
-	 7, 7,11,10,10,10, 7, 7, 9, 7, 7,12,11,11,11, 7,
-	 7, 7, 7, 7,11,10,10,12,10,10,11,10,10,15,13,13,
-	13,10,10,12,11,11,15,13,13,14,11,11, 7, 7, 7,11,
-	11,11,12,11,11,12,11,11,14,14,14,14,12,12,12,12,
-	12,16,15,15,14,12,12, 0,10,10, 0,11,11, 0,11,12,
-	 0,11,11, 0,14,14, 0,11,11, 0,12,12, 0,15,15, 0,
-	11,11, 8, 8, 8,12,10,10,12,10,10,13,11,11,15,13,
-	13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
-	12,11,11,13,11,11,12,11,11,15,14,14,14,12,12,13,
-	12,12,15,14,14,15,12,12, 0,11,11, 0,12,12, 0,12,
-	12, 0,12,12, 0,15,15, 0,12,12, 0,13,13, 0,14,15,
-	 0,12,12,
-};
-
-static const static_codebook _44p3_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p3_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p3_p4_1[] = {
-	 3, 4, 5, 8, 8,12,10,10,12,12,12,10,10,12,12,13,
-	11,11,12,12,13,12,12,12,12,13,10,10,13,13,13,13,
-	13,13,13,13,10,10,13,13,13,11,11,13,13,14,13,13,
-	12,12,13,10,10,13,13,13,13,13,13,13,13,10,10,12,
-	12,13,11,11,13,13,13,13,13,12,12,13,12,12,13,13,
-	13,13,13,13,13,14,11,11,12,12,14,12,12,13,12,14,
-	14,14,12,12,13,14,14,13,13,14,13,13,13,13,14,14,
-	14,12,12,14,13,13,13,13,14,14,14,12,12,12, 8, 8,
-	11,11,12,12,12,11,11,12,11,11,10,10,13,12,12,10,
-	10,13,12,12,10,10,13,12,12,12,12,14,12,12,12,12,
-	13,13,13,11,11,14,12,12,11,11,14,12,12,12,12,14,
-	12,12,12,12,13,12,12,12,12,13,13,13,11,11,14,12,
-	12,11,11,14,12,12,12,12,14,13,13,12,12,14,12,12,
-	12,11,14,13,13,11,11,14,13,12,11,11,14,13,13,11,
-	11,14,13,13,12,12,14,12,12,12,12,15,13,13,12,12,
-	14,12,12,11,11,14,13,13,11,11,12, 9, 9,10,10,12,
-	 7, 7,11,11,12, 9, 9,12,12,13,10,10,10,10,14,14,
-	14,11,11,13, 9, 9,12,12,14,14,14,12,12,13, 8, 8,
-	11,11,14, 9, 9,12,12,14,14,14,11,11,13, 9, 9,12,
-	12,14,14,14,12,12,14, 8, 8,11,11,14, 9, 9,12,12,
-	14,14,14,11,11,14,10,10,12,12,14,14,14,13,13,14,
-	 9, 9,11,11,14,10,10,12,12,14,14,14,11,11,14,14,
-	15,12,12,15,14,14,14,14,15,14,14,11,11,14,14,14,
-	12,12,14,14,14,11,11,14,11,11,10,10,14,10,10,10,
-	10,14,10,10,10,10,15,11,11, 9, 9,14,12,12, 9, 9,
-	15,11,11,11,11,15,13,13,11,11,15,10,10,10,10,15,
-	11,11,10,10,15,13,13,11,11,15,11,11,11,11,15,13,
-	13,11,11,15,10,10,10,10,15,11,11,10,10,15,13,13,
-	11,11,15,12,12,11,11,15,13,13,11,11,15,11,11,10,
-	10,15,12,12,10,10,15,13,13,10,10,15,14,14,11,11,
-	15,13,13,11,11,15,14,14,10,11,15,13,13,10,10,15,
-	13,14,10,10,14,13,13,10,10,14,13,13,10,10,14,13,
-	13,10,10,14,13,13, 9, 9,14,14,14, 9, 9,15,14,14,
-	11,11,15,14,14,10,10,15,14,14,10,10,15,14,14,11,
-	11,15,14,14,10,10,15,14,14,11,11,15,14,14,10,10,
-	14,14,14,10,10,15,14,14,10,10,14,14,14,10,10,15,
-	14,14,11,11,15,14,14,11,11,14,14,14,10,10,15,14,
-	14,10,10,14,14,14, 9, 9,15,15,15,11,11,15,14,14,
-	12,12,15,15,14,10,10,15,14,14,10,10,14,15,15, 9,
-	 9,14,10,10,12,12,17, 9, 9,12,12,17,10,10,13,13,
-	17,11,11,12,12,18,14,14,12,12,17,10,10,13,13,17,
-	14,14,12,12,17, 9, 9,12,12,17,11,11,12,12,17,14,
-	14,12,12,18,10,10,13,13,18,14,14,13,13,18, 9, 9,
-	12,12,18,10,10,13,13,18,14,14,12,12,18,11,11,13,
-	13,18,14,14,13,13,18,10,10,12,12,17,11,11,12,12,
-	17,14,14,12,12,18,15,15,13,13,18,14,14,14,14,18,
-	15,15,12,12,18,14,14,12,12,18,15,15,12,12,13, 7,
-	 7,11,11,14,15,15,11,11,14,15,15,12,12,14,15,15,
-	11,11,15,15,15,11,11,14,15,15,12,12,14,15,15,12,
-	12,14,15,15,11,11,14,15,15,11,11,15,15,15,12,12,
-	14,15,15,12,12,14,15,15,12,12,14,15,15,11,11,14,
-	15,15,11,11,15,15,15,12,12,15,15,15,12,12,14,15,
-	15,12,12,14,15,14,12,12,14,15,15,11,11,15,14,14,
-	12,12,15,15,15,12,12,15,16,16,12,12,15,15,15,12,
-	12,15,15,15,12,12,15,15,15,12,12,13,13,13,11,10,
-	14,14,15,11,11,14,14,14,12,12,15,14,14,10,10,15,
-	15,15,11,11,14,15,15,12,12,14,14,14,11,11,14,15,
-	15,11,11,14,15,15,12,12,15,15,15,11,11,14,15,15,
-	12,12,14,14,14,12,12,14,15,15,11,11,14,15,15,12,
-	12,15,15,15,11,11,15,15,15,12,12,15,14,14,12,12,
-	14,15,15,11,11,14,15,15,11,11,15,15,15,10,10,15,
-	15,16,12,12,15,15,15,14,14,15,15,15,11,11,15,15,
-	15,12,12,15,15,15,11,11,14,11,11,10,10,15, 9, 9,
-	12,12,15,10,10,12,12,15,11,11,11,11,15,14,14,12,
-	12,15,10,10,13,13,15,14,14,12,12,15, 9, 9,12,12,
-	15,10,10,13,13,15,13,13,12,11,15,10,10,12,12,15,
-	14,14,12,12,15, 9, 9,11,11,15,11,11,12,12,15,13,
-	13,11,11,15,11,11,13,13,15,13,14,13,14,15,11,11,
-	11,11,15,11,11,12,12,15,14,14,11,11,15,14,14,13,
-	13,15,14,14,20,20,15,14,14,12,12,15,14,14,12,12,
-	15,14,14,11,11,14,13,13,10,10,14,13,13,12,12,14,
-	14,13,12,12,15,14,14,12,12,15,14,14,11,11,15,14,
-	14,12,12,15,14,14,13,13,15,14,14,12,11,15,14,14,
-	11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,13,
-	13,15,14,14,12,11,15,14,14,12,12,15,14,14,13,13,
-	15,14,14,13,13,15,14,14,12,12,15,14,14,12,12,15,
-	14,14,12,12,15,15,15,13,13,15,15,15,13,13,15,14,
-	14,13,13,15,15,15,13,13,15,14,15,12,12,15,15,15,
-	13,13,14,10,10,12,13,17, 9, 9,12,12,17,10,10,13,
-	13,17,11,11,12,12,18,14,14,12,12,18,10,10,13,13,
-	18,14,14,12,12,17, 9, 9,12,12,18,10,11,13,13,18,
-	14,14,12,12,17,10,10,12,12,17,14,14,12,12,17, 9,
-	 9,12,12,17,11,11,12,12,17,14,14,12,12,18,11,11,
-	12,12,18,14,14,13,13,18,11,11,12,12,18,11,11,12,
-	12,18,14,14,12,12,18,15,15,12,12,18,14,14,13,13,
-	18,15,15,12,12,17,14,14,12,12,17,15,15,12,12,13,
-	 7, 7,11,11,14,15,15,11,11,14,15,15,11,11,14,15,
-	14,12,12,15,15,15,12,11,14,15,15,12,12,14,15,15,
-	12,12,14,15,15,11,11,14,15,15,11,11,15,15,15,13,
-	13,14,15,15,11,11,14,15,15,13,12,14,15,15,11,11,
-	14,15,15,11,11,15,15,15,13,13,14,15,15,12,12,15,
-	15,15,12,12,15,15,15,11,11,15,15,15,11,11,15,15,
-	15,12,12,15,15,15,13,13,15,16,16,12,12,15,15,15,
-	12,13,15,15,15,12,12,15,15,15,12,12,13,13,13,11,
-	11,14,14,14,11,11,14,14,14,12,12,14,14,14,10,10,
-	15,14,14,11,11,14,15,15,12,12,14,14,14,12,12,14,
-	15,15,11,11,14,15,14,12,12,15,14,14,11,11,14,15,
-	15,12,12,14,14,14,11,11,14,15,15,11,11,14,14,14,
-	12,12,15,15,14,11,11,15,15,15,12,12,15,14,14,12,
-	12,14,15,15,11,11,14,15,14,11,11,15,15,15,10,10,
-	15,15,15,12,12,15,14,14,14,13,15,15,15,11,11,15,
-	15,15,11,11,15,15,15,10,10,14,11,11,10,10,15, 9,
-	 9,12,12,15,10,10,12,12,15,11,11,11,11,15,14,14,
-	12,12,15,10,10,13,13,15,13,13,12,12,15, 9, 9,12,
-	12,15,11,11,13,13,15,14,14,12,12,15,10,10,13,13,
-	15,13,14,12,12,15, 9, 9,12,12,15,10,10,13,13,15,
-	13,13,11,11,15,11,11,13,13,15,14,14,13,13,15,10,
-	10,11,11,15,11,11,12,12,15,14,14,11,11,15,14,14,
-	13,13,15,14,14,21,20,15,14,14,11,11,15,14,14,12,
-	12,15,14,14,11,11,14,13,13,10,10,14,13,13,11,11,
-	15,14,14,12,12,15,14,14,12,12,14,14,14,12,12,15,
-	14,14,12,12,15,14,14,13,13,14,14,14,11,11,15,14,
-	14,11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,
-	13,13,14,14,14,11,11,15,14,14,11,11,14,14,14,13,
-	13,15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,
-	15,14,14,12,12,14,14,14,13,13,15,15,15,13,13,16,
-	14,14,12,13,15,15,15,13,13,15,14,14,12,12,15,15,
-	15,13,13,15,11,11,13,12,18,10,10,12,12,17,11,11,
-	12,12,18,12,12,11,11,18,14,14,12,12,18,11,11,13,
-	13,17,14,14,12,12,18,10,10,12,12,18,12,12,12,12,
-	18,14,15,12,12,18,11,11,13,13,18,14,14,12,12,17,
-	10,10,12,12,18,11,11,12,12,18,15,14,12,12,17,12,
-	12,12,12,17,14,14,12,12,17,11,11,11,11,17,12,12,
-	12,11,17,15,15,11,11,18,15,15,12,12,18,14,15,13,
-	13,18,15,15,11,11,17,15,15,12,12,18,15,15,11,11,
-	14, 9, 9,11,11,14,15,15,11,11,15,15,15,11,11,15,
-	15,15,12,11,15,15,15,12,12,15,15,15,11,11,15,15,
-	15,13,13,14,15,15,11,11,15,15,15,11,11,15,15,15,
-	13,13,15,15,15,11,11,15,15,15,13,13,15,15,15,11,
-	11,15,15,15,11,11,15,15,15,13,13,15,15,15,12,12,
-	15,15,15,13,13,15,15,14,11,11,15,15,15,12,12,15,
-	15,15,12,12,16,15,15,13,13,15,16,16,13,13,16,15,
-	15,12,12,15,15,15,13,12,15,15,15,12,12,13,12,12,
-	11,11,14,14,14,11,11,14,14,14,12,12,15,14,14,11,
-	11,15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,
-	14,15,15,11,11,15,14,14,12,12,15,14,14,11,11,15,
-	14,14,12,12,15,14,14,12,12,14,15,15,11,11,15,14,
-	14,12,12,15,14,14,11,11,15,15,15,12,12,15,14,14,
-	12,12,15,15,15,11,11,15,14,14,11,11,15,14,15,11,
-	11,15,15,15,12,12,15,14,14,13,13,16,15,15,11,11,
-	15,14,14,12,12,15,15,15,11,11,14,11,11, 9, 9,15,
-	10,10,12,12,14,11,11,12,12,15,12,12,12,12,15,14,
-	14,13,13,15,11,11,13,13,15,14,14,13,13,15,10,10,
-	12,12,15,12,12,13,13,15,14,14,13,13,15,11,11,12,
-	12,15,14,14,13,13,14,10,10,12,12,15,12,12,13,13,
-	15,14,14,12,12,15,12,12,13,13,15,14,14,15,15,15,
-	11,11,12,12,15,12,12,12,13,15,14,14,12,12,15,15,
-	15,14,14,15,14,14,20,20,15,14,14,12,12,15,14,14,
-	13,13,15,14,14,12,12,14,13,13,10,10,14,13,13,11,
-	11,14,13,13,12,12,14,14,14,12,12,15,14,14,13,13,
-	15,14,14,12,12,14,14,14,14,14,14,14,14,11,11,15,
-	14,14,12,12,15,14,14,14,14,15,14,14,12,12,14,14,
-	14,14,14,14,14,14,11,11,15,14,14,12,12,14,14,14,
-	14,14,15,14,14,12,12,15,14,14,13,13,15,14,14,12,
-	12,15,14,14,12,12,14,14,14,14,13,15,15,15,14,14,
-	15,14,14,13,13,15,15,15,14,14,15,14,14,13,13,15,
-	15,15,13,13,14,13,13,13,13,18,15,15,12,12,18,15,
-	15,13,12,18,15,16,11,11,18,16,17,12,12,18,15,15,
-	13,13,18,17,17,12,12,18,15,15,12,12,17,15,15,12,
-	12,18,17,17,12,12,18,15,15,13,13,18,16,17,12,12,
-	17,15,15,12,12,18,15,15,12,12,18,16,17,11,12,18,
-	16,16,12,12,17,16,17,12,12,18,15,15,11,11,18,15,
-	15,12,12,18,17,17,11,11,17,17,17,12,12,18,16,16,
-	13,13,18,17,17,11,11,18,16,16,12,12,18,17,17,11,
-	11,15,14,14,11,11,16,15,15,11,11,16,15,15,12,12,
-	16,15,15,12,12,17,15,15,14,13,16,15,15,12,12,17,
-	15,15,14,14,16,15,15,11,11,16,15,15,12,12,18,15,
-	15,13,13,16,15,15,11,11,17,15,15,14,14,16,15,15,
-	11,11,16,15,15,12,12,17,15,15,13,13,16,15,15,12,
-	12,17,16,15,14,14,16,14,15,12,12,16,15,15,12,12,
-	18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,17,
-	15,15,13,13,17,15,15,14,14,18,15,15,13,13,15,12,
-	13,11,11,15,14,14,12,12,16,14,14,12,12,16,14,14,
-	12,12,16,14,14,12,12,16,14,14,13,12,17,14,14,13,
-	13,16,15,15,12,12,16,14,14,12,12,17,14,14,12,12,
-	16,14,14,12,12,17,14,14,13,13,15,15,15,12,12,16,
-	14,14,12,12,17,14,14,12,12,17,15,15,12,12,17,14,
-	14,13,13,16,15,15,12,12,16,14,14,12,12,17,15,15,
-	12,12,18,15,15,13,13,17,14,14,13,13,17,15,15,12,
-	12,17,14,14,12,12,17,15,15,12,12,14,15,15, 9, 9,
-	15,15,15,12,12,15,15,15,13,13,15,15,15,14,14,15,
-	15,15,19,19,15,15,16,13,13,15,15,16,19,20,15,15,
-	15,13,12,15,16,16,14,14,15,15,15,19,19,15,15,15,
-	13,13,15,16,15,20,19,14,15,15,13,13,15,15,15,14,
-	14,15,15,15,19,19,15,15,15,14,14,15,16,16,19,20,
-	15,15,15,14,14,15,15,15,14,14,15,15,15,19,19,15,
-	15,15,20,19,15,16,16,20,19,15,15,15,19,19,15,16,
-	16,20,20,15,15,15,19,20,14,13,13,10,10,14,14,14,
-	11,11,14,14,14,12,12,15,14,14,13,13,15,14,14,19,
-	20,15,14,14,12,12,14,14,14,20,19,14,14,14,11,11,
-	15,14,14,12,12,15,14,14,20,20,15,14,14,12,12,14,
-	14,14,20,19,14,14,14,11,11,15,14,14,12,12,15,14,
-	14,19,20,15,14,14,13,13,15,14,14,22,19,15,15,14,
-	12,12,15,14,14,13,13,14,15,15,22,20,15,15,15,20,
-	20,15,14,14,21,20,15,15,15,20,21,15,14,14,20,20,
-	14,15,15,20,20,
-};
-
-static const static_codebook _44p3_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p3_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p3_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p3_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p3_p5_0[] = {
-	 2, 6, 6,14,14, 6, 7, 7,14,14, 7, 7, 7,15,15, 0,
-	12,12,15,15, 0,13,13,15,15, 7, 8, 8,15,15,10,10,
-	10,16,16, 9, 8, 8,15,15, 0,13,13,18,17, 0,13,13,
-	16,16, 8, 8, 8,15,15,12,11,11,16,16, 9, 8, 8,15,
-	15, 0,13,13,18,18, 0,13,13,16,16, 0,14,14,17,17,
-	 0,20, 0,19,20, 0,12,12,16,16, 0,16,16,20,22, 0,
-	14,14,16,16, 0,14,14,17,17, 0,20,22,20,19, 0,13,
-	13,15,16, 0,17,18, 0,21, 0,15,15,16,16, 5, 7, 7,
-	13,13, 8, 9, 9,14,14,10,10,10,14,14, 0,20,22,18,
-	18, 0,22,21,18,17, 9,10,10,14,14,12,12,12,17,17,
-	12,10,10,14,14, 0, 0,20,17,17, 0,22,21,17,18,11,
-	10,10,14,14,14,13,13,18,18,12,11,11,14,14, 0,22,
-	21,18,19, 0,20, 0,17,17, 0,22, 0,18,18, 0, 0, 0,
-	 0, 0, 0,20,20,17,17, 0,22, 0,22,21, 0,21, 0,19,
-	18, 0,22,22,18,18, 0, 0, 0, 0, 0, 0,21, 0,17,17,
-	 0,22, 0,20,20, 0, 0, 0,19,18, 6, 6, 6,12,12, 8,
-	 6, 6,10,10, 8, 6, 6,13,12, 0,10,10,11,11, 0,11,
-	11,13,13, 8, 7, 7,13,13,11, 9, 9,13,13,10, 6, 6,
-	12,12, 0,10,10,14,14, 0,10,10,13,13, 9, 7, 7,13,
-	13,12,10,10,13,13,10, 6, 6,12,12, 0,11,11,15,15,
-	 0,10,10,13,13, 0,12,12,15,14, 0,19,20,16,17, 0,
-	 9, 9,13,13, 0,14,14,20,21, 0,12,11,13,12, 0,12,
-	12,15,14, 0,20,19,17,17, 0,10,10,12,13, 0,15,15,
-	22,21, 0,12,12,12,13, 0,10,10,12,12, 0,11,11,15,
-	15, 0,11,11,15,15, 0,15,15,22,22, 0,16,17, 0, 0,
-	 0,11,11,15,15, 0,14,14,18,18, 0,11,11,16,16, 0,
-	16,15, 0,21, 0,16,16, 0, 0, 0,12,12,15,15, 0,14,
-	14,19,19, 0,11,11,15,15, 0,15,15,22, 0, 0,16,16,
-	22, 0, 0,16,16, 0,21, 0, 0, 0, 0, 0, 0,15,15,19,
-	20, 0,18,18, 0, 0, 0,17,17, 0, 0, 0,17,17, 0, 0,
-	 0, 0, 0, 0, 0, 0,16,15,22,21, 0,20,20, 0, 0, 0,
-	18,18, 0, 0, 0,10,10,12,12, 0,10,10,11,11, 0,11,
-	11,12,12, 0,11,11, 9, 9, 0,13,12,12,12, 0,11,11,
-	13,13, 0,13,13,12,12, 0,10,10,12,12, 0,13,12,13,
-	13, 0,12,12,12,12, 0,11,11,13,13, 0,13,13,12,12,
-	 0,10,10,12,12, 0,13,13,14,13, 0,12,12,12,12, 0,
-	14,13,13,14, 0,20,21,15,15, 0,11,11,12,12, 0,15,
-	16,20,20, 0,12,13,10,10, 0,13,13,14,13, 0,20,20,
-	15,15, 0,11,11,12,12, 0,16,17,21,21, 0,13,13,11,
-	11, 6, 7, 7,16,15,11, 9, 9,14,15,12, 9, 9,16,16,
-	 0,13,13,15,15, 0,14,14,17,17,10, 9, 9,16,16,14,
-	12,12,16,16,12, 9, 9,15,15, 0,13,13,17,18, 0,13,
-	13,15,15,12,10,10,17,17,15,12,12,17,17,13, 9, 9,
-	16,16, 0,13,13,18,19, 0,14,14,16,16, 0,15,15,18,
-	18, 0, 0, 0,20,19, 0,12,12,17,16, 0,16,17, 0,21,
-	 0,14,15,16,16, 0,15,15,18,18, 0, 0,22,19,21, 0,
-	13,13,16,16, 0,18,17,22,22, 0,15,15,16,16, 7, 7,
-	 7,13,13,11,10,10,15,15,12,10,10,14,14, 0,21, 0,
-	18,17, 0,21,22,18,18,11,10,10,15,15,14,12,12,17,
-	17,14,11,11,14,14, 0,21,20,18,18, 0,22,21,18,17,
-	12,11,10,16,16,16,14,14,17,19,14,11,11,15,15, 0,
-	 0,22,19,19, 0,21,22,18,18, 0,21, 0,18,19, 0, 0,
-	 0,22, 0, 0,22,21,17,17, 0, 0, 0,20,22, 0, 0,21,
-	18,18, 0, 0, 0,19,20, 0, 0, 0, 0, 0, 0, 0,21,17,
-	17, 0, 0, 0,22,21, 0, 0, 0,19,19,10, 9, 9,14,13,
-	13,10,10,12,12,13,10,10,14,14, 0,13,13,12,12, 0,
-	15,14,16,15,13,10,10,14,14,15,12,12,14,14,15,10,
-	10,14,14, 0,14,14,15,15, 0,14,13,14,14,13,10,10,
-	15,15,17,13,13,15,15,14,10,10,14,14, 0,14,14,15,
-	16, 0,14,14,15,15, 0,15,15,16,16, 0,21,22,17,18,
-	 0,12,12,14,14, 0,17,17,20,21, 0,14,14,14,14, 0,
-	15,15,16,16, 0,21,22,18,18, 0,13,13,14,14, 0,18,
-	18,22, 0, 0,15,15,14,14, 0,11,11,13,13, 0,12,12,
-	16,15, 0,12,12,16,16, 0,16,16, 0, 0, 0,16,17, 0,
-	22, 0,12,12,16,16, 0,14,14,17,18, 0,11,11,16,16,
-	 0,15,15, 0,21, 0,16,16,21,22, 0,12,12,16,16, 0,
-	15,15,19,19, 0,12,12,17,16, 0,16,16,21,22, 0,16,
-	16, 0, 0, 0,17,17, 0,22, 0, 0, 0, 0, 0, 0,15,15,
-	19,20, 0,17,19, 0, 0, 0,17,17,22, 0, 0,17,17, 0,
-	22, 0, 0, 0, 0, 0, 0,15,15,21, 0, 0,19,20, 0, 0,
-	 0,19,18,22, 0, 0,11,12,14,14, 0,11,11,14,14, 0,
-	12,12,15,15, 0,13,13,13,13, 0,14,14,16,16, 0,12,
-	12,15,15, 0,14,14,16,15, 0,11,11,15,15, 0,13,13,
-	16,16, 0,13,13,15,15, 0,12,12,15,15, 0,15,14,16,
-	16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,15,15,
-	 0,15,15,16,16, 0, 0, 0,18,18, 0,12,12,14,14, 0,
-	16,16,22, 0, 0,14,14,15,15, 0,15,15,16,17, 0,21,
-	22,18,18, 0,13,13,15,14, 0,18,17,22, 0, 0,14,14,
-	15,15, 8, 8, 8,16,15,12,10,10,16,15,12,10,10,16,
-	16, 0,14,14,16,17, 0,14,14,17,16,12,10,10,17,18,
-	14,12,12,18,18,14,10,10,16,16, 0,14,14,18,18, 0,
-	14,14,16,16,12, 9, 9,16,16,17,13,13,16,17,14, 9,
-	 9,15,15, 0,14,14,18,19, 0,13,13,15,15, 0,15,15,
-	18,19, 0, 0, 0,22,21, 0,13,13,16,16, 0,16,16,22,
-	 0, 0,15,15,16,16, 0,14,14,18,17, 0, 0, 0,20, 0,
-	 0,13,13,16,16, 0,18,18, 0, 0, 0,15,15,16,16, 8,
-	 7, 7,13,13,12,10,10,15,15,12,10,10,14,14, 0,22,
-	22,19,18, 0, 0, 0,18,18,12,10,10,15,15,14,13,13,
-	17,17,14,11,11,15,15, 0,19,20,18,18, 0,22,21,17,
-	18,13,11,11,15,15,16,13,13,18,18,14,11,11,14,15,
-	 0,22,21,20,19, 0,22,21,17,17, 0, 0,22,19,18, 0,
-	 0, 0, 0, 0, 0,22,20,17,17, 0, 0, 0,21,20, 0, 0,
-	 0,19,17, 0, 0,22,19,19, 0, 0, 0, 0, 0, 0,22,20,
-	18,17, 0, 0, 0, 0, 0, 0, 0, 0,18,18, 0,10,10,14,
-	14, 0,11,11,14,14, 0,11,11,15,15, 0,14,14,14,14,
-	 0,15,15,16,16, 0,11,11,16,16, 0,13,13,16,16, 0,
-	11,11,15,15, 0,14,14,16,16, 0,14,14,15,15, 0,11,
-	11,15,15, 0,13,13,15,15, 0,10,10,15,15, 0,15,15,
-	17,17, 0,14,14,14,14, 0,16,16,16,16, 0, 0,22,19,
-	19, 0,13,13,14,14, 0,17,17, 0, 0, 0,15,15,14,14,
-	 0,16,16,17,17, 0, 0,22,18,18, 0,13,13,14,14, 0,
-	21,18, 0, 0, 0,15,15,14,14, 0,11,11,13,13, 0,12,
-	12,15,15, 0,12,12,16,15, 0,16,16, 0, 0, 0,17,17,
-	22,22, 0,12,12,16,16, 0,14,14,18,18, 0,11,12,16,
-	16, 0,15,16, 0,21, 0,16,16,22,21, 0,12,12,16,16,
-	 0,15,15,19,20, 0,11,12,16,16, 0,15,15,20,22, 0,
-	16,16, 0,22, 0,17,17,22, 0, 0, 0, 0, 0, 0, 0,15,
-	15,21,22, 0,19,18, 0, 0, 0,17,17, 0, 0, 0,17,17,
-	 0,22, 0, 0, 0, 0, 0, 0,16,15,22, 0, 0,19,19, 0,
-	 0, 0,17,18, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
-	 0,12,12,15,15, 0,13,13,14,14, 0,15,15,16,17, 0,
-	12,12,16,16, 0,14,14,16,16, 0,12,11,15,16, 0,14,
-	14,16,17, 0,14,14,16,16, 0,13,12,16,16, 0,15,15,
-	16,16, 0,11,11,15,15, 0,14,14,16,16, 0,14,14,15,
-	15, 0,15,15,18,17, 0, 0,22, 0,20, 0,13,13,15,15,
-	 0,16,17,22,22, 0,14,14,15,15, 0,15,15,17,18, 0,
-	20, 0,19,19, 0,13,13,15,15, 0,18,18,22, 0, 0,14,
-	14,15,15, 0,11,11,16,16, 0,14,14,17,16, 0,13,13,
-	17,17, 0,16,16,17,17, 0,17,17,18,19, 0,12,12,16,
-	17, 0,15,15,18,18, 0,12,12,16,16, 0,16,16,19,18,
-	 0,16,16,17,16, 0,12,13,17,17, 0,17,16,18,17, 0,
-	13,12,16,16, 0,16,16,18,19, 0,16,16,16,17, 0,16,
-	16,18,18, 0,22, 0,22,22, 0,13,13,16,16, 0,19,18,
-	22,20, 0,16,15,16,16, 0,16,17,18,18, 0, 0, 0,22,
-	20, 0,14,14,16,16, 0,19,19, 0, 0, 0,16,16,16,16,
-	 0, 9, 9,13,13, 0,13,13,15,15, 0,14,14,15,15, 0,
-	 0,22,17,18, 0,22, 0,18,19, 0,12,12,15,15, 0,15,
-	16,17,17, 0,14,14,14,14, 0,22, 0,18,18, 0,21,22,
-	17,17, 0,13,13,15,15, 0,17,17,17,18, 0,14,14,15,
-	15, 0,22,21,21,19, 0,20,21,17,17, 0,21,21,19,18,
-	 0, 0, 0, 0, 0, 0,21,21,17,17, 0, 0, 0,22,22, 0,
-	 0,22,19,18, 0, 0,21,19,18, 0, 0, 0, 0,22, 0,19,
-	20,17,17, 0, 0, 0, 0,22, 0, 0, 0,19,18, 0,19,19,
-	15,16, 0,21,19,16,17, 0, 0,21,17,17, 0, 0,22,17,
-	17, 0,22,22,18,19, 0,20,20,16,16, 0, 0,22,18,18,
-	 0,20,19,16,17, 0,22,21,20,19, 0, 0,21,17,17, 0,
-	21,20,17,17, 0, 0, 0,18,18, 0,19,19,17,16, 0,22,
-	 0,19,19, 0,21,22,17,18, 0, 0,22,19,18, 0, 0, 0,
-	19,20, 0,19,19,16,16, 0,22,22,22, 0, 0,20,22,16,
-	16, 0,22,20,18,19, 0, 0, 0,20,19, 0,20,20,16,16,
-	 0, 0, 0, 0, 0, 0,22,20,17,16, 0,11,11,13,13, 0,
-	14,13,15,15, 0,13,13,16,15, 0,18,17,21, 0, 0,18,
-	18,21, 0, 0,12,12,15,15, 0,15,16,17,18, 0,12,12,
-	15,15, 0,17,17,22,20, 0,17,18,22, 0, 0,12,12,17,
-	16, 0,16,17,19,19, 0,13,13,16,16, 0,17,17, 0,22,
-	 0,17,17, 0,21, 0,18,18,20,22, 0, 0, 0, 0, 0, 0,
-	15,15,21,20, 0,20,19, 0, 0, 0,18,18,22, 0, 0,17,
-	17,22, 0, 0, 0, 0, 0, 0, 0,15,16,20,22, 0,20,21,
-	 0, 0, 0,19,18, 0, 0, 0,15,15,19,19, 0,17,16,20,
-	20, 0,16,17,20,21, 0,18,17, 0, 0, 0,19,19, 0, 0,
-	 0,15,15,21,19, 0,19,19, 0, 0, 0,15,15,22,22, 0,
-	18,18, 0,22, 0,17,18,22,21, 0,15,15,20,19, 0,19,
-	19, 0, 0, 0,15,15,20,22, 0,18,19,20, 0, 0,18,17,
-	21,21, 0,18,18,19,22, 0, 0, 0, 0, 0, 0,15,15,20,
-	19, 0,19,19, 0, 0, 0,18,18,21,22, 0,18,18,22, 0,
-	 0, 0, 0, 0, 0, 0,15,15,19,20, 0,21,21, 0, 0, 0,
-	17,17,20,20, 0,12,12,17,17, 0,14,14,16,17, 0,13,
-	14,17,17, 0,16,16,17,17, 0,17,17,17,19, 0,13,13,
-	17,17, 0,16,16,18,18, 0,13,13,16,16, 0,16,16,18,
-	18, 0,16,16,17,17, 0,13,13,17,17, 0,17,17,18,17,
-	 0,12,12,15,16, 0,17,18,19,20, 0,16,16,16,16, 0,
-	17,16,18,19, 0, 0,22,21,22, 0,14,14,16,16, 0,19,
-	19, 0, 0, 0,16,16,16,16, 0,16,16,18,17, 0, 0,22,
-	21,21, 0,14,14,16,16, 0,22,20,22, 0, 0,16,16,15,
-	15, 0, 9, 9,13,13, 0,14,14,15,15, 0,14,14,14,14,
-	 0,22,22,18,18, 0, 0,22,18,18, 0,12,12,15,15, 0,
-	16,16,18,17, 0,14,14,14,14, 0,20,21,18,18, 0,22,
-	21,17,17, 0,13,13,15,15, 0,17,17,18,18, 0,14,14,
-	14,14, 0, 0,21,18,19, 0, 0,22,17,17, 0,22,22,19,
-	18, 0, 0, 0, 0, 0, 0,19,21,17,17, 0, 0, 0,22,20,
-	 0, 0,21,18,19, 0, 0,22,18,18, 0, 0, 0, 0,22, 0,
-	20,22,17,17, 0, 0, 0,20,22, 0, 0, 0,18,18, 0,19,
-	21,16,16, 0,20,22,16,17, 0,20, 0,17,17, 0,22, 0,
-	18,17, 0,21, 0,18,19, 0,20,20,17,17, 0,22, 0,18,
-	18, 0,21,20,17,17, 0, 0,20,20,19, 0, 0,21,18,17,
-	 0,21,21,17,17, 0,22, 0,18,17, 0,19,19,17,17, 0,
-	 0,22,20,21, 0, 0,21,17,17, 0,22, 0,18,18, 0, 0,
-	 0,20,22, 0,20,19,16,16, 0, 0, 0, 0, 0, 0,22,22,
-	17,17, 0,22, 0,18,19, 0, 0, 0,21,20, 0,19,21,16,
-	17, 0, 0, 0, 0, 0, 0,22,22,17,16, 0,11,11,13,13,
-	 0,13,13,15,15, 0,13,13,15,15, 0,17,17,22,21, 0,
-	18,18,22, 0, 0,12,13,16,15, 0,15,16,18,18, 0,13,
-	13,16,16, 0,17,17, 0,22, 0,17,17,22,22, 0,13,13,
-	16,16, 0,16,16,19,18, 0,13,13,16,16, 0,18,17, 0,
-	20, 0,18,17,20, 0, 0,17,17,21, 0, 0, 0, 0, 0, 0,
-	 0,15,15,21,22, 0,19,20, 0, 0, 0,18,18, 0, 0, 0,
-	18,17, 0, 0, 0, 0, 0, 0, 0, 0,16,16,22,22, 0,20,
-	20, 0, 0, 0,21,19, 0, 0, 0,15,15,20,19, 0,16,16,
-	22,20, 0,17,17, 0,22, 0,18,18, 0,22, 0,19,17, 0,
-	 0, 0,15,16,22,20, 0,18,19, 0, 0, 0,16,16,22,20,
-	 0,18,18, 0,22, 0,18,18,22, 0, 0,16,16,21,20, 0,
-	19,20, 0,22, 0,16,16, 0,22, 0,18,18, 0,22, 0,18,
-	18, 0,21, 0,19,18, 0,22, 0, 0, 0, 0, 0, 0,16,16,
-	21,20, 0,20, 0, 0, 0, 0,18,18,21, 0, 0,18,18, 0,
-	 0, 0, 0, 0, 0, 0, 0,16,16,21,19, 0, 0, 0, 0, 0,
-	 0,18,18, 0,21,
-};
-
-static const static_codebook _44p3_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p3_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p3_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p3_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p3_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p3_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p3_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p3_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p6_0[] = {
-	 1, 6, 6, 7, 7, 7, 7, 8, 8, 7, 9, 9,11,11,11, 9,
-	 8, 8, 8, 9, 9,12,11,11, 9, 8, 8, 6, 7, 7,10,11,
-	10,10,10,10,11,11,10,14,13,14,12,11,11,11,11,11,
-	15,14,14,13,12,12, 5, 6, 6, 8, 5, 5, 8, 7, 7, 8,
-	 8, 8,12,10,10, 9, 7, 7, 9, 7, 8,12,10,10,10, 7,
-	 7, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
-	13,10,10,11,10,10,16,13,14,14,10,10, 7, 7, 7,12,
-	11,11,12,11,11,11,11,11,16,15,15,14,12,12,12,11,
-	11,16,15,16,14,12,12,10, 9, 9,14,11,11,13,11,11,
-	12,11,11,16,14,14,14,11,11,12,11,11,17,15,15,14,
-	11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,16,14,
-	13,14,10,10,12,10,10,17,14,14,14,10,10, 8, 7, 7,
-	13,11,11,12,11,11,12,11,11,16,15,14,14,12,12,12,
-	11,11,16,15,14,15,12,12,11,10,10,13,11,11,13,12,
-	11,13,11,11,17,14,14,14,11,11,13,11,11,17,14,15,
-	14,11,11,
-};
-
-static const static_codebook _44p3_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p3_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p6_1[] = {
-	 2, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,
-	 7, 7, 8, 8, 8, 9, 9, 9, 9, 7, 8, 6, 7, 7, 8, 8,
-	 8, 8, 8, 8, 9, 8, 8,10, 9, 9,10, 8, 8,10, 8, 8,
-	10, 9, 9,10, 8, 8, 6, 6, 6, 8, 6, 6, 8, 7, 7, 8,
-	 7, 7,10, 8, 8, 9, 7, 7, 9, 7, 7,10, 8, 9, 9, 7,
-	 7, 7, 7, 7,10, 8, 8,11, 8, 8,10, 8, 8,12, 9, 9,
-	12, 8, 8,11, 9, 9,12, 9, 9,11, 8, 8, 7, 7, 7,10,
-	 9, 9,10, 9, 9,10, 9, 9,11,10,10,10, 9, 9,11, 9,
-	 9,11,10,10,11, 9, 9, 9, 8, 8,10, 9, 9,10, 9, 9,
-	11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
-	 9, 9, 8, 8, 8,11, 9, 9,11, 9, 9,11, 9, 9,12, 9,
-	 9,12, 8, 8,12, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,
-	10, 9, 9,10, 9, 9,11, 9, 9,11,11,11,11, 9, 9,11,
-	10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11, 9,
-	10,11,10, 9,11,10,10,11, 9, 9,11, 9,10,11,10,10,
-	11, 9, 9,
-};
-
-static const static_codebook _44p3_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p3_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p3_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p3_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p7_0,
-	1, -513979392, 1633504256, 2, 0,
-	(long *)_vq_quantlist__44p3_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p3_p7_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p3_p7_1[] = {
-	 1, 9, 9, 6, 9, 9, 5, 9, 9, 8, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,
-};
-
-static const static_codebook _44p3_p7_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p3_p7_1,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p3_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p3_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p3_p7_2[] = {
-	 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p3_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p3_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p3_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p3_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p3_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p3_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p3_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p3_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p3_short[] = {
-	 4, 5,16, 9, 9,12,17,18, 4, 2,18, 6, 5, 9,13,15,
-	10, 7, 7, 6, 7, 9,13,13, 8, 5, 6, 5, 5, 7,11,12,
-	 8, 4, 7, 4, 3, 6,10,12,11, 8, 9, 7, 6, 8,11,12,
-	15,13,13,11, 9, 7,10,12,16,12,16,12, 6, 5, 8,11,
-};
-
-static const static_codebook _huff_book__44p3_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p3_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p4_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p4_l0_0[] = {
-	 1, 4, 4, 8, 8, 9, 8, 9, 9,10,10,10,10, 4, 6, 5,
-	 8, 7, 9, 9, 9, 9,10, 9,10,10, 4, 5, 6, 7, 8, 9,
-	 9, 9, 9, 9,10, 9,10, 8, 9, 8, 9, 8,10, 9,11, 9,
-	12,10,11,10, 8, 8, 9, 8, 9, 9,10, 9,11,10,11,10,
-	12, 9,10,10,11,10,11,11,12,11,12,12,12,12, 9,10,
-	10,11,11,11,11,11,12,12,12,12,12,10,11,11,12,12,
-	12,12,12,12,12,12,12,12,10,11,11,12,12,12,12,12,
-	12,12,12,12,12,11,12,12,12,12,12,12,12,12,12,13,
-	12,12,11,12,11,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,13,12,12,12,12,12,12,11,13,12,12,
-	12,13,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _44p4_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p4_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p4_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p4_l0_1[] = {
-	 3, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
-	 5, 6, 5, 6, 5, 6, 5, 6, 5,
-};
-
-static const static_codebook _44p4_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p4_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p4_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p4_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p4_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p4_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p4_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p4_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p4_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p4_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p4_long[] = {
-	 3, 5,13, 9, 9,12,16,18, 4, 2,20, 6, 7,10,15,20,
-	10, 7, 5, 5, 6, 8,10,13, 8, 5, 5, 3, 5, 7,10,11,
-	 9, 7, 6, 5, 5, 7, 9, 9,11,10, 8, 7, 6, 6, 8, 8,
-	15,15,10,10, 9, 7, 8, 9,17,19,13,12,10, 8, 9, 9,
-};
-
-static const static_codebook _huff_book__44p4_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p4_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p4_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p1_0[] = {
-	 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p4_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p4_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p4_p2_0[] = {
-	 3, 9, 9, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
-	12,12, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0, 0, 0, 0,
-	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
-	 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0,
-	 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,12,12, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0,
-	 5, 5, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
-	 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
-	 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 7, 7, 0, 0,
-	 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-	 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0, 9, 9, 0,
-	 0, 0,10,10, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0,
-	 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
-	10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-	 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0,
-	 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 9, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0, 0,
-	 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,
-	 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
-	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
-	 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 7, 7,
-	 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0,
-	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0,
-	 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
-	 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0,
-	 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0,
-	 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
-	 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
-	 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7,
-	 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,11,11,
-	 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 7,
-	 7, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0,
-	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
-	 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
-	 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-	 9, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0,10,10, 0, 0, 0, 9, 9, 0, 0, 0,10,10,
-	 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
-	 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
-	 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,
-	 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,11,
-	11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,12,12,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0,
-	 9, 9, 0, 0, 0,10,10, 0, 0, 0,12,12, 0, 0, 0, 0,
-	 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
-	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
-	 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
-	 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,
-	10,10, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44p4_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p4_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p4_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p3_0[] = {
-	 1, 6, 6, 5, 7, 8, 0, 8, 8, 6, 9, 9, 7,10,10, 0,
-	 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 4, 7, 7, 6,10,
-	10, 0,12,12, 7,11,11, 8,12,12, 0,12,12, 0,13,12,
-	 0,15,15, 0,12,12, 0, 7, 7, 0, 7, 7, 0, 7, 7, 0,
-	 8, 8, 0,10,10, 0, 7, 7, 0, 8, 8, 0,11,11, 0, 7,
-	 7, 5, 7, 7, 8, 9, 9, 0,10,10, 8, 9, 9,11,11,11,
-	 0,10, 9, 0,11,11, 0,13,13, 0,10,10, 6, 7, 7, 8,
-	10,10, 0,12,12, 9,10,10,10,12,12, 0,12,12, 0,12,
-	12, 0,15,15, 0,12,12, 0,10,10, 0,11,11, 0,11,11,
-	 0,11,11, 0,13,13, 0,11,11, 0,11,11, 0,15,15, 0,
-	10,10, 0, 8, 8, 0,10,10, 0,12,12, 0,11,11, 0,12,
-	12, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0, 7, 7,
-	 0,10,10, 0,12,12, 0,10,10, 0,12,12, 0,12,12, 0,
-	13,13, 0,14,14, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44p4_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p4_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p3_1[] = {
-	 3, 5, 5, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0,10,10, 0,
-	 8, 8, 0, 8, 8, 0,10,10, 0, 8, 8, 0, 7, 7, 0, 8,
-	 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8,
-	 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 6, 6, 0, 7, 7, 0,
-	 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,10,10, 0, 5,
-	 5, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 9, 9,
-	 0, 7, 7, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 6, 6, 0,
-	 9,10, 0,10,10, 0,10,10, 0,11,11, 0, 9, 9, 0,10,
-	10, 0,11,11, 0, 9, 9, 0, 8, 8, 0, 8, 8, 0, 8, 8,
-	 0, 9, 9, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,
-	 7, 7, 0, 8, 8, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0, 9,
-	 9, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0, 6, 6, 0, 6, 6,
-	 0,10,10, 0,10,10, 0,10,10, 0,12,12, 0, 9, 9, 0,
-	10,10, 0,12,12, 0, 9, 9, 0, 8, 8, 0, 7, 7, 0, 7,
-	 7, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9,
-	 0, 6, 6,
-};
-
-static const static_codebook _44p4_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p4_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p4_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p4_0[] = {
-	 1, 6, 6, 6, 7, 7, 7, 8, 8, 7, 8, 8,10,11,11, 9,
-	 8, 8, 8, 8, 8,11,11,12, 9, 8, 8, 5, 7, 7, 9,11,
-	11,10,11,11,10,11,11,12,14,14,11,12,12,10,12,12,
-	13,14,14,12,12,12, 5, 6, 6, 7, 6, 6, 8, 7, 7, 8,
-	 7, 7,11,10,10,10, 7, 7, 9, 8, 8,12,11,11,10, 7,
-	 7, 7, 7, 7,11,10,10,12,10,10,11,10,10,15,13,13,
-	13,10,10,12,11,11,15,13,13,14,11,11, 7, 7, 7,11,
-	11,11,12,11,11,12,11,11,14,14,14,13,12,12,12,12,
-	12,16,15,15,14,12,12, 0,10,10, 0,11,11, 0,12,12,
-	 0,11,11, 0,14,14, 0,11,11, 0,12,12, 0,15,15, 0,
-	11,11, 7, 8, 8,12,11,10,12,10,10,12,11,11,15,13,
-	13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
-	12,11,11,12,11,11,12,11,11,15,14,14,14,12,12,13,
-	12,12,15,14,14,15,13,13, 0,11,11, 0,12,12, 0,12,
-	12, 0,12,12, 0,15,15, 0,12,12, 0,13,13, 0,15,14,
-	 0,12,12,
-};
-
-static const static_codebook _44p4_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p4_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p4_p4_1[] = {
-	 4, 5, 5, 9, 9,12, 9, 9,12,12,12,10,10,13,13,13,
-	11,11,12,12,13,13,13,12,12,13,10,10,13,13,13,13,
-	13,13,13,13,10,10,13,12,13,11,11,13,13,13,14,14,
-	13,12,13,10,10,13,13,12,13,13,13,13,13,10,10,12,
-	12,13,11,11,13,13,13,14,14,12,12,13,12,12,13,13,
-	13,13,13,13,13,13,11,11,12,12,13,11,11,13,13,13,
-	14,14,12,12,13,14,14,13,13,14,13,13,14,14,14,14,
-	14,12,12,13,14,14,13,13,14,14,14,12,12,12, 8, 8,
-	12,12,13,12,12,11,11,13,11,11,11,11,14,12,12,11,
-	11,14,12,12,10,11,14,12,12,12,12,14,12,12,12,12,
-	13,13,13,11,11,14,12,12,11,11,14,12,12,12,12,14,
-	12,12,12,12,14,12,12,12,12,14,13,13,11,11,14,12,
-	12,11,11,14,12,12,12,12,14,13,13,12,12,14,12,12,
-	12,12,14,13,13,11,11,14,12,12,11,11,14,13,13,11,
-	11,15,13,13,12,12,14,12,12,12,12,15,13,13,12,12,
-	14,12,12,11,11,15,13,13,11,11,12, 9, 9,11,11,13,
-	 7, 7,11,11,13, 8, 8,12,12,14,10,10,10,10,14,14,
-	14,11,11,14, 8, 8,12,12,14,14,14,12,12,14, 7, 7,
-	11,11,14, 9, 9,12,12,14,14,14,11,11,14, 8, 8,12,
-	12,14,14,14,12,12,14, 7, 7,11,11,14, 9, 9,12,12,
-	14,14,14,11,11,14,10,10,12,12,14,14,14,13,13,14,
-	 9, 9,11,11,14,10,10,12,11,15,14,14,11,11,14,15,
-	15,12,12,15,14,14,14,14,15,14,14,11,11,15,14,14,
-	12,12,15,14,14,11,11,14,11,11,10,10,15,10,10,10,
-	10,15,10,10,10,10,15,11,11, 9, 9,15,12,13, 9, 9,
-	15,11,11,11,11,15,13,13,11,11,15,10,10,10,10,15,
-	11,11,10,10,15,13,13,11,11,15,11,11,11,11,15,13,
-	13,11,11,15,10,10,10,10,15,11,11,10,10,15,13,13,
-	10,11,15,12,12,11,11,15,13,13,11,10,15,11,11,10,
-	10,15,11,12,10, 9,15,13,13,10,10,15,14,14,11,11,
-	15,13,13,11,11,15,14,14,10,10,15,13,13,10,10,15,
-	14,14,10,10,14,13,13,10,10,15,13,13,10,10,15,13,
-	13,10,10,14,14,14, 8, 9,15,14,14, 9, 9,15,14,14,
-	11,11,15,14,14,10,10,15,14,14,10,10,15,14,14,11,
-	11,15,14,14,10,10,15,14,14,11,11,15,14,14,10,10,
-	15,14,14,10,10,15,14,14,10,10,15,14,14, 9, 9,15,
-	14,14,11,11,15,14,14,11,11,15,14,14,10,10,15,14,
-	14,10,10,14,14,14, 9, 9,15,15,15,11,11,15,14,14,
-	12,12,15,15,15,10,10,15,14,15,10,10,15,15,15, 9,
-	 9,15,10,10,13,13,17, 8, 8,12,12,17,10, 9,13,13,
-	18,11,11,12,12,18,14,14,12,12,17, 9, 9,13,13,17,
-	13,13,12,12,18, 8, 8,12,12,18,10,10,12,12,18,14,
-	14,12,12,18,10,10,13,13,18,13,13,13,13,18, 9, 9,
-	12,12,18,10,10,13,13,18,14,14,12,12,18,11,11,13,
-	13,18,14,14,13,13,18,10,10,12,12,17,11,11,12,12,
-	18,14,14,12,12,18,14,14,13,13,18,14,14,13,13,19,
-	14,15,12,12,18,14,14,12,12,18,15,15,12,12,13, 7,
-	 7,11,11,14,15,15,11,11,14,16,15,11,11,14,15,15,
-	11,11,14,15,15,11,11,14,15,15,11,12,14,15,15,12,
-	12,13,15,15,11,11,14,15,15,11,11,15,15,15,12,12,
-	14,15,15,12,12,14,16,16,12,12,14,15,15,11,11,14,
-	15,15,11,11,15,15,15,12,12,15,15,15,12,12,14,15,
-	15,12,12,14,15,15,11,11,14,15,15,11,11,15,14,15,
-	12,12,15,15,15,12,12,15,16,16,12,12,15,15,15,12,
-	12,14,15,15,12,12,15,15,15,12,12,13,13,13,11,11,
-	14,14,15,11,11,14,14,14,12,12,14,15,15,10,10,15,
-	15,15,11,11,14,15,15,12,12,14,14,14,11,11,14,15,
-	15,11,11,14,15,15,12,12,15,15,15,11,11,14,15,15,
-	12,12,14,14,15,11,11,14,15,15,11,11,14,15,15,12,
-	12,15,15,15,11,11,15,15,15,12,12,14,15,15,12,12,
-	14,15,15,10,10,14,15,15,11,11,15,15,15,10,10,15,
-	15,15,12,12,15,15,15,14,14,15,15,15,11,11,15,15,
-	15,11,11,15,15,15,11,11,14,10,10,10,10,15, 9, 9,
-	12,11,15,10,10,12,12,15,11,11,11,11,15,13,13,12,
-	12,16,10,10,12,12,15,13,13,12,12,15, 9, 9,11,11,
-	15,10,10,13,12,15,13,13,11,11,15,10,10,12,12,15,
-	13,13,12,12,15, 9, 9,11,11,15,10,10,12,12,15,13,
-	13,11,11,15,11,11,12,12,15,13,13,13,13,15,10,10,
-	11,11,15,11,11,12,12,15,13,14,11,11,15,14,14,13,
-	13,16,14,14,20,19,15,14,14,11,11,15,13,14,12,12,
-	15,14,14,11,11,14,13,13,10,10,14,14,13,11,11,15,
-	13,14,12,12,15,14,14,12,12,15,14,14,11,11,15,14,
-	14,12,12,15,15,14,13,13,15,14,14,11,11,15,14,14,
-	11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,13,
-	13,15,14,14,11,11,15,14,14,11,11,15,14,14,13,13,
-	15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,15,
-	14,14,11,11,15,15,15,12,12,15,15,15,13,13,16,14,
-	14,12,12,15,15,15,13,13,15,15,15,12,12,15,15,15,
-	12,12,14,10,10,13,13,17, 9, 9,12,12,17, 9, 9,13,
-	13,17,11,11,12,12,18,14,14,12,12,18,10,10,13,13,
-	18,14,13,12,12,18, 9, 9,12,12,18,10,10,12,13,18,
-	14,14,12,12,17, 9, 9,12,12,17,13,14,12,12,17, 9,
-	 9,12,12,17,10,10,12,12,17,14,14,11,11,18,11,11,
-	12,12,18,14,14,12,13,18,10,10,12,12,18,11,11,12,
-	12,18,14,14,11,11,18,15,15,12,12,18,14,14,13,13,
-	18,14,15,12,12,17,14,14,12,12,17,15,15,12,12,13,
-	 7, 7,11,11,14,15,15,11,11,14,15,15,11,11,14,15,
-	15,11,11,14,15,15,11,11,14,15,15,11,11,14,15,15,
-	12,12,14,15,15,11,11,14,15,15,11,11,15,15,15,12,
-	12,14,15,15,11,11,14,15,15,12,12,14,15,15,11,11,
-	15,15,15,11,11,15,15,15,12,12,14,15,15,12,12,14,
-	15,16,12,12,14,15,15,11,11,14,15,15,11,11,15,15,
-	15,12,12,15,15,15,12,12,15,16,16,12,12,15,15,15,
-	12,12,15,15,15,12,12,15,15,15,12,12,13,13,13,12,
-	12,14,14,14,11,11,14,14,14,12,12,14,14,14,10,10,
-	15,15,15,11,11,14,15,15,12,12,14,14,14,11,11,14,
-	15,15,11,11,14,14,14,12,12,15,15,14,11,11,14,15,
-	15,12,12,14,14,14,11,11,14,15,15,11,11,14,14,14,
-	11,11,15,14,14,10,10,14,15,15,12,12,14,14,14,12,
-	12,14,15,15,10,10,14,15,15,11,11,15,15,15,10,10,
-	15,15,15,12,12,15,14,14,13,13,15,15,15,10,10,15,
-	14,14,11,11,15,15,15,10,10,14,10,10,10,10,14, 9,
-	 9,12,12,15,10,10,12,12,14,11,11,11,11,15,13,14,
-	12,12,15,10,10,13,13,15,13,13,12,12,15, 9, 9,12,
-	12,15,10,10,13,13,15,13,14,11,11,15,10,10,12,12,
-	15,13,13,12,12,15, 9, 9,11,11,15,10,10,12,12,15,
-	13,13,11,11,15,11,11,12,12,15,13,13,13,13,15,10,
-	10,11,11,15,11,11,12,12,15,14,14,11,11,15,14,14,
-	13,13,15,14,14,20,19,15,14,14,11,11,15,14,14,12,
-	12,15,14,14,11,11,14,13,13,11,11,15,13,13,11,11,
-	15,14,13,12,12,15,14,14,11,12,15,14,14,11,11,15,
-	14,14,12,12,14,14,14,13,13,15,14,14,11,11,15,14,
-	14,11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,
-	13,13,14,14,14,11,11,15,14,14,11,11,15,14,14,13,
-	13,15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,
-	15,14,14,11,11,14,14,14,12,12,15,15,15,13,13,16,
-	14,14,12,12,15,15,15,13,13,15,14,14,12,12,15,15,
-	15,12,12,15,11,11,13,13,18,10,10,12,12,17,11,11,
-	12,12,18,12,12,11,11,18,14,14,12,12,18,10,10,13,
-	13,18,14,14,12,12,18,10,10,12,12,18,11,11,12,12,
-	18,14,14,12,12,18,11,11,12,13,18,14,14,12,12,18,
-	10,10,12,12,18,11,11,12,12,18,14,14,11,11,18,11,
-	11,12,12,18,14,14,12,12,17,10,10,11,11,17,12,12,
-	11,11,17,14,14,11,11,18,15,15,12,12,18,14,14,13,
-	13,18,15,15,11,11,18,15,14,12,12,18,15,15,11,11,
-	14, 8, 8,11,11,14,15,15,10,10,14,15,15,11,11,14,
-	15,15,11,11,15,15,15,12,12,15,15,15,11,11,15,15,
-	15,12,12,14,15,15,10,10,15,15,15,11,11,15,15,15,
-	12,12,15,15,15,11,11,15,15,15,13,13,14,15,15,10,
-	10,15,15,15,11,11,15,15,15,12,12,15,15,15,12,12,
-	15,16,16,12,12,15,14,14,11,11,15,15,15,11,11,15,
-	15,15,12,12,16,15,15,13,13,15,16,16,13,13,16,15,
-	15,12,12,15,15,15,12,12,15,15,15,12,12,14,13,13,
-	11,11,14,14,14,11,11,14,14,14,12,12,15,14,14,11,
-	11,15,15,14,11,11,15,14,14,12,12,15,14,14,12,12,
-	14,15,15,11,11,15,14,14,12,12,15,14,14,11,11,15,
-	14,15,12,12,15,14,14,12,12,14,15,15,11,11,15,14,
-	14,11,11,15,14,14,11,11,15,15,14,12,12,15,14,14,
-	12,12,15,15,15,10,11,15,14,14,11,11,15,15,15,10,
-	10,15,15,15,12,12,16,14,14,13,13,15,15,15,11,11,
-	15,14,14,11,11,15,15,15,11,11,14,11,11, 9, 9,14,
-	10,10,12,12,15,11,11,12,12,15,12,12,12,12,15,14,
-	14,13,13,15,11,11,12,12,15,14,14,13,13,14,10,10,
-	12,12,15,11,11,13,13,15,14,14,12,12,15,10,10,12,
-	12,14,14,14,13,13,14,10,10,11,11,15,11,11,12,12,
-	15,14,14,12,12,15,12,12,13,13,15,14,14,14,14,15,
-	11,11,11,11,15,12,11,12,12,15,14,14,11,11,15,15,
-	15,13,14,15,14,14,20,19,15,14,14,12,12,15,14,14,
-	13,13,15,14,14,12,12,14,13,13,10,10,14,13,13,11,
-	11,14,13,13,11,11,15,14,14,12,12,15,14,14,12,12,
-	15,14,14,12,11,14,14,14,13,13,15,14,14,11,11,15,
-	14,14,11,11,15,14,14,14,14,15,14,14,11,12,15,14,
-	14,13,13,14,14,14,11,11,15,14,14,11,11,15,14,14,
-	14,14,15,14,14,12,12,15,14,14,13,13,15,14,14,11,
-	11,14,14,14,12,12,15,14,14,13,13,15,15,15,13,13,
-	15,14,14,13,13,15,15,15,13,13,15,14,14,13,13,15,
-	15,15,13,13,15,14,14,13,13,18,15,15,12,12,18,15,
-	15,12,12,18,16,16,11,11,18,17,17,12,12,18,15,15,
-	13,13,18,17,17,12,12,18,15,15,12,12,18,15,16,12,
-	12,18,17,17,12,12,18,15,15,13,12,17,16,17,12,12,
-	17,15,15,11,12,18,15,15,12,12,18,17,17,11,11,18,
-	16,16,12,12,18,17,16,12,12,18,15,15,11,11,18,15,
-	15,12,12,18,17,17,11,11,18,17,17,12,12,18,16,16,
-	13,13,18,17,17,11,11,17,16,16,11,11,18,17,17,11,
-	11,15,15,15,11,11,16,15,15,11,11,16,15,15,11,11,
-	16,15,15,12,12,17,15,15,14,14,16,15,15,11,11,17,
-	15,15,14,14,16,15,15,11,11,16,15,15,12,12,18,15,
-	15,13,13,16,15,15,11,11,17,15,15,14,14,16,15,15,
-	11,11,16,15,15,12,12,17,15,15,13,13,16,15,15,12,
-	12,17,16,15,14,14,16,15,15,11,11,16,15,15,12,12,
-	18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,18,
-	14,15,13,13,18,15,15,14,14,18,15,15,13,13,15,13,
-	13,12,12,15,14,14,12,12,16,14,14,12,12,16,14,14,
-	12,12,17,14,15,12,12,16,14,14,12,12,17,14,14,13,
-	13,16,15,15,12,12,16,14,14,12,12,17,14,14,12,12,
-	16,14,14,12,12,17,14,14,13,13,15,15,15,11,11,16,
-	14,14,12,12,17,14,14,12,12,16,15,15,12,12,17,14,
-	14,13,12,16,15,15,11,11,16,14,14,12,12,17,15,15,
-	11,11,17,15,15,13,13,17,14,14,13,13,18,15,15,12,
-	12,17,14,14,12,12,17,15,15,12,12,14,15,15, 9, 9,
-	14,15,15,12,12,15,16,15,13,13,15,15,15,14,14,15,
-	15,15,21,19,15,15,15,13,13,15,15,15,19,19,15,15,
-	15,12,12,15,16,16,14,14,15,15,15,19,19,15,16,15,
-	13,13,15,16,16,19,20,15,15,15,12,13,15,16,16,14,
-	14,15,15,15,20,19,15,15,15,14,14,15,16,16,19,19,
-	15,15,15,14,13,15,15,15,14,14,15,15,15,19,19,15,
-	16,16,20,19,15,17,16,21,20,15,15,15,20,19,15,16,
-	16,20,20,15,15,15,19,20,14,13,13,10,10,14,14,14,
-	11,11,14,14,14,12,12,15,14,14,13,13,15,15,14,20,
-	20,15,14,14,12,12,14,14,14,19,19,15,14,14,11,11,
-	15,14,14,12,12,15,14,14,20,19,15,14,14,12,12,14,
-	14,14,20,20,14,14,14,11,11,15,14,14,12,12,15,14,
-	14,20,21,15,14,14,13,13,15,14,14,20,20,15,14,14,
-	12,12,15,14,14,13,13,14,15,15,20,20,15,15,15,20,
-	19,15,14,14,20,19,15,15,15,20,20,15,14,14,21,20,
-	15,15,15,20,20,
-};
-
-static const static_codebook _44p4_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p4_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p4_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p4_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p4_p5_0[] = {
-	 1, 7, 6,15,15, 7, 8, 8,15,15, 8, 8, 8,15,15, 0,
-	13,13,16,16, 0,14,14,16,16, 7, 9, 9,16,16,10,11,
-	11,17,17,10, 8, 8,15,16, 0,14,14,18,18, 0,14,14,
-	16,16, 9, 9, 9,16,16,12,11,11,17,17,10, 9, 9,15,
-	15, 0,14,14,19,19, 0,14,14,16,16, 0,15,15,18,17,
-	 0, 0, 0,20,20, 0,13,13,16,16, 0,17,17,22,20, 0,
-	15,15,17,17, 0,15,15,18,18, 0,22,21,20,21, 0,13,
-	13,16,16, 0,18,18, 0,22, 0,15,15,17,17, 6, 7, 7,
-	13,13, 9,10,10,15,15,11,10,10,15,15, 0,21,22,18,
-	18, 0, 0, 0,18,18,10,10,10,15,15,12,13,13,17,17,
-	12,11,11,15,15, 0,22,22,18,18, 0, 0,21,18,18,12,
-	11,11,15,15,15,14,14,18,18,13,11,11,15,15, 0, 0,
-	21,18,19, 0,21,22,18,19, 0,22, 0,18,19, 0, 0, 0,
-	 0, 0, 0,21,21,18,18, 0,22, 0, 0,21, 0, 0, 0,19,
-	18, 0, 0, 0,18,19, 0, 0, 0, 0, 0, 0,20,20,18,17,
-	 0, 0,22, 0,21, 0, 0, 0,19,19, 6, 6, 6,13,13, 8,
-	 6, 6,11,11, 9, 7, 7,13,13, 0,10,10,11,11, 0,12,
-	12,14,14, 9, 8, 8,14,14,12,10,10,13,13,10, 7, 7,
-	13,13, 0,11,11,15,15, 0,11,11,13,13, 9, 8, 8,14,
-	14,13,10,10,13,14,11, 7, 7,13,13, 0,11,11,15,15,
-	 0,11,11,13,13, 0,12,12,15,15, 0,21,21,17,17, 0,
-	10,10,13,13, 0,14,14,20,20, 0,12,12,13,13, 0,12,
-	12,15,15, 0,21,22,17,18, 0,10,10,13,13, 0,16,16,
-	20,21, 0,12,12,13,13, 0,11,11,13,13, 0,12,12,16,
-	16, 0,12,12,16,16, 0,16,16, 0,21, 0,17,18, 0, 0,
-	 0,12,12,15,15, 0,15,15,18,18, 0,12,12,16,16, 0,
-	16,16,21,22, 0,17,17,22,21, 0,12,12,16,16, 0,15,
-	15,19,19, 0,12,12,16,16, 0,16,16,22,22, 0,17,16,
-	22, 0, 0,17,18, 0, 0, 0, 0, 0, 0, 0, 0,15,15,21,
-	20, 0,19,20, 0,22, 0,18,18, 0, 0, 0,18,17, 0, 0,
-	 0, 0, 0, 0, 0, 0,16,16,22,21, 0,20,20, 0,22, 0,
-	20,19, 0, 0, 0,11,11,12,12, 0,10,10,11,11, 0,11,
-	11,12,12, 0,12,12,10,10, 0,13,13,12,12, 0,11,11,
-	13,13, 0,13,13,12,12, 0,10,10,12,12, 0,13,13,14,
-	13, 0,12,12,12,12, 0,12,12,13,13, 0,14,14,13,13,
-	 0,10,10,12,12, 0,13,13,14,14, 0,13,12,12,12, 0,
-	14,14,14,14, 0,21,21,16,16, 0,12,12,12,12, 0,16,
-	16,20,21, 0,13,13,11,11, 0,14,14,14,14, 0,20,20,
-	16,15, 0,12,12,12,12, 0,17,17,20,20, 0,13,13,11,
-	11, 7, 8, 8,16,16,11,10,10,15,15,12,10,10,17,17,
-	 0,14,14,16,15, 0,15,15,17,17,11, 9, 9,16,16,14,
-	12,12,17,17,13, 9, 9,16,15, 0,14,14,19,18, 0,14,
-	14,16,16,12,10,10,17,18,16,13,13,17,18,14,10,10,
-	16,16, 0,14,14,19,19, 0,14,15,17,17, 0,15,15,18,
-	19, 0, 0, 0,20,20, 0,13,13,17,17, 0,17,18, 0,22,
-	 0,15,15,16,17, 0,15,15,18,18, 0, 0, 0,20,21, 0,
-	14,14,17,17, 0,19,18, 0, 0, 0,16,16,17,17, 8, 7,
-	 7,14,14,12,11,11,15,15,13,11,11,15,15, 0, 0, 0,
-	18,19, 0,21,20,18,18,12,10,11,15,16,14,13,13,18,
-	18,14,11,11,15,15, 0,20,20,19,18, 0,20, 0,18,18,
-	13,11,11,16,16,17,15,15,19,19,14,12,12,15,15, 0,
-	21, 0,18,20, 0,22,22,18,19, 0,22,22,19,19, 0, 0,
-	 0, 0, 0, 0,21,22,19,18, 0, 0, 0, 0,21, 0, 0, 0,
-	19,19, 0, 0,22,20,20, 0, 0, 0, 0, 0, 0,22, 0,18,
-	18, 0, 0, 0, 0,22, 0, 0, 0,19,20,11,10,10,14,14,
-	14,11,11,13,13,14,11,11,15,15, 0,14,13,12,12, 0,
-	15,15,16,16,13,11,11,15,15,16,13,13,15,15,15,10,
-	10,14,15, 0,14,14,16,16, 0,14,14,15,15,13,11,11,
-	15,15,18,14,14,15,15,15,10,10,15,14, 0,14,14,16,
-	16, 0,14,14,15,15, 0,15,15,17,16, 0,21,22,18,18,
-	 0,13,13,14,14, 0,18,17,20,21, 0,15,15,14,14, 0,
-	15,16,16,17, 0, 0, 0,19,18, 0,13,13,15,14, 0,19,
-	19, 0, 0, 0,15,15,14,14, 0,12,12,14,13, 0,13,13,
-	16,16, 0,12,12,16,16, 0,16,16,22, 0, 0,17,18, 0,
-	22, 0,13,13,16,16, 0,15,15,18,18, 0,12,12,16,16,
-	 0,16,16,22,22, 0,17,17, 0, 0, 0,13,13,17,17, 0,
-	16,16,19,20, 0,12,12,17,17, 0,17,17,22, 0, 0,17,
-	17,22,21, 0,18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
-	21,21, 0,19,19, 0, 0, 0,18,18, 0,22, 0,18,18, 0,
-	22, 0, 0, 0, 0, 0, 0,16,16,22, 0, 0,20,20, 0, 0,
-	 0,19,18, 0, 0, 0,12,12,15,15, 0,12,12,15,14, 0,
-	13,13,15,15, 0,14,14,14,14, 0,15,15,16,16, 0,13,
-	13,15,16, 0,15,15,16,16, 0,12,12,15,15, 0,14,14,
-	16,16, 0,14,14,15,15, 0,13,13,15,16, 0,15,15,16,
-	16, 0,12,12,15,15, 0,15,15,17,17, 0,14,14,15,15,
-	 0,15,15,17,17, 0,21,21,19,19, 0,13,13,14,14, 0,
-	17,17,22, 0, 0,14,14,15,15, 0,15,15,17,17, 0,22,
-	 0,18,20, 0,13,13,15,15, 0,18,18, 0,22, 0,15,15,
-	14,15, 8, 8, 8,17,16,12,10,10,16,16,13,10,10,17,
-	16, 0,15,15,17,17, 0,15,15,17,17,12,11,11,18,18,
-	15,12,12,18,18,15,10,10,16,17, 0,14,14,18,18, 0,
-	14,14,17,17,13,10,10,16,16,17,14,14,17,17,15,10,
-	10,16,15, 0,15,15,19,20, 0,14,14,15,16, 0,16,16,
-	19,19, 0, 0, 0,21,22, 0,13,13,17,17, 0,18,17, 0,
-	21, 0,15,15,17,17, 0,15,15,18,19, 0, 0,22, 0,21,
-	 0,13,13,16,17, 0,19,19, 0,22, 0,16,15,16,16, 9,
-	 8, 8,14,14,12,11,11,15,15,13,11,11,15,15, 0,21,
-	20,19,18, 0, 0, 0,19,18,12,11,11,16,15,15,13,13,
-	17,18,14,11,11,15,15, 0,22,22,19,18, 0,22,21,18,
-	18,14,11,11,15,15,17,14,14,18,18,15,12,12,15,15,
-	 0,22,22,20,19, 0, 0,21,18,18, 0, 0,22,20,20, 0,
-	 0, 0, 0, 0, 0,20,21,18,18, 0, 0, 0,21,21, 0, 0,
-	 0,20,19, 0,22,21,19,19, 0, 0, 0, 0, 0, 0, 0,22,
-	17,18, 0, 0,22, 0,22, 0,22, 0,19,19, 0,11,11,15,
-	15, 0,11,11,14,14, 0,12,12,15,15, 0,15,15,14,14,
-	 0,16,16,16,16, 0,12,12,16,16, 0,14,14,16,16, 0,
-	11,11,15,15, 0,15,15,17,17, 0,15,15,15,15, 0,12,
-	12,16,16, 0,14,14,15,15, 0,11,11,15,15, 0,15,15,
-	17,17, 0,15,15,14,15, 0,16,16,17,17, 0, 0, 0,19,
-	19, 0,14,14,15,15, 0,18,18,21, 0, 0,15,15,14,15,
-	 0,16,16,17,17, 0,21, 0,19,19, 0,14,14,15,15, 0,
-	20,20,22, 0, 0,16,15,14,14, 0,12,12,13,13, 0,12,
-	12,16,16, 0,12,12,16,16, 0,16,16,22,21, 0,18,17,
-	21, 0, 0,13,13,16,16, 0,15,15,18,19, 0,12,12,16,
-	16, 0,16,17,22, 0, 0,17,17, 0,22, 0,13,13,17,16,
-	 0,15,15,19,19, 0,12,12,16,16, 0,16,16,21,20, 0,
-	17,16,22, 0, 0,18,18,22,21, 0, 0, 0, 0, 0, 0,15,
-	16,21,21, 0,19,19, 0, 0, 0,18,17, 0, 0, 0,18,18,
-	21, 0, 0, 0, 0, 0, 0, 0,16,16,22,22, 0,20,21, 0,
-	 0, 0,18,19, 0,22, 0,13,13,16,16, 0,12,12,15,15,
-	 0,13,13,16,16, 0,14,14,15,15, 0,15,15,17,17, 0,
-	13,13,17,16, 0,15,15,17,17, 0,12,12,16,16, 0,15,
-	15,17,17, 0,14,14,16,16, 0,13,13,16,17, 0,15,15,
-	17,17, 0,12,12,16,16, 0,14,14,17,17, 0,14,14,16,
-	16, 0,16,16,17,17, 0,21, 0,21,19, 0,13,13,16,16,
-	 0,17,17, 0, 0, 0,15,15,16,16, 0,16,15,18,18, 0,
-	22, 0,20,20, 0,13,13,15,15, 0,18,18, 0, 0, 0,15,
-	15,15,15, 0,12,12,17,17, 0,14,14,17,17, 0,14,14,
-	17,17, 0,17,17,18,17, 0,17,17,19,18, 0,13,13,17,
-	17, 0,16,16,18,18, 0,13,13,16,16, 0,17,17,19,19,
-	 0,16,16,17,17, 0,13,13,18,18, 0,17,17,18,18, 0,
-	13,13,17,17, 0,17,17,19,19, 0,16,17,17,17, 0,17,
-	17,19,19, 0,21, 0,21,19, 0,14,14,16,16, 0,20,19,
-	 0,21, 0,16,16,16,16, 0,17,18,19,19, 0, 0, 0, 0,
-	21, 0,15,15,16,17, 0,21,20, 0, 0, 0,17,18,16,17,
-	 0, 9, 9,14,14, 0,14,14,15,16, 0,14,14,15,15, 0,
-	 0, 0,18,18, 0,21, 0,18,19, 0,12,12,15,15, 0,16,
-	16,17,17, 0,14,14,14,14, 0,22, 0,19,18, 0,22, 0,
-	17,18, 0,14,14,16,15, 0,18,18,19,18, 0,14,15,15,
-	15, 0, 0,21,20,20, 0, 0, 0,18,18, 0,21,21,19,19,
-	 0, 0, 0, 0, 0, 0,21,21,18,18, 0,22, 0,20,20, 0,
-	22, 0,19,19, 0,22, 0,19,20, 0, 0, 0, 0, 0, 0, 0,
-	21,17,18, 0, 0, 0,22,22, 0, 0, 0,19,18, 0,18,20,
-	16,16, 0,21,20,17,17, 0, 0,21,18,18, 0,22,21,18,
-	18, 0, 0,22,19,19, 0,20,20,17,17, 0, 0, 0,18,18,
-	 0,19,20,17,17, 0,22, 0,19,21, 0,22,21,18,18, 0,
-	20,19,17,18, 0, 0, 0,19,19, 0,20,20,17,17, 0,22,
-	22,21,21, 0,20, 0,18,18, 0,22,22,18,18, 0, 0, 0,
-	20,22, 0,20,20,16,16, 0, 0, 0,21, 0, 0,21,20,16,
-	17, 0,22, 0,19,20, 0, 0, 0,21,20, 0,19,21,17,17,
-	 0, 0, 0, 0, 0, 0,21,21,17,17, 0,12,12,13,13, 0,
-	14,14,16,16, 0,14,14,16,16, 0,18,18, 0, 0, 0,19,
-	18,22, 0, 0,13,13,16,16, 0,16,16,18,18, 0,13,13,
-	16,16, 0,17,18,21, 0, 0,18,18,21, 0, 0,13,13,16,
-	16, 0,17,17,19,20, 0,13,13,16,17, 0,18,18,21, 0,
-	 0,18,18,21, 0, 0,18,19, 0,21, 0, 0, 0, 0, 0, 0,
-	16,16,21,20, 0,20,20, 0, 0, 0,18,19, 0, 0, 0,18,
-	18, 0, 0, 0, 0, 0, 0, 0, 0,16,16, 0,21, 0,22,22,
-	 0, 0, 0,19,19, 0, 0, 0,16,16,19,20, 0,17,16,22,
-	21, 0,17,17,21,20, 0,19,18, 0,22, 0,19,19,22,22,
-	 0,16,15,22,22, 0,19,19, 0,21, 0,15,15,20,20, 0,
-	18,19, 0,21, 0,18,18,22,22, 0,16,16,21,20, 0,20,
-	19,21,22, 0,16,15,20,20, 0,19,19, 0,22, 0,18,18,
-	21, 0, 0,19,18,21,22, 0, 0, 0, 0, 0, 0,16,16,19,
-	21, 0,20,22, 0,22, 0,18,18,20,21, 0,19,18, 0,22,
-	 0, 0, 0,22, 0, 0,16,16,20,20, 0,21,21, 0, 0, 0,
-	18,18,21, 0, 0,12,12,17,17, 0,15,14,17,17, 0,14,
-	14,18,18, 0,17,17,17,18, 0,18,18,18,18, 0,13,13,
-	18,18, 0,16,17,19,18, 0,13,13,16,17, 0,17,17,18,
-	19, 0,17,17,17,17, 0,13,13,17,17, 0,17,18,18,18,
-	 0,13,13,16,16, 0,18,18,19,20, 0,16,17,17,16, 0,
-	17,18,19,18, 0, 0, 0,22,21, 0,15,15,16,16, 0,20,
-	20,21,22, 0,17,17,16,16, 0,16,17,18,18, 0, 0, 0,
-	21,21, 0,15,15,16,16, 0,21,20, 0, 0, 0,17,17,16,
-	16, 0,10,10,14,14, 0,14,14,15,15, 0,14,14,15,15,
-	 0,22, 0,18,18, 0, 0, 0,19,19, 0,13,13,15,16, 0,
-	17,16,18,18, 0,14,14,15,15, 0,21,21,19,18, 0,22,
-	21,18,17, 0,14,14,15,15, 0,18,18,19,18, 0,15,15,
-	14,14, 0,22,21,19,19, 0,22,21,17,18, 0, 0, 0,19,
-	19, 0, 0, 0, 0, 0, 0,20,22,17,17, 0, 0,22,22,20,
-	 0, 0, 0,19,18, 0,21,22,19,18, 0, 0, 0, 0, 0, 0,
-	22,22,17,18, 0, 0, 0,21,22, 0, 0, 0,19,18, 0,20,
-	20,17,17, 0,21,21,17,18, 0,21,22,18,18, 0,21, 0,
-	18,18, 0,22, 0,19,19, 0,19,21,18,18, 0, 0,22,18,
-	18, 0,22,21,17,17, 0,22, 0,20,20, 0, 0, 0,18,18,
-	 0,22,21,18,18, 0,21, 0,19,19, 0,20,21,17,17, 0,
-	 0,22,22,20, 0,21,22,17,17, 0, 0,21,19,18, 0, 0,
-	 0,21,21, 0,21,20,16,17, 0, 0, 0, 0, 0, 0,21, 0,
-	17,17, 0,21, 0,19,20, 0, 0, 0,20,22, 0,20,20,17,
-	17, 0, 0, 0, 0, 0, 0,21,21,17,17, 0,12,12,13,13,
-	 0,14,14,16,16, 0,14,14,16,16, 0,18,18,21, 0, 0,
-	19,19,22, 0, 0,13,13,16,16, 0,16,16,18,18, 0,13,
-	13,16,16, 0,18,18,21,22, 0,18,18, 0,22, 0,13,13,
-	16,16, 0,17,17,20,18, 0,13,13,16,16, 0,19,18, 0,
-	22, 0,18,18,22,21, 0,18,19, 0, 0, 0, 0, 0, 0, 0,
-	 0,16,16,21,21, 0,21,21, 0, 0, 0,18,19, 0, 0, 0,
-	19,19,21, 0, 0, 0, 0, 0, 0, 0,16,16, 0,21, 0,20,
-	20, 0, 0, 0,20,20, 0, 0, 0,16,16,21,20, 0,18,17,
-	21,22, 0,17,18, 0,21, 0,18,19,22,22, 0,19,19, 0,
-	22, 0,16,17,21,22, 0,20,19, 0, 0, 0,16,16,20,21,
-	 0,19,19, 0, 0, 0,19,19, 0,22, 0,17,17,21,21, 0,
-	19,20, 0, 0, 0,16,16, 0,20, 0,19,20, 0,21, 0,18,
-	18, 0,22, 0,19,20,22,22, 0, 0, 0, 0,22, 0,17,17,
-	 0,21, 0,21,21, 0, 0, 0,18,19,23,21, 0,20,19, 0,
-	 0, 0, 0, 0, 0, 0, 0,17,17, 0,20, 0, 0, 0, 0, 0,
-	 0,19,19,23,22,
-};
-
-static const static_codebook _44p4_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p4_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p4_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p4_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p4_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p4_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p4_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p4_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p6_0[] = {
-	 1, 7, 7, 7, 8, 8, 7, 8, 8, 7, 9, 9,11,11,11, 9,
-	 8, 8, 8, 9, 9,12,11,12, 9, 8, 8, 6, 7, 7,10,11,
-	11,10,10,10,11,11,11,14,14,14,12,11,12,11,11,11,
-	15,15,14,13,12,12, 5, 6, 6, 8, 5, 5, 8, 7, 7, 8,
-	 7, 7,12,10,10,10, 7, 6, 9, 8, 8,12,10,10,10, 6,
-	 6, 7, 8, 8,12,10,10,12,10,10,11,10,10,16,14,14,
-	13,10,10,12,10,10,15,14,14,14,10,10, 7, 7, 7,13,
-	11,11,13,11,11,12,11,11,16,14,14,14,12,12,12,11,
-	11,18,15,15,14,12,12,10, 9,10,14,11,11,13,11,11,
-	12,11,11,17,14,14,14,11,11,13,11,11,16,15,15,14,
-	11,11, 7, 8, 8,13,11,11,12,10,10,12,10,10,16,14,
-	13,13,10,10,12,10,10,17,14,14,14,10,10, 8, 7, 7,
-	12,11,11,13,11,11,12,11,11,16,15,14,14,12,12,12,
-	11,11,16,15,15,14,12,12,11,10,10,14,11,11,13,11,
-	11,13,11,11,17,14,14,14,11,11,13,11,11,18,14,15,
-	15,11,10,
-};
-
-static const static_codebook _44p4_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p4_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p6_1[] = {
-	 2, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,
-	 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 6, 7, 7, 8, 8,
-	 8, 8, 8, 8, 9, 8, 8, 9, 8, 9, 9, 8, 8,10, 8, 8,
-	10, 9, 9,10, 8, 8, 6, 6, 6, 8, 6, 6, 8, 7, 7, 8,
-	 7, 7,10, 8, 8, 9, 7, 7, 9, 7, 7,10, 8, 8, 9, 7,
-	 7, 7, 7, 7,10, 8, 8,11, 9, 9,10, 9, 9,11, 9, 9,
-	11, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 7, 7, 7,10,
-	 9, 9,10, 9, 9,10, 9, 9,11,10,10,10, 9, 9,11, 9,
-	10,11,10,11,10, 9, 9, 9, 8, 8,10, 9, 9,10, 9, 9,
-	11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
-	 9, 9, 8, 8, 8,11, 9, 9,11, 9, 9,11, 9, 9,12, 9,
-	 9,12, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,
-	10, 9, 9,10, 9, 9,10, 9, 9,11,11,11,11, 9, 9,11,
-	10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11, 9,
-	10,11,10,10,11,10,10,11, 9, 9,11,10,10,11,10,10,
-	11, 9, 9,
-};
-
-static const static_codebook _44p4_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p4_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p4_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p4_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p7_0,
-	1, -513979392, 1633504256, 2, 0,
-	(long *)_vq_quantlist__44p4_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p4_p7_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p4_p7_1[] = {
-	 1, 9, 9, 7, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8,
-	 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 7, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 5, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 5,10, 9,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10, 8,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,
-};
-
-static const static_codebook _44p4_p7_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p4_p7_1,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p4_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p4_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p4_p7_2[] = {
-	 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p4_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p4_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p4_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p4_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p4_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p4_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p4_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p4_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p4_short[] = {
-	 3, 5,16, 9, 9,13,18,21, 4, 2,21, 6, 6,10,15,21,
-	16,19, 6, 5, 7,10,13,16, 8, 6, 5, 4, 4, 8,13,16,
-	 8, 5, 6, 4, 4, 7,12,15,13,10, 9, 7, 7, 9,13,16,
-	18,15,13,12, 9, 7,10,14,21,18,13,13, 7, 5, 8,12,
-};
-
-static const static_codebook _huff_book__44p4_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p4_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p5_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p5_l0_0[] = {
-	 1, 4, 4, 8, 8,10,10,10,10, 9, 8,11,11, 4, 6, 5,
-	 8, 6,10,10,10,10,10, 9,10, 9, 4, 5, 6, 6, 9,10,
-	10,10,10, 9,10, 9,10, 8, 9, 8, 9, 8, 9, 9,10, 9,
-	11,10,12,10, 8, 8, 9, 8, 9, 9, 9, 9,10,10,11,10,
-	12, 9,10,10,11,10,11,10,12,11,12,11,13,11, 9,10,
-	10,10,11,10,11,11,12,11,12,11,12,11,12,12,12,12,
-	13,12,13,12,13,12,13,13,11,12,12,12,12,12,12,12,
-	13,13,13,13,13,12,12,12,13,13,13,13,13,13,13,13,
-	13,13,12,13,12,13,13,13,13,13,13,13,13,13,13,12,
-	13,13,13,14,14,13,13,13,13,13,13,13,12,13,12,13,
-	13,13,13,13,13,13,13,13,13,
-};
-
-static const static_codebook _44p5_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p5_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p5_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p5_l0_1[] = {
-	 4, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 4, 4, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p5_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p5_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p5_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p5_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p5_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p5_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p5_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p5_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p5_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p5_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p5_long[] = {
-	 3, 7,12,14,14,16,18,19, 6, 2, 4, 6, 8, 9,12,14,
-	12, 3, 3, 5, 7, 8,11,13,13, 6, 4, 5, 7, 8,10,11,
-	14, 8, 7, 7, 7, 7, 9,10,15, 9, 8, 7, 7, 6, 8, 9,
-	17,11,11,10, 9, 8, 9, 9,19,14,13,11,10, 9, 9, 9,
-};
-
-static const static_codebook _huff_book__44p5_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p5_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p5_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p1_0[] = {
-	 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 8, 9,
-	10, 8, 9,10, 8, 9,10, 9,10,12,10,11,11, 8,10,10,
-	10,11,11, 9,11,11, 5, 8, 7, 8, 9, 9, 8,10, 9, 8,
-	10,10, 9,11,11,10,11,11, 8,10, 9,10,11,11, 9,12,
-	10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9, 9, 9,10,11,
-	 9,11,11, 8,10, 9,10,11,11,10,11,11, 7, 9, 9, 9,
-	10,11, 9,11,11, 9, 9,11,10,10,13,11,11,12, 9,11,
-	11,11,12,13,11,13,12, 7, 9, 9, 9,11,11, 9,11,10,
-	 9,11,10,10,11,12,11,13,12, 9,11,11,11,12,13,11,
-	13,11, 5, 8, 8, 8, 9,10, 7,10, 9, 8, 9,10,10,11,
-	11,10,11,11, 7, 9, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	 9,10,11, 9,11,11, 9,11,11,11,11,13,11,13,12, 9,
-	10,11,11,12,13,10,12,11, 7, 9, 9, 9,11,11, 9,11,
-	10, 9,11,11,11,12,13,11,13,12, 9,11, 9,11,12,11,
-	10,13,10,
-};
-
-static const static_codebook _44p5_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p5_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p5_p2_0[] = {
-	 4, 6, 6, 9, 9, 6, 7, 8,10,10, 6, 8, 7,10,10, 8,
-	10,10,12,13, 8,10,10,13,12, 6, 7, 8,10,10, 7, 8,
-	 9,10,11, 8, 9, 9,11,11,10,10,11,12,14,10,11,11,
-	14,13, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 9, 8,11,
-	10,10,11,11,13,14,10,11,10,14,12, 9,10,10,12,12,
-	10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,13,
-	14,13,15,14, 9,10,10,12,12,10,11,11,13,13,10,11,
-	10,13,12,13,13,14,14,15,12,13,12,15,12, 6, 7, 8,
-	10,11, 8, 9,10,11,12, 8, 9, 9,11,12,10,11,12,13,
-	14,10,11,11,14,13, 8, 9,10,11,12, 9,10,11,12,13,
-	 9,10,11,12,13,11,12,13,13,15,12,12,13,15,14, 8,
-	 9, 9,12,12, 9,10,11,12,13, 9,10,10,13,12,12,12,
-	13,14,15,11,12,12,14,14,11,11,12,13,14,11,12,13,
-	13,15,12,13,13,14,15,14,13,15,14,16,14,15,15,16,
-	16,11,12,11,14,13,12,13,13,15,14,11,13,12,14,13,
-	14,15,15,15,16,13,14,14,16,14, 6, 8, 7,11,10, 8,
-	 9, 9,11,12, 8,10, 9,12,11,10,11,11,13,14,10,12,
-	11,14,13, 8, 9, 9,12,12, 9,10,10,12,13, 9,11,10,
-	13,12,11,12,12,13,14,12,13,12,15,14, 8,10, 9,12,
-	11, 9,11,10,13,12, 9,11,10,13,12,12,13,12,14,15,
-	11,13,12,15,13,11,11,12,13,14,11,12,13,13,15,12,
-	13,13,14,15,13,14,14,14,16,14,15,15,16,16,11,12,
-	11,14,13,12,13,13,15,14,11,13,12,15,13,14,15,15,
-	16,16,13,15,13,16,14, 9,10,11,12,14,11,11,12,13,
-	15,11,12,12,13,14,13,14,15,15,17,13,14,14,15,16,
-	11,11,12,13,15,12,12,13,14,16,12,13,13,14,15,14,
-	14,16,15,17,15,15,15,16,17,11,12,12,14,14,12,13,
-	13,15,16,12,13,13,15,15,15,15,15,16,17,14,15,15,
-	16,16,14,14,15,15,17,14,15,15,15,17,15,15,16,16,
-	17,16,16,17,16,18,17,17,17,18,18,14,15,14,16,16,
-	15,15,16,17,17,14,15,15,17,16,17,17,17,18,18,16,
-	16,16,17,17, 9,11,10,14,12,11,12,12,14,13,11,12,
-	11,15,13,13,14,14,16,15,13,15,14,17,15,11,12,12,
-	15,14,12,13,13,15,15,12,13,13,15,15,14,15,15,16,
-	16,15,15,15,17,16,11,12,11,15,13,12,13,13,15,14,
-	12,13,12,16,14,15,15,15,17,16,14,15,14,17,15,14,
-	14,15,16,16,14,15,15,16,16,15,16,15,17,17,16,16,
-	16,17,17,17,17,17,18,17,14,15,14,16,15,15,15,15,
-	17,16,15,15,15,17,15,17,17,17,18,18,16,17,16,18,
-	16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
-	10,11,11,13,14,10,12,11,14,13, 7, 9, 9,11,12, 9,
-	10,10,12,13, 9,10,10,13,13,11,11,12,13,15,11,12,
-	12,15,14, 8, 9, 9,12,11, 9,11,10,13,13, 9,11,10,
-	13,12,12,13,12,14,15,11,13,12,15,13,10,11,12,13,
-	14,11,12,12,13,15,12,12,13,14,15,13,13,14,14,16,
-	14,15,15,16,16,11,12,11,14,13,12,13,13,15,14,11,
-	13,12,15,13,14,15,15,15,16,13,14,14,16,14, 7, 9,
-	 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,12,
-	14,15,11,12,12,15,14, 9, 9,11,11,13,10,10,12,12,
-	14,10,11,12,13,14,12,12,13,14,16,12,13,13,15,15,
-	 9,11,10,13,13,10,12,12,13,14,10,12,11,14,13,12,
-	13,13,15,16,12,13,13,15,14,11,11,13,13,15,12,12,
-	14,13,16,13,13,13,14,15,14,14,15,14,17,15,15,15,
-	16,16,12,13,12,15,14,13,14,14,15,15,12,14,13,16,
-	14,15,15,16,16,17,14,15,14,17,15, 7, 9, 9,12,11,
-	 9,10,10,12,13, 9,11,10,13,12,11,12,12,14,14,11,
-	13,12,15,14, 9,10,10,13,12,10,10,11,12,13,10,12,
-	11,14,13,12,12,13,13,15,12,14,13,16,15, 9,10,10,
-	13,12,11,11,12,13,13,10,12,10,14,12,13,13,13,15,
-	15,12,13,12,15,13,11,12,12,14,14,12,12,13,14,15,
-	13,14,13,15,15,14,13,15,13,16,15,16,15,17,16,12,
-	13,12,14,14,13,14,14,15,15,12,13,12,15,14,15,15,
-	16,16,17,14,15,13,16,13,10,11,12,13,14,11,12,13,
-	14,15,12,13,13,15,15,14,14,15,15,17,14,15,15,16,
-	16,12,12,13,12,15,12,12,14,13,16,13,13,14,14,16,
-	14,14,16,15,17,15,15,16,16,17,12,13,13,15,15,13,
-	14,14,16,16,13,14,13,16,15,15,16,16,17,17,14,15,
-	15,17,16,14,14,15,14,17,15,15,16,15,17,15,15,16,
-	15,17,16,16,17,16,18,17,17,17,17,18,14,15,15,17,
-	16,15,16,16,17,17,15,16,15,17,16,17,17,17,18,18,
-	16,17,16,18,17,10,12,11,14,14,12,13,13,15,15,12,
-	13,12,15,14,14,15,15,16,16,14,15,15,17,16,11,13,
-	12,15,14,12,13,13,15,15,13,14,13,16,14,15,15,15,
-	16,16,15,16,15,17,16,12,13,13,15,15,13,14,14,16,
-	16,12,14,13,16,15,15,16,16,17,17,15,16,15,17,16,
-	14,15,15,16,16,14,15,15,16,16,15,16,16,17,16,16,
-	16,16,16,17,17,18,17,18,17,14,15,15,17,16,15,16,
-	16,17,17,15,16,15,17,16,17,17,18,18,18,16,17,16,
-	18,16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
-	11,10,11,12,13,14,10,11,11,14,13, 8, 9, 9,11,12,
-	 9,10,11,12,13, 9,10,11,13,13,11,12,13,13,15,12,
-	12,12,15,14, 7, 9, 9,12,11, 9,10,10,13,13, 9,10,
-	10,13,12,11,12,12,14,15,11,12,11,15,13,11,11,12,
-	13,14,11,12,13,13,15,12,13,13,14,15,13,14,14,14,
-	16,14,15,15,16,16,10,12,11,14,13,12,13,12,14,14,
-	11,12,12,15,13,14,15,15,16,16,13,14,13,16,14, 7,
-	 9, 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,
-	13,14,15,11,12,12,14,14, 9,10,10,12,13,10,10,12,
-	12,14,11,12,11,13,13,12,12,14,13,15,13,13,13,15,
-	15, 9,10,10,12,13,10,11,12,13,14,10,11,10,13,12,
-	13,13,14,15,16,12,13,12,15,13,12,13,13,14,14,12,
-	12,13,14,15,13,14,14,15,15,14,13,15,13,16,15,16,
-	15,17,16,11,12,12,14,14,13,13,14,15,15,12,13,12,
-	15,14,15,15,16,16,17,14,14,13,16,13, 7, 9, 9,12,
-	11, 9,10,10,12,13, 9,11,10,13,12,11,12,12,14,15,
-	11,12,12,15,14, 9,10,11,13,13,10,11,12,13,14,10,
-	12,12,14,13,12,13,13,14,16,12,13,13,16,15, 9,11,
-	 9,13,11,10,12,11,13,13,10,12,10,14,12,12,13,13,
-	15,15,12,13,12,16,14,12,12,13,14,15,12,13,14,14,
-	15,13,14,14,15,15,14,14,15,15,17,15,16,15,17,16,
-	11,13,11,15,13,13,14,13,15,14,12,14,12,16,13,15,
-	15,15,16,16,14,15,14,17,14,10,11,12,14,14,12,12,
-	13,14,15,12,13,13,15,15,14,15,15,16,17,14,15,15,
-	16,16,12,12,13,15,15,13,13,14,15,16,13,14,14,16,
-	16,15,15,16,16,17,15,16,16,17,17,11,12,13,14,15,
-	13,13,14,15,16,12,13,13,15,15,15,15,16,16,17,15,
-	15,15,16,16,14,15,15,16,17,15,15,16,16,17,15,16,
-	16,17,17,16,16,17,16,18,17,17,17,18,18,14,15,15,
-	16,16,15,16,16,16,17,15,15,15,16,16,17,17,17,18,
-	18,16,16,16,17,16,10,12,11,14,13,12,13,13,15,15,
-	11,13,12,15,14,14,15,15,16,16,14,15,14,17,15,12,
-	13,13,15,15,13,13,14,16,16,13,14,14,16,16,15,15,
-	15,16,17,15,16,16,17,17,12,13,12,15,12,13,14,13,
-	16,14,12,14,12,16,13,15,16,15,17,16,14,16,14,17,
-	15,14,15,15,16,17,15,15,16,17,17,15,16,16,17,17,
-	16,16,17,17,18,17,18,17,18,18,14,15,14,17,14,15,
-	16,15,17,15,15,16,15,17,15,17,17,17,18,17,16,17,
-	16,18,16, 9,11,11,14,14,11,12,12,14,14,11,12,12,
-	15,14,13,14,14,16,16,13,15,14,16,16,10,11,12,14,
-	14,11,12,13,15,15,12,13,13,15,15,13,14,15,16,17,
-	14,15,15,17,16,11,12,12,15,14,12,13,13,15,15,12,
-	13,13,15,15,14,15,15,16,16,14,15,15,17,16,12,13,
-	14,15,16,13,14,14,15,16,13,14,15,16,16,15,15,16,
-	16,18,16,16,16,18,17,14,14,14,16,15,15,15,15,17,
-	16,14,15,15,17,16,16,17,17,18,17,16,16,16,18,16,
-	10,12,12,14,14,11,12,13,15,15,12,13,13,15,15,13,
-	14,15,16,17,14,15,15,17,16,11,12,13,14,15,12,12,
-	14,15,16,13,13,14,15,16,14,14,15,16,17,15,15,16,
-	17,17,12,13,13,15,15,13,14,14,16,16,13,14,13,16,
-	15,15,16,15,17,17,15,16,15,17,16,13,13,15,14,17,
-	14,13,16,15,17,15,14,16,15,17,15,15,17,16,18,16,
-	16,17,17,18,14,15,15,17,16,15,16,16,17,17,15,16,
-	15,17,16,17,17,17,18,18,16,17,16,18,17,10,12,11,
-	14,14,11,12,13,15,15,12,13,12,15,15,14,15,15,16,
-	16,14,15,15,17,16,11,12,12,15,15,12,13,13,15,15,
-	13,14,13,16,15,14,15,15,16,16,15,16,15,17,16,11,
-	13,13,15,15,13,14,14,15,15,12,14,13,16,15,15,16,
-	15,17,17,15,16,15,17,16,13,15,14,16,16,14,15,14,
-	16,16,15,16,15,17,16,15,16,16,16,17,16,17,16,18,
-	17,14,15,15,16,16,15,16,16,17,17,15,15,15,17,16,
-	17,17,17,18,18,16,16,16,18,16,12,13,13,15,16,13,
-	14,14,15,16,13,14,14,16,16,15,15,16,16,18,15,16,
-	16,17,17,13,13,14,15,16,14,14,15,15,17,14,15,15,
-	16,17,15,15,17,16,18,16,16,17,17,17,13,14,14,16,
-	16,14,15,15,17,17,14,15,14,17,16,16,17,16,17,18,
-	16,17,16,18,17,15,15,16,14,17,16,15,17,14,18,16,
-	16,16,15,18,16,16,18,15,19,18,18,18,17,19,15,16,
-	16,18,17,16,17,17,18,17,16,17,16,18,17,18,18,18,
-	19,19,17,18,16,18,17,11,12,12,15,15,13,13,14,15,
-	16,13,14,13,16,15,15,16,16,16,17,15,16,16,17,16,
-	12,14,13,16,15,13,13,14,15,16,14,15,14,17,15,15,
-	15,16,16,17,16,17,16,18,17,12,13,14,15,16,14,15,
-	15,16,16,13,14,13,16,15,16,16,16,17,17,15,16,15,
-	17,15,15,16,15,17,16,15,15,15,16,16,16,17,16,18,
-	16,16,15,16,15,17,17,18,17,18,17,15,15,16,17,17,
-	16,16,17,17,17,15,16,15,17,16,18,18,18,18,18,16,
-	17,16,18,15, 9,11,11,14,14,11,12,12,14,15,10,12,
-	12,15,14,13,14,15,16,16,13,14,14,16,16,11,12,12,
-	14,15,12,12,13,15,15,12,13,13,15,15,14,15,15,16,
-	17,14,15,15,16,16,10,12,12,14,14,12,13,13,15,15,
-	11,13,12,15,15,14,15,15,16,17,13,15,14,16,16,14,
-	14,14,15,16,14,15,15,16,17,14,15,15,16,17,16,16,
-	17,16,18,16,17,17,17,17,12,14,13,16,15,13,15,14,
-	16,16,13,14,14,16,15,16,16,16,17,17,15,16,15,17,
-	16,10,11,11,14,14,12,12,13,14,15,11,13,12,15,14,
-	14,15,15,16,17,14,15,15,16,16,12,13,13,15,15,12,
-	13,14,15,16,13,14,14,15,15,15,15,16,16,17,15,15,
-	16,17,17,11,12,12,15,15,13,13,14,15,16,12,13,13,
-	15,15,15,15,16,16,17,14,15,15,16,16,14,15,15,16,
-	16,15,15,15,16,17,15,16,16,17,17,16,16,17,16,18,
-	17,17,17,17,18,13,14,15,16,16,15,15,16,16,17,14,
-	14,14,16,16,16,16,17,17,18,16,16,16,17,16,10,12,
-	12,14,14,12,13,13,15,15,11,13,12,15,15,14,15,15,
-	16,17,13,15,14,17,16,12,13,13,15,15,13,13,14,15,
-	16,13,14,14,16,16,15,15,16,16,17,15,15,16,17,17,
-	11,13,12,15,14,13,14,13,16,15,12,14,12,16,15,15,
-	16,15,17,17,14,15,14,17,16,14,15,15,16,17,15,15,
-	16,16,17,15,16,16,17,17,16,16,17,17,18,17,17,17,
-	18,18,13,15,13,17,14,14,16,14,17,16,14,15,13,17,
-	15,16,17,16,18,17,15,17,15,18,16,11,12,12,15,15,
-	13,13,14,15,16,13,14,13,16,15,15,16,16,16,17,15,
-	16,16,17,16,12,14,13,16,15,13,13,14,15,16,14,15,
-	15,16,16,16,15,16,16,17,16,16,16,17,17,12,13,14,
-	15,16,14,14,15,15,17,13,14,13,16,15,16,16,17,17,
-	18,15,16,15,17,15,15,16,15,17,17,15,15,16,16,17,
-	16,17,16,17,17,16,15,17,15,18,17,18,17,18,18,15,
-	15,16,16,17,16,16,17,16,18,15,15,15,16,16,17,17,
-	18,17,18,16,16,15,17,15,12,13,13,15,15,13,14,14,
-	16,16,13,14,14,16,16,15,16,16,17,18,15,16,15,18,
-	16,13,14,14,16,16,14,14,15,16,17,14,15,15,17,17,
-	16,16,17,17,18,16,16,17,18,17,13,14,13,16,14,14,
-	15,15,17,16,14,15,14,17,15,16,17,17,18,17,15,17,
-	15,18,16,15,16,16,17,17,16,16,17,17,18,16,17,17,
-	18,18,17,16,18,17,19,18,18,18,18,18,15,16,15,17,
-	14,16,16,16,18,15,16,17,15,18,14,18,18,18,18,17,
-	17,18,16,19,15,
-};
-
-static const static_codebook _44p5_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p5_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p5_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p3_0[] = {
-	 1, 5, 6, 5, 7, 8, 5, 8, 7, 5, 7, 8, 7, 8,10, 8,
-	10,10, 5, 8, 7, 8,10,10, 7,10, 8, 6, 8, 9, 8,10,
-	11, 9,10,10, 9,10,11,10,11,12,11,12,12, 9,11,10,
-	11,12,12,10,12,11, 6, 9, 8, 9,10,10, 8,11,10, 9,
-	10,11,10,11,12,11,12,12, 9,11,10,11,12,12,10,12,
-	11, 6, 9, 9, 8,10,11, 9,11,10, 8,10,10,10,10,12,
-	11,12,12, 9,11,10,11,12,12,10,12,11, 8,10,10,10,
-	11,12,10,12,11,10,10,12,11,11,13,12,13,13,10,12,
-	11,12,13,13,11,13,11, 7,10,10,10,11,12,10,12,11,
-	10,12,11,11,11,12,12,14,13,10,12,12,12,14,14,11,
-	13,11, 6, 9, 9, 9,10,11, 8,11,10, 9,10,11,10,11,
-	12,11,12,12, 8,11,10,11,12,12,10,12,10, 7,10,10,
-	10,11,12,10,12,11,10,12,12,11,11,13,12,13,13,10,
-	11,12,12,13,14,11,12,11, 8,10,10,10,11,12,10,12,
-	11,10,11,12,11,11,13,12,13,13,10,12,10,12,13,13,
-	11,13,11,
-};
-
-static const static_codebook _44p5_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p5_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p3_1[] = {
-	 5, 6, 6, 6, 7, 7, 6, 7, 7, 6, 7, 7, 7, 7, 8, 7,
-	 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 7, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8,
-	 8, 9, 9, 8, 9, 9, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
-	 8, 6, 8, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 9,
-	 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8,
-	 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 8, 9, 8,
-	 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9, 8,
-	 9, 9, 6, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-	 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8,
-	 8, 8, 9, 8, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 8,
-	 8, 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9,
-	 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p5_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p5_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p5_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p4_0[] = {
-	 1, 5, 5, 5, 7, 9, 5, 9, 7, 5, 7, 8, 7, 7,10, 9,
-	10,10, 5, 8, 7, 9,10,10, 7,10, 7, 6, 8, 9, 9,10,
-	12, 9,11,11, 9,10,11,11,11,13,12,13,13, 9,11,11,
-	11,12,13,11,13,11, 6, 9, 8, 9,11,11, 9,12,10, 9,
-	11,11,11,11,13,11,13,12, 9,11,10,12,13,13,11,13,
-	11, 6, 9, 9, 8,10,11, 9,12,11, 9,10,11,10,10,12,
-	11,13,13, 9,11,11,11,13,12,11,13,11, 8,10,10, 9,
-	10,12,10,12,11,10,10,12,10,10,13,12,13,13,10,12,
-	11,12,13,13,10,13,10, 7,10,10,11,11,13,11,14,11,
-	10,12,11,11,11,13,13,14,13,10,12,12,14,14,14,11,
-	14,11, 6, 9, 9, 9,11,12, 8,11,10, 9,11,11,11,11,
-	13,11,12,13, 8,11,10,11,13,13,10,12,10, 7,10,10,
-	11,11,14,11,13,11,10,12,12,11,11,14,14,14,14,10,
-	11,12,13,13,14,11,13,11, 8,10,10,10,11,12, 9,12,
-	10,10,11,12,11,10,13,12,13,13,10,12,10,12,13,13,
-	11,13,10,
-};
-
-static const static_codebook _44p5_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p5_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p5_p4_1[] = {
-	 5, 7, 7,10,10, 7, 8, 9,10,11, 7, 9, 8,11,10, 9,
-	10,10,11,11, 9,10,10,11,11, 7, 9, 9,10,10, 8, 9,
-	10,10,11, 9,10,10,11,11,10,10,11,11,11,10,11,11,
-	12,12, 7, 9, 9,10,10, 9,10,10,11,11, 8,10, 9,11,
-	10,10,11,11,11,11,10,11,10,11,11,10,10,10,11,11,
-	10,10,11,11,11,11,11,11,11,11,11,11,12,11,12,11,
-	12,11,12,12,10,10,10,11,11,10,11,11,11,11,10,11,
-	10,11,11,11,12,11,12,12,11,12,11,12,11, 8, 9, 9,
-	11,11, 9,10,10,11,12, 9,10,10,11,11,10,11,11,12,
-	12,10,11,11,12,12, 9,10,10,11,11,10,10,11,11,12,
-	10,11,11,12,12,11,11,12,12,12,11,12,12,12,12, 9,
-	10,10,11,11,10,11,11,12,12,10,11,10,12,12,11,12,
-	12,12,12,11,12,12,12,12,11,11,11,12,12,11,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12, 8, 9, 9,11,11, 9,
-	10,10,11,11, 9,10,10,11,11,10,11,11,12,12,10,11,
-	11,12,12, 9,10,10,11,11,10,10,11,12,12,10,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12, 9,10,10,11,
-	11,10,11,11,12,12,10,11,10,12,11,11,12,12,12,12,
-	11,12,11,12,12,11,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
-	11,12,12,11,12,12,12,12,11,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,10,11,11,12,12,11,12,12,12,
-	12,11,12,12,12,12,12,12,13,13,13,12,12,12,13,13,
-	11,12,12,12,12,12,12,12,12,13,12,12,12,13,13,12,
-	12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,
-	12,13,13,12,12,12,13,13,12,13,13,13,13,12,13,13,
-	13,13,12,12,12,12,13,12,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,
-	13,13,13,13,13,12,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,
-	11,12,12,12,12,12,13,12,12,12,12,13,13,11,12,12,
-	12,12,12,12,12,13,13,12,12,12,13,13,12,13,13,13,
-	13,12,13,13,13,13,11,12,12,12,12,12,12,12,13,13,
-	12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,12,
-	12,12,12,13,12,13,13,13,13,12,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,12,12,12,13,12,13,13,13,
-	13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13, 8, 9, 9,11,11, 9,10,10,11,11, 9,10,10,12,11,
-	10,11,11,12,12,10,11,11,12,12, 9,10,10,11,11,10,
-	10,11,11,12,10,11,11,12,12,11,11,12,12,12,11,12,
-	12,12,12, 9,10,10,11,11,10,11,11,12,12,10,11,10,
-	12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,12,
-	12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12, 9,10,
-	10,11,11,10,10,11,12,12,10,11,11,12,12,11,11,12,
-	12,12,11,12,12,12,12,10,10,11,11,12,11,11,12,12,
-	12,11,11,12,12,12,11,11,12,12,13,12,12,12,12,12,
-	10,11,11,12,12,11,12,11,12,12,11,12,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,12,12,13,12,13,12,12,13,
-	13,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,13,12, 8,10,10,11,11,
-	10,11,11,12,12,10,11,10,12,12,11,12,12,12,12,11,
-	12,12,12,12,10,11,10,12,12,10,10,11,12,12,11,12,
-	12,12,12,12,12,12,12,13,12,12,12,13,13,10,11,11,
-	12,12,11,12,12,12,12,10,12,11,12,12,12,12,12,13,
-	13,12,13,12,13,12,11,12,12,12,12,11,12,12,12,13,
-	12,12,12,13,13,12,12,13,12,13,12,13,13,13,13,11,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,13,
-	13,13,13,12,13,12,13,12,11,11,11,12,12,11,12,12,
-	12,13,11,12,12,12,12,12,12,12,13,13,12,12,13,13,
-	13,11,12,12,12,12,12,12,12,12,13,12,12,13,13,13,
-	12,12,13,13,13,13,13,13,13,13,11,12,12,12,12,12,
-	13,12,13,13,12,12,12,13,13,12,13,13,13,13,12,13,
-	13,13,13,12,12,12,12,13,12,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,10,11,11,12,12,11,12,12,12,13,11,
-	12,12,13,12,12,13,13,13,13,12,13,13,13,13,11,12,
-	12,12,12,12,12,12,13,13,12,13,12,13,13,13,13,13,
-	13,13,13,13,13,13,13,11,12,12,13,12,12,13,12,13,
-	13,12,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
-	12,13,13,13,13,12,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13, 8, 9, 9,11,11, 9,10,10,11,12, 9,10,10,11,
-	11,10,11,11,12,12,10,11,11,12,12, 9,10,10,11,11,
-	10,10,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
-	12,12,12,12, 9,10,10,11,11,10,11,11,12,12,10,11,
-	10,12,12,11,12,12,12,12,11,12,11,12,12,11,11,11,
-	12,12,11,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,12,12,12,12,12, 8,
-	10,10,11,11,10,10,11,12,12,10,11,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,10,11,11,12,12,10,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	13,10,10,11,12,12,11,12,12,12,12,10,11,10,12,12,
-	12,12,12,13,13,12,12,12,13,12,11,12,12,12,12,11,
-	12,12,12,13,12,12,12,13,13,12,12,13,12,13,12,13,
-	13,13,13,11,12,12,12,12,12,12,12,13,13,11,12,12,
-	13,12,12,13,13,13,13,12,13,12,13,12, 9,10,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
-	11,12,12,12,12,12,12,12,13,12,12,12,13,12,10,11,
-	10,12,11,11,12,11,12,12,11,12,11,12,12,12,12,12,
-	12,12,12,12,11,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,13,12,13,12,13,13,13,13,
-	11,12,11,12,12,12,12,12,13,12,12,12,12,12,12,12,
-	13,12,13,13,12,12,12,13,12,10,11,11,12,12,11,12,
-	12,12,13,11,12,12,13,12,12,12,13,13,13,12,13,13,
-	13,13,11,12,12,12,13,12,12,13,13,13,12,12,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,11,12,12,12,12,
-	12,12,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
-	13,13,13,13,12,13,13,13,13,12,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,13,
-	13,13,13,13,13,13,13,12,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
-	11,12,12,12,12,12,12,13,13,13,12,13,12,13,13,11,
-	12,12,12,12,12,12,13,13,13,12,12,13,13,13,12,13,
-	13,13,13,12,13,13,13,13,11,12,12,12,12,12,13,12,
-	13,13,12,12,12,13,12,13,13,13,13,13,12,13,12,13,
-	13,12,12,12,13,13,12,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,13,
-	13,13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,12,
-	12,12,12,12,12,13,13,12,12,12,13,13,11,12,12,12,
-	12,11,12,12,13,13,12,12,12,13,13,12,12,13,13,13,
-	12,13,13,13,13,11,12,12,12,12,12,12,12,13,13,12,
-	12,12,13,12,12,13,13,13,13,12,13,12,13,13,12,12,
-	12,12,12,12,12,13,13,13,12,13,13,13,13,12,13,13,
-	13,13,13,13,13,13,13,12,12,12,13,12,12,13,13,13,
-	13,12,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
-	10,11,11,12,12,11,12,12,12,13,11,12,12,13,12,12,
-	12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,12,
-	13,13,13,12,12,12,13,13,12,12,13,13,13,12,13,13,
-	13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,13,
-	13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,13,
-	12,12,13,13,13,12,13,13,13,13,12,13,13,13,13,13,
-	13,13,13,13,12,12,12,13,13,13,13,13,13,13,12,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,10,11,11,
-	12,12,11,12,12,12,13,11,12,12,13,12,12,13,13,13,
-	13,12,13,12,13,13,11,12,12,13,13,12,12,12,13,13,
-	12,12,13,13,13,12,13,13,13,13,13,13,13,13,13,11,
-	12,12,13,12,12,13,12,13,13,12,13,12,13,13,13,13,
-	13,13,13,12,13,13,13,13,12,12,12,13,13,12,13,13,
-	13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,12,12,12,13,13,12,13,13,13,13,12,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,11,11,11,12,12,11,
-	12,12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,
-	12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,
-	13,13,12,12,13,13,13,12,13,13,13,13,11,12,12,12,
-	12,12,12,12,13,13,12,12,12,13,12,12,13,13,13,13,
-	12,13,12,13,13,12,12,12,12,12,12,12,13,12,13,12,
-	13,13,13,13,12,13,13,12,13,13,13,13,13,13,12,12,
-	12,12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,
-	13,13,12,13,13,13,12,10,11,11,12,12,11,12,12,12,
-	12,11,12,12,12,12,12,12,12,13,13,12,13,12,13,13,
-	11,12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,
-	12,13,13,13,13,13,13,13,13,11,12,12,12,12,12,13,
-	12,13,13,12,13,12,13,13,12,13,13,13,13,12,13,12,
-	13,13,12,12,12,12,12,12,13,13,13,13,12,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,
-	12,13,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
-	13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,
-	12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,12,
-	12,12,12,12,12,13,13,12,12,12,13,13,12,12,13,13,
-	13,12,12,13,13,13,11,12,11,12,12,12,12,12,13,13,
-	11,12,12,13,13,12,13,13,13,13,12,13,12,13,13,12,
-	12,12,12,12,12,13,13,13,13,12,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,12,12,12,13,12,12,13,13,
-	13,13,12,13,12,13,13,13,13,13,13,13,12,13,13,13,
-	13,10,11,11,12,12,11,12,12,12,13,11,12,12,13,12,
-	12,12,13,13,13,12,13,13,13,13,11,12,12,13,13,12,
-	12,13,13,13,12,12,13,13,13,12,13,13,13,13,13,13,
-	13,13,13,11,12,12,13,12,12,13,12,13,13,12,12,12,
-	13,13,12,13,13,13,13,13,13,13,13,13,12,12,13,13,
-	13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,12,12,12,13,13,13,13,13,13,13,12,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,12,
-	11,12,12,11,12,12,12,13,11,12,12,12,12,12,12,12,
-	13,13,12,12,12,13,13,11,12,12,12,13,12,12,12,13,
-	13,12,12,12,13,13,12,13,13,13,13,12,13,13,13,13,
-	11,12,12,13,12,12,12,12,13,13,12,12,12,13,13,12,
-	13,13,13,13,12,13,12,13,13,12,13,12,13,13,12,13,
-	13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,12,12,12,13,12,13,13,13,13,13,12,13,12,13,
-	13,13,13,13,13,13,12,13,13,13,13,10,11,11,12,12,
-	11,12,12,12,13,11,12,12,12,12,12,12,12,13,13,12,
-	12,12,13,13,11,12,12,12,12,12,12,13,13,13,12,13,
-	13,13,13,12,12,13,13,13,13,13,13,13,13,11,12,12,
-	12,12,12,13,12,13,13,12,12,12,13,13,12,13,13,13,
-	13,12,13,12,13,13,12,12,12,12,13,12,13,13,13,13,
-	12,13,13,13,13,12,13,13,13,13,13,13,13,13,13,12,
-	12,12,12,12,12,13,13,13,13,12,13,13,13,13,13,13,
-	13,13,13,12,13,13,13,13,11,12,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,13,
-	12,12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,12,12,13,13,13,13,12,13,
-	12,13,13,12,12,12,12,12,12,12,13,13,13,12,13,13,
-	13,13,13,13,13,12,13,13,13,13,13,13,12,12,12,12,
-	12,12,13,13,13,13,12,13,12,13,12,13,13,13,13,13,
-	13,13,13,13,12,
-};
-
-static const static_codebook _44p5_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p5_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p5_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p5_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p5_p5_0[] = {
-	 1, 6, 6,10,10, 6, 7, 9,11,13, 5, 9, 7,13,11, 8,
-	11,12,13,15, 8,12,11,15,13, 6, 7, 8,11,11, 7, 8,
-	10,11,13, 9,10,10,13,13,11,11,13,12,16,12,13,13,
-	16,15, 6, 8, 7,11,11, 9,10,10,13,13, 7,10, 7,13,
-	11,12,13,13,15,16,11,13,11,16,12,10,11,11,11,13,
-	11,11,13,12,15,13,13,13,14,15,13,12,15,12,17,15,
-	16,16,16,16,10,11,11,14,11,13,13,13,15,14,11,13,
-	11,15,12,15,15,16,16,16,13,15,12,17,12, 6, 8, 9,
-	12,12, 9,10,12,13,15, 9,11,11,15,14,12,13,15,16,
-	18,13,14,14,17,16, 9,10,11,13,14,11,10,13,14,16,
-	11,12,12,15,15,14,13,16,15,18,14,15,15,17,17, 9,
-	11,11,14,14,11,12,13,15,16,11,13,11,15,14,15,15,
-	15,17,18,14,15,14,17,15,13,14,14,15,16,14,14,15,
-	15,17,15,16,15,17,17,16,16,17,15,19,17,18,18,19,
-	18,13,14,14,16,15,15,15,16,17,17,14,15,14,18,15,
-	17,17,17,19,19,16,17,15,19,16, 6, 9, 8,13,12, 9,
-	11,11,14,15, 9,12,10,15,13,13,14,14,16,17,12,15,
-	13,18,16, 9,11,11,14,14,11,11,13,14,15,11,13,12,
-	16,15,14,14,15,15,18,14,15,15,18,17, 9,11,10,14,
-	13,11,12,12,15,15,11,13,10,16,14,14,15,15,16,18,
-	14,16,13,18,15,13,14,14,16,16,14,14,15,15,17,15,
-	16,15,17,17,16,16,17,16,19,17,18,17,18,19,13,14,
-	14,16,15,15,15,15,17,17,14,15,14,17,15,17,17,17,
-	18,19,16,17,15,19,15,11,13,13,15,16,13,14,15,16,
-	18,14,15,15,17,17,16,16,18,18,20,17,18,17,19,20,
-	13,14,14,16,17,15,15,16,17,18,15,16,16,17,17,18,
-	17,19,18,19,18,18,18,19,21,14,14,15,16,17,15,15,
-	16,18,18,15,16,16,17,18,18,18,19,19,21,18,19,19,
-	22,20,16,16,17,17,19,17,17,17,18,20,17,18,18,20,
-	19,19,19,20,19, 0,19,19,20,20,21,17,17,17,19,18,
-	18,18,20,19,19,18,18,18,20,20,19,19,20,20,20,20,
-	21,20,21,19,11,13,13,16,15,14,15,15,17,17,14,15,
-	14,18,16,16,18,18,20,19,16,19,17,21,18,13,14,15,
-	16,17,15,15,16,18,18,15,16,15,19,18,18,18,18,19,
-	19,18,18,18,22,20,13,14,14,16,16,15,16,16,18,17,
-	15,16,15,18,17,18,18,18,19,19,17,18,17,21,18,16,
-	17,17,18,18,17,18,19,19,19,18,20,18,19,19,19,20,
-	21,19,21,20,20,20, 0,21,16,17,17,19,19,18,18,18,
-	19,21,17,18,18,19,18,20,19,21,20,21,19,20,20,22,
-	19, 7, 9, 9,13,13, 8,10,11,14,15, 9,12,11,15,14,
-	11,13,14,16,17,13,15,14,17,16, 8,10,11,14,14,10,
-	10,12,14,16,11,12,12,16,15,13,12,15,15,18,14,15,
-	15,19,17, 9,11,11,14,14,11,12,12,15,15,11,13,11,
-	16,14,14,15,14,17,17,14,16,14,18,15,12,13,14,15,
-	16,13,13,15,14,17,15,15,15,17,17,15,14,17,14,19,
-	17,18,18,19,18,13,14,14,16,16,15,15,15,17,17,14,
-	15,14,18,15,17,18,17,18,17,16,18,16,19,15, 7,10,
-	10,13,13, 9,10,12,14,15,10,12,11,15,14,12,13,14,
-	16,17,13,15,14,18,16,10,10,12,13,14,10,10,13,13,
-	16,12,12,13,15,15,13,12,15,15,18,15,15,16,18,17,
-	10,11,11,14,14,12,13,13,15,16,10,13,10,16,14,14,
-	15,15,17,17,14,15,13,17,15,13,13,14,15,16,14,13,
-	15,14,18,15,15,16,16,17,16,15,18,15,18,17,18,18,
-	18,18,13,15,14,17,16,15,16,16,17,17,14,15,13,17,
-	15,17,17,18,18,18,16,17,14,20,14, 8,10,10,14,14,
-	11,11,13,14,16,11,13,11,16,14,14,15,16,16,18,14,
-	16,15,18,16,10,12,11,15,14,11,11,13,14,16,13,14,
-	13,16,15,15,14,16,15,19,16,17,16,20,18,10,11,12,
-	14,15,13,13,14,16,16,11,14,11,16,14,16,16,17,18,
-	19,15,17,14,20,15,14,15,14,17,16,13,14,15,15,18,
-	16,17,16,19,18,16,15,18,15,19,18,19,18,21,21,14,
-	14,15,16,17,16,16,17,18,18,13,15,14,17,15,18,18,
-	19,18,22,16,18,15,21,15,12,13,14,16,16,14,14,16,
-	16,18,14,15,15,17,18,16,16,18,18,20,18,18,17,20,
-	20,13,14,15,15,17,15,14,16,16,18,16,16,16,17,19,
-	17,15,18,17,21,18,18,18,19,19,14,15,15,18,17,15,
-	16,16,18,19,15,16,15,18,18,17,18,18,20,21,17,19,
-	17,20,19,16,16,17,16,19,17,17,18,17,20,18,18,18,
-	18,19,19,18,20,17,22,20,20,19,20,20,17,17,18,18,
-	19,18,18,20,21,20,17,18,17,20,20,21,21,21,21,21,
-	19,21,18,22,20,11,13,13,17,16,14,14,16,16,18,14,
-	16,14,18,16,17,18,19,19,20,18,19,18,21,19,14,15,
-	14,17,16,14,14,16,18,18,16,17,16,18,17,18,17,19,
-	18,20,19,19,18,20,20,13,14,15,16,17,16,16,17,18,
-	19,14,16,14,19,17,18,19,18,20,20,18,20,17,21,18,
-	17,17,17,19,18,16,17,18,18,19,18,19,18,21,21,18,
-	18,20,17,21,19,20,20,22,21,16,17,18,18,19,18,18,
-	19,21,20,16,17,17,20,18,21,21,22,21,22,18,21,18,
-	 0,18, 7, 9, 9,13,13, 9,11,12,14,15, 8,11,10,15,
-	14,13,14,15,16,18,11,14,13,17,15, 9,11,11,14,14,
-	11,11,13,14,16,11,12,12,15,15,14,14,16,15,18,14,
-	14,15,17,17, 8,11,10,14,14,11,12,12,15,15,10,12,
-	10,16,14,14,15,15,17,18,13,15,12,18,15,13,14,14,
-	16,16,14,14,15,15,17,15,15,15,16,17,16,15,17,15,
-	19,17,17,17,18,18,12,14,13,16,15,15,15,15,17,17,
-	13,15,13,17,14,17,18,18,18,19,15,17,14,19,14, 8,
-	10,10,14,14,11,11,13,14,16,11,13,11,16,14,14,15,
-	16,17,19,14,16,15,18,17,10,12,11,15,14,11,11,14,
-	14,17,13,14,13,17,15,15,14,17,15,19,16,17,16,19,
-	17,10,11,12,14,15,13,13,14,15,17,11,13,11,17,14,
-	16,16,17,18,19,15,16,14,18,15,14,15,14,16,16,13,
-	14,15,15,18,16,16,16,18,18,16,15,18,15,20,18,19,
-	18,21,18,14,14,15,16,17,16,16,17,17,18,13,15,14,
-	17,16,19,19,19,19,19,15,18,15,20,15, 7,10,10,13,
-	13,10,11,12,14,15, 9,12,10,15,14,13,14,15,16,17,
-	12,15,13,17,16,10,11,11,14,14,10,10,13,14,16,12,
-	13,13,16,15,14,13,16,15,18,15,15,16,17,17,10,12,
-	10,14,13,12,13,12,15,15,10,13,10,16,13,15,16,15,
-	17,18,13,16,12,18,15,13,14,14,16,17,14,13,15,15,
-	18,15,16,15,17,17,16,14,17,15,19,17,18,18,19,19,
-	13,15,13,17,14,15,15,15,18,17,14,15,13,17,14,18,
-	17,18,18,19,15,17,15,19,15,11,13,13,16,17,14,14,
-	16,16,18,14,16,15,18,17,17,18,19,18,21,18,18,17,
-	20,18,13,15,14,17,16,14,14,16,17,18,16,17,16,19,
-	17,18,17,19,18,22,18,19,19,21,21,13,14,15,16,18,
-	16,16,17,17,20,14,16,14,18,17,18,18,19,19,21,17,
-	18,17,21,18,17,18,17,19,18,16,17,17,18,19,18,18,
-	18,22,22,18,17,19,17, 0,20,21,19,21,20,17,17,18,
-	18,21,18,18,18,19,21,17,17,17,19,19,20,20,22,21,
-	21,19,20,18,20,17,12,14,13,17,16,14,15,15,17,18,
-	14,16,14,18,16,17,18,18,21,20,16,18,16,21,18,14,
-	15,15,17,17,15,15,16,18,18,15,17,16,18,18,17,17,
-	19,19,20,18,19,18,20,19,14,15,14,17,15,15,16,16,
-	18,17,15,16,14,19,15,18,18,18,19,20,17,20,15,21,
-	17,16,17,18,18,19,17,17,18,18,20,18,19,18,19,21,
-	19,18,19,19,21,20, 0,19,21,20,16,17,16,19,16,18,
-	18,18,19,19,17,18,17,20,17,19,20,20,22, 0,19,20,
-	17,21,17,11,13,14,16,17,14,15,15,17,18,14,15,15,
-	18,18,16,17,17,19,20,16,18,17,19,21,13,14,15,17,
-	17,14,15,16,17,19,15,16,16,18,19,16,17,18,19,21,
-	17,18,20,21,21,13,15,15,17,17,15,16,16,18,19,15,
-	16,16,18,19,17,17,18,19,22,17,19,18,22,19,15,16,
-	17,19,19,16,17,18,18,20,17,18,18,19,20,19,18,20,
-	18,22,20,19,19,22,21,16,17,17,18,19,18,18,18,19,
-	20,17,18,18,20,19,20,19,20,22,20,19,20,21,21,20,
-	12,14,14,16,16,13,14,16,17,18,14,16,15,18,18,15,
-	17,17,19,19,17,18,18,19,19,13,14,15,16,17,14,14,
-	16,16,20,15,16,16,17,19,16,15,18,17,20,18,17,19,
-	19,19,14,15,15,17,17,16,16,16,18,18,15,16,15,19,
-	18,17,18,18,20,21,17,18,17,21,18,16,15,17,17,19,
-	17,15,18,17,20,19,17,18,19,20,18,16,19,17,22,20,
-	19,20,19,20,17,17,18,19,19,18,18,19,20,20,17,18,
-	17,18,18,21,21,20,20,21,18,20,17,21,19,11,14,14,
-	16,17,15,14,16,17,19,14,16,14,18,17,18,18,19,19,
-	21,17,19,18,20,20,13,15,14,17,17,14,14,16,17,18,
-	16,17,16,19,18,18,17,19,18,20,18,21,18,20,20,13,
-	15,15,16,17,16,16,17,18,19,14,16,15,19,18,19,19,
-	19,21,20,18,19,17,20,18,16,17,16,19,18,16,17,17,
-	19,20,17,19,18,20,19,18,17,21,18, 0,21,20,20, 0,
-	20,17,17,18,18,19,18,19,19,20,22,16,17,17,20,18,
-	21,22,20,20,22,18,22,18,22,18,12,14,14,17,17,14,
-	15,16,17,19,14,16,15,17,17,17,17,18,18,21,17,19,
-	17,20,19,14,15,15,16,18,15,14,16,16,19,16,17,16,
-	19,18,17,16,20,17,20,18,20,19,19,20,14,15,15,18,
-	17,16,16,17,18,19,14,16,15,19,17,18,21,18,19,21,
-	17,18,17,19,18,17,17,18,17,20,17,16,18,17,21,18,
-	19,19,19,19,18,17,19,17,20,20,21,20,21,20,17,17,
-	17,19,19,19,18,18,20,21,16,18,16,19,18,20,20,21,
-	21,20,18,19,16, 0,17,12,14,14,17,17,15,15,18,17,
-	19,15,18,15,20,16,20,19,21,18,22,20,20,20,22,19,
-	14,16,14,20,17,14,15,17,17,20,18,18,17,20,18,18,
-	17,19,17,21,20,21,20, 0,21,14,15,16,17,19,18,17,
-	19,18,21,14,18,15,21,17,21,20,21,20, 0,18,21,17,
-	21,17,18,19,17,20,18,16,17,17,19,19,19,21,20, 0,
-	20,18,17,21,17, 0,22, 0,21, 0,22,17,17,19,18,20,
-	20,20,21,19,22,16,17,18,20,18,22,22, 0,22, 0,17,
-	21,17,22,17,11,14,13,16,16,14,15,15,17,18,14,15,
-	14,18,17,17,18,18,19,20,16,17,17,21,19,13,14,15,
-	17,17,15,16,16,18,18,15,16,16,19,18,18,18,18,19,
-	20,17,18,18,20,19,13,15,14,17,17,15,16,16,17,18,
-	14,16,15,19,17,17,18,19,21,21,17,18,17,20,18,16,
-	17,17,19,19,17,18,19,19,20,18,19,18,21,21,21,20,
-	19,21,22,20,20,19,21,20,15,17,16,19,19,17,18,18,
-	20,21,16,18,17,20,18,19,19,21,21,21,19,19,19,20,
-	18,11,14,13,17,16,14,14,16,16,19,14,16,15,19,16,
-	18,18,18,19,22,17,18,17,20,19,13,15,14,17,17,15,
-	15,16,17,19,16,17,16,20,18,18,17,19,18,21,19,19,
-	18,22, 0,13,14,15,17,18,16,16,17,17,19,14,16,15,
-	19,18,18,19,19,20,21,18,18,17,20,18,17,18,17,20,
-	18,16,17,17,18,20,18,19,18,20,20,18,18,21,17,21,
-	20,21,21, 0,19,16,16,18,18,19,19,18,20,19,20,16,
-	17,17,20,18,21,20,21,22,22,18,20,17,21,17,12,14,
-	14,17,16,14,15,16,18,18,13,15,14,18,17,17,18,18,
-	19,19,15,17,16,19,19,14,15,15,17,17,15,15,16,18,
-	19,15,16,16,19,18,17,17,18,18,20,18,18,18,21,20,
-	13,15,14,17,16,15,16,15,18,18,14,16,14,18,17,18,
-	18,18,19,21,16,18,16,20,17,17,18,17,18,19,17,17,
-	18,18,19,18,19,19,21,19,19,18,20,18,21,21,20,20,
-	21,20,16,17,15,20,17,17,19,17,19,19,17,18,15,20,
-	17,19,20,19,21,22,17,20,16, 0,17,12,14,14,17,18,
-	16,15,18,16,20,16,18,15,21,17,20,18,21,19,22,19,
-	21,19, 0,19,14,16,15,19,17,14,15,17,16,21,18,19,
-	18,21,17,19,17,21,17,22,20,21,21, 0,21,14,15,16,
-	17,19,18,17,19,18,21,14,17,15,20,17,21,22,21,20,
-	22,18,21,17,21,17,17,19,17,21,18,16,17,17,19,20,
-	19,21,20,21,20,17,18,20,17,21, 0,22,20,21,22,17,
-	17,20,18,21,21,20,22,20,21,16,17,17,21,19, 0,22,
-	 0,21,21,18,22,17,21,17,12,14,14,17,16,14,15,16,
-	17,18,14,16,15,18,17,17,17,20,19,20,16,18,17,21,
-	18,14,15,15,17,17,14,15,16,17,19,16,17,16,18,18,
-	17,16,19,18,19,18,19,18,21,20,14,15,15,18,17,16,
-	16,16,19,18,15,16,14,20,16,18,18,19,19,20,16,19,
-	16,21,17,17,17,18,19,19,16,16,18,18,19,19,19,18,
-	20,20,18,16,19,18,20,22,21,20,19,20,16,18,17,20,
-	16,18,19,18,19,18,16,18,16,20,17,21,20,21,20,20,
-	18,19,17,21,16,
-};
-
-static const static_codebook _44p5_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p5_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p5_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p5_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p5_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p5_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p5_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p5_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p6_0[] = {
-	 1, 5, 5, 5, 7, 9, 5, 9, 7, 5, 7, 8, 7, 7,10, 9,
-	 9,10, 5, 8, 7, 9,10, 9, 7,10, 7, 6, 9, 9, 9,10,
-	12,10,12,11, 9,10,11,11,10,13,12,12,13,10,11,11,
-	12,13,13,11,13,11, 6, 9, 9,10,11,12, 9,12,11,10,
-	11,11,11,11,13,12,13,13, 9,11,10,12,13,13,11,13,
-	10, 6, 9,10, 9,11,12,10,12,11, 9,10,11,10,10,13,
-	11,13,13,10,11,11,12,13,12,11,13,11, 7, 9,10, 9,
-	10,12,10,11,11,10,10,11,10,10,12,12,11,12,10,11,
-	10,12,12,12,10,12,10, 7,10,10,11,11,13,11,13,11,
-	10,12,11,11,10,13,13,14,13,10,11,12,13,13,14,11,
-	13,10, 6,10, 9,10,11,12, 9,12,11, 9,11,11,11,11,
-	13,12,12,13, 9,11,10,12,13,13,10,13,10, 7,10,10,
-	11,11,14,11,13,11,10,12,11,11,10,14,13,14,13,10,
-	11,12,13,13,14,11,13,10, 7,10, 9,10,10,12, 9,12,
-	10,10,11,11,10,10,12,12,12,12, 9,11,10,11,12,12,
-	10,12, 9,
-};
-
-static const static_codebook _44p5_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p5_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p6_1[] = {
-	 2, 6, 6, 5, 7, 8, 5, 8, 7, 6, 7, 7, 7, 7, 8, 8,
-	 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 7, 6, 8, 8, 8, 9,
-	10, 8, 9, 9, 8, 9, 9, 9, 9,10,10,10,10, 8, 9, 9,
-	10,10,10, 9,10,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 9,
-	 9, 9, 9, 9,10,10,10,10, 8, 9, 9,10,10,10, 9,10,
-	 9, 6, 8, 9, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,10,
-	 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 8, 9, 8,
-	 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 7, 9, 9, 9,10,10, 9,10,10,
-	 9,10, 9, 9, 9,10,10,10,10, 9,10, 9,10,10,10, 9,
-	10, 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,
-	10, 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9,
-	 9,10,10, 9,10, 9, 9, 9,10,10, 9,10,10,10,10, 9,
-	 9, 9,10,10,10, 9,10, 9, 7, 9, 8, 8, 9, 9, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p5_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p5_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p5_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p5_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p7_0,
-	1, -513979392, 1633504256, 2, 0,
-	(long *)_vq_quantlist__44p5_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p5_p7_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p5_p7_1[] = {
-	 1, 7, 7, 6, 9, 9, 7, 9, 9, 6, 9, 9, 9, 9, 9, 9,
-	 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,
-};
-
-static const static_codebook _44p5_p7_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p5_p7_1,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p5_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p5_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p5_p7_2[] = {
-	 1, 2, 3, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
-	11,12,12,13,13,14,14,14,14,
-};
-
-static const static_codebook _44p5_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p5_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p5_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p5_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p5_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p5_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p5_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p5_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p5_short[] = {
-	 4, 7,12,14,15,18,20,20, 5, 3, 4, 6, 9,11,15,19,
-	 9, 4, 3, 4, 7, 9,13,18,11, 6, 3, 3, 5, 8,13,19,
-	14, 9, 6, 5, 7,10,16,20,16,11, 9, 8,10,10,14,16,
-	21,14,13,11, 8, 7,11,14,21,14,13, 9, 6, 5,10,12,
-};
-
-static const static_codebook _huff_book__44p5_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p5_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p6_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p6_l0_0[] = {
-	 1, 4, 4, 7, 7,10,10,12,12,12,12,13,12, 5, 5, 5,
-	 8, 6,11, 9,12,12,13,12,12,12, 4, 5, 5, 6, 8, 9,
-	11,12,12,13,12,12,12, 7, 7, 8, 9, 9,11, 8,12, 9,
-	12,12,12,12, 7, 8, 8, 9, 9, 8,11, 9,12,12,12,11,
-	12,10,10,10,11,11,11,11,11,10,11,11,12,11,10,10,
-	10,11,11,11,11,10,11,11,11,11,12,11,11,11,12,11,
-	12,11,12,11,13,11,13,11,11,11,11,11,12,11,12,10,
-	13,11,12,11,13,12,12,12,13,12,13,13,13,12,14,12,
-	14,13,12,12,12,12,13,13,13,12,14,12,14,13,14,13,
-	14,14,14,14,14,14,14,14,15,14,15,14,13,14,13,14,
-	14,14,14,14,15,14,14,14,15,
-};
-
-static const static_codebook _44p6_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p6_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p6_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p6_l0_1[] = {
-	 4, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
-	 5, 5, 4, 5, 5, 5, 5, 5, 4,
-};
-
-static const static_codebook _44p6_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p6_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p6_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p6_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_l1_0[] = {
-	 1, 3, 2, 5, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44p6_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44p6_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p6_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p6_lfe[] = {
-	 2, 3, 1, 3,
-};
-
-static const static_codebook _huff_book__44p6_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p6_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p6_long[] = {
-	 2, 7,13,15,16,17,19,20, 6, 3, 4, 7, 9,10,12,15,
-	13, 4, 3, 4, 7, 8,11,13,14, 7, 4, 4, 6, 7,10,11,
-	16, 9, 7, 6, 7, 8, 9,10,16, 9, 8, 7, 7, 6, 8, 8,
-	18,12,10,10, 9, 8, 8, 9,20,14,13,12,11, 8, 9, 9,
-};
-
-static const static_codebook _huff_book__44p6_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p6_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p6_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p1_0[] = {
-	 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 8, 9,
-	10, 8, 9, 9, 8, 9,10, 9,10,12,10,11,11, 8, 9,10,
-	10,11,11, 9,11,11, 5, 8, 7, 8, 9, 9, 8,10, 9, 8,
-	10, 9, 9,11,11,10,11,11, 8,10, 9,10,11,11, 9,12,
-	10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9, 9, 9,10,11,
-	 9,11,11, 8,10,10,10,11,11,10,12,11, 7, 9, 9, 9,
-	10,11, 9,11,11, 9, 9,11,10,10,13,11,11,12, 9,11,
-	11,11,12,13,11,13,12, 7, 9, 9, 9,11,11, 9,12,10,
-	 9,11,10,10,11,12,11,13,12, 9,11,11,11,13,13,11,
-	13,11, 5, 8, 8, 8, 9,10, 7,10, 9, 8,10,10,10,11,
-	11,10,11,11, 7, 9, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	 9,10,12, 9,11,11, 9,11,11,11,11,13,11,13,13, 9,
-	10,11,11,12,13,10,12,11, 7, 9, 9, 9,11,11, 9,11,
-	10, 9,11,11,11,12,13,11,13,12, 9,11, 9,11,12,11,
-	10,13,10,
-};
-
-static const static_codebook _44p6_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p6_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p6_p2_0[] = {
-	 4, 6, 6, 9, 9, 6, 7, 8,10,10, 6, 8, 7,10,10, 8,
-	10,10,12,13, 8,10,10,13,12, 6, 8, 8,10,10, 7, 8,
-	 9,10,11, 8, 9, 9,11,11,10,10,11,12,13,10,11,11,
-	14,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 9, 8,11,
-	10,10,11,11,13,14,10,11,10,13,12, 9,10,10,12,12,
-	10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,13,
-	14,13,15,14, 9,10,10,13,12,10,11,11,13,13,10,11,
-	10,13,12,13,13,14,14,15,12,13,12,15,12, 6, 8, 8,
-	10,11, 8, 9,10,11,12, 8, 9, 9,11,11,10,11,12,13,
-	14,10,11,11,14,13, 8, 9, 9,11,12, 9,10,11,12,13,
-	 9,10,11,12,13,11,11,13,13,15,11,12,12,14,14, 8,
-	 9, 9,12,12, 9,10,11,12,13, 9,10,10,13,12,11,12,
-	13,14,15,11,12,12,14,14,11,11,12,13,14,11,12,13,
-	13,15,12,13,13,14,15,13,13,14,14,16,14,15,15,16,
-	16,11,12,11,14,13,12,13,13,14,14,11,13,12,14,13,
-	14,15,15,16,16,13,14,14,16,14, 6, 8, 8,11,10, 8,
-	 9, 9,12,11, 8,10, 9,12,11,10,11,11,13,13,10,12,
-	11,14,13, 8, 9, 9,12,12, 9,10,10,12,13, 9,11,10,
-	13,12,11,12,12,14,14,11,13,12,15,14, 8, 9, 9,12,
-	11, 9,10,10,13,12, 9,11,10,13,12,12,12,12,14,14,
-	11,13,12,15,13,11,11,12,13,14,11,12,13,13,14,12,
-	13,13,14,15,13,13,14,14,16,14,15,15,16,16,11,12,
-	11,14,13,12,13,13,15,14,11,13,12,15,13,14,15,15,
-	16,16,13,15,13,16,14, 9,10,11,12,13,11,11,12,13,
-	14,11,12,12,13,14,13,13,14,14,16,13,14,14,15,16,
-	11,11,12,13,14,12,12,13,14,15,12,13,13,14,15,14,
-	14,15,15,17,14,15,15,16,17,11,12,12,14,14,12,13,
-	13,14,15,12,13,12,15,15,14,15,15,16,17,14,15,15,
-	16,16,13,14,14,15,16,14,14,15,15,17,15,15,15,16,
-	17,16,16,17,16,18,16,17,17,18,18,13,14,14,16,15,
-	14,15,15,17,16,14,15,15,16,16,16,17,17,18,18,16,
-	16,16,17,16, 9,11,10,13,12,11,12,12,14,13,11,12,
-	11,15,13,13,14,14,16,15,13,14,13,17,14,11,12,12,
-	14,14,12,12,13,15,15,12,13,13,15,14,14,14,15,16,
-	16,14,15,15,17,16,11,12,11,14,13,12,13,13,15,14,
-	12,13,12,15,13,14,15,15,16,16,14,15,14,17,15,13,
-	14,14,15,16,14,15,15,16,17,14,15,15,16,17,16,16,
-	16,17,17,16,17,17,18,18,13,15,14,16,15,15,15,15,
-	17,16,14,15,14,17,15,16,17,17,18,18,16,17,16,18,
-	16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
-	10,11,11,13,14,10,12,11,14,13, 7, 9, 9,11,12, 9,
-	10,10,12,13, 9,10,10,13,12,11,11,12,13,15,11,12,
-	12,15,14, 8, 9, 9,12,11, 9,10,10,13,13, 9,11,10,
-	13,12,12,12,12,14,15,11,13,12,15,13,10,11,11,13,
-	14,11,12,12,13,15,11,12,12,14,14,13,13,14,14,16,
-	14,15,14,16,16,11,12,11,14,13,12,13,13,15,14,11,
-	13,12,15,13,14,15,15,16,16,13,14,14,16,14, 8, 9,
-	 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,13,
-	14,15,11,12,12,15,14, 9, 9,11,11,13,10,10,12,12,
-	14,10,10,11,13,14,12,12,13,14,16,12,13,13,15,15,
-	 9,11,10,13,12,10,11,11,13,14,10,12,11,14,13,12,
-	13,13,15,16,12,13,13,15,15,11,11,13,13,15,12,12,
-	14,13,15,13,13,14,14,15,14,14,15,14,17,15,15,15,
-	16,16,12,13,12,15,14,13,14,14,15,15,12,14,13,15,
-	14,15,15,15,17,17,14,15,14,17,15, 7, 9, 9,12,11,
-	 9,10,10,12,12, 9,11,10,13,12,11,12,12,14,14,11,
-	13,12,15,14, 9,10,10,12,12,10,10,11,12,13,10,11,
-	11,14,13,12,12,13,14,15,12,13,13,16,15, 9,10,10,
-	13,12,10,11,11,13,13,10,11,10,14,12,13,13,13,15,
-	15,12,13,12,15,14,11,12,12,14,14,12,12,13,14,15,
-	13,14,13,15,15,14,13,15,14,16,15,16,15,17,16,12,
-	12,12,14,14,13,13,14,15,15,12,13,12,15,14,15,15,
-	16,16,17,14,15,14,17,14,10,11,12,13,14,11,12,13,
-	14,15,11,12,13,14,15,13,14,15,15,17,14,15,15,16,
-	16,11,12,13,12,15,12,12,14,13,16,13,13,14,13,16,
-	14,14,16,14,18,15,15,16,16,17,12,13,12,15,15,13,
-	14,14,15,16,13,14,13,16,15,15,15,16,17,18,15,15,
-	15,17,16,14,14,15,14,17,15,14,16,14,17,15,15,16,
-	15,18,16,16,17,16,19,17,17,17,17,18,14,15,15,17,
-	16,15,16,16,17,17,15,16,15,18,16,17,17,18,18,18,
-	16,17,16,18,17,10,11,11,14,13,11,12,12,15,14,11,
-	13,12,15,14,14,15,15,16,16,14,15,15,17,16,11,12,
-	12,15,14,12,13,13,15,14,13,14,13,16,14,14,15,15,
-	16,16,15,16,15,18,16,11,13,12,15,15,13,14,14,15,
-	15,12,14,13,16,15,15,16,16,17,17,15,16,15,17,16,
-	14,15,14,16,16,14,15,15,16,16,15,16,15,17,16,16,
-	16,17,16,17,17,18,17,19,18,14,15,15,17,16,15,16,
-	16,17,17,15,15,15,18,16,17,18,18,18,18,16,17,16,
-	19,16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
-	11,10,11,12,13,14,10,11,11,14,13, 8, 9, 9,11,12,
-	 9,10,11,12,13, 9,10,10,13,13,11,12,13,13,15,11,
-	12,12,15,14, 7, 9, 9,12,11, 9,10,10,12,13, 9,10,
-	10,13,12,11,12,12,14,15,11,12,11,14,13,11,11,12,
-	13,14,11,12,13,13,15,12,13,13,14,15,13,14,14,14,
-	16,14,15,15,16,16,10,11,11,14,13,11,12,12,14,14,
-	11,12,12,15,13,14,14,14,16,16,13,14,13,16,14, 7,
-	 9, 9,11,12, 9,10,10,12,13, 9,10,10,12,12,11,12,
-	13,14,15,11,12,12,14,14, 9,10,10,12,13,10,10,11,
-	12,14,10,11,11,13,13,12,12,13,14,15,13,13,13,15,
-	15, 9,10,10,12,12,10,11,11,13,14,10,11,10,13,12,
-	12,13,13,15,16,12,13,12,15,14,11,12,13,14,14,12,
-	12,13,14,15,13,14,13,15,15,14,14,15,14,17,15,16,
-	15,17,16,11,12,12,14,14,13,13,13,15,15,12,13,12,
-	15,14,15,15,15,16,17,14,15,14,16,14, 8, 9, 9,12,
-	11, 9,10,10,12,13, 9,11,10,13,12,11,12,12,14,15,
-	11,12,12,15,14, 9,10,11,13,13,10,11,12,13,14,10,
-	11,11,14,13,12,13,13,15,15,12,13,13,16,15, 9,11,
-	 9,13,11,10,11,10,14,13,10,12,10,14,12,12,13,13,
-	15,15,12,13,12,16,14,12,12,13,14,15,12,13,14,14,
-	16,13,14,14,15,15,14,14,15,15,17,15,16,15,17,16,
-	11,13,11,15,13,13,14,13,15,14,12,14,12,16,13,15,
-	15,15,16,16,14,15,14,17,14,10,11,11,13,14,11,12,
-	13,14,15,11,12,12,14,15,14,14,15,16,17,14,15,15,
-	16,16,11,12,13,14,15,12,13,14,15,16,13,14,14,15,
-	16,15,15,16,16,18,15,16,16,17,17,11,12,12,14,15,
-	13,13,14,14,16,12,13,13,15,15,15,15,16,16,18,14,
-	15,15,16,16,14,15,15,16,17,15,15,16,16,17,15,16,
-	16,17,17,16,16,17,16,19,17,18,17,18,18,14,14,15,
-	16,16,15,15,16,16,17,14,15,15,16,16,17,17,18,18,
-	19,16,17,16,17,16,10,12,11,14,13,11,13,12,15,14,
-	11,13,12,15,14,14,15,15,16,16,13,15,14,17,15,12,
-	13,13,15,15,13,13,14,15,16,13,14,14,16,16,14,15,
-	15,17,17,15,16,16,17,17,11,13,12,15,12,13,14,13,
-	16,13,12,14,12,16,13,15,16,15,17,16,14,16,14,18,
-	14,14,15,15,16,17,15,15,16,16,17,15,16,16,17,17,
-	16,16,17,17,18,17,18,17,18,18,14,15,14,17,14,15,
-	16,15,18,15,15,16,15,18,14,17,17,17,18,17,16,17,
-	16,19,16, 9,11,11,13,13,10,12,12,14,14,11,12,12,
-	15,14,13,14,14,16,16,13,14,14,16,16,10,11,12,14,
-	14,11,12,13,14,15,12,13,13,15,15,13,14,15,16,16,
-	14,15,15,17,16,11,12,12,15,14,12,13,13,15,15,12,
-	13,12,15,15,14,15,15,16,17,14,15,14,17,16,12,13,
-	14,15,16,13,13,14,15,16,13,14,15,16,16,14,15,16,
-	16,18,15,16,16,18,18,13,14,14,16,15,14,15,15,17,
-	16,14,15,15,17,16,16,17,17,18,18,16,17,16,18,17,
-	10,12,12,14,14,11,12,13,15,15,12,13,13,15,15,13,
-	14,15,16,17,14,15,15,17,16,11,11,13,14,15,12,12,
-	14,15,16,13,13,14,15,16,14,14,15,16,17,15,15,16,
-	17,17,12,13,12,15,15,13,14,14,16,16,13,14,13,16,
-	15,15,16,15,17,17,15,16,15,18,16,13,12,15,14,17,
-	14,13,16,14,17,14,14,16,15,18,15,14,17,16,18,16,
-	16,17,17,18,14,15,15,17,16,15,16,16,17,17,15,16,
-	15,18,16,17,17,17,18,18,16,17,16,19,17,10,11,11,
-	14,14,11,12,12,15,15,11,13,12,15,15,14,15,14,16,
-	16,14,15,15,17,16,11,12,12,15,14,12,12,13,15,15,
-	13,14,13,16,15,14,15,15,16,16,15,16,15,18,17,11,
-	13,12,15,15,13,14,13,15,15,12,14,13,16,15,15,16,
-	15,17,17,15,16,15,18,16,13,14,13,16,16,14,15,14,
-	16,16,14,15,15,17,16,16,16,16,16,18,16,18,17,19,
-	18,14,15,15,17,16,15,16,16,17,17,15,15,15,17,16,
-	17,17,18,18,19,16,17,16,18,16,12,13,13,15,16,13,
-	14,14,16,17,13,14,14,16,16,15,15,16,17,18,15,16,
-	16,18,17,13,13,14,14,17,14,14,15,15,17,14,14,15,
-	16,17,15,15,17,16,18,16,17,17,18,18,13,14,14,17,
-	16,14,15,15,17,17,14,15,14,17,16,16,17,17,18,18,
-	16,17,16,18,17,15,14,16,13,18,16,15,17,14,19,16,
-	16,17,15,18,17,16,18,15,19,18,18,18,17,19,15,16,
-	16,18,17,16,17,17,18,18,16,17,16,19,17,18,19,18,
-	19,19,17,18,17,20,18,11,12,12,15,15,13,13,14,15,
-	16,13,14,13,16,15,15,16,16,17,17,15,16,16,18,17,
-	12,14,13,16,15,13,13,14,15,16,14,15,14,17,16,16,
-	16,16,16,17,16,17,17,19,17,12,13,14,16,16,14,15,
-	15,16,17,13,15,13,17,15,16,17,17,18,18,16,17,16,
-	18,16,15,16,15,17,16,15,15,15,17,17,16,17,16,18,
-	17,17,16,17,16,18,18,19,18,20,18,15,16,16,17,17,
-	16,17,17,18,18,15,16,15,18,17,18,18,19,19,19,17,
-	18,16,19,16, 9,11,11,13,13,11,12,12,14,15,10,12,
-	12,14,14,13,14,14,16,16,13,14,14,16,16,11,12,12,
-	14,14,12,12,13,15,15,12,13,13,15,15,14,15,15,16,
-	17,14,15,15,16,16,10,12,11,14,14,12,13,13,15,15,
-	11,13,12,15,14,14,15,15,16,17,13,15,14,17,16,13,
-	14,14,15,16,14,15,15,16,17,14,15,15,16,17,16,16,
-	17,17,18,16,17,17,18,18,12,14,13,16,15,13,15,14,
-	17,16,13,14,13,17,15,15,16,16,18,18,15,16,15,18,
-	16,10,11,11,14,14,11,12,13,14,15,11,12,12,15,15,
-	14,15,15,16,17,14,15,15,16,16,11,12,13,15,15,12,
-	13,14,15,16,13,14,14,15,16,15,15,16,16,18,15,15,
-	16,17,17,11,12,12,14,15,13,13,14,15,16,12,13,13,
-	15,15,15,15,16,17,18,14,15,15,17,16,14,15,15,16,
-	17,15,15,16,16,17,15,16,16,17,17,16,16,17,16,19,
-	17,17,18,19,18,13,13,14,16,16,14,15,16,17,17,14,
-	14,15,16,16,16,16,17,18,18,16,16,16,18,16,10,12,
-	12,14,14,12,13,13,15,15,11,13,12,15,15,14,15,15,
-	16,17,13,15,14,17,16,12,13,13,15,15,13,13,14,15,
-	16,13,14,14,16,16,15,15,16,17,18,15,15,16,17,17,
-	11,13,12,15,14,13,14,13,16,15,12,14,12,16,14,15,
-	16,15,17,17,14,16,14,17,16,14,15,15,16,17,15,15,
-	16,16,18,15,16,16,17,17,16,17,17,17,19,17,17,17,
-	18,18,13,15,12,17,14,14,16,14,17,15,14,15,13,17,
-	14,16,17,16,18,17,15,17,14,19,15,11,12,12,15,15,
-	13,13,14,15,16,13,14,13,16,15,15,16,16,17,18,15,
-	16,16,17,17,12,14,13,16,16,13,13,15,15,17,14,15,
-	15,17,16,16,16,17,16,19,16,17,17,18,18,12,13,14,
-	15,16,14,14,15,16,17,13,14,13,16,15,16,17,17,18,
-	19,15,16,16,17,16,15,16,16,18,17,15,15,16,17,18,
-	16,17,17,18,18,16,16,18,16,19,18,19,19,20,19,15,
-	15,16,16,17,16,16,17,17,18,15,15,15,17,16,18,18,
-	19,18,20,17,17,16,18,16,12,13,13,16,15,13,14,14,
-	16,16,13,14,14,16,16,15,16,16,17,18,15,16,15,18,
-	17,13,14,14,16,16,14,15,15,16,17,14,15,15,17,17,
-	16,17,17,18,18,16,17,17,18,18,13,14,13,17,14,14,
-	15,14,17,16,14,15,14,17,15,16,17,17,18,18,15,17,
-	15,19,15,16,16,16,17,18,16,16,17,17,19,16,17,17,
-	18,19,17,17,18,18,20,18,18,18,19,19,15,16,14,18,
-	13,16,17,16,19,15,16,17,15,19,14,18,18,18,19,17,
-	17,18,16,20,15,
-};
-
-static const static_codebook _44p6_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p6_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p6_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p3_0[] = {
-	 1, 5, 5, 5, 7, 8, 5, 8, 7, 5, 7, 8, 8, 8,10, 8,
-	10,10, 5, 8, 7, 8,10,10, 8,10, 8, 6, 8, 9, 8,10,
-	12, 9,11,11, 9,10,11,11,11,13,12,13,13, 9,11,11,
-	11,13,13,11,13,12, 6, 9, 8, 9,11,11, 8,12,10, 9,
-	11,11,11,12,13,11,13,13, 9,11,10,11,13,13,11,13,
-	11, 5, 9, 9, 8,11,11, 9,12,11, 8,10,11,10,11,13,
-	11,13,13, 9,11,11,11,13,13,11,13,12, 8,10,11,10,
-	12,13,10,13,12,10,10,13,11,11,14,12,13,14,11,13,
-	12,13,14,14,12,14,12, 8,11,10,11,12,13,11,14,12,
-	10,13,12,12,12,13,13,15,14,11,12,13,13,14,15,12,
-	14,12, 5, 9, 9, 9,11,12, 8,11,11, 9,11,11,11,12,
-	13,11,13,13, 8,11,10,11,13,13,10,13,11, 8,10,11,
-	11,12,14,11,13,12,11,13,12,12,12,14,13,15,14,10,
-	12,13,13,14,15,12,13,12, 8,11,10,10,12,13,10,13,
-	12,11,12,13,12,12,14,13,14,14,10,13,10,12,14,13,
-	11,14,11,
-};
-
-static const static_codebook _44p6_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p6_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p3_1[] = {
-	 5, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 7, 8, 8, 7,
-	 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 8, 7, 7, 8, 7, 8,
-	 8, 7, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8,
-	 8, 9, 9, 8, 9, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 8,
-	 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
-	 8, 6, 8, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 9,
-	 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8,
-	 8, 9, 8, 9, 9, 8, 8, 9, 8, 9, 9, 9, 9, 9, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 8,
-	 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9, 9,
-	 9, 9, 6, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-	 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8,
-	 8, 8, 9, 8, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8,
-	 8, 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9,
-	 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p6_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p6_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p6_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p4_0[] = {
-	 2, 5, 5, 5, 7, 8, 5, 8, 7, 5, 7, 7, 7, 7, 9, 7,
-	 9, 9, 5, 7, 7, 8, 9, 9, 7, 9, 7, 6, 8, 8, 8, 9,
-	10, 8, 9, 9, 8, 9,10, 9, 9,11,10,11,11, 8, 9, 9,
-	10,11,11, 9,11,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 8,
-	 9, 9, 9,10,11,10,11,10, 8,10, 9,10,11,11, 9,11,
-	 9, 6, 8, 8, 7, 9, 9, 8,10, 9, 7, 9, 9, 9, 9,10,
-	 9,10,10, 8, 9, 9, 9,10,10, 9,11,10, 7, 9, 9, 8,
-	10,10, 9,10,10, 9, 9,10,10,10,11,10,11,11, 9,10,
-	10,10,11,11,10,11,10, 7, 9, 9, 9, 9,10, 9,10, 9,
-	 8,10, 9, 9, 9,11,10,11,11, 9,10,10,10,11,11, 9,
-	11, 9, 6, 8, 8, 8, 9,10, 7, 9, 9, 8, 9, 9, 9,10,
-	10, 9,10,10, 7, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9,
-	 9, 9,10, 9,10, 9, 9,10,10, 9, 9,11,10,11,11, 8,
-	 9,10,10,11,11, 9,11, 9, 7, 9, 9, 9,10,10, 8,10,
-	10, 9,10,10,10,10,11,10,11,11, 9,10, 9,10,11,11,
-	10,11,10,
-};
-
-static const static_codebook _44p6_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p6_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p6_p4_1[] = {
-	 6, 8, 8,10,10, 8, 9, 9,10,11, 8,10, 9,11,10, 9,
-	10,10,11,11, 9,10,10,11,11, 8, 9, 9,10,10, 9, 9,
-	10,11,11,10,10,10,11,11,10,11,11,11,11,10,11,11,
-	11,11, 8, 9, 9,11,10,10,10,10,11,11, 9,10, 9,11,
-	11,10,11,11,11,11,10,11,10,11,11,10,10,11,11,11,
-	10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-	11,11,11,11,10,11,10,11,11,11,11,11,11,11,10,11,
-	11,11,11,11,11,11,11,11,11,11,11,11,11, 8, 9,10,
-	11,11,10,10,11,11,11,10,10,10,11,11,10,11,11,12,
-	12,10,11,11,12,12,10,10,11,11,11,10,10,11,11,12,
-	11,11,11,12,12,11,11,12,12,12,11,11,12,12,12,10,
-	10,10,11,11,11,11,11,12,12,10,11,11,12,12,11,12,
-	12,12,12,11,12,11,12,12,11,11,11,11,12,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,11,11,12,11,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12, 8,10, 9,11,11,10,
-	10,10,11,11,10,11,10,11,11,10,11,11,12,12,10,11,
-	11,12,12,10,10,10,11,11,10,11,11,12,12,11,11,11,
-	12,12,11,11,12,12,12,11,12,12,12,12,10,11,10,11,
-	11,11,11,11,12,12,10,11,10,12,11,11,12,11,12,12,
-	11,12,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
-	11,12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,10,11,11,11,12,11,11,12,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,13,11,12,11,12,12,12,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,13,12,13,12,12,12,12,13,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,12,
-	12,12,13,12,10,11,11,12,11,11,11,12,12,12,11,12,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,12,11,12,12,12,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,12,12,12,12,13,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,13,12,13,12,13,
-	12, 8,10,10,11,11,10,10,11,11,11,10,11,10,11,11,
-	10,11,11,12,12,10,11,11,12,12, 9,10,11,11,11,10,
-	10,11,12,12,10,11,11,12,12,11,11,12,12,12,11,12,
-	12,12,12,10,11,10,11,11,11,11,11,12,12,10,11,11,
-	12,12,11,12,12,12,12,11,12,11,12,12,11,11,11,12,
-	12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12, 9,10,
-	10,11,11,10,11,11,12,12,10,11,11,12,12,11,11,12,
-	12,12,11,12,12,12,12,10,11,11,12,12,11,11,12,12,
-	12,11,11,12,12,12,11,11,12,12,12,12,12,12,12,12,
-	10,11,11,12,12,11,12,12,12,12,11,12,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12, 9,10,10,11,11,
-	10,11,11,12,12,10,11,11,12,11,11,12,12,12,12,11,
-	12,12,12,12,10,11,11,12,12,11,11,11,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,10,11,11,
-	12,12,11,12,12,12,12,11,12,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,12,13,12,12,13,13,13,11,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,12,12,12,12,13,13,12,13,
-	12,13,13,12,12,12,12,12,12,12,12,12,13,12,13,13,
-	13,13,12,13,13,13,13,13,13,13,13,13,12,12,12,12,
-	12,12,12,13,13,13,12,13,12,13,13,12,13,13,13,13,
-	12,13,13,13,13,11,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	12,13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,
-	13,12,12,12,13,12,12,13,12,13,13,12,13,12,13,13,
-	12,12,12,12,12,12,12,13,13,13,12,12,13,13,13,12,
-	13,13,12,13,13,13,13,13,13,12,12,12,12,12,12,13,
-	12,13,13,12,13,12,13,12,12,13,13,13,13,12,13,13,
-	13,13, 8,10,10,11,11,10,10,11,11,11, 9,11,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,10,10,11,11,11,
-	10,11,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
-	12,12,12,12, 9,11,10,11,11,10,11,11,12,12,10,11,
-	10,12,12,11,12,12,12,12,11,12,11,12,12,11,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,12,12,12,12,12, 9,
-	10,10,11,11,10,11,11,12,12,10,11,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,10,11,11,12,12,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,10,11,11,12,12,11,11,12,12,12,11,11,11,12,12,
-	12,12,12,12,12,11,12,12,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12, 9,10,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,10,11,
-	11,12,12,11,12,11,12,12,11,12,11,12,12,12,12,12,
-	12,12,11,12,11,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,13,12,12,13,13,13,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,12,13,13,12,
-	12,12,13,12,12,12,12,12,12,12,12,13,13,13,12,12,
-	13,13,13,12,13,13,12,13,12,13,13,13,13,12,12,12,
-	12,12,12,12,13,13,13,12,12,12,13,12,12,13,13,13,
-	13,12,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
-	13,13,13,12,12,12,13,13,11,12,12,12,12,12,12,12,
-	13,12,12,12,12,13,12,12,13,12,13,13,12,13,12,13,
-	12,12,12,12,12,12,12,12,13,13,13,12,13,13,13,13,
-	12,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,
-	13,12,13,12,12,13,12,13,12,13,13,13,13,13,12,13,
-	13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,11,11,12,12,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,
-	12,12,12,13,13,11,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,12,
-	12,12,12,12,12,12,12,13,12,12,12,12,13,12,12,13,
-	12,13,12,13,13,13,13,12,12,12,12,12,12,12,12,13,
-	12,12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,
-	11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,13,12,12,12,13,12,11,12,12,12,12,12,12,
-	12,12,13,12,12,12,12,13,12,12,13,13,13,12,12,13,
-	13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	12,12,13,12,13,13,12,13,12,13,13,12,12,12,12,12,
-	12,12,13,12,13,12,12,13,13,13,12,12,13,13,13,13,
-	13,13,13,13,12,12,12,12,12,12,13,13,13,13,12,13,
-	12,13,12,12,13,13,13,13,12,13,13,13,13,11,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,13,11,12,12,12,12,12,12,12,12,13,
-	12,12,12,13,13,12,12,13,13,13,12,12,13,13,13,11,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,13,
-	12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,12,
-	12,13,12,13,12,13,13,12,13,13,13,13,12,13,13,13,
-	13,12,12,12,12,12,12,13,12,13,13,12,12,12,13,13,
-	12,13,13,13,13,12,13,12,13,13,11,12,12,12,12,11,
-	12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,12,13,12,12,12,13,13,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,
-	12,13,12,13,13,12,12,12,12,12,12,12,13,12,13,12,
-	12,13,12,13,12,12,13,12,13,12,13,13,13,13,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,12,12,13,13,
-	13,13,12,13,12,13,12,11,11,11,12,12,11,12,12,12,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,13,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,13,12,12,12,13,12,12,12,12,12,12,12,12,
-	12,12,12,13,12,12,12,12,13,12,12,13,12,13,12,12,
-	13,12,13,12,10,11,11,12,12,11,12,12,12,12,11,12,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	13,12,12,12,13,13,11,12,11,12,12,12,12,12,12,12,
-	11,12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,
-	12,12,12,12,12,12,12,12,13,12,12,12,12,13,12,13,
-	13,12,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
-	13,13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,13,13,12,12,12,13,12,11,12,12,12,12,12,
-	12,12,12,13,12,12,12,13,13,12,12,13,13,13,12,12,
-	13,13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,12,12,13,12,13,13,12,12,12,13,13,12,12,12,12,
-	12,12,12,13,13,13,12,12,13,13,13,12,12,13,13,13,
-	12,13,13,13,13,12,12,12,12,12,12,12,13,13,13,12,
-	12,12,13,12,12,13,13,13,13,12,13,13,13,13,11,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
-	12,13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,
-	13,12,12,12,13,13,12,12,13,13,13,12,12,13,13,13,
-	11,12,12,12,12,12,12,12,13,12,12,12,12,13,12,12,
-	13,12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,
-	12,13,13,12,13,12,13,13,12,13,13,13,13,13,13,13,
-	13,13,12,12,12,12,12,12,13,12,13,13,12,13,12,13,
-	12,12,13,13,13,13,12,13,12,13,13,11,11,11,12,12,
-	11,12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,12,12,12,13,13,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	13,12,12,12,13,12,12,12,11,12,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,12,12,12,12,12,12,12,12,13,12,12,12,12,12,
-	12,12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,12,13,13,12,12,
-	12,13,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
-	13,13,12,12,13,12,13,12,13,13,13,13,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,13,
-	12,13,12,13,12,
-};
-
-static const static_codebook _44p6_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p6_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p6_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p6_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p6_p5_0[] = {
-	 2, 6, 6,10,10, 5, 7, 8,11,12, 5, 8, 7,12,11, 9,
-	11,11,13,15, 9,11,11,15,13, 6, 7, 8,11,11, 7, 7,
-	 9,11,13, 8, 9, 9,13,12,11,11,12,12,15,11,12,12,
-	15,14, 6, 8, 7,11,11, 8, 9, 9,12,13, 7, 9, 7,13,
-	11,11,12,12,14,15,11,12,11,15,12,10,11,11,12,14,
-	10,11,12,12,15,12,13,13,14,15,13,12,14,12,16,15,
-	15,15,16,16,10,11,11,14,12,12,13,13,15,14,10,12,
-	11,15,12,15,15,15,16,17,13,14,12,17,12, 6, 8, 8,
-	12,12, 8, 9,10,13,13, 8, 9, 9,13,13,12,12,13,15,
-	16,12,13,13,16,15, 8, 9,10,12,13, 9, 9,11,13,14,
-	10,11,11,14,14,13,13,14,15,16,13,14,14,16,16, 8,
-	10, 9,13,13,10,11,11,14,14, 9,10,10,14,13,13,14,
-	14,16,17,13,13,13,16,15,12,13,13,14,16,13,13,14,
-	14,16,14,14,14,16,16,15,15,16,15,18,16,17,17,18,
-	18,12,13,13,15,15,14,14,14,16,16,13,14,13,16,15,
-	16,16,17,18,18,15,16,15,18,15, 6, 8, 8,12,12, 8,
-	 9, 9,13,13, 8,10, 9,13,13,12,13,13,15,16,12,13,
-	12,16,15, 8, 9,10,13,13, 9,10,10,13,14,10,11,11,
-	14,14,13,13,13,15,16,13,14,14,17,16, 8,10, 9,13,
-	13,10,11,11,14,14, 9,11, 9,14,13,13,14,14,16,16,
-	13,14,13,16,14,12,13,13,15,16,13,13,14,15,16,14,
-	14,14,16,16,15,15,16,15,18,17,17,17,18,18,12,13,
-	13,16,14,14,14,14,16,16,13,14,13,16,14,16,17,17,
-	18,18,15,16,15,18,15,11,12,13,14,16,13,13,14,15,
-	17,13,14,14,16,17,16,16,17,17,19,16,17,17,18,19,
-	13,13,14,16,16,14,14,15,16,17,14,15,15,17,17,17,
-	16,17,17,19,17,17,18,19,19,13,14,14,16,16,14,14,
-	15,17,18,14,15,14,17,17,17,17,18,18,19,17,17,17,
-	18,19,16,16,16,17,18,17,17,17,18,19,17,17,17,18,
-	19,18,18,19,18,20,19,20,19,21,20,16,17,17,18,18,
-	17,17,18,19,19,17,17,17,19,18,19,19,19,19,20,19,
-	19,19,20,19,11,13,12,16,14,13,14,14,17,16,13,14,
-	13,17,15,16,17,17,18,18,16,17,16,19,17,13,14,14,
-	16,16,14,14,14,17,17,14,15,15,17,16,17,17,17,19,
-	19,17,18,17,19,18,13,14,13,17,16,14,15,15,17,17,
-	14,15,14,18,16,17,17,17,19,19,17,17,16,19,17,16,
-	17,17,18,19,17,17,17,18,18,17,18,17,19,18,18,19,
-	18,19,19,19,20,19,20,20,16,17,16,18,17,17,17,17,
-	18,18,17,18,17,19,17,19,19,19,19,20,18,19,19,20,
-	18, 6, 8, 8,12,12, 8, 9, 9,13,13, 8,10, 9,13,13,
-	11,13,13,15,16,12,13,13,16,15, 8, 9, 9,13,13, 9,
-	 9,10,13,14,10,11,11,14,14,12,12,13,14,16,13,14,
-	14,17,16, 8,10, 9,13,13,10,11,11,14,14, 9,11,10,
-	14,13,13,14,14,16,16,13,14,13,16,15,12,13,13,14,
-	16,12,13,14,14,16,13,14,14,16,16,15,14,16,15,18,
-	16,17,17,18,17,12,13,13,16,15,14,14,14,16,16,13,
-	14,13,16,15,16,16,17,17,17,15,16,15,18,15, 7, 9,
-	 9,13,13, 9, 9,11,13,14, 9,10,10,14,13,12,13,14,
-	15,16,12,14,13,17,15, 9, 9,10,13,14,10, 9,11,13,
-	15,11,11,11,14,14,13,12,14,14,17,14,14,14,17,16,
-	 9,10,10,14,13,11,11,11,14,14,10,11,10,15,13,14,
-	14,14,16,17,13,14,13,17,14,13,13,14,14,16,13,13,
-	14,14,17,14,14,14,16,16,15,14,16,15,18,17,17,17,
-	18,18,13,14,13,16,15,14,14,15,17,16,13,14,13,17,
-	15,17,16,17,17,17,15,16,14,18,14, 7, 9, 9,13,13,
-	 9,10,10,13,14, 9,11,10,14,13,13,14,14,16,16,13,
-	14,14,17,15, 9,10,10,14,13, 9,10,11,13,14,11,12,
-	11,15,14,13,13,14,14,16,14,15,15,17,17, 9,10,10,
-	14,14,11,12,12,14,15,10,11,10,15,13,14,15,15,17,
-	17,14,15,13,17,14,13,14,13,16,16,13,13,14,15,16,
-	14,15,15,17,17,15,14,16,15,18,17,18,17,20,18,13,
-	14,14,16,16,15,15,15,17,17,13,14,13,17,15,17,17,
-	18,18,18,15,16,14,19,14,12,13,13,15,16,13,13,15,
-	16,17,13,14,14,16,16,15,15,17,17,19,16,17,17,19,
-	18,13,13,14,15,17,14,13,15,15,17,14,15,15,16,17,
-	16,15,18,16,19,17,17,17,18,19,13,14,14,17,16,14,
-	15,15,17,17,14,15,14,17,16,17,17,17,18,19,16,17,
-	16,19,17,16,16,17,16,18,16,16,17,16,19,17,17,18,
-	18,19,18,17,18,17,21,19,19,19,20,19,16,17,17,18,
-	18,17,17,18,18,19,16,17,16,18,18,19,19,19,19,20,
-	18,18,17,20,18,11,13,13,16,15,13,14,14,16,17,13,
-	15,14,17,16,16,17,17,18,18,17,17,17,19,18,13,14,
-	13,17,16,14,13,14,16,17,15,16,15,18,16,17,16,17,
-	17,19,18,18,18,20,18,13,14,14,16,17,15,15,15,17,
-	18,14,15,14,18,16,18,18,18,19,20,17,18,16,20,17,
-	16,17,16,18,18,16,16,17,18,18,17,18,18,19,18,18,
-	17,19,17,20,19,20,19,22,20,16,16,17,18,18,18,17,
-	17,19,19,16,17,16,18,17,19,20,19,22,21,18,19,18,
-	21,17, 6, 8, 8,12,12, 8, 9,10,13,13, 8, 9, 9,13,
-	13,12,13,13,15,16,11,13,13,16,15, 8, 9,10,13,13,
-	 9,10,11,13,14,10,11,11,14,14,13,13,14,15,16,13,
-	14,14,16,16, 8, 9, 9,13,13,10,11,11,14,14, 9,10,
-	 9,14,13,13,14,14,16,17,12,14,12,16,14,12,13,13,
-	15,16,13,13,14,15,16,13,14,14,15,17,15,15,16,15,
-	18,16,16,17,17,17,12,13,13,16,14,13,14,14,16,16,
-	12,14,13,16,14,16,17,17,18,18,15,15,14,18,14, 7,
-	 9, 9,13,13, 9,10,11,13,14, 9,10,10,14,13,13,14,
-	14,15,17,13,14,14,16,15, 9,10,10,14,14,10,10,11,
-	13,15,11,12,12,15,14,14,13,15,14,17,14,15,15,17,
-	17, 9,10,10,13,14,11,11,12,14,15, 9,11,10,14,13,
-	14,15,15,16,18,13,14,13,16,14,13,14,14,16,16,13,
-	13,14,15,17,15,15,15,16,17,15,14,16,15,18,17,17,
-	18,19,18,13,14,14,16,16,14,15,15,17,17,13,14,13,
-	16,15,17,17,18,18,18,15,16,14,18,15, 7, 9, 9,13,
-	13, 9,10,10,13,14, 9,11,10,14,13,12,13,14,15,16,
-	12,14,13,16,15, 9,10,10,13,14,10,10,11,13,14,11,
-	11,11,15,14,13,13,14,14,16,14,14,14,17,16, 9,10,
-	 9,14,13,11,11,11,14,14,10,11, 9,15,13,14,14,14,
-	16,16,13,14,12,17,14,13,13,14,15,16,13,13,14,15,
-	16,14,15,14,16,17,15,14,16,14,18,16,17,17,18,18,
-	13,14,13,16,14,14,14,14,16,16,13,14,13,17,14,17,
-	17,17,18,18,15,16,14,18,15,11,13,13,16,16,13,14,
-	15,16,17,13,14,14,17,16,16,17,17,18,19,17,17,17,
-	19,18,13,14,14,17,17,13,13,15,16,18,15,15,15,17,
-	17,17,16,18,17,20,18,17,18,19,19,13,14,14,16,17,
-	15,15,16,16,18,14,15,14,16,16,17,17,18,18,20,17,
-	18,16,18,17,16,17,16,19,18,16,16,17,18,19,18,18,
-	18,19,19,18,17,18,17,21,20,19,19,21,21,16,16,17,
-	18,18,17,17,18,19,19,16,17,16,19,18,20,20,20,19,
-	21,18,18,17,20,18,12,13,13,16,15,13,14,14,16,16,
-	13,14,13,17,16,16,17,17,18,18,15,17,15,19,17,13,
-	14,14,16,17,14,14,15,16,17,14,15,15,17,17,16,16,
-	17,17,18,17,17,17,19,19,13,14,13,17,15,14,15,15,
-	17,16,14,15,13,17,15,17,18,17,19,18,16,17,15,20,
-	16,16,17,17,18,18,16,16,17,18,18,17,18,17,19,18,
-	17,17,18,18,20,19,20,19,20,19,16,16,16,19,16,17,
-	17,17,19,18,16,17,16,19,16,19,19,19,19,19,18,19,
-	17,19,17,11,13,13,16,16,13,14,14,17,17,13,14,14,
-	17,17,15,17,17,19,19,16,18,17,20,19,12,14,14,17,
-	17,13,14,15,17,18,14,15,15,17,18,16,16,17,18,20,
-	17,18,18,20,18,13,14,14,17,17,14,15,15,17,18,14,
-	15,15,17,17,17,18,17,19,19,17,18,17,19,19,15,16,
-	16,18,18,15,16,17,18,19,16,17,17,19,19,17,17,18,
-	18,21,18,19,19,21,19,16,17,17,18,18,17,17,18,19,
-	19,17,18,17,19,19,19,19,19,20,20,18,19,18,21,19,
-	12,13,13,16,16,13,14,14,16,17,13,15,14,17,16,15,
-	16,17,17,19,16,17,17,19,18,13,13,14,16,17,14,13,
-	15,16,17,14,15,15,17,17,15,15,17,17,20,17,17,18,
-	19,18,13,14,14,17,16,15,15,15,17,18,14,15,14,17,
-	16,17,17,17,18,18,16,17,16,19,17,16,15,17,17,19,
-	16,15,17,16,19,17,16,17,18,19,17,16,19,16,20,19,
-	18,19,19,19,16,17,17,18,18,17,17,17,18,19,16,17,
-	16,19,18,20,19,19,20,19,18,18,17,20,17,11,13,13,
-	16,16,13,14,15,16,17,14,15,14,18,16,17,17,17,18,
-	21,17,18,17,20,19,13,14,14,17,16,13,14,15,16,18,
-	15,16,15,18,17,17,16,17,17,19,17,18,18,20,19,13,
-	14,14,16,17,15,15,16,17,18,14,15,14,18,17,17,18,
-	18,19,20,17,18,16,19,17,16,17,15,19,18,16,16,16,
-	18,18,17,18,17,20,19,18,17,18,17,20,20,20,19,22,
-	20,16,17,17,18,19,18,18,18,19,20,16,17,16,19,18,
-	20,19,19,20,20,18,19,17,20,17,13,14,14,16,17,14,
-	14,16,16,18,14,16,15,17,16,16,16,17,17,18,17,17,
-	16,19,18,14,14,15,16,17,14,14,16,16,18,16,16,16,
-	17,17,16,15,17,16,19,18,18,18,19,19,14,15,15,17,
-	17,15,16,16,17,18,14,16,14,18,16,17,17,18,18,19,
-	16,17,16,19,17,16,16,17,16,18,16,16,17,16,19,18,
-	18,18,17,18,17,16,18,16,20,19,19,19,19,19,16,17,
-	17,18,18,17,17,18,19,19,16,17,16,19,17,18,19,19,
-	19,20,17,18,16,20,16,11,14,13,17,17,14,14,16,16,
-	18,14,16,14,19,16,18,18,19,18,19,18,19,18,21,18,
-	13,15,14,18,16,14,14,16,16,18,16,17,16,19,17,18,
-	16,19,17,20,19,19,19,21,19,13,14,15,17,18,17,16,
-	17,17,19,14,16,14,18,16,20,19,19,20,21,18,19,16,
-	21,17,17,18,16,19,17,16,16,17,18,18,19,19,18,21,
-	18,17,17,18,17,20,20,20,20,22,20,17,17,18,18,20,
-	19,19,19,18,20,16,17,17,19,19,21,21,21,20,21,17,
-	19,17,23,17,11,13,13,16,16,13,14,14,17,17,13,14,
-	14,17,17,16,17,17,19,20,15,16,16,19,19,13,14,14,
-	16,17,14,15,15,17,18,14,15,15,17,17,17,17,18,19,
-	19,17,17,18,19,19,13,14,14,17,16,14,15,15,17,17,
-	13,15,14,18,17,17,18,18,19,20,16,17,16,19,18,16,
-	16,17,18,18,17,17,17,18,19,17,18,17,19,19,19,19,
-	19,19,20,19,20,19,20,20,15,16,16,18,17,16,17,17,
-	20,18,15,16,16,19,17,19,19,19,20,20,17,18,17,21,
-	17,11,13,13,16,16,13,14,15,16,17,13,15,14,17,16,
-	17,17,18,18,20,17,17,17,19,19,13,14,14,17,17,14,
-	14,15,17,18,15,15,15,18,17,17,17,18,17,20,18,18,
-	17,20,18,13,14,14,16,17,15,15,16,17,18,14,15,13,
-	17,17,17,18,18,19,20,17,17,16,19,17,16,17,17,18,
-	18,16,16,17,18,18,18,18,18,19,19,18,17,19,18,21,
-	19,20,20,20,20,16,15,17,18,18,17,17,18,18,20,16,
-	16,16,18,17,20,19,20,21,22,17,18,17,20,17,12,13,
-	13,16,16,13,14,15,16,17,13,14,14,17,16,16,17,18,
-	18,19,15,16,16,19,18,13,14,14,16,17,14,14,15,16,
-	17,14,15,15,17,17,16,16,17,17,19,17,17,17,19,18,
-	13,14,13,17,16,14,15,15,17,17,13,15,13,17,16,17,
-	17,17,19,19,15,17,15,19,17,16,17,17,18,18,16,16,
-	17,17,19,17,18,17,19,19,18,17,19,17,19,19,19,19,
-	20,19,15,17,15,19,16,17,17,16,19,18,16,17,15,18,
-	16,19,19,19,20,19,17,19,16,19,16,11,14,14,17,17,
-	15,14,16,16,18,15,16,14,18,16,18,18,19,18,21,18,
-	19,18,20,18,13,15,14,18,17,14,14,16,16,18,16,17,
-	16,19,17,17,17,19,17,22,19,19,19,21,19,13,14,15,
-	17,18,17,16,17,17,19,14,16,14,18,16,19,19,19,20,
-	21,18,18,16,20,17,17,18,16,19,18,15,17,17,19,19,
-	19,19,18,21,19,18,17,20,17,21,22,21,20,21,21,17,
-	16,19,18,20,19,18,19,18,20,16,17,16,19,18,21,20,
-	21,19,23,18,19,16,20,17,13,14,14,17,16,14,14,15,
-	16,18,14,16,14,17,16,16,16,17,17,19,16,17,16,19,
-	17,14,15,15,17,17,14,14,16,16,17,15,16,16,18,17,
-	16,16,17,17,19,17,18,17,19,18,14,15,14,17,16,16,
-	16,16,17,17,14,16,14,17,16,18,18,18,18,19,16,17,
-	15,19,16,17,17,17,18,18,16,15,17,17,18,18,18,18,
-	19,19,17,16,18,16,19,19,19,19,19,19,16,17,16,19,
-	16,18,18,17,19,18,16,17,16,19,16,19,19,20,19,19,
-	17,18,16,20,16,
-};
-
-static const static_codebook _44p6_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p6_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p6_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p6_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p6_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p6_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p6_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p6_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p6_0[] = {
-	 1, 5, 5, 5, 7, 9, 5, 9, 7, 5, 7, 8, 7, 7,10, 9,
-	10,10, 5, 8, 7, 9,10,10, 7,10, 7, 6, 9, 9, 9,10,
-	12, 9,11,11, 9,10,11,11,11,13,12,13,13, 9,11,11,
-	12,13,13,11,13,11, 6, 9, 9, 9,11,11, 9,12,10, 9,
-	11,11,11,11,13,12,13,13, 9,11,10,12,13,13,11,13,
-	11, 6, 9, 9, 9,11,12, 9,12,11, 9,10,11,10,10,13,
-	12,13,13, 9,11,11,12,13,12,11,13,11, 7, 9,10, 9,
-	10,12,10,12,11,10,10,12,10,10,12,12,12,13,10,11,
-	11,12,12,13,10,12,10, 7,10,10,11,11,14,11,14,11,
-	10,12,11,11,11,14,14,14,14,10,11,12,14,14,14,11,
-	14,11, 6, 9, 9, 9,11,12, 9,12,11, 9,11,11,11,11,
-	13,12,12,13, 9,11,10,12,13,13,10,13,10, 7,10,10,
-	11,11,14,11,14,11,10,12,11,11,11,14,14,15,14,10,
-	11,12,13,14,15,11,14,11, 7,10, 9,10,11,12, 9,12,
-	10,10,11,11,10,10,12,12,13,12, 9,12,10,12,13,12,
-	10,12,10,
-};
-
-static const static_codebook _44p6_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p6_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p6_1[] = {
-	 2, 6, 6, 6, 7, 8, 6, 8, 7, 6, 7, 7, 7, 7, 8, 7,
-	 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 7, 6, 8, 8, 8, 9,
-	 9, 8, 9, 9, 8, 9, 9, 9, 9,10, 9,10,10, 8, 9, 9,
-	 9,10,10, 9,10, 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8,
-	 9, 9, 9, 9,10, 9,10,10, 8, 9, 9, 9,10, 9, 9,10,
-	 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,10,
-	 9, 9,10, 8, 9, 9, 9,10, 9, 9,10, 9, 7, 8, 8, 8,
-	 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9,
-	 9, 9,10, 9, 9, 9, 9, 7, 9, 9, 9, 9,10, 9,10, 9,
-	 9, 9, 9, 9, 9,10,10,10,10, 9, 9, 9,10,10,10, 9,
-	10, 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,
-	10, 9,10,10, 8, 9, 9, 9,10, 9, 9,10, 9, 7, 9, 9,
-	 9, 9,10, 9,10, 9, 9, 9, 9, 9, 9,10,10,10,10, 9,
-	 9, 9,10,10,10, 9,10, 9, 7, 8, 8, 8, 9, 9, 8, 9,
-	 9, 8, 9, 9, 9, 9,10, 9, 9,10, 8, 9, 8, 9, 9, 9,
-	 9,10, 9,
-};
-
-static const static_codebook _44p6_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p6_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p6_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p6_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p7_0,
-	1, -513979392, 1633504256, 2, 0,
-	(long *)_vq_quantlist__44p6_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p6_p7_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p6_p7_1[] = {
-	 1, 4, 5, 5,10,10, 5,10,10, 5,10,10,10,10,10,10,
-	10,10, 5,10,10,10,10,10,10,10,10, 7,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10, 6,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10, 9,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
-	11,11,11,
-};
-
-static const static_codebook _44p6_p7_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p6_p7_1,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p6_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p6_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p6_p7_2[] = {
-	 1, 2, 3, 4, 5, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p6_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p6_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p6_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p6_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p6_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p6_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p6_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p6_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p6_short[] = {
-	 2, 8,13,15,16,18,21,22, 5, 4, 6, 8,10,12,17,21,
-	 9, 5, 5, 6, 8,11,15,19,11, 6, 5, 5, 6, 7,12,14,
-	14, 8, 7, 5, 4, 4, 9,11,16,11, 9, 7, 4, 3, 7,10,
-	22,15,14,12, 8, 7, 9,11,21,16,15,12, 9, 5, 6, 8,
-};
-
-static const static_codebook _huff_book__44p6_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p6_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p7_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p7_l0_0[] = {
-	 2, 4, 4, 7, 7, 8, 8,10,10,11,11,12,12, 4, 5, 5,
-	 7, 7, 9, 9,11, 9,12,11,12,12, 4, 5, 5, 7, 7, 9,
-	 9, 9,10,10,11,12,12, 7, 7, 7, 7, 8, 9, 8,11, 5,
-	12, 6,12,10, 7, 7, 7, 8, 7, 8, 9, 5,11, 6,12,10,
-	12, 8, 9, 9, 9, 9,10,10,11, 7,11, 7,12, 9, 8, 9,
-	 8, 9, 9,10,10, 7,11, 7,11, 9,11,10,10,10,10,10,
-	10,10,11,10,11, 8,11, 9,10,10,10,10,10,10,10,10,
-	11, 8,10, 9,11,10,11,11,11,11,11,10,11,10,12,10,
-	12,11,10,11,11,11,11,10,11,10,11,10,12,11,12,11,
-	12,12,12,12,12,12,12,12,12,12,13,12,11,12,11,12,
-	12,12,12,12,11,12,11,12,13,
-};
-
-static const static_codebook _44p7_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p7_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p7_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p7_l0_1[] = {
-	 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p7_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p7_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p7_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p7_l1_0[] = {
-	54,
-	29,
-	79,
-	0,
-	108,
-};
-
-static const long _vq_lengthlist__44p7_l1_0[] = {
-	 1, 2, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44p7_l1_0 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p7_l1_0,
-	1, -514516992, 1620639744, 7, 0,
-	(long *)_vq_quantlist__44p7_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p7_lfe[] = {
-	 2, 3, 1, 3,
-};
-
-static const static_codebook _huff_book__44p7_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p7_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p7_long[] = {
-	 2, 7,14,16,17,17,18,20, 6, 3, 5, 8,10,11,13,15,
-	13, 5, 3, 5, 8, 9,11,12,15, 7, 4, 3, 5, 7, 9,11,
-	16,10, 7, 5, 6, 7, 9,10,17,11, 8, 7, 7, 6, 8, 8,
-	19,13,11, 9, 9, 8, 8, 9,20,14,13,11,10, 8, 9, 9,
-};
-
-static const static_codebook _huff_book__44p7_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p7_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p7_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p1_0[] = {
-	 2, 5, 5, 4, 7, 7, 4, 7, 7, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 6, 7, 8, 8, 9,
-	10, 8, 9,10, 8, 9,10,10,10,12,10,11,11, 8,10,10,
-	10,11,12,10,11,11, 6, 8, 7, 8,10, 9, 8,10, 9, 8,
-	10,10,10,11,11,10,12,11, 8,10, 9,10,11,11,10,12,
-	10, 5, 8, 8, 8,10,10, 8,10,10, 7, 9,10, 9,10,11,
-	 9,11,11, 8,10,10,10,11,12,10,12,11, 7, 9, 9, 9,
-	10,11, 9,11,11, 9, 9,11,10,11,12,11,11,12, 9,11,
-	11,11,12,12,11,12,12, 7, 9, 9,10,11,11,10,12,11,
-	 9,11,10,11,11,12,11,13,12,10,11,11,12,13,13,11,
-	13,11, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
-	12,10,12,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	10,11,12,10,11,11,10,11,11,11,11,13,12,13,13, 9,
-	10,11,11,12,13,11,12,11, 7, 9, 9, 9,11,11, 9,11,
-	10, 9,11,11,11,12,12,11,12,12, 9,11, 9,11,12,11,
-	10,12,11,
-};
-
-static const static_codebook _44p7_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p7_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p7_p2_0[] = {
-	 4, 6, 6, 9, 9, 6, 8, 8,10,10, 6, 8, 8,10,10, 8,
-	10,10,12,13, 8,10,10,13,12, 6, 8, 8,10,10, 8, 8,
-	 9,10,11, 8, 9, 9,11,11,10,10,11,12,13,10,11,11,
-	13,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 8, 9, 8,11,
-	10,10,11,11,13,13,10,11,10,13,12, 9,10,10,12,12,
-	10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,13,
-	13,13,15,14, 9,10,10,12,12,10,11,11,13,13,10,11,
-	10,13,12,12,13,13,14,15,12,13,12,15,12, 6, 8, 8,
-	10,11, 8, 9,10,11,12, 8, 9, 9,11,11,10,11,12,13,
-	14,10,11,11,13,13, 8, 9, 9,11,12, 9,10,11,12,13,
-	 9,10,10,12,13,11,12,13,13,15,11,12,12,14,14, 8,
-	 9, 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,
-	13,14,15,11,12,12,14,13,10,11,12,13,14,11,12,13,
-	13,15,12,13,13,14,14,13,13,14,14,16,14,15,14,16,
-	15,10,12,11,14,13,12,12,13,14,14,11,12,12,14,14,
-	14,14,15,15,16,13,14,14,16,14, 6, 8, 8,11,10, 8,
-	 9, 9,11,11, 8,10, 9,12,11,10,11,11,13,13,10,12,
-	11,14,13, 8, 9, 9,12,11, 9,10,10,12,13, 9,11,10,
-	13,12,11,12,12,14,14,11,13,12,15,14, 8, 9, 9,12,
-	11, 9,10,10,13,12, 9,11,10,13,12,11,12,12,14,14,
-	11,13,12,15,13,10,11,12,13,14,11,12,13,13,14,12,
-	13,12,14,14,13,13,14,14,16,14,15,14,16,16,10,12,
-	11,14,13,12,13,13,14,14,11,13,12,15,13,14,14,15,
-	16,16,13,14,13,16,14, 9,10,11,12,13,11,11,12,13,
-	14,11,11,12,13,14,13,13,14,14,16,13,14,14,15,15,
-	11,11,12,13,14,12,12,13,13,15,12,13,13,14,15,14,
-	14,15,15,17,14,14,15,16,16,11,12,12,13,14,12,12,
-	13,14,15,12,13,12,14,15,14,14,15,15,17,14,15,14,
-	16,16,13,14,14,15,16,14,14,15,15,17,14,15,15,16,
-	16,15,16,17,16,18,16,17,16,17,17,13,14,14,16,15,
-	14,15,15,16,16,14,15,14,16,15,16,16,17,17,18,16,
-	16,16,17,16, 9,11,10,13,12,11,12,11,14,13,11,12,
-	11,14,13,13,14,14,16,15,13,14,13,16,14,11,12,12,
-	14,13,12,12,13,14,14,12,13,13,15,14,14,14,15,16,
-	16,14,15,14,17,15,11,12,11,14,13,12,13,13,15,14,
-	12,13,12,15,13,14,15,14,16,16,14,15,14,17,15,13,
-	14,14,15,16,14,14,15,16,16,14,15,15,16,16,15,16,
-	16,16,17,16,16,16,17,17,13,14,14,16,15,14,15,15,
-	17,16,14,15,14,17,15,16,17,17,17,17,16,16,16,18,
-	16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
-	10,11,11,13,14,10,11,11,14,13, 8, 9, 9,11,12, 9,
-	10,10,12,13, 9,10,10,13,12,11,11,12,13,15,11,12,
-	12,15,14, 8, 9, 9,12,11, 9,10,11,12,13, 9,11,10,
-	13,12,11,12,12,14,15,11,13,12,15,14,10,11,11,13,
-	14,11,12,12,13,14,11,12,12,14,14,13,13,14,14,16,
-	13,14,14,16,15,11,12,11,14,13,12,13,13,14,14,11,
-	13,12,14,13,14,14,15,16,16,13,14,14,16,14, 8, 9,
-	 9,11,12, 9,10,10,12,13, 9,10,10,13,12,11,12,12,
-	14,15,11,12,12,14,14, 9, 9,10,11,13,10,10,12,12,
-	14,10,10,11,13,13,12,12,13,14,16,12,12,13,15,15,
-	 9,10,10,13,12,10,11,11,13,14,10,12,11,14,13,12,
-	13,13,15,15,12,13,13,15,15,11,11,12,13,15,12,12,
-	13,13,15,12,13,13,14,15,14,14,15,15,17,14,15,15,
-	16,16,11,13,12,15,14,13,13,13,15,15,12,14,13,15,
-	14,15,15,15,16,16,14,15,15,17,15, 7, 9, 9,12,11,
-	 9,10,10,12,12, 9,11,10,13,12,11,12,12,14,14,11,
-	13,12,15,14, 9,10,10,12,12,10,10,11,12,13,10,11,
-	11,14,13,12,12,13,14,15,12,13,13,15,14, 9,10,10,
-	12,12,10,11,11,13,13,10,11,10,14,12,12,13,13,15,
-	15,12,13,12,15,13,11,12,12,14,14,12,12,13,14,15,
-	12,13,13,15,15,14,13,14,13,16,14,15,15,16,16,11,
-	12,12,14,14,13,13,14,15,15,12,13,12,15,14,15,15,
-	15,16,16,14,15,14,17,14,10,11,12,13,14,11,12,13,
-	14,15,11,12,12,14,15,13,14,15,15,17,14,14,14,16,
-	16,11,12,13,12,15,12,12,14,13,16,13,13,14,13,16,
-	14,14,15,14,17,15,15,15,15,17,11,13,12,15,15,13,
-	13,14,15,16,12,14,13,16,15,15,15,15,17,17,15,15,
-	15,17,16,14,14,15,14,16,14,14,16,14,17,15,15,15,
-	14,17,16,16,17,15,18,17,17,17,16,18,14,15,15,17,
-	16,15,16,16,17,17,15,16,15,17,16,17,17,17,18,18,
-	16,17,16,18,17,10,11,11,14,13,11,12,12,14,14,11,
-	13,12,15,14,14,14,14,16,16,14,15,14,16,15,11,12,
-	12,15,13,12,13,13,15,14,13,14,13,16,14,14,15,15,
-	16,16,15,16,15,17,16,11,13,12,15,14,13,13,14,15,
-	15,12,14,13,16,14,15,15,15,17,17,14,16,15,17,16,
-	14,14,14,16,15,14,15,15,16,16,15,16,15,17,16,16,
-	16,16,16,17,16,17,17,18,17,14,15,15,16,16,15,15,
-	16,17,16,14,15,15,17,16,17,17,17,18,18,16,17,16,
-	18,16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
-	11,10,11,12,13,14,10,11,11,14,13, 8, 9, 9,11,12,
-	 9,10,11,12,13, 9,11,10,13,12,11,12,13,14,15,11,
-	12,12,15,14, 8, 9, 9,12,11, 9,10,10,12,13, 9,10,
-	10,13,12,11,12,12,14,15,11,12,12,14,13,11,11,12,
-	13,14,11,12,13,13,15,12,13,13,14,14,13,14,14,14,
-	16,14,15,14,16,16,10,11,11,14,13,11,12,12,14,14,
-	11,12,12,14,13,13,14,14,15,16,13,14,13,16,14, 7,
-	 9, 9,11,11, 9,10,11,12,13, 9,10,10,12,12,11,12,
-	13,14,15,11,12,12,14,14, 9,10,10,12,12,10,10,11,
-	12,13,10,11,11,13,13,12,12,13,13,15,12,13,13,15,
-	15, 9,10,10,12,12,10,11,11,13,13,10,11,10,13,12,
-	12,13,13,14,15,12,13,12,15,13,11,12,12,14,14,12,
-	12,13,14,15,13,14,13,15,15,14,13,15,13,16,15,15,
-	15,16,16,11,12,12,14,14,12,13,13,14,15,12,13,12,
-	15,14,14,15,15,16,17,13,14,13,16,13, 8, 9, 9,12,
-	11, 9,10,10,12,13, 9,10,10,13,12,11,12,12,14,15,
-	11,12,12,15,14, 9,10,10,12,13,10,11,12,13,14,10,
-	11,11,14,13,12,13,13,15,15,12,13,13,15,15, 9,10,
-	 9,13,11,10,11,10,13,13,10,12,10,14,12,12,13,12,
-	15,15,12,13,12,15,14,11,12,13,14,15,12,13,14,14,
-	15,13,13,13,15,15,14,15,15,15,17,15,15,15,16,16,
-	11,12,11,15,13,12,13,13,15,14,12,13,12,16,13,14,
-	15,15,16,16,14,15,14,17,14,10,11,11,13,14,11,12,
-	13,14,15,11,12,12,14,14,14,14,15,15,17,14,14,14,
-	15,16,11,12,13,14,15,12,13,14,14,16,13,14,13,15,
-	15,14,15,16,15,17,15,15,15,17,17,11,12,12,13,15,
-	13,13,14,14,16,12,13,13,14,15,15,15,15,16,17,14,
-	15,15,16,16,14,15,15,16,16,14,15,15,16,17,15,15,
-	16,16,17,16,16,17,16,18,17,17,17,18,18,14,14,15,
-	15,16,15,15,15,16,17,14,15,15,16,16,16,17,17,17,
-	18,16,16,16,17,16,10,11,11,14,13,11,13,12,15,14,
-	11,13,12,15,14,14,15,14,16,16,13,15,14,17,15,11,
-	12,13,15,15,12,13,14,15,16,13,14,13,16,15,15,15,
-	15,16,17,15,15,15,17,16,11,13,11,15,12,13,14,13,
-	16,13,12,14,12,16,13,15,15,15,17,15,14,16,14,17,
-	14,14,15,15,16,17,15,15,16,16,17,15,16,15,17,17,
-	16,16,17,17,18,16,17,17,18,18,14,15,14,17,13,15,
-	16,15,17,15,15,16,15,17,14,16,17,16,18,16,16,17,
-	16,18,15, 9,11,11,13,13,10,12,12,14,14,11,12,12,
-	14,14,13,14,14,15,16,13,14,14,16,16,10,11,12,14,
-	14,11,12,13,14,15,11,13,13,15,15,13,14,14,15,16,
-	14,15,15,16,16,11,12,12,14,14,12,13,13,15,15,12,
-	13,12,15,14,14,15,15,16,16,14,15,14,17,16,12,13,
-	13,15,16,13,13,14,15,16,13,14,14,16,16,14,15,16,
-	16,17,15,16,16,17,17,13,14,14,16,15,14,15,15,17,
-	16,14,15,14,17,15,16,16,17,17,17,16,16,16,18,16,
-	10,11,12,14,14,11,12,13,14,15,11,13,12,15,15,13,
-	14,15,16,16,14,15,15,17,16,11,11,13,14,15,12,12,
-	14,14,16,12,13,14,15,15,14,14,15,16,17,15,15,15,
-	17,17,12,13,12,15,15,13,14,14,16,15,13,14,13,16,
-	15,15,16,15,17,17,15,16,15,17,16,13,12,15,14,16,
-	14,13,15,14,17,14,13,15,15,17,15,14,17,15,18,16,
-	15,17,17,18,14,15,15,17,16,15,16,16,17,17,15,16,
-	15,17,16,16,17,17,18,18,16,17,16,18,17,10,11,11,
-	14,14,11,12,12,14,15,11,13,12,15,14,13,14,14,16,
-	16,14,15,14,16,16,11,12,12,14,14,12,12,13,15,15,
-	12,13,13,15,15,14,14,15,16,16,14,15,15,17,16,11,
-	12,12,15,15,13,13,13,15,15,12,13,13,15,15,15,15,
-	15,17,17,14,15,15,17,16,13,14,13,16,15,14,14,14,
-	16,16,14,15,14,17,16,15,15,16,16,17,16,17,16,18,
-	17,14,15,15,16,16,15,15,15,17,17,14,15,15,17,16,
-	16,17,17,18,18,16,17,16,18,16,12,13,13,15,15,13,
-	14,14,16,16,13,14,14,16,16,14,15,16,16,18,15,16,
-	16,17,17,13,13,14,14,16,14,14,15,15,17,14,14,15,
-	15,17,15,15,17,15,18,16,16,17,17,18,13,14,14,16,
-	16,14,15,15,16,17,14,15,15,17,16,16,17,16,17,18,
-	16,17,16,18,17,15,14,16,13,18,16,15,17,14,18,16,
-	15,17,14,18,17,16,18,15,19,17,17,18,16,19,15,16,
-	16,17,17,16,17,17,18,18,16,17,16,18,17,18,18,18,
-	19,18,17,18,17,19,17,11,12,12,15,15,13,13,14,15,
-	16,13,14,13,16,15,15,15,15,16,17,15,16,15,17,16,
-	12,13,13,15,15,13,13,14,15,16,14,15,14,16,15,15,
-	15,16,16,17,16,16,16,18,17,12,13,13,15,15,14,14,
-	15,16,16,13,14,13,16,15,16,16,16,17,17,15,16,15,
-	18,16,15,15,15,17,15,14,15,15,16,16,16,17,16,17,
-	16,16,16,17,16,17,17,18,17,19,18,15,15,16,17,17,
-	16,16,16,17,17,15,16,15,17,16,17,18,18,18,18,16,
-	17,16,18,16, 9,11,11,13,13,11,12,12,14,14,10,12,
-	12,14,14,13,14,14,15,16,13,14,14,16,15,11,12,12,
-	14,14,12,12,13,14,15,12,13,13,15,15,14,14,15,16,
-	17,14,15,15,16,16,10,12,11,14,14,11,13,13,15,15,
-	11,13,12,15,14,14,14,15,16,16,13,14,14,16,15,13,
-	14,14,15,16,14,14,15,15,17,14,15,15,16,17,16,16,
-	16,16,18,16,16,17,17,17,12,13,13,16,15,13,14,14,
-	16,16,12,14,13,16,15,15,16,16,17,17,14,16,15,17,
-	16,10,11,11,14,14,11,12,13,14,15,11,12,12,15,14,
-	14,14,15,16,16,13,14,14,16,16,11,12,12,14,15,12,
-	13,14,15,15,13,13,13,15,15,14,15,15,16,17,15,15,
-	15,16,17,11,12,12,14,14,12,13,13,15,15,12,13,12,
-	15,15,14,15,15,16,17,14,15,14,16,16,14,14,15,16,
-	16,14,15,15,16,17,15,16,15,17,17,16,16,17,16,18,
-	16,17,17,18,18,13,13,14,15,16,14,14,15,16,17,14,
-	14,14,16,15,16,16,17,17,18,15,16,15,17,16,10,12,
-	11,14,14,11,13,13,15,15,11,13,12,15,15,14,15,15,
-	16,16,13,15,14,16,16,12,12,13,15,15,13,13,14,15,
-	16,13,14,14,16,15,15,15,16,16,17,15,15,15,17,17,
-	11,13,11,15,14,12,14,13,16,15,12,14,12,16,14,15,
-	15,15,17,17,14,15,14,17,15,14,15,15,16,17,15,15,
-	16,16,17,15,16,16,17,17,16,16,17,17,18,16,17,17,
-	18,18,13,14,12,16,14,14,15,13,17,15,14,15,13,17,
-	14,16,17,15,18,17,15,17,14,18,15,11,12,12,14,15,
-	13,13,14,15,16,13,14,13,16,15,15,15,16,16,17,15,
-	15,15,16,16,12,13,13,15,15,13,13,14,15,16,14,15,
-	14,16,16,15,15,16,16,18,16,16,16,18,17,12,13,13,
-	15,15,14,14,15,15,16,13,14,13,15,15,16,16,16,17,
-	18,15,16,15,17,16,15,16,15,17,16,15,15,16,16,17,
-	16,17,16,17,17,16,16,17,16,18,17,18,18,18,18,14,
-	15,15,15,17,16,15,17,16,17,14,15,15,16,16,17,17,
-	18,18,19,16,16,16,17,16,12,13,13,15,15,13,14,14,
-	16,16,13,14,14,16,16,15,16,16,17,17,15,16,15,18,
-	16,13,14,14,16,16,14,15,15,16,17,14,15,15,17,16,
-	16,16,17,17,18,16,17,16,18,18,13,14,13,16,14,14,
-	15,14,17,15,14,15,14,17,14,16,17,16,18,17,15,17,
-	15,18,15,15,16,16,17,18,16,16,17,17,18,16,17,17,
-	17,18,17,17,18,18,19,17,18,18,19,18,15,16,14,17,
-	13,16,17,15,18,14,16,17,15,18,14,18,18,17,19,16,
-	17,18,16,19,15,
-};
-
-static const static_codebook _44p7_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p7_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p7_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p3_0[] = {
-	 2, 5, 5, 4, 7, 7, 4, 7, 7, 5, 7, 8, 7, 8,10, 8,
-	 9, 9, 5, 7, 7, 8, 9, 9, 7,10, 8, 5, 7, 8, 8, 9,
-	10, 8,10,10, 8, 9,10,10,10,12,10,12,12, 8,10,10,
-	10,12,12,10,12,11, 5, 8, 7, 8,10,10, 8,10, 9, 8,
-	10,10,10,11,12,10,12,12, 8,10, 9,10,12,12,10,12,
-	10, 5, 8, 8, 7,10,10, 8,10,10, 7, 9,10, 9,10,12,
-	10,12,12, 8,10,10,10,12,12,10,12,11, 7, 9,10, 9,
-	11,12,10,12,11, 9, 9,12,11,10,14,12,12,13,10,12,
-	11,12,13,13,11,14,12, 7,10, 9,10,11,11,10,12,11,
-	 9,11,11,11,11,13,12,14,13,10,12,12,12,14,14,11,
-	14,12, 5, 8, 8, 8,10,10, 7,10,10, 8,10,10,10,11,
-	12,10,12,12, 7,10, 9,10,12,12, 9,12,10, 7, 9,10,
-	10,11,12,10,11,11,10,12,12,11,12,14,12,14,14, 9,
-	11,11,12,13,14,11,13,11, 7,10, 9,10,11,12, 9,12,
-	11,10,11,12,11,12,14,12,13,13, 9,12, 9,12,13,12,
-	11,14,10,
-};
-
-static const static_codebook _44p7_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p7_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p3_1[] = {
-	 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7,
-	 8, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8,
-	 8, 8, 8, 8, 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9,
-	 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 7, 8, 8, 8,
-	 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8,
-	 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8,
-	 9, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-	 9, 8, 8, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
-	 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8, 8, 8, 8, 9,
-	 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9,
-	 8, 9, 8,
-};
-
-static const static_codebook _44p7_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p7_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p7_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p4_0[] = {
-	 1, 5, 5, 5, 7, 8, 5, 8, 7, 5, 7, 8, 7, 8,10, 8,
-	10,10, 5, 8, 7, 8,10,10, 7,10, 8, 6, 8, 9, 9,10,
-	12, 9,11,11, 9,10,11,11,11,13,11,13,13, 9,11,11,
-	11,12,13,11,13,11, 6, 9, 8, 9,11,11, 9,12,10, 9,
-	11,11,11,11,13,11,13,13, 9,11,10,11,13,13,11,13,
-	11, 6, 9, 9, 8,10,11, 9,12,11, 8,10,11,10,11,13,
-	11,13,13, 9,11,11,11,13,12,11,13,11, 8,10,10, 9,
-	11,12,10,12,12,10,10,12,11,11,14,12,13,14,10,12,
-	12,12,13,13,11,14,11, 8,11,10,11,12,13,11,14,12,
-	10,12,11,11,12,14,13,15,14,10,12,12,13,14,15,12,
-	14,12, 5, 9, 9, 9,11,12, 8,11,10, 9,11,11,11,11,
-	13,11,12,13, 8,11,10,11,13,13,10,13,11, 8,10,11,
-	11,12,14,11,13,12,10,12,12,12,12,14,14,15,14,10,
-	11,12,13,14,15,11,14,12, 8,10,10,10,12,12, 9,12,
-	11,10,12,12,11,11,14,12,13,13,10,12,10,12,14,13,
-	11,13,11,
-};
-
-static const static_codebook _44p7_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p7_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p7_p4_1[] = {
-	 7, 8, 8,10,10, 8, 9, 9,10,11, 8, 9, 9,10,10, 9,
-	10,10,11,11, 9,10,10,11,11, 8, 9, 9,10,10, 9, 9,
-	10,11,11, 9,10,10,11,11,10,10,11,11,11,10,11,11,
-	11,11, 8, 9, 9,10,10, 9,10,10,11,11, 9,10, 9,11,
-	11,10,11,11,11,11,10,11,10,11,11,10,10,10,11,11,
-	10,11,11,11,11,10,11,11,11,11,11,11,11,11,12,11,
-	11,11,11,12,10,10,10,11,11,10,11,11,11,11,10,11,
-	11,11,11,11,11,11,12,11,11,11,11,12,11, 8, 9,10,
-	11,11, 9,10,11,11,11, 9,10,10,11,11,10,11,11,12,
-	12,10,11,11,12,12,10,10,10,11,11,10,10,11,11,12,
-	10,11,11,12,12,11,11,12,12,12,11,11,12,12,12,10,
-	10,10,11,11,10,11,11,12,12,10,11,11,12,11,11,12,
-	12,12,12,11,12,11,12,12,11,11,11,11,12,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12, 8,10, 9,11,11, 9,
-	10,10,11,11, 9,10,10,11,11,10,11,11,12,12,10,11,
-	11,12,12,10,10,10,11,11,10,11,11,12,12,10,11,11,
-	12,12,11,11,12,12,12,11,12,12,12,12,10,10,10,11,
-	11,10,11,11,12,12,10,11,10,12,11,11,12,11,12,12,
-	11,12,11,12,12,11,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
-	11,12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,10,11,11,11,12,11,11,12,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
-	12,13,12,13,12,12,12,13,13,11,12,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,13,12,12,12,12,12,12,12,12,12,13,12,12,13,13,
-	13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,12,
-	12,12,13,13,13,12,12,12,13,12,12,13,13,13,13,12,
-	13,13,13,13,10,11,11,12,11,11,11,11,12,12,11,12,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,13,11,12,11,12,12,12,12,12,12,12,
-	11,12,11,12,12,12,12,12,13,13,12,12,12,13,12,12,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,13,
-	13,13,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
-	13,13,12,13,12,13,12,12,13,13,13,13,13,13,13,13,
-	13, 8,10,10,11,11, 9,10,10,11,11, 9,10,10,11,11,
-	10,11,11,12,12,10,11,11,12,12, 9,10,10,11,11,10,
-	10,11,11,12,10,11,11,12,12,11,11,12,12,12,11,11,
-	12,12,12,10,10,10,11,11,10,11,11,12,12,10,11,10,
-	12,11,11,12,11,12,12,11,12,11,12,12,11,11,11,12,
-	12,11,11,12,12,12,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,12,12,11,11,11,12,11,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12, 9,10,
-	10,11,11,10,11,11,11,12,10,11,11,12,12,11,11,11,
-	12,12,11,11,11,12,12,10,10,11,11,12,11,11,12,12,
-	12,11,11,11,12,12,11,11,12,12,12,11,12,12,12,12,
-	10,11,11,12,12,11,11,11,12,12,11,12,11,12,12,11,
-	12,12,12,12,11,12,12,12,12,11,11,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
-	12,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,12, 9,10,10,11,11,
-	10,11,11,12,12,10,11,11,12,11,11,12,11,12,12,11,
-	12,11,12,12,10,11,11,12,12,11,11,11,12,12,11,12,
-	11,12,12,11,12,12,12,12,12,12,12,12,12,10,11,11,
-	12,12,11,12,11,12,12,11,12,11,12,12,12,12,12,13,
-	12,12,12,12,12,12,11,12,11,12,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,11,
-	12,12,12,12,12,12,12,13,12,11,12,12,12,12,12,12,
-	12,13,12,12,12,12,13,12,10,11,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	13,11,11,12,12,12,12,12,12,12,13,12,12,12,12,12,
-	12,12,13,12,13,12,12,13,13,13,11,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,12,12,13,12,13,13,12,13,
-	12,13,13,12,12,12,12,12,12,12,13,12,13,12,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,
-	13,12,13,13,13,13,12,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,
-	12,12,12,12,12,12,12,13,12,12,12,13,12,12,12,13,
-	13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,
-	12,12,12,12,12,12,13,13,13,13,12,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,12,12,12,13,12,12,13,
-	13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13, 8,10,10,11,11, 9,10,10,11,11, 9,10,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,10,10,10,11,11,
-	10,11,11,11,12,10,11,11,12,12,11,11,12,12,12,11,
-	11,12,12,12, 9,10,10,11,11,10,11,11,12,12,10,11,
-	10,12,11,11,12,11,12,12,11,12,11,12,12,11,11,11,
-	12,12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,11,11,12,11,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,12,12,12,12,12, 9,
-	10,10,11,11,10,11,11,12,12,10,11,11,12,12,11,11,
-	12,12,12,11,12,12,12,12,10,11,11,12,12,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,10,11,11,12,12,11,11,12,12,12,11,11,11,12,12,
-	12,12,12,12,12,11,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,12,13,12,12,
-	12,13,12,11,12,12,12,12,12,12,12,12,12,11,12,12,
-	12,12,12,12,12,13,12,12,12,12,13,12, 9,10,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,11,11,11,12,12,
-	11,12,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
-	11,11,12,12,11,12,12,12,12,11,12,12,12,12,10,11,
-	10,12,11,11,11,11,12,12,11,12,11,12,12,11,12,12,
-	12,12,11,12,11,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
-	11,12,11,12,12,12,12,12,12,12,11,12,12,12,12,12,
-	12,12,13,12,12,12,12,13,12,10,11,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	13,12,12,13,13,13,12,13,13,13,13,11,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,12,12,13,13,13,13,12,
-	13,12,13,13,12,12,12,12,13,12,13,13,13,13,12,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,
-	12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,13,
-	13,13,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
-	11,12,12,12,12,12,12,12,13,13,12,12,12,13,12,11,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,12,
-	13,13,13,12,13,13,13,13,11,12,11,12,12,12,12,12,
-	13,12,12,12,12,13,12,12,13,12,13,13,12,13,12,13,
-	12,12,12,12,12,13,12,12,13,13,13,12,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,
-	13,13,13,13,12,13,12,13,12,13,13,13,13,13,13,13,
-	13,13,13,10,11,11,12,12,10,11,11,12,12,10,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,12,
-	12,11,11,12,12,12,11,12,12,12,12,12,12,12,13,13,
-	12,12,12,13,13,11,11,11,12,12,11,12,12,12,12,11,
-	12,11,13,12,12,12,12,13,13,12,12,12,13,13,11,12,
-	12,12,12,12,12,12,12,13,12,12,12,13,13,12,12,13,
-	13,13,12,13,12,13,13,11,12,12,12,12,12,12,12,13,
-	12,12,12,12,13,12,12,13,13,13,13,12,13,13,13,13,
-	10,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,13,11,11,12,12,12,11,12,
-	12,12,13,12,12,12,13,13,12,12,13,13,13,12,12,13,
-	13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,13,
-	13,12,13,13,13,13,12,13,12,13,13,12,12,12,12,13,
-	12,12,13,12,13,12,12,13,13,13,12,12,13,13,13,12,
-	13,13,13,13,12,12,12,12,13,12,12,13,13,13,12,12,
-	12,13,13,13,13,13,13,13,12,13,13,13,13,10,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,13,11,12,12,12,12,11,12,12,12,13,
-	12,12,12,13,13,12,12,13,13,13,12,13,13,13,13,11,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,13,
-	12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,12,
-	13,13,12,13,12,13,13,12,13,13,13,13,13,13,13,13,
-	13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,
-	13,13,13,13,13,13,13,13,13,13,11,11,11,12,12,11,
-	12,12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,
-	12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,
-	13,13,12,12,13,13,13,12,12,13,13,13,11,12,12,12,
-	12,12,12,12,13,13,12,12,12,13,13,12,13,13,13,13,
-	12,13,12,13,13,12,12,12,12,12,12,12,13,12,13,12,
-	13,13,13,13,12,13,13,12,13,13,13,13,13,13,12,12,
-	12,12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,
-	13,13,13,13,13,13,13,10,11,11,12,12,11,12,12,12,
-	13,11,12,12,13,12,12,12,12,13,13,12,12,12,13,13,
-	11,12,12,12,12,12,12,12,13,13,12,13,12,13,13,12,
-	12,13,13,13,12,13,13,13,13,11,12,12,12,13,12,12,
-	12,13,13,12,12,12,13,12,12,13,13,13,13,12,13,12,
-	13,13,12,12,12,12,12,12,12,13,13,13,12,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,
-	12,13,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
-	13,13,13,13,10,11,11,12,12,10,11,11,12,12,10,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
-	12,12,11,11,12,12,13,11,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,13,10,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,13,13,12,12,12,13,12,11,
-	12,12,12,12,12,12,12,12,13,12,12,12,13,13,12,12,
-	13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,
-	13,13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,
-	13,10,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,
-	12,12,12,13,12,12,12,13,13,12,12,13,13,13,12,12,
-	13,13,13,11,12,12,12,12,12,12,12,13,13,11,12,12,
-	13,12,12,13,13,13,13,12,13,12,13,13,12,12,12,12,
-	13,12,12,13,13,13,12,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,12,12,12,13,12,12,12,13,13,13,12,
-	12,12,13,13,13,13,13,13,13,12,13,13,13,13,10,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
-	13,13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,
-	13,12,12,12,13,13,12,12,13,13,13,12,12,13,13,13,
-	11,12,11,12,12,12,12,12,13,13,11,12,12,13,12,12,
-	13,12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,
-	13,13,13,12,13,12,13,13,12,13,13,13,13,13,13,13,
-	13,13,12,12,12,13,12,12,13,12,13,13,12,13,12,13,
-	13,13,13,13,13,13,12,13,12,13,13,10,11,11,12,12,
-	11,12,12,12,12,11,12,12,13,12,12,12,12,13,13,12,
-	12,12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,
-	12,13,13,12,12,13,13,13,12,13,13,13,13,11,12,12,
-	12,12,12,12,12,13,13,12,12,12,13,12,12,13,13,13,
-	13,12,13,12,13,13,12,12,12,12,13,12,12,13,13,13,
-	12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
-	12,12,12,12,12,13,13,13,13,12,13,12,13,13,13,13,
-	13,13,13,13,13,13,13,13,11,11,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,13,13,12,12,12,13,
-	13,11,12,12,12,12,12,12,12,13,13,12,12,12,13,13,
-	12,12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,12,12,13,12,13,13,12,13,
-	12,13,13,12,12,12,12,12,12,13,13,13,13,12,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,
-	12,12,13,13,13,13,12,13,12,13,12,13,13,13,13,13,
-	13,13,13,13,12,
-};
-
-static const static_codebook _44p7_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p7_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p7_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p7_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p7_p5_0[] = {
-	 2, 6, 6, 9, 9, 5, 7, 8,10,11, 5, 8, 7,11,10, 8,
-	10,11,12,13, 8,11,10,13,12, 6, 7, 8,10,11, 7, 8,
-	10,10,12, 8, 9, 9,12,11,10,10,12,11,14,10,11,12,
-	14,13, 6, 8, 7,11,10, 8, 9, 9,11,12, 7,10, 8,12,
-	10,10,12,12,13,14,10,12,10,14,11, 9,10,11,11,12,
-	10,10,11,11,13,11,12,12,13,13,12,11,13,11,15,13,
-	14,13,14,14, 9,11,10,12,11,11,12,12,13,13,10,11,
-	10,13,11,13,13,14,14,14,12,13,11,14,11, 7, 8, 9,
-	11,12, 9, 9,11,12,13, 9,10,10,13,12,11,12,13,13,
-	15,11,12,12,14,14, 9,10,10,12,13,10,10,12,12,14,
-	11,11,11,13,13,12,12,13,13,15,12,13,13,15,14, 9,
-	10,10,12,13,10,11,11,13,14,10,12,11,14,13,12,13,
-	13,14,15,12,13,13,15,14,12,12,13,13,14,12,13,13,
-	13,15,13,14,14,14,15,14,14,15,14,16,14,15,15,16,
-	16,12,13,13,14,14,13,13,14,15,14,12,13,13,15,14,
-	14,15,15,15,16,14,15,14,16,14, 7, 9, 8,12,11, 9,
-	10,10,12,13, 9,11, 9,13,12,11,12,12,14,14,11,13,
-	12,15,13, 9,10,10,13,12,10,11,12,13,14,10,12,11,
-	14,13,12,13,13,14,15,13,13,13,15,14, 9,10,10,13,
-	12,11,11,11,13,13,10,12,10,14,12,13,13,13,14,15,
-	12,13,12,15,13,12,13,13,14,14,12,13,13,14,15,13,
-	14,13,15,15,14,14,15,14,16,14,15,15,16,15,12,13,
-	12,14,13,13,13,13,15,14,12,13,13,15,13,14,15,15,
-	16,15,14,15,14,16,14,11,12,12,13,14,12,13,14,14,
-	15,12,13,13,14,15,14,14,15,15,16,14,15,15,16,16,
-	12,13,13,14,15,13,13,14,14,16,13,14,14,15,15,15,
-	15,16,15,17,15,15,15,16,16,12,13,13,14,15,13,14,
-	14,15,16,13,14,14,15,15,15,15,16,16,17,15,15,15,
-	17,16,14,15,15,16,16,15,15,16,15,16,15,16,16,16,
-	17,16,16,17,16,18,16,16,17,18,17,14,15,15,16,16,
-	15,16,16,16,17,15,16,15,17,16,16,17,17,17,18,16,
-	16,16,17,16,11,12,12,14,13,12,13,13,15,14,12,14,
-	13,15,14,14,15,15,16,16,14,15,14,16,15,12,13,13,
-	15,14,13,14,14,15,15,13,14,14,16,15,15,15,15,16,
-	16,15,16,15,17,16,12,13,13,15,14,13,14,14,15,15,
-	13,14,13,16,14,15,15,15,16,16,15,15,15,17,15,14,
-	15,15,16,16,15,15,15,16,16,15,16,16,17,17,16,16,
-	17,17,17,16,17,17,18,17,14,15,15,16,15,15,15,16,
-	16,16,15,15,15,17,15,17,17,17,18,17,16,17,16,18,
-	16, 6, 9, 9,12,12, 8,10,10,12,13, 9,11,10,13,12,
-	10,12,12,14,14,11,13,12,14,14, 8,10,10,12,12, 9,
-	10,11,12,14,10,11,11,13,13,12,12,13,13,15,12,13,
-	13,15,14, 9,10,10,13,13,10,11,11,13,13,10,12,10,
-	14,13,12,13,13,14,15,12,13,13,15,14,11,12,12,13,
-	14,12,12,13,13,15,12,13,13,14,14,13,13,14,13,16,
-	14,15,15,16,15,11,12,12,14,14,13,13,13,15,14,12,
-	13,13,15,14,14,15,15,16,15,14,14,14,16,14, 7, 9,
-	10,12,12, 9,10,11,13,13, 9,11,10,13,13,11,12,13,
-	14,15,12,13,13,15,14, 9,10,11,12,13,10,10,12,13,
-	14,11,11,12,14,14,12,12,14,14,15,13,13,13,15,15,
-	 9,11,11,13,13,11,12,12,14,14,10,12,10,14,13,13,
-	14,13,15,15,12,14,13,15,14,12,12,13,13,15,12,12,
-	14,13,15,13,14,14,15,15,14,14,15,14,17,14,15,15,
-	16,16,12,13,13,15,14,13,14,14,15,15,12,14,13,15,
-	14,14,15,15,16,16,14,15,14,16,14, 7,10,10,12,12,
-	10,11,11,12,13,10,12,10,14,12,12,13,13,14,15,12,
-	13,13,15,14, 9,11,10,13,12,10,10,12,12,14,11,13,
-	12,14,13,13,13,14,13,15,13,14,14,15,14,10,11,11,
-	13,13,12,12,12,13,14,10,12,10,14,12,13,14,14,15,
-	15,13,14,13,15,13,12,13,13,14,14,12,12,13,14,15,
-	13,14,14,15,15,13,13,14,13,15,14,15,15,16,16,12,
-	13,13,14,14,13,14,14,15,15,12,13,13,15,13,15,15,
-	15,16,16,13,14,13,16,13,11,12,13,14,14,12,13,14,
-	14,15,12,13,13,15,15,14,14,15,15,17,14,15,15,16,
-	16,12,13,14,14,15,13,13,14,14,16,13,14,14,15,16,
-	14,14,16,15,17,15,15,16,16,16,12,13,13,15,15,13,
-	14,14,15,16,13,14,14,15,16,15,15,16,17,17,15,16,
-	15,17,16,14,15,15,15,16,15,15,16,15,17,15,15,16,
-	16,17,16,16,16,16,18,16,16,17,17,17,14,15,15,16,
-	16,15,16,16,16,17,15,16,15,17,16,16,17,17,17,17,
-	16,17,16,18,17,11,12,12,14,14,13,13,14,14,15,13,
-	14,13,15,14,14,15,15,15,16,14,15,15,17,15,12,13,
-	13,15,14,13,13,14,15,15,14,15,14,16,15,15,15,15,
-	15,16,15,16,15,17,16,12,13,13,15,15,14,14,14,15,
-	16,13,14,13,16,15,15,15,16,16,17,15,16,15,17,15,
-	14,15,15,16,16,14,15,15,16,16,15,16,16,17,16,15,
-	15,16,15,17,16,17,17,18,17,14,15,15,16,16,15,16,
-	16,16,17,14,15,15,17,16,17,17,17,17,18,15,16,16,
-	18,15, 6, 9, 9,12,12, 9,10,11,12,13, 8,10,10,13,
-	12,11,12,13,14,14,10,12,12,14,13, 9,10,10,12,13,
-	10,10,12,13,14,10,11,11,13,13,12,13,13,14,15,12,
-	13,13,15,14, 8,10,10,12,12,10,11,11,13,13, 9,11,
-	10,13,13,12,13,13,14,15,12,13,12,15,13,11,12,12,
-	14,14,12,13,13,13,15,13,13,13,14,15,14,14,15,14,
-	16,14,15,15,15,15,11,12,12,14,13,12,13,13,15,14,
-	12,13,12,15,13,14,14,15,16,16,13,14,13,16,13, 7,
-	10,10,12,12,10,10,12,12,14,10,11,11,13,12,12,13,
-	13,13,15,12,13,13,15,14,10,11,11,13,13,10,10,12,
-	12,14,12,12,12,14,13,13,13,14,13,15,13,14,14,15,
-	14, 9,10,11,13,13,11,12,12,13,14,10,12,10,14,12,
-	13,13,14,14,15,13,13,12,15,13,12,13,13,14,14,12,
-	13,13,14,15,13,14,14,15,15,13,13,15,13,16,15,15,
-	15,16,16,12,13,13,14,14,13,14,14,15,15,12,13,12,
-	15,14,15,15,15,16,16,13,14,13,15,13, 7,10, 9,12,
-	12, 9,10,11,13,13, 9,11,10,13,13,11,13,13,14,15,
-	11,13,12,15,14, 9,11,11,13,13,10,10,12,13,14,11,
-	12,12,14,14,12,13,14,14,15,13,13,13,15,15, 9,11,
-	10,13,12,11,12,11,14,14,10,12,10,14,13,13,14,13,
-	15,15,12,14,12,15,14,12,13,13,14,15,13,13,14,14,
-	15,13,14,14,15,15,14,14,15,14,17,14,15,15,16,16,
-	12,13,12,15,13,13,14,14,15,15,12,14,13,15,13,14,
-	15,15,16,16,14,15,14,16,14,11,12,12,14,14,13,13,
-	14,14,15,13,14,13,15,15,14,15,15,16,17,14,15,15,
-	16,15,12,13,13,15,15,13,13,14,15,16,14,14,14,16,
-	15,15,15,16,15,17,15,16,15,17,16,12,13,13,14,15,
-	14,14,15,15,16,13,14,13,15,15,15,15,16,16,17,15,
-	15,15,16,15,14,15,15,16,16,14,15,15,16,17,15,16,
-	16,17,17,16,15,16,15,17,16,17,17,17,17,14,15,15,
-	15,16,15,15,16,16,17,14,15,15,16,16,16,16,17,17,
-	18,15,16,15,17,15,11,13,12,14,14,12,13,13,15,15,
-	12,14,13,15,14,14,15,15,16,16,14,15,14,16,15,12,
-	13,13,15,15,13,14,14,15,16,13,14,14,16,16,15,15,
-	16,16,17,15,16,15,17,16,12,13,13,15,14,13,14,14,
-	16,15,13,14,13,16,14,15,16,15,17,16,15,15,14,18,
-	15,14,15,15,16,16,15,15,16,16,17,15,16,15,17,16,
-	16,16,17,17,18,16,17,17,18,17,14,15,15,16,15,15,
-	16,15,17,16,15,15,15,17,15,16,17,17,18,17,16,17,
-	16,18,15,10,12,12,14,14,12,13,13,14,14,12,13,13,
-	14,14,13,14,14,15,15,13,14,14,16,15,11,12,13,14,
-	14,12,13,13,15,15,12,13,13,15,15,13,14,15,15,16,
-	14,15,15,16,16,12,13,13,14,14,13,13,14,15,15,13,
-	14,13,15,15,14,15,15,16,16,14,15,14,16,15,13,14,
-	14,15,15,13,14,14,15,16,14,14,15,16,16,14,15,15,
-	15,17,15,16,16,17,17,13,14,14,15,15,14,15,15,16,
-	16,14,15,15,16,16,15,16,16,16,17,15,16,15,17,16,
-	11,12,12,14,14,12,13,13,14,15,12,13,13,15,14,13,
-	14,14,15,16,13,14,14,16,15,12,13,13,14,15,13,13,
-	14,15,15,13,14,14,15,15,14,14,15,15,17,14,15,15,
-	16,16,12,13,13,15,15,13,14,14,15,15,13,14,13,15,
-	15,14,15,15,16,17,14,15,15,16,16,13,13,14,15,16,
-	14,14,15,15,16,14,15,15,16,16,15,15,16,15,18,15,
-	16,16,17,17,14,15,15,16,16,15,15,15,16,16,14,15,
-	15,17,16,16,16,16,17,17,15,16,16,17,16,10,12,12,
-	14,14,12,13,13,14,15,12,13,13,15,14,14,14,15,15,
-	16,14,15,14,16,15,12,13,13,15,14,13,13,14,15,15,
-	13,14,14,15,15,14,14,15,15,16,14,15,15,16,16,12,
-	13,13,15,15,13,14,14,15,16,13,14,13,15,14,15,15,
-	15,16,16,14,15,15,16,15,13,14,14,16,15,14,14,14,
-	15,16,14,15,15,16,16,15,15,16,15,17,16,17,16,17,
-	17,14,14,15,15,16,15,15,16,16,16,14,15,14,16,15,
-	16,16,16,17,17,15,16,15,17,15,11,13,13,14,15,13,
-	13,14,15,15,13,14,13,15,15,14,15,15,15,16,14,15,
-	15,17,15,13,13,14,15,15,13,14,15,15,16,14,14,14,
-	16,16,15,14,16,15,17,15,16,16,17,16,13,14,14,15,
-	15,14,14,14,16,16,13,15,14,16,15,15,15,16,17,17,
-	15,16,15,17,16,14,15,15,15,16,15,15,16,15,17,15,
-	16,16,16,17,16,16,17,15,18,16,17,17,17,17,14,15,
-	15,16,16,15,16,16,17,17,15,16,15,17,16,16,17,17,
-	18,18,16,17,15,18,16,10,12,12,14,14,13,13,14,14,
-	15,13,14,13,15,14,14,15,15,15,16,15,15,15,16,15,
-	12,13,13,15,14,12,12,14,14,15,14,15,14,16,15,15,
-	14,15,14,17,15,16,16,17,16,12,13,13,14,15,14,14,
-	15,15,16,13,14,12,16,14,15,16,16,16,17,15,16,14,
-	17,15,14,15,14,16,15,14,14,15,15,15,15,16,15,17,
-	16,15,14,16,14,16,16,17,17,18,17,14,14,15,15,16,
-	15,16,16,16,17,14,15,14,16,15,16,16,17,17,17,15,
-	16,14,17,14,10,12,12,14,13,12,13,13,14,14,11,13,
-	12,14,14,13,14,14,15,16,13,14,14,16,15,12,13,13,
-	14,14,13,13,14,15,15,13,14,13,15,15,14,14,15,15,
-	16,14,15,15,16,16,11,13,12,14,14,12,13,13,15,15,
-	12,13,13,15,15,14,15,15,16,16,13,14,14,16,15,13,
-	14,14,15,15,14,15,15,15,16,14,15,15,16,16,15,16,
-	16,16,17,16,16,16,17,17,13,14,14,15,15,14,15,15,
-	16,16,13,14,14,16,15,15,16,16,17,17,15,15,15,17,
-	15,11,12,12,14,14,12,13,13,14,15,12,13,13,15,14,
-	14,14,15,15,16,14,14,14,16,15,12,13,13,15,14,13,
-	13,14,15,15,13,14,14,16,15,14,15,15,15,16,15,15,
-	15,16,16,12,13,13,14,15,13,13,14,15,15,13,14,13,
-	15,15,15,15,15,16,16,14,15,14,16,15,14,14,15,16,
-	16,14,15,15,15,16,15,16,15,16,16,15,15,16,15,17,
-	16,16,16,17,17,13,14,14,15,16,14,15,15,16,16,14,
-	14,14,16,16,16,16,16,17,17,15,15,15,17,15,11,12,
-	12,14,14,12,13,13,14,15,12,13,13,15,14,14,14,14,
-	15,16,13,14,14,16,15,12,13,13,15,15,13,13,14,15,
-	16,13,14,14,15,15,14,15,15,16,17,14,15,15,17,16,
-	12,13,13,15,14,13,14,14,15,15,13,14,13,15,15,14,
-	15,15,16,16,14,15,14,17,15,14,15,15,16,16,14,15,
-	15,16,17,15,15,15,17,17,15,16,16,16,17,16,17,16,
-	17,17,13,15,14,16,15,14,15,15,16,16,14,15,14,16,
-	15,16,16,16,17,17,15,16,15,17,15,10,12,12,14,14,
-	13,13,14,14,15,13,14,13,15,14,14,15,15,15,17,14,
-	15,15,16,15,12,13,13,15,14,12,12,14,14,15,14,15,
-	14,16,15,15,14,16,15,17,15,16,16,17,16,12,13,13,
-	14,15,14,14,15,15,16,12,14,12,15,14,15,16,16,16,
-	17,15,16,14,17,14,14,15,14,16,16,14,14,15,15,16,
-	15,16,16,17,16,15,14,16,14,17,16,17,17,18,17,14,
-	14,15,15,16,15,15,16,16,17,14,15,14,16,15,16,17,
-	17,17,18,15,16,14,17,14,11,13,13,15,14,13,13,14,
-	15,15,12,14,13,15,15,14,15,15,15,17,14,15,14,16,
-	15,13,14,14,15,15,13,14,15,15,16,14,15,14,16,16,
-	15,15,16,16,17,15,16,16,17,17,13,14,13,15,15,14,
-	14,14,16,16,13,15,14,16,15,15,16,16,17,17,15,16,
-	14,17,15,15,15,15,16,17,15,15,16,16,17,15,16,16,
-	17,17,16,15,17,16,17,17,17,17,18,18,14,15,15,17,
-	15,15,16,16,17,16,15,16,15,17,15,16,17,17,17,17,
-	16,17,15,18,15,
-};
-
-static const static_codebook _44p7_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p7_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p7_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p7_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p7_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p7_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p7_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p7_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p6_0[] = {
-	 2, 5, 6, 5, 7, 8, 5, 8, 7, 5, 7, 7, 7, 7, 9, 8,
-	 9, 9, 5, 7, 7, 8, 9, 9, 7, 9, 7, 6, 8, 8, 8, 9,
-	10, 8, 9, 9, 8, 9,10, 9, 9,11,10,10,11, 8,10, 9,
-	10,10,11, 9,10,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 8,
-	 9,10, 9,10,10,10,11,10, 8,10, 9,10,11,10, 9,11,
-	 9, 6, 8, 8, 7, 9, 9, 8, 9, 9, 7, 9, 9, 9, 9,10,
-	 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9, 9,
-	10,10, 9,10,10, 9, 9,10,10, 9,11,10,11,11, 9,10,
-	10,10,11,11,10,11,10, 6, 9, 8, 9,10,10, 9,10, 9,
-	 8,10,10, 9, 9,10,10,11,11, 9,10,10,10,11,11, 9,
-	11, 9, 6, 8, 8, 8, 9, 9, 7, 9, 9, 8, 9, 9, 9, 9,
-	10, 9,10,10, 7, 9, 9, 9,10,10, 9,10, 9, 6, 8, 9,
-	 9, 9,10, 9,10,10, 9,10,10, 9, 9,11,10,11,11, 8,
-	10,10,10,11,11, 9,10, 9, 7, 9, 9, 9,10,10, 9,10,
-	10, 9,10,10,10,10,11,10,11,11, 9,10, 9,10,11,11,
-	10,11, 9,
-};
-
-static const static_codebook _44p7_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p7_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p6_1[] = {
-	 4, 7, 7, 6, 7, 8, 6, 8, 7, 7, 7, 8, 7, 7, 8, 8,
-	 8, 8, 7, 7, 7, 8, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8,
-	 8, 9, 9, 8, 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
-	 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8,
-	 8, 9, 8, 9, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8,
-	 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8,
-	 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
-	 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 9, 9, 9,
-	 8, 9, 8,
-};
-
-static const static_codebook _44p7_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p7_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p7_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p7_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p7_0,
-	1, -513979392, 1633504256, 2, 0,
-	(long *)_vq_quantlist__44p7_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p7_p7_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p7_p7_1[] = {
-	 1, 5, 5, 4,10,10, 5,10,10, 5,10,10,10,10,10,10,
-	10,10, 5,10,10,10,10,10, 9,10,10, 6,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10, 7,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,11,11,
-};
-
-static const static_codebook _44p7_p7_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p7_p7_1,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44p7_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p7_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p7_p7_2[] = {
-	 1, 3, 2, 4, 5, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p7_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p7_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p7_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p7_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p7_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p7_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p7_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p7_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p7_short[] = {
-	 3, 9,14,16,17,19,22,22, 5, 4, 6, 9,11,13,17,20,
-	 9, 5, 5, 6, 9,11,15,19,11, 7, 5, 5, 7, 9,13,17,
-	14, 9, 7, 6, 6, 7,11,14,16,11, 9, 7, 6, 4, 4, 8,
-	19,15,13,11, 9, 4, 3, 4,21,16,16,15,12, 6, 4, 4,
-};
-
-static const static_codebook _huff_book__44p7_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p7_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p8_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p8_l0_0[] = {
-	 2, 4, 4, 7, 7, 8, 8,10,10,11,11,12,12, 4, 5, 5,
-	 7, 7, 9, 9,10, 9,12,10,12,12, 4, 5, 5, 7, 7, 9,
-	 9, 9,10,10,12,12,12, 7, 7, 7, 7, 8, 9, 8,11, 5,
-	12, 6,12,10, 7, 7, 7, 8, 7, 8, 9, 5,11, 6,12,10,
-	12, 8, 9, 9, 9, 9, 9, 9,11, 7,11, 7,11, 9, 8, 9,
-	 9, 9, 9, 9, 9, 7,10, 7,11, 9,11,10,10,10,10,10,
-	10,10,11,10,11, 8,12, 9,10,10,10,10,10,10,10,10,
-	11, 8,11, 9,12,10,11,11,11,11,11,11,11,11,12,10,
-	12,11,10,11,11,11,11,11,11,11,11,10,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,11,12,12,12,
-	12,12,12,12,12,12,11,12,12,
-};
-
-static const static_codebook _44p8_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p8_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p8_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p8_l0_1[] = {
-	 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p8_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p8_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p8_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p8_l1_0[] = {
-	54,
-	29,
-	79,
-	0,
-	108,
-};
-
-static const long _vq_lengthlist__44p8_l1_0[] = {
-	 1, 2, 3, 6, 7, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44p8_l1_0 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p8_l1_0,
-	1, -514516992, 1620639744, 7, 0,
-	(long *)_vq_quantlist__44p8_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p8_lfe[] = {
-	 2, 3, 1, 3,
-};
-
-static const static_codebook _huff_book__44p8_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44p8_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p8_long[] = {
-	 2, 7,14,16,17,18,20,21, 7, 4, 6, 8,11,12,14,16,
-	13, 5, 4, 4, 8, 9,11,13,15, 8, 4, 3, 5, 7, 9,10,
-	17,11, 8, 4, 4, 6, 9, 9,17,11, 9, 7, 6, 5, 7, 8,
-	19,13,11, 9, 9, 7, 8, 8,21,15,13,11,10, 8, 8, 7,
-};
-
-static const static_codebook _huff_book__44p8_long = {
-	2, 64,
-	(long *)_huff_lengthlist__44p8_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p8_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p1_0[] = {
-	 2, 5, 5, 4, 7, 7, 4, 7, 7, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 6, 7, 8, 8, 9,
-	10, 8, 9,10, 8, 9,10,10,10,12,10,11,12, 8,10,10,
-	10,11,12,10,11,11, 6, 8, 7, 8,10, 9, 8,10, 9, 8,
-	10,10,10,11,11,10,12,11, 8,10, 9,10,12,11,10,12,
-	10, 5, 8, 8, 8,10,10, 8,10,10, 7, 9,10, 9,10,11,
-	 9,11,11, 8,10,10,10,12,12,10,12,11, 7, 9, 9, 9,
-	10,11, 9,11,11, 9, 9,11,10,11,12,10,11,12, 9,11,
-	11,11,12,12,11,12,12, 7, 9, 9,10,11,11,10,12,11,
-	 9,11,10,11,11,12,11,13,12,10,11,11,12,13,13,11,
-	13,11, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
-	12,10,12,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	10,11,12,10,11,11,10,11,11,11,11,13,12,13,13, 9,
-	10,11,12,12,13,11,12,11, 7, 9, 9, 9,11,11, 9,11,
-	10, 9,11,11,11,12,12,11,12,12, 9,11, 9,10,12,11,
-	10,12,11,
-};
-
-static const static_codebook _44p8_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p8_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p8_p2_0[] = {
-	 4, 6, 6, 9, 9, 6, 8, 8,10,10, 6, 8, 8,10,10, 8,
-	 9,10,12,12, 8,10, 9,12,12, 6, 8, 8,10,10, 8, 8,
-	 9,10,11, 8, 9, 9,11,11, 9,10,11,12,13,10,11,11,
-	13,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 8, 9, 8,11,
-	10,10,11,11,13,13, 9,11,10,13,12, 9,10,10,12,12,
-	10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,12,
-	13,13,15,14, 9,10,10,12,12,10,11,11,13,13,10,11,
-	10,13,12,12,13,13,14,15,12,13,12,15,12, 7, 8, 8,
-	10,11, 8, 9,10,11,12, 8, 9, 9,11,11,10,11,11,13,
-	14,10,11,11,13,13, 8, 9, 9,11,12, 9,10,11,11,13,
-	 9,10,10,12,12,11,11,12,13,15,11,12,12,14,14, 8,
-	 9, 9,11,11, 9,10,11,12,13, 9,10,10,12,12,11,12,
-	12,14,15,11,12,12,14,14,10,11,12,13,13,11,12,12,
-	13,14,12,12,12,14,14,13,13,14,14,16,14,14,14,16,
-	15,10,11,11,13,13,12,12,12,14,14,11,12,12,14,13,
-	14,14,14,15,16,13,14,13,16,14, 7, 8, 8,11,10, 8,
-	 9, 9,11,11, 8,10, 9,12,11,10,11,11,13,13,10,11,
-	11,14,13, 8, 9, 9,12,11, 9,10,10,12,12, 9,11,10,
-	13,12,11,12,12,13,14,11,12,12,15,14, 8, 9, 9,12,
-	11, 9,10,10,12,12, 9,11,10,13,11,11,12,12,14,14,
-	11,12,12,14,13,10,11,11,13,13,11,12,12,13,14,12,
-	13,12,14,14,13,13,14,14,16,13,14,14,16,15,10,11,
-	11,13,13,12,12,12,14,14,11,12,12,14,13,13,14,14,
-	15,15,13,14,13,16,14, 9,10,11,12,13,11,11,12,12,
-	14,11,11,12,13,14,13,13,14,14,16,13,13,14,15,15,
-	11,11,12,12,14,12,12,13,13,15,12,12,13,13,15,14,
-	14,15,15,16,14,14,14,15,16,11,12,12,13,14,12,12,
-	13,14,15,12,13,12,14,14,14,14,15,15,16,14,14,14,
-	16,16,13,13,14,15,16,14,14,15,15,16,14,15,15,16,
-	16,15,15,16,16,18,16,16,16,17,17,13,14,14,15,15,
-	14,14,15,16,16,14,15,14,16,16,16,16,16,17,18,15,
-	16,16,17,16, 9,11,10,13,12,11,12,11,14,13,11,12,
-	11,14,12,13,14,13,15,14,13,14,13,16,14,11,12,12,
-	14,13,12,12,13,14,14,12,13,12,15,14,14,14,14,16,
-	16,14,15,14,17,15,11,12,11,14,12,12,13,12,15,13,
-	12,13,12,15,13,14,14,14,16,15,14,15,14,16,15,13,
-	14,14,15,15,14,14,15,16,16,14,15,14,16,16,15,15,
-	16,16,17,16,16,16,17,17,13,14,14,16,15,14,15,15,
-	16,16,14,15,14,17,15,16,16,16,17,17,15,16,15,18,
-	16, 7, 8, 8,10,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
-	10,11,11,13,14,10,11,11,14,13, 8, 9, 9,11,11, 9,
-	10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,12,
-	12,14,14, 8, 9, 9,12,11, 9,10,11,12,13, 9,11,10,
-	13,12,11,12,12,14,14,11,12,12,14,13,10,11,11,13,
-	13,11,12,12,13,14,11,12,12,14,14,13,13,14,14,16,
-	13,14,14,16,15,10,12,11,13,13,12,12,12,14,14,11,
-	12,12,14,13,14,14,14,15,16,13,14,14,16,14, 8, 9,
-	 9,11,11, 9,10,10,12,12, 9,10,10,12,12,11,11,12,
-	13,14,11,12,12,14,14, 9, 9,10,11,12,10,10,11,12,
-	13,10,10,11,12,13,12,12,13,14,15,12,12,13,14,15,
-	 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
-	13,13,15,15,12,13,13,15,14,11,11,12,13,14,12,12,
-	13,13,15,12,12,13,14,15,14,14,15,14,16,14,14,15,
-	15,16,11,12,12,14,14,12,13,13,15,15,12,13,13,15,
-	14,14,15,15,16,16,14,15,14,17,15, 8, 9, 9,11,11,
-	 9,10,10,12,12, 9,11,10,13,12,11,12,12,14,14,11,
-	13,12,15,13, 9,10,10,12,12,10,10,11,12,13,10,12,
-	11,13,13,12,12,13,13,15,12,13,13,15,14, 9,10,10,
-	12,12,11,11,12,13,13,10,12,10,13,12,12,13,13,15,
-	15,12,13,13,15,13,11,12,12,14,14,12,12,13,14,14,
-	12,13,13,15,14,13,13,14,13,16,14,15,14,16,16,11,
-	12,12,14,14,13,13,13,15,15,12,13,12,15,14,14,15,
-	15,16,17,14,15,13,16,13,10,11,11,13,14,11,12,12,
-	13,15,11,12,12,14,14,13,14,14,15,16,13,14,14,16,
-	16,11,11,12,12,14,12,12,13,13,15,12,13,13,13,15,
-	14,14,15,14,17,14,14,15,15,16,11,12,12,14,14,12,
-	13,13,15,15,12,13,13,15,15,14,15,15,16,17,14,15,
-	15,16,16,13,14,14,14,16,14,14,15,14,17,14,15,15,
-	14,17,16,16,17,15,18,16,16,17,16,18,13,14,14,16,
-	16,14,15,15,17,16,14,15,15,17,16,16,17,17,18,18,
-	16,17,16,18,17,10,11,11,14,13,11,12,12,14,14,11,
-	13,12,15,14,14,14,14,16,15,14,15,14,16,15,11,12,
-	12,14,13,12,13,13,15,14,13,14,13,15,14,14,15,15,
-	16,16,14,15,15,17,15,11,12,12,14,14,13,13,13,15,
-	15,12,13,13,15,14,15,15,15,17,17,14,15,15,17,15,
-	13,14,14,16,15,14,15,15,16,16,15,15,15,17,16,16,
-	16,16,16,17,16,17,16,18,17,14,14,14,16,16,15,15,
-	15,16,16,14,15,14,17,16,16,17,17,17,18,16,17,16,
-	18,16, 7, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
-	11,10,11,11,13,14,10,11,11,14,13, 8, 9, 9,11,12,
-	 9,10,11,12,13, 9,11,10,13,12,11,12,12,13,14,11,
-	12,12,14,14, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
-	10,13,12,11,12,12,14,14,11,12,11,14,13,10,11,12,
-	13,13,11,12,12,13,14,12,13,12,14,14,13,13,14,14,
-	16,13,14,14,16,15,10,11,11,13,13,11,12,12,14,14,
-	11,12,12,14,13,13,14,14,15,16,13,14,13,16,14, 8,
-	 9, 9,11,11, 9,10,11,12,13, 9,10,10,12,12,11,12,
-	13,13,14,11,12,12,14,14, 9,10,10,12,12,10,10,11,
-	12,13,11,12,11,13,13,12,12,13,13,15,12,13,13,15,
-	15, 9,10,10,12,12,10,11,12,13,14,10,11,10,13,12,
-	12,13,13,14,15,12,13,12,15,13,12,12,12,14,14,12,
-	12,13,14,15,13,13,13,15,15,14,14,15,13,16,14,15,
-	15,16,16,11,12,12,14,14,12,13,13,14,15,12,13,12,
-	14,14,14,14,15,16,16,13,14,13,16,14, 8, 9, 9,11,
-	11, 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,
-	11,12,11,14,14, 9,10,10,12,12,10,11,11,13,13,10,
-	11,11,13,13,12,13,13,14,15,12,13,13,15,14, 9,10,
-	 9,12,11,10,11,10,13,12,10,11,10,13,12,12,13,12,
-	15,14,12,13,12,15,14,11,12,12,14,14,12,13,13,14,
-	15,12,13,13,15,15,14,14,15,15,17,14,15,15,16,16,
-	11,12,11,14,13,12,13,12,15,14,12,13,12,15,13,14,
-	15,14,16,15,13,15,14,17,14,10,11,11,13,14,11,12,
-	13,13,15,11,12,12,14,14,14,14,15,15,17,13,14,14,
-	15,16,11,12,12,14,14,12,12,13,14,15,13,13,13,15,
-	15,14,15,15,15,17,15,15,15,16,16,11,12,12,13,14,
-	13,13,14,14,15,12,13,13,14,15,14,15,15,16,17,14,
-	15,15,16,16,14,14,14,16,16,14,14,15,15,17,15,15,
-	15,17,16,16,16,17,16,18,16,17,17,18,17,13,14,14,
-	15,16,14,15,15,16,17,14,15,15,16,16,16,17,17,17,
-	18,16,16,16,17,16,10,11,11,14,13,11,12,12,14,14,
-	11,12,12,15,13,13,14,14,16,15,13,14,14,16,15,11,
-	12,12,14,14,12,13,13,15,15,12,13,13,15,15,14,15,
-	15,16,17,14,15,15,17,16,11,12,11,14,12,12,13,13,
-	15,13,12,13,12,15,13,14,15,15,16,15,14,15,14,17,
-	14,13,14,14,16,16,14,15,15,16,17,14,15,15,16,17,
-	16,16,17,17,18,16,17,17,18,18,13,14,14,16,13,14,
-	15,15,17,14,14,15,14,17,14,16,17,16,17,16,16,17,
-	16,18,15, 8,11,11,13,13,10,12,12,14,14,11,12,12,
-	14,14,13,13,14,15,16,13,14,14,16,15,10,11,11,14,
-	14,11,12,12,14,15,11,12,12,15,14,13,14,14,15,16,
-	13,14,14,16,16,11,12,12,14,14,12,13,13,15,15,12,
-	13,12,15,14,14,14,15,16,16,14,15,14,16,16,12,13,
-	13,15,15,12,13,14,15,16,13,14,14,16,16,14,15,15,
-	16,17,15,15,16,17,17,13,14,14,16,15,14,15,15,16,
-	16,14,15,14,16,16,16,16,16,17,17,15,16,16,18,16,
-	10,11,11,13,14,11,12,12,14,15,11,12,12,15,14,13,
-	14,14,16,16,13,14,14,16,16,11,11,12,14,14,12,12,
-	13,14,15,12,13,13,15,15,14,14,15,15,17,14,14,15,
-	16,16,11,12,12,15,14,12,13,13,15,15,12,13,13,15,
-	15,14,15,15,17,17,14,15,15,17,16,13,12,14,14,16,
-	13,13,15,14,17,14,13,15,15,17,15,14,16,15,18,16,
-	15,16,16,18,13,14,14,16,16,14,15,15,17,17,14,15,
-	15,17,16,16,17,17,18,18,16,17,16,18,17,10,11,11,
-	14,13,11,12,12,14,14,11,13,12,15,14,13,14,14,15,
-	16,13,14,14,16,16,11,12,12,14,14,12,13,13,14,15,
-	12,13,13,15,15,14,14,15,15,16,14,15,15,17,16,11,
-	12,12,14,14,13,13,13,15,15,12,13,13,15,14,14,15,
-	15,16,17,14,15,14,17,15,13,14,13,16,15,14,14,14,
-	15,16,14,15,14,16,16,15,15,16,16,17,16,16,16,18,
-	17,14,14,14,16,16,15,15,15,17,16,14,15,14,17,16,
-	16,16,17,17,18,16,17,16,18,16,11,13,13,15,15,12,
-	13,14,15,16,12,14,14,15,15,14,15,15,16,17,14,15,
-	15,17,17,12,13,14,14,16,13,14,14,14,16,14,14,14,
-	15,16,15,15,16,15,18,15,16,16,17,17,13,14,14,16,
-	16,14,14,15,16,16,14,15,14,16,16,15,16,16,17,18,
-	15,16,16,18,17,14,14,16,13,17,15,15,16,14,18,15,
-	15,16,14,18,16,16,18,15,19,17,17,18,16,18,15,16,
-	15,17,17,15,16,17,18,18,16,16,16,18,17,17,18,18,
-	19,19,17,18,17,19,18,11,12,12,15,14,13,13,14,15,
-	16,13,14,13,16,14,15,15,15,16,17,15,16,15,17,16,
-	12,13,13,15,14,13,13,14,15,15,14,15,14,16,15,15,
-	15,16,16,17,16,16,16,18,17,12,13,13,15,15,14,14,
-	15,16,16,13,14,13,16,15,16,16,16,17,18,15,16,15,
-	17,16,14,15,14,17,15,14,15,15,16,16,15,16,15,17,
-	16,16,15,16,15,17,17,18,17,18,17,15,15,15,16,17,
-	16,16,16,17,17,15,16,15,17,16,17,18,18,18,18,16,
-	17,16,18,15, 8,11,11,13,13,11,12,12,14,14,10,12,
-	12,14,14,13,14,14,15,16,13,14,13,16,15,11,12,12,
-	14,14,12,12,13,14,15,12,13,13,15,15,14,14,15,15,
-	16,14,14,14,16,16,10,11,11,14,14,11,12,12,14,15,
-	11,12,12,15,14,13,14,14,16,16,13,14,14,16,15,13,
-	14,14,15,16,14,14,15,16,16,14,15,15,16,16,15,16,
-	16,16,18,16,16,16,17,17,12,13,13,15,15,13,14,14,
-	16,16,12,14,13,16,15,15,16,15,17,17,14,16,15,17,
-	16,10,11,11,13,14,11,12,13,14,15,11,13,12,14,14,
-	14,14,15,16,16,13,14,14,16,16,11,12,12,14,14,12,
-	13,13,14,15,13,14,13,15,15,14,15,15,16,17,14,15,
-	15,17,16,11,12,12,14,14,12,13,13,15,15,12,13,12,
-	15,14,14,15,15,16,17,14,15,15,16,16,14,14,14,16,
-	16,14,14,15,16,16,15,15,15,16,16,16,16,17,16,18,
-	16,17,17,18,18,13,13,14,15,16,14,14,15,16,17,13,
-	14,14,16,16,16,16,17,17,18,15,16,15,17,16,10,11,
-	11,14,13,11,12,12,14,14,11,12,12,15,14,13,14,14,
-	16,16,13,14,14,16,16,11,12,12,14,14,12,13,13,15,
-	15,12,13,13,15,15,14,15,15,16,17,14,15,15,17,16,
-	11,12,11,14,14,12,13,13,15,15,12,13,12,15,14,14,
-	15,14,16,16,14,15,14,17,16,14,14,14,16,16,14,15,
-	15,16,17,14,15,15,17,17,16,16,17,17,18,16,17,17,
-	18,18,13,14,12,16,14,14,15,13,17,15,13,15,13,17,
-	14,16,16,15,18,16,15,17,14,18,15,11,12,12,14,15,
-	13,13,14,14,16,13,14,13,15,14,15,15,16,16,17,15,
-	16,15,17,16,12,13,13,15,15,13,13,14,15,16,14,15,
-	14,16,16,15,15,16,15,18,16,16,16,18,17,12,13,13,
-	15,15,14,14,15,15,16,13,14,13,15,15,16,16,16,16,
-	18,15,16,15,17,16,15,15,15,17,16,15,15,16,16,17,
-	16,16,16,18,17,16,16,17,15,18,17,18,17,19,18,14,
-	14,15,15,17,15,15,16,16,17,14,15,15,16,16,17,17,
-	18,17,19,16,17,15,17,15,11,13,12,15,15,12,14,14,
-	15,15,12,14,13,16,15,15,15,15,17,17,14,15,15,17,
-	16,12,14,14,16,16,14,14,15,16,16,14,14,14,16,16,
-	15,16,17,17,18,15,16,16,18,17,12,14,13,16,14,13,
-	14,14,16,15,13,15,14,16,14,15,16,16,17,17,15,16,
-	15,18,15,15,15,16,17,17,15,16,16,17,18,16,16,16,
-	18,18,17,17,18,18,19,17,17,18,19,19,14,15,14,17,
-	13,15,16,15,18,14,15,16,15,18,14,17,18,17,18,16,
-	16,18,16,19,15,
-};
-
-static const static_codebook _44p8_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p8_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p8_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p3_0[] = {
-	 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 7, 9,
-	10, 8, 9, 9, 8, 9,10, 9,10,12,10,11,11, 8,10, 9,
-	10,11,12, 9,11,10, 5, 8, 7, 8,10, 9, 7,10, 9, 8,
-	 9,10, 9,10,11,10,12,11, 8,10, 9,10,11,11, 9,12,
-	10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9,10, 9,10,11,
-	 9,11,11, 8,10, 9,10,11,11,10,12,10, 7, 9,10, 9,
-	10,12, 9,11,11, 9, 9,12,11,10,13,11,11,13,10,12,
-	11,11,13,13,11,13,12, 7, 9, 9, 9,11,11, 9,12,11,
-	 9,11,10,10,11,12,11,13,12, 9,11,11,12,13,13,11,
-	13,11, 5, 8, 8, 8, 9,10, 7,10, 9, 8, 9,10,10,10,
-	12,10,11,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	 9,11,12, 9,11,11, 9,11,11,11,11,13,12,13,13, 9,
-	10,11,11,12,13,10,12,11, 7,10, 9, 9,11,11, 9,12,
-	10,10,11,12,11,12,13,12,13,13, 9,12, 9,11,13,11,
-	10,13,10,
-};
-
-static const static_codebook _44p8_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p8_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p3_1[] = {
-	 6, 7, 7, 7, 7, 8, 7, 8, 7, 7, 7, 8, 7, 8, 8, 8,
-	 8, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8,
-	 8, 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 9, 9, 8,
-	 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
-	 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 8,
-	 8, 9, 8,
-};
-
-static const static_codebook _44p8_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p8_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p8_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p4_0[] = {
-	 2, 5, 5, 4, 7, 8, 4, 8, 7, 5, 7, 8, 7, 7,10, 8,
-	 9, 9, 5, 7, 7, 8, 9, 9, 7,10, 7, 5, 7, 8, 8, 9,
-	11, 8,10,10, 8, 9,10,10,10,12,11,12,12, 8,10,10,
-	10,12,12,10,12,11, 5, 8, 7, 8,10,10, 8,11, 9, 8,
-	10,10,10,11,12,10,12,12, 8,10, 9,11,12,12,10,12,
-	10, 5, 8, 8, 7,10,10, 8,11,10, 7, 9,10, 9,10,12,
-	10,12,12, 8,10,10,10,12,12,10,12,11, 7, 9,10, 9,
-	11,12,10,12,11, 9, 9,12,10,10,13,12,12,13,10,12,
-	11,12,13,13,11,13,11, 7,10, 9,10,11,12,10,13,11,
-	 9,11,11,11,11,13,12,14,13,10,11,11,12,14,14,11,
-	14,11, 5, 8, 8, 8,10,11, 7,10,10, 8,10,10,10,11,
-	12,10,12,12, 7,10, 9,10,12,12, 9,12,10, 7, 9,10,
-	10,11,13,10,12,11,10,11,11,11,11,14,12,14,14, 9,
-	11,11,12,13,14,11,13,11, 7,10, 9,10,11,12, 9,12,
-	10,10,11,12,11,11,13,12,13,13, 9,12, 9,12,13,12,
-	10,13,10,
-};
-
-static const static_codebook _44p8_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p8_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p8_p4_1[] = {
-	 7, 9, 9,10,10, 9,10,10,10,11, 9,10,10,11,10, 9,
-	10,10,11,11, 9,10,10,11,11, 9,10,10,11,11,10,10,
-	10,11,11,10,10,10,11,11,10,11,11,11,11,10,11,11,
-	11,11, 9,10,10,11,11,10,10,10,11,11, 9,10,10,11,
-	11,10,11,11,11,11,10,11,11,11,11,10,11,11,11,11,
-	10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-	11,11,11,12,10,11,11,11,11,11,11,11,11,11,10,11,
-	11,11,11,11,11,11,11,11,11,11,11,11,11, 9,10,10,
-	11,11,10,10,11,11,11,10,10,11,11,11,10,11,11,11,
-	12,10,11,11,12,12,10,10,11,11,11,10,11,11,11,12,
-	11,11,11,12,12,11,11,12,12,12,11,11,12,12,12,10,
-	11,11,11,11,11,11,11,12,12,10,11,11,12,12,11,12,
-	11,12,12,11,12,11,12,12,11,11,11,11,12,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12, 9,10,10,11,11,10,
-	11,10,11,11,10,11,10,11,11,10,11,11,12,12,10,11,
-	11,12,11,10,11,11,11,11,10,11,11,11,12,11,11,11,
-	12,12,11,11,12,12,12,11,11,11,12,12,10,11,10,11,
-	11,11,11,11,12,12,10,11,11,12,11,11,12,11,12,12,
-	11,12,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
-	11,12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,10,11,11,11,11,11,11,11,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	11,11,11,12,12,11,11,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,13,12,13,12,12,12,12,13,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,12,10,11,11,11,11,11,11,11,12,12,11,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,12,12,13,12,13,
-	12, 9,10,10,11,11,10,10,11,11,11,10,11,10,11,11,
-	10,11,11,12,12,10,11,11,12,12,10,10,11,11,11,10,
-	11,11,11,12,10,11,11,12,12,11,11,12,12,12,11,11,
-	11,12,12,10,11,10,11,11,11,11,11,12,12,10,11,11,
-	12,11,11,12,11,12,12,11,12,11,12,12,11,11,11,11,
-	12,11,11,12,12,12,11,12,12,12,12,11,12,12,12,12,
-	11,12,12,12,12,11,11,11,12,11,11,12,12,12,12,11,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,10,10,
-	11,11,11,10,11,11,12,12,10,11,11,12,12,11,11,11,
-	12,12,11,11,12,12,12,10,11,11,11,12,11,11,12,12,
-	12,11,11,12,12,12,11,11,12,12,12,11,12,12,12,12,
-	11,11,11,12,12,11,12,12,12,12,11,12,11,12,12,11,
-	12,12,12,12,11,12,12,12,12,11,11,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12, 9,10,10,11,11,
-	10,11,11,11,12,10,11,11,12,11,11,12,11,12,12,11,
-	12,11,12,12,10,11,11,12,11,11,11,11,12,12,11,12,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,10,11,11,
-	12,12,11,12,11,12,12,11,12,11,12,12,12,12,12,12,
-	12,11,12,12,12,12,11,12,11,12,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,
-	12,13,13,12,12,12,12,12,12,12,12,12,13,12,12,12,
-	12,13,12,12,13,12,13,12,13,13,13,13,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,13,12,12,13,13,13,13,
-	12,13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,13,13,12,12,12,13,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,
-	13,13,12,13,12,13,13,13,13,12,12,12,12,12,12,12,
-	12,13,12,12,12,12,13,12,12,13,13,13,13,12,13,13,
-	13,13, 9,10,10,11,11,10,10,11,11,11,10,11,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,10,11,11,11,11,
-	10,11,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
-	11,12,12,12,10,11,10,11,11,10,11,11,12,12,10,11,
-	11,12,11,11,12,11,12,12,11,11,11,12,12,11,11,11,
-	11,12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,11,11,12,11,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,11,12,12,12,12, 9,
-	10,10,11,11,10,11,11,11,12,10,11,11,12,11,11,11,
-	12,12,12,11,11,12,12,12,10,11,11,12,12,11,11,12,
-	12,12,11,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,10,11,11,12,12,11,11,11,12,12,11,11,11,12,12,
-	11,12,12,12,12,11,12,12,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,11,11,12,12,12,12,12,12,12,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,10,11,10,11,
-	11,10,11,11,12,12,10,11,11,12,12,11,11,11,12,12,
-	11,12,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
-	11,12,12,12,11,12,12,12,12,11,12,12,12,12,10,11,
-	11,12,11,11,12,11,12,12,11,12,11,12,12,11,12,12,
-	12,12,11,12,11,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,11,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,12,
-	12,12,12,12,13,13,12,12,12,13,13,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,12,13,12,12,
-	12,13,13,12,13,13,12,13,12,13,13,13,13,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,
-	13,12,13,12,13,12,11,11,11,12,12,11,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,13,13,12,12,12,13,13,11,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
-	12,12,12,12,12,12,12,12,12,13,13,12,12,12,12,13,
-	12,13,13,13,13,12,13,13,13,13,12,12,12,12,12,12,
-	12,12,13,12,12,12,12,13,12,12,13,13,13,13,12,13,
-	13,13,12,10,11,11,12,12,11,11,11,12,12,11,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,12,
-	12,11,11,12,12,12,11,12,12,12,12,11,12,12,12,12,
-	12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,11,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,11,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,13,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,12,12,12,12,12,12,
-	11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,11,12,12,12,12,11,11,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
-	13,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,13,12,12,12,13,13,12,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,12,
-	12,13,13,13,12,12,12,12,12,12,12,12,12,13,12,12,
-	12,13,12,12,13,13,13,13,12,13,13,13,13,10,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,11,12,12,12,
-	12,12,12,12,12,12,11,11,12,12,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,12,12,12,13,13,11,
-	12,11,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
-	12,13,13,12,12,12,13,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,13,12,12,12,12,12,13,12,13,12,13,
-	13,12,12,12,12,12,12,12,12,13,12,12,12,12,13,12,
-	12,13,12,13,13,12,13,12,13,12,11,11,11,12,12,11,
-	12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,12,13,12,12,13,13,13,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,13,
-	12,12,12,13,12,12,12,12,12,12,12,12,13,12,13,12,
-	12,12,12,13,12,12,13,12,13,12,13,13,12,13,12,12,
-	12,12,12,12,13,13,13,12,12,12,12,13,12,12,13,13,
-	13,13,12,13,13,13,12,11,11,11,12,12,11,12,12,12,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,13,12,12,13,13,13,11,12,12,12,12,12,12,
-	12,12,13,12,12,12,13,12,12,13,12,13,13,12,13,12,
-	13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,13,12,13,12,13,13,13,12,12,12,12,12,12,
-	12,13,12,13,12,12,12,12,13,12,12,13,13,13,12,12,
-	13,12,13,12,10,11,11,12,12,11,11,11,12,12,11,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
-	12,12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
-	11,12,11,12,12,12,12,12,12,12,11,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,12,12,12,12,12,11,12,12,12,12,12,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,10,11,11,12,12,11,11,12,12,12,11,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,
-	12,13,13,11,11,11,12,12,12,12,12,12,12,11,12,12,
-	12,12,12,12,12,13,13,12,12,12,13,13,12,12,12,12,
-	12,12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,
-	12,12,13,13,13,12,12,12,12,12,12,12,12,12,13,12,
-	12,12,12,12,12,12,13,13,13,12,12,12,13,12,11,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,13,12,12,12,13,13,
-	11,12,11,12,12,12,12,12,12,12,11,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,12,12,12,12,12,12,12,12,
-	12,12,13,12,12,12,13,13,12,13,13,13,13,12,13,13,
-	13,13,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
-	12,12,13,12,13,13,12,13,12,13,12,11,11,11,12,12,
-	11,12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,11,12,12,12,12,12,12,12,12,13,12,12,
-	12,13,13,12,12,13,12,13,12,12,13,13,13,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,12,12,12,12,12,12,12,12,12,12,13,
-	12,12,12,13,13,12,12,13,12,13,12,13,13,13,13,12,
-	12,12,12,12,12,12,13,12,13,12,12,12,12,12,12,13,
-	13,12,12,12,13,12,12,12,11,11,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
-	12,12,13,13,13,12,12,12,13,13,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,12,13,13,12,13,
-	12,13,12,12,12,12,12,12,12,12,12,12,13,12,13,12,
-	13,13,12,13,13,12,13,12,13,13,13,13,12,12,12,12,
-	12,12,12,12,13,12,12,13,12,13,12,12,13,12,13,12,
-	12,13,12,13,12,
-};
-
-static const static_codebook _44p8_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p8_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p8_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p8_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p8_p5_0[] = {
-	 2, 6, 6, 9, 9, 5, 7, 8,10,11, 5, 8, 7,11,10, 8,
-	10,11,12,13, 8,11,10,13,12, 6, 7, 8,10,11, 7, 8,
-	10,10,12, 8, 9, 9,12,12,10,10,12,12,14,10,12,12,
-	14,13, 6, 8, 7,11,10, 8, 9, 9,12,12, 7,10, 8,12,
-	11,10,12,12,13,14,10,12,10,14,12, 9,10,11,11,13,
-	10,10,11,11,13,11,12,12,13,14,12,12,13,11,15,13,
-	14,14,15,14, 9,11,10,13,11,11,12,12,13,13,10,11,
-	10,13,11,13,14,14,15,15,12,13,12,15,11, 6, 8, 9,
-	11,12, 8, 9,11,12,13, 8,10,10,13,13,11,12,13,14,
-	15,11,12,13,14,14, 9, 9,10,12,13,10,10,12,12,14,
-	10,11,11,13,14,12,12,14,14,15,13,13,14,15,15, 9,
-	10,10,13,13,10,11,11,13,14,10,11,10,14,13,13,13,
-	14,15,15,12,14,13,15,14,12,12,13,13,14,12,13,14,
-	13,15,13,14,14,15,15,14,14,15,14,16,15,15,15,16,
-	16,12,13,13,14,14,13,14,14,15,15,12,14,13,15,14,
-	14,15,15,16,16,14,15,14,16,14, 6, 9, 8,12,11, 8,
-	10,10,13,13, 8,11, 9,13,12,11,12,12,14,14,11,13,
-	12,15,14, 9,10,10,13,13,10,10,11,13,14,10,12,11,
-	14,13,12,13,14,14,15,13,13,13,15,14, 9,10, 9,13,
-	12,10,11,11,14,13,10,12,10,14,12,13,14,13,15,15,
-	12,14,12,15,14,12,13,13,14,14,13,13,13,14,15,13,
-	14,14,15,15,14,14,15,14,16,14,15,15,16,16,12,13,
-	12,14,13,13,14,14,15,15,12,14,13,15,13,15,15,15,
-	16,16,14,15,14,16,14,11,12,12,13,14,12,13,14,14,
-	16,12,13,13,15,15,14,14,16,15,17,14,15,15,16,16,
-	12,13,14,14,15,13,13,15,15,16,14,14,14,15,16,15,
-	15,16,16,17,15,15,16,16,17,13,13,13,15,15,14,14,
-	15,15,16,13,14,14,15,16,15,15,16,16,17,15,16,15,
-	17,16,14,15,15,16,16,15,15,16,16,17,15,16,16,17,
-	17,16,16,17,16,18,16,17,17,17,17,15,15,15,16,16,
-	15,16,16,17,17,15,16,16,17,16,16,17,17,18,18,16,
-	17,16,17,16,11,12,12,15,13,13,13,13,15,15,12,14,
-	13,16,14,14,15,15,16,16,14,15,14,17,15,13,13,13,
-	15,14,13,14,14,16,15,14,14,14,16,15,15,15,16,16,
-	17,15,16,15,17,16,12,14,13,15,14,14,14,14,16,15,
-	13,14,13,16,15,15,16,16,17,16,15,16,15,17,16,15,
-	15,15,16,16,15,15,16,16,17,15,16,16,17,17,16,16,
-	17,17,17,17,17,17,18,17,14,15,15,16,16,15,16,16,
-	17,16,15,16,15,17,16,17,17,17,18,17,16,17,16,18,
-	16, 6, 9, 9,12,12, 8,10,10,12,13, 8,10,10,13,12,
-	10,12,12,14,15,11,13,12,15,14, 8, 9,10,12,13, 9,
-	10,11,13,14,10,11,11,14,13,12,12,13,14,15,12,13,
-	13,15,15, 8,10,10,13,13,10,11,11,13,14,10,12,10,
-	14,13,12,13,13,15,15,12,14,13,15,14,11,12,12,13,
-	14,12,12,13,13,15,12,13,13,15,15,14,13,15,14,16,
-	14,15,15,16,16,12,13,13,14,14,13,13,14,15,14,12,
-	14,13,15,14,14,15,15,16,15,14,15,14,16,14, 7, 9,
-	10,12,12, 9,10,11,13,14, 9,11,10,13,13,11,12,13,
-	14,15,12,13,13,15,14, 9,10,11,12,13,10,10,12,13,
-	14,11,11,12,14,14,12,12,14,14,15,13,13,14,15,15,
-	 9,11,11,13,13,11,12,12,14,14,10,12,10,14,13,13,
-	14,14,15,15,13,14,13,16,14,12,12,13,14,15,13,13,
-	14,14,16,13,14,14,15,15,14,14,15,14,17,14,15,15,
-	16,16,12,13,13,15,14,13,14,14,15,15,13,14,13,16,
-	14,15,15,15,16,16,14,15,14,16,14, 7,10, 9,13,12,
-	10,11,12,12,14,10,12,11,14,12,12,13,13,14,15,12,
-	14,13,15,14, 9,11,10,13,13,10,11,12,13,14,12,13,
-	12,15,13,13,13,14,13,15,13,14,14,16,15,10,11,11,
-	13,13,12,12,13,14,14,11,12,11,14,13,14,14,14,15,
-	16,13,14,13,16,13,12,13,13,14,14,12,13,13,14,15,
-	14,14,14,15,15,14,13,15,13,16,15,15,15,17,16,13,
-	13,13,14,14,14,14,14,15,15,12,13,13,15,14,15,16,
-	16,16,16,14,15,14,16,13,11,12,13,14,15,12,13,14,
-	15,16,13,14,14,15,15,14,14,15,15,17,14,15,15,16,
-	16,13,13,14,14,15,13,13,15,14,16,14,14,15,15,16,
-	15,14,16,15,17,15,16,16,16,17,13,14,14,15,15,14,
-	14,15,16,16,13,15,14,16,16,15,16,16,17,17,15,16,
-	15,17,16,14,15,15,15,17,15,15,16,15,17,15,16,16,
-	16,17,16,16,17,16,18,17,17,17,17,18,15,15,15,17,
-	16,15,16,16,17,17,15,16,16,17,16,16,17,17,18,18,
-	16,17,16,18,17,11,13,12,15,14,13,13,14,15,15,13,
-	14,13,16,14,15,15,15,16,16,15,16,15,17,16,13,14,
-	13,15,14,13,13,14,15,15,14,15,14,16,15,15,15,16,
-	16,16,15,16,15,18,16,13,14,14,15,15,14,15,15,15,
-	16,13,15,13,16,15,15,16,16,17,17,15,16,15,17,16,
-	15,15,15,16,16,15,15,15,16,17,16,16,16,17,16,16,
-	16,17,16,17,17,17,17,18,17,15,15,15,16,16,16,16,
-	16,17,17,15,16,15,17,16,17,17,17,18,18,16,17,16,
-	17,15, 6, 9, 9,12,12, 8,10,10,12,13, 8,10,10,13,
-	12,11,12,13,14,15,10,12,12,14,14, 9,10,10,13,13,
-	10,10,12,13,14,10,11,11,14,13,12,13,14,14,15,12,
-	13,13,15,15, 8,10, 9,13,12,10,11,11,13,14, 9,11,
-	10,14,13,12,13,13,15,15,12,13,12,15,14,12,13,13,
-	14,14,12,13,13,14,15,13,14,14,14,15,14,14,15,14,
-	16,14,15,15,16,16,11,12,12,14,13,13,13,13,15,15,
-	12,13,12,15,13,14,15,15,16,16,14,15,14,16,14, 7,
-	 9,10,12,13,10,10,12,12,14,10,12,11,14,13,12,13,
-	14,14,15,12,13,13,15,14,10,11,11,13,13,11,11,12,
-	13,14,12,13,12,14,14,13,13,14,13,16,14,14,14,15,
-	15, 9,10,11,13,14,12,12,13,13,15,10,12,10,14,13,
-	13,14,14,15,16,13,14,13,15,13,13,14,13,14,15,12,
-	13,13,14,15,14,14,14,15,15,14,13,15,13,16,15,16,
-	16,16,16,12,13,13,14,14,14,14,14,15,15,12,13,13,
-	15,14,15,15,16,16,16,14,15,13,16,13, 7,10, 9,12,
-	12, 9,10,11,13,13, 9,11,10,14,13,12,13,13,14,15,
-	11,13,12,15,14, 9,11,11,13,13,10,10,12,13,14,11,
-	12,12,14,14,13,13,14,14,16,13,14,14,16,15, 9,11,
-	10,13,12,11,12,11,14,14,10,12,10,14,13,13,14,13,
-	15,15,12,14,12,16,14,12,13,13,14,15,13,13,14,14,
-	16,13,14,14,15,15,14,14,15,14,16,15,15,15,16,16,
-	12,13,12,15,14,13,14,14,15,15,12,14,13,16,14,14,
-	15,15,16,16,14,15,14,17,14,11,12,13,14,15,13,13,
-	14,14,16,13,14,13,15,15,15,15,16,16,17,15,15,15,
-	16,16,13,14,13,15,15,13,13,15,15,16,14,15,15,16,
-	16,15,15,16,15,17,16,16,16,17,17,13,13,14,14,15,
-	14,14,15,15,16,13,14,13,15,15,15,16,16,16,17,15,
-	16,15,16,16,15,15,15,16,16,15,15,16,16,17,16,16,
-	16,17,17,16,16,17,16,18,17,17,17,18,18,15,15,15,
-	16,16,16,16,16,17,17,15,15,15,16,16,17,17,17,17,
-	18,16,16,16,17,15,11,13,12,15,14,13,13,14,15,15,
-	12,14,13,16,14,14,15,15,16,16,14,15,14,16,15,13,
-	14,14,15,15,13,14,14,16,16,14,15,14,16,16,15,15,
-	16,17,17,15,16,16,17,17,13,14,13,15,14,14,14,14,
-	16,15,13,15,13,16,14,15,16,15,17,16,15,16,14,17,
-	15,14,16,15,16,17,15,16,16,16,17,15,16,16,17,17,
-	16,16,17,17,18,16,17,17,18,17,14,15,15,17,15,15,
-	16,16,17,16,15,16,15,17,15,16,17,17,18,17,16,17,
-	16,18,15,10,12,12,14,14,12,13,13,15,15,12,13,13,
-	15,15,13,14,14,15,16,14,15,14,16,16,12,13,13,15,
-	15,12,13,14,15,15,13,14,14,15,15,14,14,15,16,17,
-	14,15,15,17,16,12,13,13,15,15,13,14,14,15,16,13,
-	14,14,16,15,14,15,15,16,17,14,15,15,17,16,13,14,
-	14,15,16,14,14,15,15,16,14,15,15,16,16,15,15,16,
-	16,17,15,16,16,17,17,14,15,15,16,16,15,15,15,16,
-	16,15,15,15,16,16,16,17,16,17,17,16,16,16,18,16,
-	11,12,12,14,14,12,13,14,15,15,12,13,13,15,15,13,
-	14,15,16,16,14,15,15,16,16,12,13,13,15,15,13,13,
-	14,15,16,13,14,14,15,16,14,14,15,16,17,15,15,15,
-	16,17,12,13,13,15,15,13,14,14,15,16,13,14,14,16,
-	15,15,15,15,16,17,15,16,15,17,16,14,14,15,15,16,
-	14,14,15,15,17,15,15,16,16,17,15,15,16,15,18,16,
-	16,16,17,17,14,15,15,16,16,15,16,16,17,17,15,15,
-	15,17,16,16,17,16,17,17,16,16,16,18,16,11,12,12,
-	14,14,13,13,14,15,15,13,14,13,15,15,14,15,15,16,
-	16,14,15,15,16,16,12,13,13,15,15,13,13,14,15,15,
-	14,14,14,16,15,15,15,15,15,16,15,16,15,17,16,12,
-	13,13,15,15,14,14,15,15,16,13,14,13,16,15,15,15,
-	16,16,17,15,16,15,17,15,14,15,14,16,16,14,15,15,
-	16,16,15,16,15,17,16,15,15,16,15,17,16,17,16,17,
-	17,14,15,15,16,16,15,16,16,16,17,14,15,15,16,16,
-	16,17,17,17,18,16,16,16,17,16,12,13,13,15,15,13,
-	13,14,15,16,13,14,14,16,15,14,15,15,16,17,14,15,
-	15,17,16,13,14,14,15,16,14,14,15,15,17,14,15,15,
-	16,16,15,14,16,15,17,15,16,16,17,17,13,14,14,16,
-	16,14,15,15,16,16,14,15,14,16,16,15,16,16,17,17,
-	15,16,15,17,16,15,15,16,15,17,15,15,16,15,17,15,
-	16,16,16,17,16,15,17,15,18,17,17,17,17,17,15,15,
-	15,17,17,16,16,16,17,17,15,16,15,17,17,16,17,17,
-	18,18,16,17,15,18,15,11,12,12,15,15,13,13,15,14,
-	16,13,14,13,16,14,15,15,16,16,17,15,16,15,17,15,
-	12,14,13,16,14,13,13,14,14,16,14,15,14,16,15,15,
-	15,16,15,17,16,16,16,17,16,12,13,14,15,16,15,15,
-	15,15,16,13,15,13,16,14,16,16,16,17,17,15,16,15,
-	17,15,15,16,15,16,15,14,14,15,16,16,16,16,16,17,
-	16,15,15,16,15,17,17,17,17,18,17,15,15,15,16,16,
-	16,16,16,16,17,14,15,15,17,16,17,17,17,17,18,15,
-	16,15,18,14,10,12,12,14,14,12,13,13,15,15,12,13,
-	13,15,15,14,14,15,15,16,13,15,14,16,16,12,13,13,
-	15,15,13,14,14,15,16,13,14,14,15,15,14,15,15,16,
-	17,14,15,15,17,16,12,13,13,15,15,13,14,14,15,15,
-	12,14,13,15,15,14,15,15,16,17,14,15,14,17,15,14,
-	15,15,16,16,14,15,15,16,17,15,15,15,17,16,16,16,
-	16,16,17,16,16,16,17,17,13,14,14,16,15,14,15,15,
-	16,16,14,15,14,16,16,15,16,16,17,17,15,16,15,17,
-	16,11,12,12,14,15,13,13,14,14,15,13,14,13,15,15,
-	14,15,15,16,16,14,15,15,16,16,12,14,13,15,15,13,
-	13,14,15,16,14,15,14,16,15,15,15,16,15,17,15,16,
-	16,17,16,12,13,13,15,15,14,14,15,15,16,13,14,13,
-	16,15,15,15,16,16,17,15,15,15,16,16,14,15,15,16,
-	16,14,15,15,16,16,15,16,16,17,17,16,16,16,16,17,
-	16,17,17,18,17,14,14,15,15,16,15,15,16,16,17,14,
-	15,15,16,16,16,16,16,17,17,15,16,15,17,15,11,12,
-	12,14,14,12,13,14,15,15,12,13,13,15,15,14,15,15,
-	16,16,13,15,14,16,16,12,13,13,15,15,13,14,14,15,
-	16,13,14,14,16,16,15,15,15,16,17,15,15,15,17,16,
-	12,13,13,15,15,13,14,14,16,15,13,14,13,16,15,15,
-	16,15,17,17,14,15,14,17,16,14,15,15,16,16,15,15,
-	16,16,17,15,16,16,17,17,16,16,16,16,18,16,17,16,
-	18,17,14,15,14,16,15,15,15,15,17,16,14,15,14,17,
-	15,16,17,16,17,17,15,16,15,17,15,11,12,12,15,15,
-	13,13,15,14,16,13,15,13,16,14,15,15,16,15,17,15,
-	16,15,17,16,12,14,13,15,15,13,13,15,15,16,15,15,
-	15,16,15,15,15,16,15,17,16,16,16,17,16,12,13,14,
-	15,16,14,14,15,15,16,13,14,13,16,14,16,16,16,16,
-	17,15,16,15,17,15,15,16,15,16,16,14,15,15,16,16,
-	16,16,16,17,16,15,15,16,15,17,17,17,17,18,17,15,
-	15,15,15,16,16,16,16,16,17,14,15,14,16,15,17,17,
-	17,17,18,15,16,15,17,15,12,13,13,15,15,13,14,14,
-	15,16,13,14,14,16,15,14,15,15,16,17,14,15,15,17,
-	16,13,14,14,16,15,13,14,15,16,16,14,15,15,16,16,
-	15,15,16,16,17,15,16,16,17,17,13,14,13,16,15,14,
-	15,15,16,16,13,15,14,16,15,15,16,16,17,17,15,16,
-	14,17,15,15,15,16,17,17,15,15,16,16,17,16,16,16,
-	17,17,16,15,17,16,18,17,17,17,18,18,15,15,15,17,
-	14,16,16,16,17,16,15,16,15,17,15,16,17,17,18,17,
-	16,17,15,18,15,
-};
-
-static const static_codebook _44p8_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p8_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p8_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p8_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p8_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p8_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p8_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p8_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p6_0[] = {
-	 2, 6, 6, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 7, 9, 7,
-	 9, 9, 6, 7, 7, 8, 9, 9, 7, 9, 7, 6, 8, 8, 8, 9,
-	10, 8, 9, 9, 8, 9,10, 9, 9,10,10,10,10, 8, 9, 9,
-	10,10,11, 9,10,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 8,
-	 9, 9, 9,10,10,10,11,10, 8,10, 9,10,11,10, 9,11,
-	 9, 6, 8, 8, 7, 9, 9, 7, 9, 9, 7, 9, 9, 8, 9,10,
-	 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9, 9,
-	 9,10, 9,10,10, 9, 9,10,10, 9,11,10,11,11, 9,10,
-	10,10,11,11,10,11,10, 6, 9, 8, 9, 9,10, 9,10, 9,
-	 8,10,10, 9, 9,10,10,11,11, 9,10,10,10,11,11, 9,
-	11, 9, 6, 8, 8, 7, 9, 9, 7, 9, 9, 8, 9, 9, 9, 9,
-	10, 9,10,10, 7, 9, 9, 9,10,10, 8,10, 9, 6, 8, 9,
-	 9, 9,10, 9,10, 9, 9,10,10, 9, 9,11,10,11,11, 8,
-	 9,10,10,11,11, 9,10, 9, 7, 9, 9, 9,10,10, 9,10,
-	 9, 9,10,10,10,10,11,10,11,11, 9,10, 9,10,11,11,
-	10,11, 9,
-};
-
-static const static_codebook _44p8_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p8_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p6_1[] = {
-	 4, 7, 7, 7, 7, 8, 7, 8, 7, 7, 7, 8, 7, 8, 8, 8,
-	 8, 8, 7, 8, 7, 8, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8,
-	 8, 9, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9,
-	 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 8, 8, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8,
-	 8, 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 8, 9, 8, 8, 8, 8, 8, 9, 9, 8,
-	 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 9, 8, 9, 9, 8, 8, 8, 8, 9, 8, 8, 9, 8, 7, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
-	 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9,
-	 8, 9, 8,
-};
-
-static const static_codebook _44p8_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p8_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p8_p7_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p8_p7_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p8_p7_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p8_p7_0,
-	1, -512202240, 1635281408, 2, 0,
-	(long *)_vq_quantlist__44p8_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p8_p7_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p8_p7_1[] = {
-	 1, 7, 7,12,12, 5,11,12,12,12, 5,12,11,12,12,12,
-	12,12,12,12,12,13,13,13,13, 7,11,11,13,13,13,12,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13, 7,13,10,13,13,13,13,13,13,13,12,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13, 7,13,12,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13, 8,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13, 8,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,10,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13, 8,13,12,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,11,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,11,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,
-};
-
-static const static_codebook _44p8_p7_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p8_p7_1,
-	1, -514619392, 1630767104, 3, 0,
-	(long *)_vq_quantlist__44p8_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p8_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p8_p7_2[] = {
-	 1, 3, 2, 4, 5, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p8_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p8_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p8_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p8_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p8_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p8_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p8_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p8_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p8_short[] = {
-	 3, 9,15,17,20,21,22,23, 5, 5, 7, 9,11,13,17,20,
-	 9, 5, 5, 6, 8,10,15,18,11, 7, 5, 4, 6, 9,13,17,
-	14, 9, 7, 5, 6, 7,10,14,17,10, 8, 6, 6, 4, 5, 8,
-	20,14,13,10, 8, 4, 3, 4,23,17,16,14,12, 6, 4, 4,
-};
-
-static const static_codebook _huff_book__44p8_short = {
-	2, 64,
-	(long *)_huff_lengthlist__44p8_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p9_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44p9_l0_0[] = {
-	 2, 5, 5, 7, 6, 8, 8, 9, 9,10,10,11,11, 4, 5, 5,
-	 6, 7, 8, 8, 9, 9,10,10,11,10, 4, 5, 5, 7, 6, 8,
-	 8, 9, 9,10,10,10,10, 6, 6, 7, 6, 7, 8, 8, 9, 9,
-	10, 9,11, 9, 6, 6, 6, 7, 6, 8, 8, 9, 9, 9,10, 9,
-	11, 7, 7, 8, 8, 8, 8, 9, 9, 9,10, 9,11, 9, 7, 8,
-	 8, 8, 8, 9, 8, 9, 9, 9,10, 9,11, 8, 9, 9, 9, 9,
-	 9, 9,10,10,11,10,12,10, 8, 9, 9, 9, 9, 9, 9,10,
-	 9,10,11,11,12, 9,10,10,10,10,10,10,10,11,11,11,
-	11,12, 9,10,10,10,10,11,10,11,10,11,11,12,11,11,
-	11,11,11,11,11,11,11,12,11,12,11,12,11,11,11,11,
-	11,11,11,12,11,12,11,12,11,
-};
-
-static const static_codebook _44p9_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44p9_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44p9_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_l0_1[] = {
-	 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p9_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p9_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p9_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44p9_l1_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_l1_0[] = {
-	 1, 2, 3, 5, 9, 9, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44p9_l1_0 = {
-	2, 25,
-	(long *)_vq_lengthlist__44p9_l1_0,
-	1, -514619392, 1630767104, 3, 0,
-	(long *)_vq_quantlist__44p9_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44p9_lfe[] = {
-	 1, 1,
-};
-
-static const static_codebook _huff_book__44p9_lfe = {
-	1, 2,
-	(long *)_huff_lengthlist__44p9_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44p9_long[] = {
-	 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book__44p9_long = {
-	1, 8,
-	(long *)_huff_lengthlist__44p9_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44p9_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p9_p1_0[] = {
-	 1, 5, 5, 4, 8, 8, 4, 8, 8, 5, 7, 8, 8, 9,10, 8,
-	10,10, 5, 8, 7, 8,10,10, 8,10, 9, 7, 9, 9, 9,11,
-	11, 9,11,11, 9,11,11,11,12,13,11,13,13, 9,11,11,
-	11,13,13,11,13,13, 7, 9, 9, 9,11,11, 9,11,11, 9,
-	11,11,11,13,13,11,13,13, 9,11,11,11,13,13,11,13,
-	12, 5, 9, 9, 9,11,11, 9,11,11, 9,11,11,11,12,13,
-	11,13,13, 9,11,11,11,13,13,11,13,13, 9,11,12,11,
-	13,13,12,13,13,11,12,13,13,14,15,13,14,14,12,13,
-	13,13,15,15,13,15,14, 8,10,10,11,13,13,12,14,13,
-	11,12,12,13,14,15,13,15,15,11,12,12,13,15,15,13,
-	15,14, 5, 9, 9, 9,11,11, 9,11,11, 9,11,11,11,13,
-	13,11,13,13, 9,11,10,11,13,13,11,13,12, 8,10,10,
-	11,13,13,12,13,13,11,12,12,13,14,15,14,15,15,10,
-	12,12,13,14,15,13,15,14, 9,12,11,12,13,13,11,13,
-	13,12,13,13,13,15,15,13,14,15,11,13,12,13,15,14,
-	13,15,14,
-};
-
-static const static_codebook _44p9_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p9_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p9_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_p2_0[] = {
-	 4, 6, 6, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 6,
-	 8, 8,11,11, 6, 8, 8,11,11, 6, 7, 7, 9, 9, 7, 8,
-	 9,10,11, 7, 9, 9,11,10, 8, 9,10,12,12, 8,10,10,
-	12,12, 6, 7, 7, 9, 9, 7, 9, 9,10,10, 7, 9, 8,11,
-	10, 8,10,10,12,12, 8,10, 9,12,12, 8, 9, 9,11,11,
-	 9,10,10,12,12, 9,11,11,12,13,11,12,12,13,14,11,
-	12,12,14,14, 8, 9, 9,11,11, 9,11,10,13,12, 9,10,
-	10,13,12,11,12,12,14,14,11,12,12,14,13, 7, 8, 9,
-	10,10, 8,10,10,11,11, 8,10,10,11,11,10,11,11,13,
-	13,10,11,11,13,13, 8, 9,10,10,11,10,11,11,12,13,
-	10,11,11,12,12,11,11,12,13,14,11,12,12,14,14, 8,
-	10,10,11,11,10,11,11,12,13,10,11,11,12,12,11,12,
-	12,14,14,11,12,12,14,14,10,11,11,12,13,11,12,12,
-	13,14,12,13,13,14,14,13,13,14,14,16,13,14,14,15,
-	16,10,11,11,13,13,12,12,12,14,14,11,12,12,14,14,
-	13,14,14,15,16,13,14,14,16,15, 7, 8, 8,10,10, 8,
-	10,10,11,11, 8,10,10,12,11,10,11,11,13,13,10,11,
-	11,13,13, 8,10,10,11,11,10,11,11,12,12,10,11,11,
-	12,12,11,12,12,14,14,11,12,12,14,14, 8,10, 9,11,
-	10,10,11,11,13,12,10,11,10,13,12,11,12,12,14,14,
-	11,12,11,14,13,10,11,11,13,13,11,12,12,14,14,12,
-	12,12,14,14,13,14,14,15,16,13,14,14,15,15,10,11,
-	11,13,12,12,12,12,14,14,11,12,12,14,13,13,14,14,
-	16,15,13,14,13,16,14,10,11,11,13,13,12,12,13,14,
-	15,12,13,13,14,15,13,14,15,15,16,13,14,14,16,16,
-	11,12,13,14,14,13,13,14,15,16,13,14,14,15,16,14,
-	15,15,16,17,14,15,16,17,17,11,12,12,14,14,13,14,
-	14,15,16,13,14,14,15,15,14,15,15,16,18,14,15,15,
-	17,16,13,14,15,15,16,15,15,16,16,18,15,15,15,17,
-	17,16,16,17,17,18,16,16,16,18,18,14,14,14,16,16,
-	15,15,15,16,17,15,15,15,16,17,16,17,17,18,18,16,
-	16,17,18,17,10,11,11,14,13,12,13,13,15,14,11,13,
-	13,15,14,13,15,15,16,16,13,14,14,16,16,11,12,12,
-	14,14,13,13,13,15,15,13,14,13,15,15,15,15,15,17,
-	16,14,15,15,17,16,11,13,12,14,14,13,14,13,15,15,
-	13,14,13,15,15,14,15,15,17,17,14,15,15,17,16,14,
-	14,14,16,16,14,15,15,17,17,15,15,16,17,16,17,16,
-	17,18,18,16,17,17,18,18,13,14,14,16,15,15,15,15,
-	17,17,14,16,15,16,16,17,17,17,18,18,16,17,16,20,
-	19, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,12,11,
-	10,11,11,13,13,10,11,11,13,13, 8, 9,10,11,11,10,
-	11,11,12,12,10,11,11,13,12,11,12,12,14,14,11,12,
-	12,14,14, 9,10,10,11,11,10,11,11,12,12,10,11,11,
-	13,12,11,12,12,14,14,11,12,12,14,14,10,10,11,12,
-	13,11,12,12,14,14,11,12,12,14,14,13,14,14,15,16,
-	13,14,14,15,16,10,11,11,13,13,12,12,12,14,14,12,
-	13,12,14,14,13,14,14,16,16,13,14,14,15,15, 9,10,
-	10,11,12,10,11,11,12,13,10,11,11,13,12,11,12,12,
-	14,14,11,12,12,14,14,10,10,11,12,13,11,12,12,13,
-	14,11,12,12,13,14,12,13,14,14,15,12,13,13,15,15,
-	10,11,11,13,13,11,12,12,13,14,11,12,12,14,13,12,
-	13,13,15,15,12,13,13,15,15,12,11,13,12,14,13,13,
-	14,14,15,13,13,14,14,15,14,15,15,16,17,14,15,15,
-	16,17,12,13,12,14,14,13,14,14,15,15,13,14,14,15,
-	15,14,15,15,16,17,14,15,15,16,17, 8, 9, 9,11,11,
-	10,11,11,12,13,10,11,11,13,12,12,13,13,14,15,11,
-	13,12,15,14, 9,11,10,12,12,11,12,12,13,14,11,12,
-	12,14,13,13,13,14,15,15,13,14,13,15,15, 9,11,11,
-	12,12,11,12,12,14,14,11,12,12,14,13,13,14,14,15,
-	16,13,14,13,15,14,11,12,12,14,13,12,13,13,14,15,
-	13,14,14,16,15,15,15,15,15,16,15,16,15,17,17,11,
-	12,12,14,14,13,14,14,15,15,12,13,13,15,14,15,15,
-	15,17,17,14,15,15,17,15,11,12,12,14,14,12,13,13,
-	15,15,12,13,13,15,15,14,15,15,17,17,14,15,15,16,
-	16,12,13,13,14,15,13,14,14,16,16,14,14,14,15,16,
-	15,16,16,17,17,15,16,16,17,17,12,13,13,15,15,14,
-	14,14,16,16,14,14,15,16,16,15,16,16,17,17,15,16,
-	16,17,17,14,15,15,15,16,15,15,16,16,18,15,16,16,
-	17,17,17,17,17,18,18,16,17,17,19,18,14,15,15,16,
-	17,15,16,16,17,17,15,16,16,18,17,16,17,17,19,18,
-	17,17,17,19,18,10,12,12,14,14,13,13,14,15,15,12,
-	14,13,16,15,15,15,15,17,17,14,15,15,17,16,12,13,
-	13,15,14,13,14,14,16,16,14,14,15,17,16,15,16,16,
-	17,17,15,16,16,18,17,12,13,13,15,14,14,15,15,16,
-	16,13,15,14,16,15,16,17,16,19,17,15,16,16,17,17,
-	14,15,15,17,15,15,16,15,17,17,16,17,16,18,17,17,
-	17,18,18,18,17,17,18,19,18,14,15,15,16,16,15,16,
-	16,17,18,15,16,16,18,16,17,18,18,19,19,17,18,17,
-	18,19, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,12,
-	11,10,11,11,13,13, 9,11,11,13,13, 9,10,10,11,11,
-	10,11,11,12,12,10,11,11,12,12,11,12,12,14,14,11,
-	12,12,14,14, 8,10, 9,11,11,10,11,11,12,12,10,11,
-	11,12,12,11,12,12,14,14,11,12,12,14,14,10,11,11,
-	13,13,11,12,13,14,14,12,12,12,14,14,13,14,14,15,
-	16,13,14,14,16,16,10,11,10,13,12,11,12,12,14,14,
-	11,12,12,14,14,13,14,14,15,16,13,14,14,16,15, 8,
-	 9, 9,11,11,10,11,11,12,13,10,11,11,13,12,12,13,
-	13,14,15,12,13,13,15,14,10,11,11,12,12,11,11,12,
-	13,14,11,12,12,14,14,13,13,14,15,16,13,14,14,15,
-	15, 9,10,11,12,12,11,12,12,13,14,11,12,12,14,13,
-	13,14,14,15,16,12,14,13,15,15,11,12,12,14,14,12,
-	13,13,14,15,13,14,14,16,15,14,15,15,15,17,15,15,
-	16,16,17,11,12,12,13,14,13,14,14,15,15,12,13,13,
-	15,14,15,16,15,16,17,14,16,15,17,15, 9,10,10,12,
-	11,10,11,11,13,13,10,11,11,13,12,11,12,12,14,14,
-	11,12,12,14,14,10,11,11,12,13,11,12,12,13,14,11,
-	12,12,14,14,12,13,13,15,15,12,13,13,15,15,10,11,
-	10,13,12,11,12,12,13,13,11,12,12,14,13,12,13,13,
-	15,15,12,13,13,15,14,12,13,12,14,14,13,14,14,15,
-	15,13,14,14,15,15,14,15,15,16,16,14,15,15,16,16,
-	11,13,11,14,12,13,13,13,15,14,12,14,13,15,14,15,
-	15,15,17,16,14,15,14,17,15,10,12,12,14,14,13,13,
-	14,15,16,12,14,13,15,15,14,15,16,17,17,14,15,16,
-	17,17,12,13,13,14,15,13,14,14,16,16,14,14,15,16,
-	16,16,16,16,17,17,16,16,16,18,18,12,13,13,14,15,
-	14,14,15,16,16,13,14,14,16,15,16,16,16,17,18,15,
-	16,16,17,17,14,15,15,16,16,15,15,16,17,17,15,16,
-	16,17,18,17,18,18,18,19,17,18,18,19,19,14,15,15,
-	16,16,15,16,16,17,17,15,16,16,17,17,17,17,18,20,
-	18,17,18,17,18,18,11,12,12,14,14,12,13,14,15,15,
-	12,13,13,15,15,14,15,15,16,17,14,15,15,16,17,12,
-	13,13,15,15,14,14,14,16,16,14,14,14,16,16,15,16,
-	16,17,17,15,16,16,17,17,12,13,13,15,14,13,14,14,
-	16,15,14,15,14,16,15,15,16,16,17,17,15,16,16,17,
-	16,14,15,15,16,16,15,16,16,17,17,16,16,16,17,17,
-	17,17,17,19,18,17,17,17,18,19,14,15,14,17,15,15,
-	16,16,17,17,15,16,15,17,17,16,17,17,18,18,16,17,
-	17,18,17, 6,11,11,13,13,11,12,12,14,14,11,12,12,
-	14,14,13,14,14,16,16,13,14,14,16,16,11,12,12,14,
-	14,12,13,13,15,15,12,13,13,15,15,14,15,15,16,17,
-	14,15,15,17,18,11,12,12,14,14,12,13,13,15,15,12,
-	13,13,15,15,14,15,15,17,17,14,15,15,16,16,13,14,
-	14,15,16,14,15,15,16,17,14,15,15,17,16,15,16,17,
-	18,17,16,16,16,18,17,14,14,15,16,16,14,15,15,18,
-	16,14,15,15,17,16,16,17,17,18,18,16,17,16,18,17,
-	11,12,12,14,14,12,13,13,15,15,12,13,13,15,15,14,
-	15,15,17,17,14,15,15,16,16,12,13,13,15,15,13,14,
-	14,15,16,13,14,14,16,16,15,16,16,17,17,15,15,16,
-	17,17,12,13,13,15,15,14,14,14,16,16,13,14,14,16,
-	16,15,16,16,17,17,15,16,16,17,17,14,14,15,15,16,
-	15,15,16,16,17,15,15,16,16,17,16,17,17,17,18,16,
-	17,17,18,18,14,15,15,16,16,15,16,16,17,17,15,16,
-	16,17,17,17,17,17,18,19,17,17,17,18,18,10,12,12,
-	14,14,12,13,14,15,16,13,14,13,15,15,14,15,15,17,
-	17,14,15,16,17,17,12,13,13,15,15,13,14,14,15,15,
-	14,15,14,16,16,15,16,16,17,18,15,17,16,18,17,12,
-	13,13,15,15,14,14,14,16,16,13,14,14,16,15,15,16,
-	16,17,18,15,16,16,17,17,14,14,14,16,16,15,15,16,
-	17,17,15,16,16,17,17,17,17,17,18,20,17,17,17,19,
-	19,14,15,15,16,16,15,17,16,18,18,15,16,15,17,16,
-	17,18,19,19,19,17,17,17,18,17,13,14,14,16,16,14,
-	15,15,17,17,14,15,15,16,17,15,17,17,18,18,16,16,
-	17,18,17,14,15,15,16,17,15,16,16,17,17,15,16,16,
-	17,17,16,17,17,18,18,17,17,17,18,19,14,15,15,16,
-	17,15,16,16,17,17,15,16,16,17,17,16,17,17,18,18,
-	17,17,17,19,19,16,16,16,16,18,16,17,17,17,18,17,
-	17,17,17,19,18,18,18,19,19,18,18,18,19,20,16,16,
-	17,18,18,16,18,17,18,18,17,17,17,20,19,18,18,19,
-	21,20,18,20,18,18,19,10,12,12,14,14,14,14,15,15,
-	17,14,15,14,17,15,16,16,17,18,18,16,18,17,19,18,
-	12,14,13,16,15,14,14,15,15,17,15,16,16,18,17,16,
-	17,18,17,19,17,19,18,20,19,12,13,13,15,15,15,16,
-	17,17,18,14,16,14,17,16,17,18,18,19,19,17,17,17,
-	18,18,15,15,15,17,16,15,16,16,17,17,17,19,17,18,
-	18,18,18,18,18,21,19,20,19,20,19,15,15,16,16,17,
-	17,17,18,20,20,15,16,16,18,17,18,19,19,19,20,18,
-	19,18,19,17, 6,11,11,13,13,11,12,12,14,14,11,12,
-	12,14,14,13,14,14,16,16,13,14,14,16,16,11,12,12,
-	14,14,12,13,13,15,15,12,13,13,15,15,14,15,15,17,
-	17,14,15,15,17,16,11,12,12,14,14,12,13,13,15,15,
-	12,13,13,15,15,14,15,15,16,16,14,15,15,16,16,13,
-	14,14,16,16,15,15,15,16,16,14,15,15,17,16,16,17,
-	17,19,18,16,17,17,18,18,13,14,14,15,15,14,15,15,
-	17,16,14,15,15,17,16,16,17,16,17,18,15,16,16,18,
-	18,10,12,12,14,14,12,13,14,15,15,12,13,13,15,15,
-	14,15,15,17,17,14,15,15,17,16,12,13,13,15,15,14,
-	14,14,15,16,14,15,15,16,16,15,16,16,17,18,16,16,
-	16,18,18,12,13,13,14,14,14,14,15,16,16,13,14,14,
-	16,16,15,16,16,18,18,15,16,16,19,17,14,15,15,16,
-	17,15,15,16,17,17,16,17,16,17,18,17,17,18,17,19,
-	17,17,18,18,19,14,14,14,16,16,15,16,16,17,17,15,
-	16,15,17,17,17,17,17,19,20,16,17,17,18,18,11,12,
-	12,14,14,12,13,13,15,15,12,13,13,15,15,14,15,15,
-	16,16,14,15,14,16,16,12,13,13,15,15,14,14,14,16,
-	16,13,14,14,16,16,15,16,16,18,17,15,16,16,17,17,
-	12,13,13,15,15,13,14,14,16,16,13,14,14,16,16,15,
-	16,15,18,18,15,16,15,17,16,14,15,15,16,16,15,16,
-	16,17,17,15,16,16,18,17,16,17,17,18,18,16,17,17,
-	18,18,14,15,14,16,15,15,16,15,17,17,15,16,15,17,
-	16,16,17,17,18,18,17,17,16,19,17,10,12,12,14,15,
-	14,14,15,15,17,14,15,14,17,15,16,17,17,17,18,16,
-	17,17,18,18,12,14,13,16,15,14,14,16,15,17,15,17,
-	16,18,17,17,17,18,17,19,18,18,18,19,18,12,13,14,
-	15,15,15,16,16,16,17,14,15,14,18,16,18,17,18,19,
-	19,17,18,17,20,18,15,15,15,17,17,15,16,16,17,18,
-	18,18,18,19,18,18,18,19,18,20,18,19,19,21,21,15,
-	15,16,16,17,17,18,18,18,18,15,16,16,17,17,17,19,
-	20,19,20,17,18,18,19,17,13,14,14,16,16,14,15,15,
-	16,17,14,15,15,17,17,16,16,17,17,18,15,17,16,17,
-	17,14,15,15,16,16,15,16,16,17,17,16,16,16,17,17,
-	17,17,18,17,18,17,17,17,18,20,14,15,15,17,16,15,
-	16,16,17,17,15,16,16,17,17,17,17,17,18,18,16,17,
-	17,19,18,16,16,17,17,17,17,18,17,19,18,17,17,17,
-	18,19,17,20,18,19,21,17,19,18,19,20,15,17,15,17,
-	16,16,17,17,18,18,17,17,17,18,17,18,19,18,19,21,
-	18,18,17,19,19,
-};
-
-static const static_codebook _44p9_p2_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p9_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p9_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p9_p3_0[] = {
-	 2, 5, 4, 4, 7, 7, 4, 7, 6, 5, 6, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 6, 7, 9, 9, 7, 9, 8, 6, 8, 8, 8,10,
-	10, 8,10,10, 8, 9,10,10,11,12,10,12,12, 8,10,10,
-	10,12,12,10,12,11, 6, 8, 8, 8,10,10, 8,10,10, 8,
-	10,10,10,11,12,10,12,12, 8,10, 9,10,12,11,10,12,
-	11, 5, 8, 8, 8,10,10, 8,10,10, 8, 9,10,10,11,11,
-	10,11,11, 8,10,10,10,11,12,10,12,11, 8,10,10,10,
-	11,11,10,11,11,10,11,11,11,12,13,11,12,13,10,11,
-	11,11,13,13,11,13,13, 7, 9, 9,10,11,12,10,12,11,
-	 9,11,11,11,12,13,12,14,13, 9,11,11,12,13,14,11,
-	13,12, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
-	12,10,12,12, 8,10, 9,10,12,11, 9,11,11, 7, 9, 9,
-	10,11,12,10,12,11, 9,11,11,11,12,13,12,14,13, 9,
-	11,11,12,13,14,11,13,12, 8,10,10,10,11,11,10,11,
-	11,10,11,11,11,13,13,11,13,13,10,11,10,11,13,12,
-	11,13,12,
-};
-
-static const static_codebook _44p9_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p9_p3_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44p9_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p3_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p9_p3_1[] = {
-	 4, 6, 6, 6, 7, 7, 6, 7, 7, 6, 7, 7, 7, 7, 8, 7,
-	 7, 8, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8,
-	 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
-	 9, 5, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
-	 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8,
-	 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9,
-	 9, 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 9,
-	 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9,
-	 9, 9, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 9, 7, 8, 8,
-	 8, 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8,
-	 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
-	 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44p9_p3_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p9_p3_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44p9_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44p9_p4_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p9_p4_0[] = {
-	 2, 5, 5, 4, 7, 7, 4, 7, 6, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 6, 7, 8, 8, 9,
-	10, 8,10,10, 8, 9,10,10,11,12,10,11,12, 8,10,10,
-	10,11,12,10,12,11, 6, 8, 7, 8,10,10, 8,10, 9, 8,
-	10,10,10,11,12,10,12,12, 8,10, 9,10,12,11,10,12,
-	11, 5, 8, 8, 8,10,10, 8,10,10, 7, 9,10, 9,10,11,
-	10,11,11, 8,10,10,10,12,12,10,12,11, 7, 9, 9, 9,
-	11,11, 9,11,11, 9,10,11,11,11,12,11,12,12, 9,11,
-	11,11,12,12,11,12,12, 7, 9, 9,10,11,12,10,12,11,
-	 9,11,10,11,11,12,12,13,13, 9,11,11,12,13,13,11,
-	13,11, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
-	12,10,12,12, 7, 9, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	10,11,12,10,12,11, 9,11,11,11,11,13,12,13,13, 9,
-	10,11,12,13,13,11,12,11, 7, 9, 9, 9,11,11, 9,11,
-	11, 9,11,11,11,12,12,11,12,12, 9,11,10,11,12,12,
-	10,12,11,
-};
-
-static const static_codebook _44p9_p4_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p9_p4_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44p9_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p4_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_p4_1[] = {
-	 6, 8, 8,10, 9, 8, 9, 9,10,10, 8, 9, 9,10,10, 8,
-	10,10,10,10, 8,10,10,10,10, 9, 9, 9,10,10, 9,10,
-	10,10,11, 9,10,10,11,11,10,10,10,11,11,10,10,10,
-	11,11, 9, 9, 9,10,10, 9,10,10,11,11, 9,10,10,11,
-	10,10,10,10,11,11,10,10,10,11,11,10,10,10,10,11,
-	10,10,11,11,11,10,11,11,11,11,11,11,11,11,11,11,
-	11,11,11,11,10,10,10,11,10,10,11,11,11,11,10,11,
-	10,11,11,11,11,11,11,11,10,11,11,11,11, 9,10,10,
-	10,11,10,10,11,11,11,10,11,11,11,11,10,11,11,11,
-	11,10,11,11,11,11,10,10,11,11,11,11,11,11,11,11,
-	11,11,11,11,12,11,11,12,12,12,11,11,11,12,12,10,
-	11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,
-	11,12,12,11,11,11,12,12,11,11,11,11,11,11,12,12,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,11,11,11,11,11,11,12,12,12,12,11,12,11,12,12,
-	11,12,12,12,12,12,12,12,12,12, 9,10,10,11,10,10,
-	11,11,11,11,10,11,11,11,11,10,11,11,11,11,10,11,
-	11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,
-	12,12,11,11,12,12,12,11,11,11,12,12,10,11,10,11,
-	11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,
-	11,11,11,12,12,11,11,11,11,11,11,12,12,12,12,11,
-	12,12,12,12,11,12,12,12,12,12,12,12,12,12,11,11,
-	11,11,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
-	12,12,11,12,12,12,12,11,11,11,11,11,11,12,12,12,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,13,12,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,12,
-	12,12,12,13,13,12,12,12,13,13,12,13,13,13,13,12,
-	13,13,13,13,11,11,11,11,11,11,12,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,13,
-	13,13,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
-	13,13,12,12,12,13,12,12,13,13,13,13,12,13,13,13,
-	13, 7,10,10,11,11,10,10,11,11,11,10,11,11,11,11,
-	10,11,11,11,11,10,11,11,11,11,10,10,10,11,11,10,
-	11,11,11,11,11,11,11,11,12,11,11,11,12,12,11,11,
-	11,12,12,10,11,11,11,11,11,11,11,12,11,11,11,11,
-	12,11,11,11,11,12,12,11,11,11,12,12,11,11,11,11,
-	11,11,11,11,12,12,11,11,12,12,12,11,12,12,12,12,
-	11,12,12,12,12,11,11,11,11,11,11,12,12,12,12,11,
-	11,12,12,12,11,12,12,12,12,11,12,12,12,12,10,11,
-	11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,
-	12,12,11,11,11,12,12,11,11,11,11,11,11,11,12,12,
-	12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
-	11,11,11,11,11,11,12,11,12,12,11,11,11,12,12,11,
-	12,12,12,12,11,12,12,12,12,11,11,11,11,12,11,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,10,11,10,11,11,
-	11,11,11,12,12,11,11,11,12,12,11,12,12,12,12,11,
-	12,12,12,12,10,11,11,12,11,11,11,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,
-	12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,11,12,11,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,13,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,12,12,12,13,12,11,11,11,12,12,12,12,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,13,13,12,12,12,13,13,11,12,12,12,12,12,
-	12,12,12,13,12,12,12,12,12,12,12,13,13,13,12,13,
-	12,13,13,12,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,
-	12,12,12,12,13,13,12,13,12,13,13,12,13,13,13,13,
-	12,13,13,13,13,11,11,11,12,12,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,13,12,13,12,
-	13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,13,
-	13,12,12,12,13,12,12,13,13,13,13,12,13,13,13,13,
-	12,12,12,12,12,12,12,13,13,13,12,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,13,
-	13,13,13,12,12,12,13,13,13,13,13,13,13,13,13,13,
-	13,13, 7,10,10,11,11,10,11,11,11,11,10,11,11,11,
-	11,10,11,11,11,11,10,11,11,11,11,10,11,11,11,11,
-	11,11,11,11,11,11,11,11,12,11,11,11,12,12,12,11,
-	11,11,12,12,10,10,10,11,11,11,11,11,12,11,10,11,
-	11,11,11,11,11,11,12,12,11,11,11,12,12,11,11,11,
-	11,11,11,11,12,12,12,11,12,11,12,12,11,12,12,12,
-	12,11,12,12,12,12,11,11,11,11,11,11,11,11,12,12,
-	11,12,11,12,12,11,12,12,12,12,11,12,12,12,12,10,
-	10,10,11,11,11,11,11,12,12,11,11,11,12,12,11,12,
-	12,12,12,11,12,12,12,12,11,11,11,11,11,11,11,12,
-	12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,11,11,11,11,11,11,12,12,12,12,11,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,
-	12,13,12,11,11,11,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,10,11,11,11,
-	11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,
-	11,11,11,12,12,11,11,11,11,11,11,11,12,12,12,11,
-	12,11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,
-	11,11,11,11,11,11,12,12,11,11,11,12,12,11,12,12,
-	12,12,11,12,12,12,12,11,11,11,12,11,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	11,11,11,12,11,11,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
-	13,12,13,13,13,13,12,13,13,13,13,11,12,12,12,12,
-	12,12,12,12,13,12,12,12,12,12,12,13,13,13,13,12,
-	13,13,13,13,12,12,12,12,12,12,12,13,13,13,12,13,
-	12,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,
-	12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,13,
-	13,13,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
-	12,13,13,12,12,12,13,13,11,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,13,12,13,12,13,
-	13,12,12,12,12,12,12,12,12,13,13,12,12,12,13,13,
-	13,13,13,13,13,12,13,13,13,13,12,12,12,12,12,12,
-	13,12,13,13,12,13,12,13,12,12,13,13,13,13,12,13,
-	13,13,13, 8,11,11,12,12,11,12,12,12,12,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,12,
-	12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,
-	12,12,12,13,13,11,11,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,
-	12,12,12,12,12,12,12,13,12,12,12,12,12,12,12,13,
-	13,13,12,12,13,13,13,11,12,12,12,12,12,12,12,13,
-	12,12,12,12,13,13,12,13,13,13,13,12,13,13,13,13,
-	11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
-	13,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,12,13,13,12,13,12,13,13,12,12,12,12,12,
-	12,12,12,12,13,12,12,12,13,13,12,13,13,13,13,12,
-	13,13,13,13,12,12,12,12,12,12,12,12,13,13,12,12,
-	12,13,13,12,13,13,13,13,12,13,13,13,13,11,11,11,
-	12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,13,
-	12,12,12,12,12,13,11,12,12,12,12,12,12,12,12,13,
-	12,12,12,12,13,12,13,13,13,13,12,13,13,13,13,11,
-	12,12,12,12,12,12,12,12,13,12,12,12,13,12,12,13,
-	13,13,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
-	13,13,12,12,13,13,13,12,13,13,13,13,12,13,13,13,
-	13,12,12,12,12,12,12,13,13,13,13,12,13,12,13,13,
-	12,13,13,13,13,13,13,13,13,13,11,11,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,13,13,13,12,13,13,13,13,11,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,
-	12,13,12,13,13,12,12,12,12,12,12,12,12,13,13,12,
-	12,12,13,13,12,13,13,13,13,12,13,13,13,13,12,12,
-	12,12,12,12,13,12,13,13,12,12,12,13,13,13,13,13,
-	13,13,12,13,13,13,13,11,11,11,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,12,12,12,13,12,
-	11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,
-	12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,
-	12,12,13,12,12,12,13,12,12,13,13,13,13,12,13,13,
-	13,13,12,12,12,12,12,12,12,12,13,13,12,12,12,13,
-	13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,
-	12,13,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
-	13,13,13,13, 8,11,11,11,11,11,12,12,12,12,11,12,
-	12,12,12,12,12,12,12,12,11,12,12,12,12,11,11,11,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	13,12,12,12,13,13,11,11,11,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,13,
-	13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,
-	12,13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,
-	13,11,11,11,12,12,12,12,12,12,12,11,12,12,12,12,
-	12,12,12,13,13,12,12,12,13,12,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,13,12,12,13,13,13,12,13,
-	13,13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,
-	12,12,12,13,13,13,13,12,13,13,13,13,12,12,12,12,
-	12,12,12,13,13,13,12,12,13,13,13,13,13,13,13,13,
-	12,13,13,13,13,12,12,12,12,12,12,13,12,13,13,12,
-	12,12,13,13,13,13,13,13,13,12,13,13,13,13,11,11,
-	11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,13,12,13,13,12,12,12,13,13,
-	11,12,12,12,12,12,12,12,12,13,12,12,12,12,12,12,
-	12,12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,
-	12,13,12,12,12,12,13,13,12,13,13,13,13,12,13,13,
-	13,13,12,12,12,12,12,12,12,12,13,13,12,12,12,13,
-	12,12,13,13,13,13,12,13,13,13,13,11,11,11,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,
-	12,12,12,12,13,13,13,13,12,13,13,13,13,11,12,12,
-	12,12,12,12,12,12,13,12,12,12,12,12,12,13,13,13,
-	13,12,13,13,13,13,12,12,12,12,12,12,12,12,13,13,
-	12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
-	12,12,12,12,12,13,13,13,13,12,12,12,13,12,13,13,
-	13,13,13,12,13,13,13,13,11,11,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	13,11,12,12,12,12,12,12,12,12,12,12,12,12,13,12,
-	12,12,12,13,13,12,13,13,13,13,11,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,13,13,13,13,12,13,
-	12,13,13,12,12,12,12,12,12,12,13,13,13,12,13,12,
-	13,13,12,13,13,13,13,13,13,13,13,13,12,12,12,12,
-	12,12,12,12,12,13,12,12,12,13,13,13,13,13,13,13,
-	12,13,13,13,13,
-};
-
-static const static_codebook _44p9_p4_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p9_p4_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p9_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44p9_p5_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_p5_0[] = {
-	 4, 6, 6, 9, 9, 6, 7, 8,10,11, 6, 8, 7,10,10, 8,
-	10,10,12,12, 8,10,10,12,12, 6, 7, 8,10,10, 7, 8,
-	 9,10,11, 8, 9, 9,11,11,10,10,11,12,13,10,11,11,
-	13,13, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 9, 8,11,
-	10,10,11,11,13,13,10,11,10,13,12, 9,10,10,11,12,
-	10,10,11,12,13,10,11,11,12,13,12,12,13,12,14,12,
-	13,13,14,14, 9,10,10,12,11,10,11,11,13,12,10,11,
-	10,13,12,12,13,13,14,14,12,13,12,14,12, 7, 8, 8,
-	10,11, 8, 9,10,11,12, 8, 9, 9,11,12,10,11,12,13,
-	14,10,11,11,13,13, 8, 9,10,11,12, 9,10,11,12,13,
-	10,10,11,12,12,11,12,12,13,14,11,12,12,14,14, 8,
-	 9, 9,11,12,10,10,11,12,13, 9,10,10,12,12,11,12,
-	12,14,14,11,12,12,14,13,11,11,12,12,13,11,12,12,
-	13,14,12,12,13,14,14,13,13,14,14,16,13,14,14,15,
-	15,11,12,11,13,13,12,12,12,14,14,11,12,12,14,13,
-	13,14,14,15,15,13,14,13,15,14, 7, 8, 8,11,10, 8,
-	10, 9,12,11, 8,10, 9,12,11,10,11,11,13,13,10,12,
-	11,14,13, 8, 9, 9,12,11, 9,10,10,12,12,10,11,10,
-	13,12,11,12,12,13,14,11,12,12,14,14, 8,10, 9,12,
-	11,10,11,10,12,12, 9,11,10,13,11,11,12,12,14,14,
-	11,12,12,14,13,11,11,12,13,13,11,12,12,13,14,12,
-	12,12,14,14,13,13,14,14,15,13,14,14,15,15,11,12,
-	11,13,12,12,12,12,14,14,11,12,12,14,13,13,14,14,
-	15,15,13,14,13,15,14,10,11,11,12,13,11,12,12,13,
-	14,11,12,12,13,14,13,13,14,14,16,13,14,14,15,15,
-	11,12,12,12,14,12,12,13,13,15,12,13,13,13,15,14,
-	14,15,15,16,14,14,15,15,16,11,12,12,13,14,12,13,
-	13,14,15,12,13,13,14,14,14,14,15,15,16,14,14,14,
-	15,15,13,14,14,14,15,14,14,15,15,16,14,15,15,15,
-	16,15,15,16,16,18,16,16,16,17,17,13,14,14,15,15,
-	14,14,15,16,16,14,14,14,16,15,16,16,16,17,17,15,
-	16,16,17,16,10,11,11,13,12,11,12,12,14,13,11,12,
-	12,14,13,13,14,14,15,15,13,14,13,16,14,11,12,12,
-	14,13,12,13,13,14,14,12,13,13,15,14,14,14,14,15,
-	15,14,15,14,16,15,11,12,12,14,12,12,13,13,15,14,
-	12,13,12,15,13,14,15,14,16,15,14,15,14,16,15,13,
-	14,14,15,15,14,14,14,15,16,14,15,14,16,16,15,16,
-	16,16,17,16,16,16,17,17,13,14,14,15,14,14,15,15,
-	16,15,14,15,14,16,15,16,16,16,17,17,15,16,15,18,
-	16, 6, 8, 8,11,11, 8, 9,10,11,12, 8,10, 9,12,12,
-	10,11,11,13,13,10,12,11,14,13, 8, 9, 9,11,12, 9,
-	10,10,12,12, 9,10,10,12,12,11,11,12,13,14,11,12,
-	12,14,14, 8,10, 9,12,11,10,11,11,12,12, 9,11,10,
-	13,12,11,12,12,14,14,11,12,12,14,13,10,11,11,13,
-	13,11,12,12,13,14,11,12,12,14,14,13,13,14,13,15,
-	13,14,14,15,15,11,12,11,13,13,12,12,12,14,14,11,
-	12,12,14,13,13,14,14,15,15,13,14,13,15,14, 8, 9,
-	 9,11,11, 9,10,10,12,12, 9,10,10,12,12,11,12,12,
-	13,14,11,12,12,14,14, 9, 9,10,11,12,10,10,11,12,
-	13,10,10,11,12,13,12,12,13,13,15,12,12,13,14,14,
-	 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
-	13,13,14,15,12,13,12,14,14,11,11,12,12,14,12,12,
-	13,13,14,12,12,13,13,14,13,13,14,14,16,14,14,14,
-	15,15,11,12,12,14,13,12,13,13,14,14,12,13,13,15,
-	14,14,14,14,16,16,13,14,14,16,14, 7, 9, 9,12,11,
-	 9,10,10,12,12, 9,11,10,13,12,11,12,12,13,14,11,
-	13,12,14,13, 9,10,10,12,12,10,10,11,12,13,10,12,
-	11,13,13,12,12,13,13,14,12,13,13,15,14, 9,10,10,
-	12,12,11,11,11,13,13,10,12,10,13,12,12,13,13,14,
-	15,12,13,12,15,13,11,12,12,14,13,12,12,13,13,14,
-	12,13,13,15,14,13,13,14,13,16,14,15,14,16,15,12,
-	12,12,14,14,13,13,13,14,14,12,13,12,14,13,14,15,
-	15,16,16,13,14,13,16,13,10,11,12,13,14,11,12,13,
-	13,15,12,12,13,14,14,13,14,14,15,16,13,14,14,16,
-	15,12,12,13,12,14,12,12,13,13,15,13,13,13,13,15,
-	14,14,15,14,16,14,15,15,15,16,12,13,12,14,14,13,
-	13,13,15,15,12,13,13,15,15,14,15,15,16,16,14,15,
-	15,16,16,13,14,14,13,16,14,14,15,14,16,14,14,15,
-	14,16,15,15,16,15,18,16,16,16,16,17,14,14,14,16,
-	15,14,15,15,16,16,14,15,15,16,16,16,16,16,17,17,
-	15,16,16,17,16,10,12,11,14,13,12,13,13,14,14,12,
-	13,12,15,14,14,14,14,15,15,14,15,14,16,15,12,13,
-	12,14,13,12,13,13,15,14,13,14,13,15,14,14,15,15,
-	16,16,14,15,15,17,15,12,13,12,14,14,13,14,14,15,
-	15,13,14,13,15,14,15,15,15,16,16,14,15,15,17,15,
-	14,14,14,16,15,14,15,15,16,16,14,15,15,16,15,16,
-	16,16,16,17,16,17,16,18,17,14,14,14,16,15,15,15,
-	15,16,16,14,15,14,16,15,16,16,17,17,17,15,16,15,
-	17,16, 6, 8, 8,11,11, 8, 9,10,12,12, 8,10, 9,12,
-	11,10,11,12,13,13,10,11,11,13,13, 8, 9,10,11,12,
-	 9,10,11,12,13,10,11,11,12,12,11,12,12,13,14,11,
-	12,12,14,14, 8, 9, 9,12,11, 9,10,10,12,12, 9,10,
-	10,12,12,11,12,12,14,14,11,12,11,14,13,11,11,12,
-	13,13,11,12,12,13,14,12,12,12,14,14,13,13,14,14,
-	15,13,14,14,15,15,10,11,11,13,13,11,12,12,14,14,
-	11,12,12,14,13,13,14,14,15,15,13,14,13,15,13, 7,
-	 9, 9,11,12, 9,10,11,12,13, 9,10,10,12,12,11,12,
-	13,13,14,11,12,12,14,14, 9,10,10,12,12,10,10,11,
-	12,13,11,12,11,13,13,12,12,13,13,15,12,13,13,15,
-	14, 9,10,10,12,12,10,11,12,13,13,10,11,10,13,12,
-	12,13,13,14,15,12,13,12,14,13,12,12,12,14,14,12,
-	12,13,13,14,13,13,13,15,14,14,13,14,13,16,14,15,
-	15,16,16,11,12,12,13,14,12,13,13,14,15,12,13,12,
-	14,13,14,14,15,15,16,13,14,13,15,13, 8, 9, 9,11,
-	11, 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,
-	11,12,11,14,13, 9,10,10,12,12,10,11,11,13,13,10,
-	11,11,13,13,12,12,13,14,15,12,13,13,15,14, 9,10,
-	 9,12,11,10,11,10,13,12,10,11,10,13,12,12,13,12,
-	14,14,12,13,12,15,13,11,12,12,13,14,12,13,13,14,
-	14,12,13,13,14,14,14,14,14,14,16,14,14,14,16,15,
-	11,12,11,14,12,12,13,12,15,13,12,13,12,15,13,14,
-	14,14,16,15,13,14,13,16,14,10,11,12,13,14,12,12,
-	13,13,15,12,13,13,14,14,14,14,15,15,16,14,14,14,
-	15,16,12,12,13,14,14,12,13,14,14,15,13,14,14,15,
-	15,14,15,15,15,17,15,15,15,16,16,12,12,13,13,14,
-	13,13,14,14,15,12,13,13,14,15,15,15,15,15,17,14,
-	15,15,15,15,14,14,14,16,16,14,15,15,15,16,15,15,
-	15,16,16,16,15,16,16,18,16,16,17,17,17,14,14,14,
-	15,16,15,15,15,16,17,14,15,14,16,16,16,16,17,17,
-	18,16,16,15,17,16,10,12,11,14,13,12,12,12,14,14,
-	11,13,12,14,13,13,14,14,15,15,13,14,13,16,15,12,
-	12,13,14,14,12,13,13,15,15,13,13,13,15,15,14,15,
-	15,16,16,14,15,15,17,16,12,13,12,14,12,13,13,13,
-	15,13,12,13,12,15,13,14,15,15,16,15,14,15,14,16,
-	14,14,14,14,16,16,14,15,15,16,16,14,15,15,16,16,
-	15,16,16,16,17,16,17,16,18,17,13,14,14,16,13,14,
-	15,15,16,14,14,15,14,16,14,16,16,16,17,16,15,16,
-	15,18,15, 9,11,11,13,13,11,12,12,14,14,11,12,12,
-	14,14,13,14,14,15,15,13,14,14,15,15,11,12,12,14,
-	14,11,12,13,14,15,12,13,13,15,14,13,14,14,15,16,
-	13,14,14,16,16,11,12,12,14,14,12,13,13,15,15,12,
-	13,13,15,14,14,14,14,16,16,14,15,14,16,15,12,13,
-	13,14,15,12,13,14,15,16,13,14,14,16,16,14,14,15,
-	16,17,15,15,15,17,17,13,14,14,15,15,14,15,14,16,
-	16,14,15,14,16,15,15,16,16,17,17,15,16,15,17,16,
-	10,12,12,13,14,11,12,13,14,14,12,13,12,14,14,13,
-	14,14,15,16,13,14,14,16,15,11,12,12,14,14,12,12,
-	13,14,15,12,13,13,15,15,13,13,15,15,17,14,14,15,
-	16,16,12,13,12,14,14,12,13,13,15,15,12,13,13,15,
-	14,14,15,15,16,16,14,15,14,16,16,13,12,14,13,16,
-	13,13,15,14,16,14,13,15,15,16,14,14,16,15,17,15,
-	15,16,16,17,13,14,14,16,15,14,15,15,16,16,14,15,
-	14,16,15,16,16,16,17,17,15,16,16,18,16,10,12,12,
-	14,14,12,12,13,14,14,12,13,12,15,14,13,14,14,15,
-	16,14,15,14,16,15,11,12,12,14,14,12,13,13,14,15,
-	13,14,13,15,15,14,14,15,15,16,14,15,15,17,16,12,
-	13,13,14,14,13,13,14,15,15,12,14,13,15,15,14,15,
-	15,16,16,14,15,15,17,15,13,14,13,15,15,13,14,14,
-	15,16,14,15,14,17,16,15,15,15,15,17,16,16,16,18,
-	17,14,14,14,16,16,15,15,15,16,16,14,15,14,16,16,
-	16,16,17,17,17,16,16,16,17,16,11,12,13,14,14,12,
-	13,13,15,15,12,13,13,15,15,14,15,15,16,16,14,15,
-	15,17,16,12,13,13,14,15,13,13,14,14,16,13,14,14,
-	15,16,15,14,16,15,17,15,15,16,16,17,12,13,13,15,
-	15,13,14,14,16,16,13,14,14,16,15,15,15,16,17,17,
-	15,16,15,17,16,14,14,15,13,16,15,14,16,14,17,15,
-	15,16,14,17,16,15,17,15,18,16,16,17,16,18,14,15,
-	15,17,16,15,16,16,17,17,15,16,15,17,16,16,17,17,
-	18,18,16,17,15,18,16,11,12,12,14,14,13,13,14,14,
-	15,13,14,13,16,14,15,15,15,16,16,15,16,15,17,16,
-	12,13,13,15,14,13,13,14,15,15,14,15,14,16,15,15,
-	15,16,15,16,16,16,16,18,16,12,13,13,15,15,14,14,
-	15,15,16,13,14,13,16,15,16,16,16,17,17,15,16,15,
-	17,15,14,15,14,16,15,14,15,15,16,16,15,16,15,17,
-	16,16,15,16,15,17,17,18,17,18,17,15,15,15,16,16,
-	16,16,16,17,17,14,15,15,17,16,17,17,18,18,18,16,
-	17,15,18,15, 9,11,11,13,13,11,12,12,14,14,11,12,
-	12,14,14,13,14,14,15,16,13,14,14,15,15,11,12,12,
-	14,14,12,13,13,14,15,12,13,13,14,14,14,14,15,15,
-	16,14,14,14,16,16,11,12,12,14,14,12,13,13,14,15,
-	11,13,12,14,14,13,14,14,16,16,13,14,14,16,15,13,
-	14,14,15,15,14,14,15,15,16,14,15,14,16,16,15,15,
-	16,16,17,15,16,16,17,17,12,13,13,15,15,13,14,14,
-	16,15,12,14,13,16,15,15,16,15,17,17,14,15,15,17,
-	15,10,12,12,14,14,12,12,13,14,15,12,13,12,14,14,
-	14,14,15,15,16,13,14,14,16,16,12,13,13,14,14,13,
-	13,14,14,15,13,14,13,15,15,14,15,15,15,17,14,15,
-	15,16,16,11,12,12,14,14,13,13,14,15,15,12,13,13,
-	15,14,14,15,15,16,17,14,15,14,16,15,14,14,14,16,
-	16,14,15,15,16,16,15,15,15,16,16,15,16,16,16,18,
-	16,17,16,18,17,13,13,14,15,15,14,14,15,16,16,13,
-	14,14,16,15,16,16,17,17,17,15,15,15,17,15,10,12,
-	12,14,13,12,12,13,14,14,11,13,12,14,14,13,14,14,
-	16,16,13,14,14,16,15,12,12,13,14,14,12,13,13,14,
-	15,13,13,13,15,15,14,14,15,16,16,14,15,15,16,16,
-	11,12,12,14,14,12,13,13,15,15,12,13,12,15,14,14,
-	15,14,16,16,13,15,13,16,15,13,14,14,15,16,14,15,
-	15,15,17,14,15,15,16,16,16,15,16,16,17,16,16,16,
-	17,17,13,14,12,16,13,14,15,13,16,15,13,15,13,16,
-	14,15,16,15,17,16,15,16,14,17,15,11,12,12,14,15,
-	13,13,14,14,16,13,14,13,15,14,15,15,16,16,17,15,
-	15,15,16,16,12,13,13,15,15,13,13,14,15,16,14,15,
-	14,16,15,15,15,16,15,17,16,16,16,17,17,12,13,13,
-	14,15,14,14,15,15,16,13,14,13,15,15,16,16,16,17,
-	17,15,16,15,16,15,15,15,15,16,16,14,15,15,16,17,
-	16,16,16,17,17,16,15,17,15,18,17,18,17,18,18,14,
-	14,15,15,17,15,15,16,16,17,14,15,15,16,16,17,17,
-	17,17,18,16,16,15,17,15,11,12,12,14,14,12,13,13,
-	15,15,12,13,13,15,15,14,15,15,16,16,14,15,14,17,
-	16,13,13,13,15,15,13,14,14,15,16,13,14,14,16,16,
-	15,15,16,16,17,15,16,16,17,17,12,13,13,15,14,13,
-	14,14,16,15,13,14,13,16,14,15,16,16,17,16,15,16,
-	14,17,15,14,15,15,16,17,15,15,16,16,17,15,16,16,
-	17,17,16,15,17,16,18,16,17,17,18,18,14,15,14,16,
-	13,15,16,15,17,14,15,16,14,17,14,16,17,16,18,16,
-	16,17,15,18,15,
-};
-
-static const static_codebook _44p9_p5_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p9_p5_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44p9_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p5_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44p9_p5_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p9_p5_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44p9_p5_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44p9_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44p9_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p9_p6_0[] = {
-	 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 8, 9,
-	10, 8, 9,10, 8, 9,10,10,10,12,10,11,11, 8,10,10,
-	10,11,12,10,11,10, 5, 8, 7, 8,10,10, 8,10, 9, 8,
-	10,10,10,10,11,10,12,11, 8,10, 9,10,11,11,10,12,
-	10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9,10, 9,10,11,
-	 9,11,11, 8,10, 9,10,11,11, 9,11,10, 7, 9, 9, 9,
-	10,11, 9,11,11, 9, 9,11,10,10,13,11,12,12, 9,11,
-	11,11,12,13,11,13,11, 7, 9, 9, 9,10,11, 9,11,10,
-	 9,11,10,10,10,12,11,13,12, 9,11,11,11,12,12,10,
-	12,10, 5, 8, 8, 8, 9,10, 7,10, 9, 8, 9,10, 9,10,
-	11,10,11,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
-	 9,10,11, 9,11,10, 9,11,11,10,10,12,11,12,12, 9,
-	10,11,11,12,13,10,12,10, 7, 9, 9, 9,11,11, 9,11,
-	10, 9,11,11,11,11,13,11,13,12, 9,11, 9,11,12,12,
-	10,13,10,
-};
-
-static const static_codebook _44p9_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p9_p6_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44p9_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p6_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44p9_p6_1[] = {
-	 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7,
-	 8, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
-	 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8,
-	 8, 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 9, 9, 8,
-	 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
-	 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 8,
-	 8, 9, 8,
-};
-
-static const static_codebook _44p9_p6_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44p9_p6_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44p9_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44p9_p7_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_p7_0[] = {
-	 1,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-	12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-	13,13,13,13,13,
-};
-
-static const static_codebook _44p9_p7_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p9_p7_0,
-	1, -510105088, 1635281408, 3, 0,
-	(long *)_vq_quantlist__44p9_p7_0,
-	0
-};
-
-static const long _vq_quantlist__44p9_p7_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44p9_p7_1[] = {
-	 1, 4, 4,16,16, 4, 9,11,15,16, 4,12, 8,16,16,12,
-	16,16,16,16,13,16,16,16,16, 5, 8,10,16,16, 9, 9,
-	14,15,16,12,14,14,16,16,16,16,16,16,16,16,16,16,
-	16,16, 5,11, 8,16,15,12,14,16,16,16, 9,15, 9,16,
-	16,16,16,16,16,16,16,16,16,16,16,15,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16, 6,11,11,
-	16,16,12,13,16,16,16,12,16,14,16,16,16,16,16,16,
-	16,16,16,16,16,16,11,15,15,16,16,14,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12,
-	15,16,16,16,16,16,16,16,16,14,16,15,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16, 5,11,11,16,16,12,
-	15,16,16,16,12,16,14,16,16,16,16,16,16,16,16,16,
-	16,16,16,12,15,15,16,16,14,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,11,15,15,16,
-	16,16,16,16,16,16,15,16,14,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16, 6,11,12,16,16,11,15,16,16,16,13,16,14,16,16,
-	16,16,16,16,16,16,16,16,16,16,11,16,14,16,16,14,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,12,14,14,16,16,16,16,16,16,16,15,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,15,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16, 8,13,
-	15,16,16,15,15,16,16,16,14,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,14,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16, 7,12,12,16,16,
-	13,12,16,16,16,14,16,14,16,16,16,16,16,16,16,16,
-	16,16,16,16,13,16,16,16,16,14,14,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,12,14,16,
-	16,16,16,16,16,16,16,14,16,14,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16, 6,11,11,16,16,13,15,16,16,16,11,15,14,16,
-	16,16,16,16,16,16,14,16,16,16,16,11,16,16,16,16,
-	16,16,16,16,16,15,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,11,16,14,16,16,14,16,16,16,16,13,15,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, 7,
-	11,11,16,16,13,13,16,16,16,13,16,13,16,16,16,16,
-	16,16,16,16,16,16,16,16,12,16,15,16,16,14,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,12,14,16,16,16,16,16,16,16,16,14,16,13,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16, 8,13,14,16,
-	16,15,16,16,16,16,14,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,15,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,16,
-	15,16,16,16,16,16,16,16,16,16,15,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,15,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-	16,16,16,16,16,
-};
-
-static const static_codebook _44p9_p7_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44p9_p7_1,
-	1, -514619392, 1630767104, 3, 0,
-	(long *)_vq_quantlist__44p9_p7_1,
-	0
-};
-
-static const long _vq_quantlist__44p9_p7_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p9_p7_2[] = {
-	 1, 3, 2, 5, 4, 7, 7, 8, 8, 9,10,10,10,11,11,11,
-	12,12,12,13,13,13,13,13,13,
-};
-
-static const static_codebook _44p9_p7_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p9_p7_2,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44p9_p7_2,
-	0
-};
-
-static const long _vq_quantlist__44p9_p7_3[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44p9_p7_3[] = {
-	 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p9_p7_3 = {
-	1, 25,
-	(long *)_vq_lengthlist__44p9_p7_3,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44p9_p7_3,
-	0
-};
-
-static const long _huff_lengthlist__44p9_short[] = {
-	 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book__44p9_short = {
-	1, 8,
-	(long *)_huff_lengthlist__44p9_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44pn1_l0_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__44pn1_l0_0[] = {
-	 1, 3, 3, 8, 8,10,10,10,10,10,10,10,10, 5, 7, 5,
-	 9, 8,10,10,10,10,11,10,11,10, 5, 5, 7, 8, 9,10,
-	10,11,10,10,11,10,11,10,10,10,11,11,11,11,11,11,
-	11,10,11,11,10,10,10,10,11,11,11,11,11,10,11,11,
-	11,11,11,11,11,11,12,11,10,11,11,11,11,11,11,11,
-	11,11,11,11,11,10,10,11,11,12,11,11,11,11,11,11,
-	12,11,11,11,10,11,11,11,11,11,11,11,11,10,11,11,
-	10,11,10,11,11,11,11,11,11,11,11,11,11,12,11,11,
-	12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,
-	10,11,11,11,11,11,11,11,12,11,13,11,11,11,11,11,
-	11,11,11,11,11,11,12,11,13,
-};
-
-static const static_codebook _44pn1_l0_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__44pn1_l0_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__44pn1_l0_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_l0_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44pn1_l0_1[] = {
-	 1, 4, 4, 7, 7, 4, 5, 6, 7, 7, 4, 6, 5, 7, 7, 7,
-	 6, 7, 6, 7, 7, 7, 6, 7, 6,
-};
-
-static const static_codebook _44pn1_l0_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__44pn1_l0_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44pn1_l0_1,
-	0
-};
-
-static const long _vq_quantlist__44pn1_l1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_l1_0[] = {
-	 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44pn1_l1_0 = {
-	2, 9,
-	(long *)_vq_lengthlist__44pn1_l1_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44pn1_l1_0,
-	0
-};
-
-static const long _huff_lengthlist__44pn1_lfe[] = {
-	 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44pn1_lfe = {
-	2, 4,
-	(long *)_huff_lengthlist__44pn1_lfe,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _huff_lengthlist__44pn1_long[] = {
-	 2, 3, 6, 7, 9,13,17, 3, 2, 5, 7, 9,13,17, 6, 5,
-	 5, 6, 9,12,16, 7, 7, 6, 6, 7,10,13,10,10, 9, 7,
-	 6,10,13,13,13,12,10,10,11,15,17,17,17,14,14,15,
-	17,
-};
-
-static const static_codebook _huff_book__44pn1_long = {
-	2, 49,
-	(long *)_huff_lengthlist__44pn1_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p1_0[] = {
-	 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44pn1_p1_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44pn1_p1_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p2_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p2_0[] = {
-	 1, 5, 5, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,12,12, 0,
-	 8, 8, 0, 9, 9, 0,13,13, 0, 8, 8, 0, 6, 6, 0,11,
-	11, 0,12,12, 0,12,12, 0,14,14, 0,11,12, 0,12,12,
-	 0,15,15, 0,12,12, 0, 5, 5, 0, 5, 5, 0, 6, 6, 0,
-	 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,11,11, 0, 6,
-	 6, 0, 7, 7, 0,11,11, 0,12,11, 0,11,11, 0,14,14,
-	 0,10,10, 0,12,12, 0,15,15, 0,12,12, 0, 6, 6, 0,
-	12,12, 0,12,12, 0,12,12, 0,14,14, 0,11,11, 0,12,
-	12, 0,16,16, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 8, 8, 0,12,12, 0,12,12, 0,12,12, 0,15,
-	15, 0,12,12, 0,11,11, 0,16,16, 0,11,11, 0, 6, 6,
-	 0,12,12, 0,12,12, 0,13,13, 0,15,15, 0,12,12, 0,
-	13,13, 0,15,15, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44pn1_p2_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p2_0,
-	1, -533200896, 1614282752, 2, 0,
-	(long *)_vq_quantlist__44pn1_p2_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p2_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p2_1[] = {
-	 1, 3, 3, 0, 9, 9, 0, 9, 9, 0,10,10, 0, 9, 9, 0,
-	10,10, 0,10,10, 0,10,10, 0,10,10, 0, 7, 7, 0, 7,
-	 7, 0, 6, 6, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8,
-	 0, 7, 7, 0, 8, 8, 0, 7, 7, 0, 9, 9, 0, 8, 9, 0,
-	10,10, 0, 9, 9, 0,10,10, 0,10,11, 0, 9, 9, 0,10,
-	10, 0, 9, 9, 0,11,11, 0,12,12, 0,12,12, 0,11,11,
-	 0,12,12, 0,13,13, 0,12,12, 0,13,13, 0, 8, 8, 0,
-	12,12, 0,12,12, 0,13,13, 0,13,13, 0,13,13, 0,13,
-	13, 0,13,13, 0,13,13, 0, 7, 7, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 9, 9, 0,11,11, 0,12,12, 0,13,13, 0,12,
-	12, 0,13,13, 0,13,13, 0,12,12, 0,12,12, 0, 9, 9,
-	 0,12,12, 0,13,13, 0,14,14, 0,13,13, 0,14,14, 0,
-	14,14, 0,13,13, 0,14,14, 0, 7, 7, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,
-};
-
-static const static_codebook _44pn1_p2_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p2_1,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__44pn1_p2_1,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p3_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p3_0[] = {
-	 1, 6, 6, 6, 8, 8, 6, 8, 8, 7, 9, 9,10,11,11, 8,
-	 8, 8, 7, 9, 9,11,12,12, 9, 9, 9, 6, 7, 7,10,11,
-	11,10,11,11,10,11,11,13,13,13,12,12,12,10,12,11,
-	14,14,14,12,12,12, 6, 5, 5, 9, 6, 6, 9, 6, 6, 9,
-	 7, 7,12,10,10,11, 7, 6, 9, 7, 7,13,11,11,12, 7,
-	 7, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
-	13, 9, 9,12,11,11,15,14,14,15,11,11, 8, 7, 7,12,
-	11,11,12,11,11,11,11,11,14,13,14,14,12,12,12,11,
-	11,16,15,15,14,12,12, 0,10,10, 0,12,12, 0,12,12,
-	 0,11,11, 0,14,14, 0,11,11, 0,11,11, 0,15,15, 0,
-	11,11, 7, 8, 8,13,11,11,12,10,10,12,11,11,15,13,
-	13,14,11,11,12,10,10,16,14,14,15,10,10, 9, 7, 7,
-	13,11,12,13,12,11,12,11,11,15,14,14,14,12,12,13,
-	12,12,16,15,15,15,12,12, 0,11,11, 0,12,12, 0,12,
-	13, 0,12,12, 0,15,15, 0,12,12, 0,12,12, 0,16,15,
-	 0,12,12,
-};
-
-static const static_codebook _44pn1_p3_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p3_0,
-	1, -531365888, 1616117760, 2, 0,
-	(long *)_vq_quantlist__44pn1_p3_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p3_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44pn1_p3_1[] = {
-	 2, 3, 4, 9, 9,10,12,12,12,11,10,12,12,13,12,11,
-	13,12,11,11,11,12,12,12,11,11,13,13,13,13,11,12,
-	12,14,14,12,13,13,13,13,11,13,13,13,13,11,13,13,
-	13,13,11,13,13,13,13,11,12,12,14,14,12,13,13,12,
-	12,11,13,13,13,13,11,13,13,12,12,11,13,13,13,13,
-	12,12,13,14,14,12,13,13,12,12,11,13,13,13,13,11,
-	13,13,12,12,11,13,13,13,13,12,13,13,14,14,12,13,
-	13,12,12,11,13,13,13,13,11,13,13,12,12,11,10,10,
-	10,10,12,10,10,11,11,12, 9, 9,11,11,13,11,11,10,
-	10,13,10,10,10,10,13,11,11,12,12,13,10,10,12,12,
-	14,12,11,12,12,13,11,11,11,12,13,12,12,12,12,13,
-	11,11,12,12,13,10,10,12,12,14,11,11,12,12,13,11,
-	11,12,12,13,11,11,12,12,14,12,12,12,12,14,10,10,
-	11,11,14,12,11,11,11,13,11,11,11,11,13,12,12,11,
-	11,14,12,12,12,11,14,10,10,11,11,14,12,11,11,11,
-	13,11,11,11,11,13,12,12,11,11,11,11,11,10,10,12,
-	10,11, 9, 9,12,12,12,11,11,13,12,12, 9, 9,13,13,
-	13,10,10,13,13,13,12,12,13,13,13,14,14,13,12,12,
-	11,11,14,13,13,12,12,14,13,13,11,11,13,13,13,12,
-	11,13,13,13,14,14,13,12,12,10,10,14,13,13,11,11,
-	13,13,13,10,10,13,13,13,11,11,14,13,13,14,14,14,
-	12,12,10,10,13,13,13,11,11,13,13,13,10,10,13,13,
-	13,11,11,14,13,13,14,14,14,13,13,10,10,13,13,13,
-	11,11,13,13,13,10,10,14,12,12, 8, 8,14,12,12, 9,
-	 9,14,11,11, 9, 9,14,12,12, 8, 8,14,12,12, 7, 7,
-	15,13,13,10,10,15,12,12,10,10,15,13,13,10,10,15,
-	12,13, 9, 9,15,13,13,10,10,15,13,13,10,10,15,12,
-	12,10,10,15,13,13,10,10,15,13,13, 9, 9,15,13,13,
-	10,10,15,13,13,10,10,15,12,12,10,10,15,13,13, 9,
-	 9,14,13,12, 9, 9,14,13,13, 9, 9,15,13,13,10,10,
-	15,12,12,10,10,15,13,13, 9, 9,15,13,13, 9, 9,14,
-	13,13, 9, 9,14,12,12, 8, 8,13,13,13, 8, 8,14,14,
-	13, 9, 9,14,14,13, 7, 7,14,14,14, 8, 8,14,14,14,
-	10,10,15,14,14,12,12,14,14,14, 9, 9,15,14,14,10,
-	10,14,14,14, 9, 9,14,14,14,10, 9,15,14,14,12,12,
-	14,14,14, 9, 9,15,14,14,10,10,14,14,14, 9, 9,15,
-	14,15, 9, 9,15,14,14,11,11,14,14,14, 8, 8,14,14,
-	14, 9, 9,14,14,14, 8, 8,14,15,14,10,10,15,14,14,
-	11,11,14,14,14, 8, 8,15,14,14, 9, 9,14,14,14, 8,
-	 8,12,12,12,13,13,16,16,15,12,12,17,16,16,13,13,
-	17,16,16,11,11,17,16,16,12,12,17,16,17,13,13,17,
-	16,16,14,14,17,17,16,12,12,18,16,16,13,13,17,16,
-	17,12,12,17,17,17,13,13,18,16,16,14,14,18,17,17,
-	12,12,17,17,17,13,13,18,17,17,13,13,17,17,17,13,
-	13,17,16,16,14,14,17,17,17,12,12,16,16,17,13,13,
-	17,17,16,12,12,18,17,17,13,13,18,16,16,14,14,18,
-	17,17,12,12,19,16,17,13,13,17,16,17,12,12,13,14,
-	14,10,10,16,14,14,13,13,17,15,15,14,14,17,14,14,
-	13,13,16,14,14,13,13,17,16,15,14,14,16,16,16,15,
-	15,17,15,15,14,14,17,15,15,14,14,17,15,15,14,14,
-	17,16,15,14,14,16,16,16,15,15,18,15,15,13,13,16,
-	16,15,14,14,17,15,15,14,13,17,15,15,14,14,16,16,
-	16,15,15,18,15,14,13,13,17,15,15,14,14,18,14,15,
-	13,13,18,15,15,14,14,16,16,16,15,15,17,15,15,13,
-	13,17,15,15,14,14,17,15,15,13,13,13,11,11,10,10,
-	16,14,14,13,13,17,14,15,14,14,17,15,15,12,12,17,
-	14,14,12,12,16,15,15,14,14,16,14,14,14,14,16,15,
-	15,14,14,16,15,15,14,14,16,15,15,14,14,16,15,15,
-	14,14,16,15,14,15,15,17,15,15,14,14,17,15,15,14,
-	14,17,15,15,14,14,17,15,16,14,14,16,14,14,14,14,
-	17,15,15,13,13,17,15,15,13,13,16,15,15,13,13,17,
-	16,16,14,14,17,15,14,15,14,17,15,15,13,13,17,15,
-	15,13,13,17,15,15,13,13,14,14,14, 9, 9,14,14,14,
-	18,19,14,15,15,19,18,14,14,14,19,19,15,14,14,19,
-	19,15,16,16,19,19,15,16,16,19,19,15,15,15,19,19,
-	15,16,16,19,20,15,15,15,19,19,15,15,15,19,19,15,
-	16,16,20,20,15,15,15,18,19,15,15,16,19,20,15,15,
-	15,19,18,15,15,15,18,18,15,16,16,21,20,15,15,15,
-	19,19,15,15,15,19,19,15,15,14,19,20,15,15,15,20,
-	19,15,16,16,19,20,15,15,15,19,19,15,15,15,20,21,
-	15,14,15,19,19,14,12,12, 9, 9,14,14,15,21,19,14,
-	14,14,18,19,14,15,15,19,20,14,14,14,19,19,15,15,
-	15,19,20,15,15,14,21,19,15,15,15,20,19,15,14,15,
-	20,21,15,15,15,18,18,15,15,15,20,21,16,14,14,18,
-	19,15,15,15,20,19,15,15,15,18,21,15,15,15,19,19,
-	15,15,15,19,20,16,15,14,20,19,15,16,15,19,19,15,
-	15,15,19, 0,14,15,15,19,19,15,15,15,19,19,15,15,
-	14,20,19,15,15,15,20,19,15,15,15,19,19,15,15,15,
-	20,19,12,12,12,13,13,16,15,16,11,11,16,16,16,12,
-	12,17,16,16,11,11,17,16,16,12,11,17,17,17,13,13,
-	18,16,16,14,14,18,18,17,13,13,17,16,16,13,13,17,
-	17,17,13,13,17,16,17,12,12,17,15,16,13,13,17,16,
-	17,12,12,17,16,16,13,12,17,16,16,12,12,18,17,17,
-	13,13,18,16,16,13,14,18,17,17,12,12,17,16,16,12,
-	12,17,17,17,12,12,18,17,17,13,13,17,16,16,14,14,
-	17,17,17,12,12,17,16,16,12,12,18,17,17,12,12,13,
-	14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,16,14,
-	14,13,13,16,14,14,13,13,17,16,15,15,15,16,15,16,
-	16,15,17,15,15,14,14,17,15,15,15,15,17,15,15,14,
-	14,17,15,15,14,14,16,15,16,16,16,17,15,15,14,14,
-	16,15,15,14,15,16,15,15,14,14,17,15,15,15,15,16,
-	16,16,15,16,18,15,14,13,14,17,15,15,14,14,17,14,
-	14,13,13,17,15,15,14,14,16,15,15,15,15,17,15,14,
-	14,14,17,15,15,14,14,17,14,14,13,13,13,11,11,11,
-	11,16,14,14,12,12,16,14,14,13,13,16,14,14,12,12,
-	16,14,14,12,12,16,15,15,13,13,17,14,14,14,14,17,
-	15,15,13,13,16,15,15,14,13,16,15,15,13,13,16,15,
-	15,13,13,16,14,14,14,14,16,15,15,13,13,16,14,15,
-	13,13,17,15,15,13,13,17,15,15,13,13,16,14,14,14,
-	14,17,15,15,12,12,17,14,15,13,13,17,15,15,12,12,
-	16,15,15,13,13,17,14,14,14,14,17,15,15,12,12,17,
-	15,15,13,13,16,15,15,12,12,14,15,15, 8, 8,14,14,
-	14,19,18,14,15,15,19,20,14,14,14,19,19,14,14,15,
-	19,20,15,16,15,19,21,15,16,16,21,19,15,15,15,20,
-	19,15,16,16,19,20,15,15,15,19,18,15,16,15,20,19,
-	15,16,16,19,20,15,15,15,19,19,15,16,15,20,20,14,
-	15,15,19,19,15,15,15,21,19,15,17,16,19,20,15,14,
-	15, 0,21,15,15,15,19,20,14,14,14,19,19,15,15,15,
-	20,19,15,16,16,19,19,15,15,15,19,18,15,15,15,20,
-	19,14,14,15,18,18,14,12,12, 9, 9,14,14,14,18,18,
-	14,14,14,18,18,14,15,14,19,18,14,14,14,19,18,15,
-	15,15,19,20,15,14,14,18,18,15,15,15,20,19,15,15,
-	15,18,20,15,15,15,19,18,15,15,15,19,19,15,14,14,
-	19,21,15,15,15,20,20,15,15,15,18,19,14,15,15,19,
-	20,15,15,15,20,19,15,14,14,19,21,15,15,15,18,19,
-	15,14,15,20,19,14,15,15,21,21,14,15,15,19,20,15,
-	14,14,19,20,15,15,15,19,20,15,15,14,20,20,14,15,
-	15,20,19,13,12,12,13,13,17,16,16,11,11,17,16,16,
-	12,12,18,17,16,11,11,18,16,16,11,11,17,17,17,13,
-	13,18,16,16,13,13,18,17,17,12,12,18,16,16,13,13,
-	18,17,17,12,12,18,17,17,13,13,18,16,16,14,14,18,
-	16,17,12,12,18,17,17,13,13,17,17,17,12,12,17,17,
-	17,12,12,17,16,15,13,13,18,16,16,11,11,17,16,16,
-	12,12,17,16,17,11,11,18,17,17,13,12,17,16,16,13,
-	13,17,17,17,12,12,17,16,17,12,12,18,17,17,11,11,
-	14,14,14, 9, 9,16,14,14,13,13,17,15,15,14,14,17,
-	14,14,13,13,16,14,14,13,13,17,15,15,14,14,16,16,
-	16,16,15,18,15,15,14,14,17,16,15,15,15,17,15,15,
-	14,14,17,15,15,14,15,16,16,16,15,16,18,15,15,14,
-	14,17,15,15,14,15,17,15,15,14,14,17,15,15,14,14,
-	16,16,16,15,16,17,14,14,13,13,17,15,15,14,14,18,
-	15,15,13,13,17,15,15,14,14,16,16,16,15,15,17,14,
-	14,13,13,17,15,15,14,14,17,14,14,13,13,13,11,11,
-	11,11,16,14,14,12,12,16,14,14,12,13,17,15,14,11,
-	11,17,14,14,11,11,17,15,15,13,14,17,14,14,14,14,
-	17,15,15,13,13,17,14,14,13,13,17,15,15,13,13,17,
-	15,15,13,13,17,14,14,14,14,17,15,15,13,13,18,14,
-	15,13,13,17,15,15,13,13,16,15,15,13,13,17,14,14,
-	13,13,17,15,15,12,12,16,14,14,12,12,16,15,15,12,
-	12,17,16,15,13,13,17,14,14,13,13,17,15,15,12,12,
-	16,15,15,12,12,16,15,15,12,12,13,15,15, 8, 8,14,
-	14,14,18,19,14,15,15,19,20,14,14,14,18,18,14,15,
-	15,18,18,15,16,16,19,19,15,16,17,20,20,15,15,15,
-	19,19,15,16,16,18,20,15,15,15,19,19,15,15,16,18,
-	18,15,17,16,19,19,15,15,15,18,21,15,16,16,21,20,
-	15,15,15,19,21,15,16,15,20,19,15,16,17,20,20,15,
-	15,15,19,19,15,16,16,21,20,15,15,15,19,20,15,15,
-	15,19,19,15,16,16,20,19,15,15,15,19,19,15,16,15,
-	20,21,15,15,15,21,19,14,12,12, 8, 8,14,14,14,20,
-	18,14,13,13,19,19,14,14,14,19,18,15,14,14,19,20,
-	14,15,15,20,20,15,14,14,21,20,15,15,15,20,20,15,
-	15,14,21,19,15,15,15,19,19,15,15,15,19,20,15,14,
-	14,20,20,15,15,15,19,20,15,14,14,19,20,15,15,15,
-	20,20,15,15,15,20,19,15,14,14,20,21,15,15,15,20,
-	21,15,14,14,20, 0,15,16,15,20,21,15,15,15,19,20,
-	15,14,14,19,19,15,15,15,19,20,15,15,15,19,19,15,
-	15,15,18,20,13,12,12,13,13,18,16,17,12,12,17,16,
-	16,12,12,17,17,16,11,11,18,16,16,11,11,17,17,18,
-	13,13,18,16,16,14,14,18,17,17,13,13,18,16,16,13,
-	13,18,17,17,12,12,17,17,16,13,13,17,16,16,13,14,
-	18,17,17,12,12,18,16,16,12,13,17,16,17,12,12,17,
-	18,17,13,13,18,16,16,13,13,18,17,17,12,12,17,16,
-	16,12,12,17,17,17,11,11,17,16,17,12,12,17,16,16,
-	13,13,17,16,16,11,11,17,16,16,12,12,18,16,17,11,
-	11,14,14,14, 9, 9,16,14,15,13,13,17,15,15,14,14,
-	17,14,14,12,12,16,14,14,13,13,18,15,15,15,15,17,
-	15,16,15,16,18,15,15,14,14,17,15,16,15,15,17,15,
-	15,14,14,18,15,15,14,14,16,16,16,16,15,17,15,15,
-	14,14,16,15,15,14,14,17,15,15,14,14,17,15,15,14,
-	14,17,16,16,15,15,17,15,14,13,13,17,15,15,14,14,
-	17,15,15,13,13,17,15,15,14,14,16,16,16,15,15,18,
-	15,14,14,14,17,15,15,14,14,18,15,15,13,13,13,12,
-	12,11,11,16,14,14,12,12,16,14,14,13,13,17,15,15,
-	12,12,17,14,14,12,12,17,15,15,14,14,17,14,14,14,
-	14,17,15,15,13,13,17,15,14,13,13,17,15,15,13,13,
-	17,15,15,13,13,16,14,14,14,14,17,15,15,13,13,16,
-	14,14,13,13,16,15,15,13,13,17,15,16,13,13,17,14,
-	14,14,13,17,15,15,12,12,16,15,14,12,12,17,15,15,
-	12,12,16,15,16,13,13,16,14,14,14,13,17,15,15,12,
-	12,16,14,14,12,12,17,15,15,12,12,14,15,15, 8, 8,
-	14,14,14,18,18,14,15,15,19,18,14,14,14,18,18,14,
-	15,15,19,20,15,16,15,21,18,15,16,16,18, 0,15,15,
-	15,19,20,15,16,16,20, 0,15,16,15,19,18,15,15,15,
-	19,19,15,16,16,21,19,15,15,15,19,19,15,16,16,20,
-	20,15,15,15,19,19,15,15,15,19,18,15,16,16,20,20,
-	15,14,15,20,19,15,15,15,19,20,15,15,15,19,19,15,
-	16,15,19,20,15,16,16,19,20,15,15,15,19,19,15,16,
-	15,20,20,15,15,15,20,18,13,12,12, 8, 8,14,14,14,
-	19,20,14,14,14,19,19,14,15,15,20,20,14,14,14,18,
-	19,15,15,15,20, 0,15,14,14,18,20,15,15,15,19,19,
-	15,15,15,21,19,15,15,15,19,20,15,15,15,20,21,15,
-	14,14,20,19,15,15,15,20,19,15,15,14,21,19,15,15,
-	15,19,18,15,15,15,20,19,15,14,14,19,19,15,15,16,
-	20,19,15,15,15,20, 0,15,15,15,19,21,15,15,15,22,
-	20,15,14,14,22,19,15,15,15,19,20,15,14,14,20,19,
-	14,15,15,19,21,
-};
-
-static const static_codebook _44pn1_p3_1 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44pn1_p3_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44pn1_p3_1,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p4_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__44pn1_p4_0[] = {
-	 1, 7, 7,14,14, 6, 8, 8,15,16, 7, 8, 8,16,15, 0,
-	14,14,17,17, 0,14,14,16,16, 7, 9, 9,16,16,10,11,
-	11,17,18, 9, 8, 8,16,16, 0,14,14,19,19, 0,14,14,
-	17,16, 8, 9, 9,16,16,12,12,12,17,17,10, 9, 9,16,
-	16, 0,15,14,18,20, 0,14,14,17,17, 0,15,15,18,17,
-	 0,21, 0, 0,21, 0,13,13,17,17, 0,17,17, 0, 0, 0,
-	15,15,17,17, 0,15,15,17,18, 0, 0, 0, 0,21, 0,13,
-	13,17,17, 0,18,18, 0,21, 0,16,15,17,18, 6, 7, 7,
-	14,14, 9,10,10,16,16,11,10,10,15,15, 0,21, 0,20,
-	21, 0, 0, 0,18,20,10,10,10,15,16,12,13,13,18,18,
-	12,11,11,15,15, 0, 0, 0,20,20, 0, 0,21,19,19,12,
-	11,11,15,15,15,14,14,18,18,13,11,11,15,16, 0, 0,
-	 0,20,19, 0, 0, 0,20,21, 0, 0,20,19,19, 0, 0, 0,
-	 0, 0, 0,20, 0,17,18, 0, 0,21, 0, 0, 0, 0, 0,21,
-	 0, 0,21, 0,20,19, 0, 0, 0, 0, 0, 0,21, 0,18,18,
-	 0, 0, 0,21, 0, 0, 0, 0, 0,20, 7, 6, 6,13,13, 9,
-	 6, 6,12,12, 9, 7, 7,14,14, 0,10,10,12,12, 0,11,
-	11,15,15, 9, 7, 7,14,14,12, 9, 9,14,14,10, 7, 7,
-	14,13, 0,11,11,16,15, 0,11,11,14,14, 9, 7, 7,14,
-	14,13,10,10,14,14,11, 7, 7,14,13, 0,11,11,16,16,
-	 0,11,11,14,14, 0,12,12,16,16, 0,19, 0,17,18, 0,
-	10,10,14,14, 0,15,14, 0, 0, 0,12,12,14,14, 0,12,
-	12,15,15, 0,20, 0,18,19, 0,10,10,14,14, 0,16,15,
-	 0,20, 0,13,13,14,14, 0,11,11,13,13, 0,12,13,16,
-	16, 0,12,12,16,16, 0,16,16, 0,21, 0,17,18, 0, 0,
-	 0,12,12,16,16, 0,15,15,18, 0, 0,12,12,16,16, 0,
-	17,16,21,21, 0,16,17, 0, 0, 0,13,13,17,16, 0,16,
-	16,20,21, 0,12,12,17,16, 0,17,17, 0,21, 0,17,17,
-	21,21, 0,17,18, 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0,
-	 0, 0,18,21, 0, 0, 0,18,19, 0, 0, 0,18,17,21,21,
-	 0, 0, 0, 0, 0, 0,16,16, 0, 0, 0, 0, 0, 0, 0, 0,
-	19,19, 0, 0, 0,11,11,12,12, 0,11,11,10,10, 0,12,
-	12,13,13, 0,12,12, 9, 9, 0,14,14,13,13, 0,12,12,
-	13,13, 0,14,14,12,13, 0,11,11,12,12, 0,13,13,13,
-	13, 0,13,13,13,13, 0,12,12,13,13, 0,14,14,12,12,
-	 0,11,11,12,12, 0,14,13,14,14, 0,13,13,13,13, 0,
-	15,15,14,15, 0, 0, 0,16,16, 0,12,12,13,13, 0,16,
-	17,20,21, 0,14,13,12,12, 0,14,14,14,14, 0,21, 0,
-	16,16, 0,12,12,13,13, 0,18,17,21, 0, 0,14,14,13,
-	13, 7, 8, 8,17,17,11,10,10,18,18,12,10,10,17,17,
-	 0,15,15,20,18, 0,15,15,17,17,11, 9, 9,17,17,14,
-	12,12,19,19,13, 9, 9,16,16, 0,15,14, 0,19, 0,14,
-	14,16,16,12,10,10,20,18,16,13,13,21,20,14,10,10,
-	17,17, 0,15,15,21,20, 0,15,14,17,17, 0,15,15,21,
-	21, 0, 0,21, 0, 0, 0,13,13,18,18, 0,19,16, 0, 0,
-	 0,15,15,17,16, 0,16,16, 0,21, 0, 0, 0, 0,21, 0,
-	13,14,18,17, 0,20,19, 0, 0, 0,15,15,18,18, 8, 7,
-	 7,15,15,12,11,11,17,16,13,11,11,16,16, 0, 0, 0,
-	21,20, 0, 0, 0, 0,20,11,10,10,17,17,14,13,13,19,
-	18,14,11,11,16,16, 0,20, 0,21,19, 0, 0,21, 0,20,
-	12,11,11,17,17,16,15,15, 0,19,14,11,11,17,16, 0,
-	21, 0, 0,19, 0, 0, 0,21,20, 0, 0,21,20, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0,19,21, 0, 0, 0, 0, 0, 0, 0, 0,
-	19,20, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0,20, 0,19,
-	21, 0, 0, 0, 0, 0, 0, 0, 0,21,20,11,10, 9,15,15,
-	14,11,11,15,15,14,11,11,16,16, 0,14,14,14,14, 0,
-	16,15,17,16,13,11,11,16,16,16,13,13,16,16,15,10,
-	10,15,15, 0,14,15,17,17, 0,14,14,16,15,13,11,11,
-	16,16,17,15,14,16,16,15,10,10,15,15, 0,15,15,17,
-	18, 0,15,15,16,16, 0,16,16,17,17, 0,21, 0,21,20,
-	 0,13,13,15,15, 0,18,18, 0,21, 0,15,15,15,15, 0,
-	16,16,17,17, 0, 0, 0, 0,18, 0,13,13,15,15, 0,19,
-	18, 0, 0, 0,15,15,16,16, 0,12,12,15,15, 0,13,13,
-	17,17, 0,13,13,17,18, 0,16,17,21, 0, 0,20,18, 0,
-	 0, 0,13,13,17,17, 0,15,15, 0,18, 0,12,12,17,18,
-	 0,16,16, 0, 0, 0,17,17,21, 0, 0,13,13,18,18, 0,
-	16,16,21,21, 0,12,12,17,18, 0,16,17,21, 0, 0,17,
-	17, 0,21, 0,17,18, 0, 0, 0, 0, 0, 0, 0, 0,16,15,
-	 0,21, 0,21,19, 0, 0, 0,18,18, 0, 0, 0,18,19, 0,
-	 0, 0, 0, 0, 0, 0, 0,16,16,21,21, 0,20,19, 0, 0,
-	 0,19,21, 0,21, 0,12,12,15,15, 0,12,12,15,16, 0,
-	13,13,16,16, 0,14,14,15,15, 0,16,15,17,17, 0,13,
-	13,17,17, 0,15,15,16,18, 0,12,12,16,16, 0,14,14,
-	17,17, 0,15,14,16,16, 0,13,13,16,16, 0,16,15,17,
-	17, 0,12,12,16,16, 0,15,15,18,18, 0,14,14,17,16,
-	 0,16,16,17,18, 0, 0, 0,20,21, 0,13,13,16,17, 0,
-	17,17, 0, 0, 0,15,15,16,16, 0,15,16,17,17, 0, 0,
-	 0,19, 0, 0,13,13,15,16, 0,19,18, 0, 0, 0,16,15,
-	16,17, 8, 8, 8,17,17,13,11,10,17,18,13,10,10,17,
-	17, 0,15,15,20,19, 0,15,15,17,17,12,10,10,19,18,
-	15,12,12,20,18,14,10,10,17,16, 0,15,15,20,20, 0,
-	14,15,16,16,13,10,10,17,17,17,14,14, 0,18,15,10,
-	10,17,17, 0,16,15,20,20, 0,14,14,17,17, 0,15,16,
-	20,20, 0, 0,21, 0, 0, 0,13,13,17,17, 0,18,17, 0,
-	 0, 0,15,16,17,18, 0,15,15,18,21, 0, 0, 0,21, 0,
-	 0,13,13,18,18, 0,19,19, 0, 0, 0,16,16,18,17, 9,
-	 8, 8,15,15,12,11,11,16,16,13,11,11,16,15, 0, 0,
-	 0, 0,21, 0,21, 0,19,19,12,11,11,17,18,15,13,13,
-	18,19,14,11,11,16,16, 0, 0,21,21,19, 0, 0, 0,21,
-	20,13,11,11,18,17,17,14,15,20,21,15,11,12,16,16,
-	 0, 0, 0,20, 0, 0, 0,21, 0,19, 0, 0, 0, 0,19, 0,
-	 0, 0, 0, 0, 0,21,21,19,19, 0, 0, 0,21, 0, 0, 0,
-	 0,19,21, 0, 0, 0,19,20, 0, 0, 0,21, 0, 0, 0,21,
-	19,19, 0, 0, 0, 0, 0, 0, 0, 0,21,20, 0,11,11,15,
-	15, 0,12,12,15,16, 0,12,12,16,16, 0,15,15,16,15,
-	 0,16,16,17,17, 0,12,12,17,17, 0,14,14,17,17, 0,
-	11,11,16,16, 0,15,15,19,18, 0,15,15,16,16, 0,12,
-	12,17,16, 0,14,15,16,16, 0,11,11,15,15, 0,16,16,
-	18,19, 0,15,15,15,16, 0,17,17,18,20, 0,21, 0,21,
-	19, 0,14,14,16,16, 0,18,18, 0, 0, 0,16,16,15,15,
-	 0,16,16,18,17, 0, 0, 0,19,20, 0,14,14,16,16, 0,
-	19,19, 0, 0, 0,16,17,15,15, 0,12,12,14,15, 0,13,
-	13,16,17, 0,12,12,17,17, 0,17,16, 0, 0, 0,18,17,
-	21, 0, 0,13,13,19,17, 0,15,15,20,21, 0,12,12,17,
-	17, 0,17,17, 0, 0, 0,17,17, 0, 0, 0,13,13,17,18,
-	 0,16,16,21, 0, 0,12,12,17,17, 0,17,17, 0, 0, 0,
-	17,17, 0, 0, 0,18,21, 0, 0, 0, 0, 0, 0, 0, 0,15,
-	15,21, 0, 0,20,21, 0, 0, 0,18,19, 0, 0, 0,18,17,
-	 0, 0, 0, 0, 0, 0, 0, 0,16,16,21, 0, 0,21,21, 0,
-	 0, 0,18,19, 0, 0, 0,12,12,16,16, 0,13,13,16,17,
-	 0,13,13,17,16, 0,14,14,16,16, 0,16,15,19,18, 0,
-	13,13,17,17, 0,15,15,18,18, 0,12,12,16,16, 0,15,
-	15,18,19, 0,15,15,17,16, 0,13,13,17,17, 0,16,16,
-	18,17, 0,12,12,17,16, 0,15,15,18,18, 0,15,15,17,
-	17, 0,16,16, 0,19, 0, 0, 0, 0, 0, 0,14,14,16,17,
-	 0,18,18, 0, 0, 0,15,15,17,17, 0,16,16,21,19, 0,
-	21, 0,21,21, 0,13,14,16,16, 0,19,19, 0, 0, 0,15,
-	16,16,16, 0,11,11,17,16, 0,15,14,19,18, 0,14,14,
-	19,19, 0,18,17,18,20, 0,17,17,18,19, 0,13,13,17,
-	17, 0,16,17,21,18, 0,13,13,17,16, 0,18,17,19, 0,
-	 0,16,17,18,18, 0,12,12,19,18, 0,18,18,20,20, 0,
-	13,13,17,17, 0,17,17,21, 0, 0,16,17,17,18, 0,18,
-	17,19,18, 0, 0, 0, 0, 0, 0,14,14,17,17, 0,19,19,
-	21, 0, 0,16,16,16,17, 0,17,17,19,20, 0, 0, 0, 0,
-	21, 0,15,15,17,18, 0,21,21, 0, 0, 0,17,17,17,18,
-	 0,10,10,15,15, 0,15,14,17,18, 0,14,14,16,16, 0,
-	 0, 0,18, 0, 0,21, 0,19, 0, 0,13,13,17,16, 0,17,
-	17,18, 0, 0,14,14,16,15, 0, 0, 0,21, 0, 0,21, 0,
-	19,18, 0,13,13,17,17, 0,18,18,20,20, 0,15,15,16,
-	16, 0, 0, 0,21,21, 0, 0, 0,20,20, 0, 0, 0,19, 0,
-	 0, 0, 0, 0, 0, 0,21,20,18,18, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0,20, 0, 0, 0, 0,20, 0, 0, 0, 0, 0, 0, 0,
-	 0,19,18, 0, 0, 0, 0,21, 0, 0, 0,18,20, 0,18,19,
-	16,17, 0,21,19,17,17, 0, 0,21,18,18, 0, 0,21,20,
-	19, 0, 0, 0,20,20, 0, 0,21,17,17, 0, 0, 0,19,19,
-	 0,20,20,17,17, 0, 0, 0, 0,20, 0, 0,20,18,18, 0,
-	21,20,17,17, 0, 0, 0,20,21, 0,19, 0,17,17, 0, 0,
-	21, 0, 0, 0,20, 0,18,19, 0, 0, 0,21,21, 0, 0, 0,
-	 0,21, 0,20,20,17,17, 0, 0, 0, 0, 0, 0,21, 0,18,
-	17, 0, 0, 0,20,19, 0, 0, 0, 0,21, 0,20,20,17,17,
-	 0, 0, 0, 0, 0, 0,21,21,18,18, 0,12,12,15,14, 0,
-	14,14,17,17, 0,14,14,17,16, 0,18,18,21, 0, 0,19,
-	20, 0, 0, 0,13,13,18,17, 0,16,16,19,18, 0,13,13,
-	17,17, 0,17,17, 0, 0, 0,17,17,21, 0, 0,13,13,17,
-	17, 0,17,17,21,20, 0,13,13,18,17, 0,18,19,21,21,
-	 0,19,18, 0, 0, 0,18,17, 0, 0, 0, 0, 0, 0, 0, 0,
-	15,16, 0, 0, 0,21,21, 0, 0, 0,20,18,21, 0, 0,17,
-	18, 0, 0, 0, 0, 0, 0, 0, 0,15,16, 0, 0, 0, 0,20,
-	 0, 0, 0, 0,19, 0, 0, 0,15,15,18,19, 0,18,17,21,
-	 0, 0,16,18, 0,20, 0,17,18,21, 0, 0,18,20, 0, 0,
-	 0,16,16,21,21, 0,19,20,21, 0, 0,16,15, 0,21, 0,
-	18,20, 0, 0, 0,18,19, 0, 0, 0,16,15,21,21, 0,21,
-	 0, 0, 0, 0,16,15,21, 0, 0,20,19, 0, 0, 0,18,21,
-	21, 0, 0,20,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16, 0,
-	20, 0,21, 0, 0, 0, 0,17,18,20,21, 0,18,18,21,21,
-	 0, 0, 0, 0, 0, 0,16,16,20, 0, 0, 0,21, 0, 0, 0,
-	21,18, 0, 0, 0,12,12,20,17, 0,15,15,19,18, 0,14,
-	14,19,18, 0,18,17,21,19, 0,17,17,21,17, 0,13,13,
-	21,19, 0,16,17,20,19, 0,13,13,16,16, 0,17,17,20,
-	21, 0,16,16,19,17, 0,13,13,18,18, 0,17,19,19,19,
-	 0,13,13,17,17, 0,18,18, 0,19, 0,16,17,18,18, 0,
-	16,17,19,21, 0, 0, 0, 0, 0, 0,15,15,16,17, 0,20,
-	19,21, 0, 0,17,17,17,17, 0,17,17,21,19, 0, 0, 0,
-	 0, 0, 0,15,15,17,17, 0,21, 0, 0, 0, 0,18,18,17,
-	17, 0,10,10,15,15, 0,15,15,17,17, 0,15,14,16,16,
-	 0, 0, 0,21,19, 0,21,21,19,21, 0,13,13,17,16, 0,
-	17,17,18,19, 0,14,15,16,15, 0, 0, 0,21,19, 0,21,
-	21,18,19, 0,14,14,16,17, 0,18,18,18,19, 0,15,15,
-	15,16, 0, 0,21, 0,21, 0, 0, 0,19,20, 0, 0, 0,21,
-	19, 0, 0, 0, 0, 0, 0,21,21,19,17, 0, 0, 0, 0, 0,
-	 0, 0, 0,21,21, 0,21, 0, 0,21, 0, 0, 0, 0, 0, 0,
-	21,21,19,18, 0, 0, 0, 0, 0, 0, 0, 0, 0,19, 0,21,
-	18,18,17, 0,21, 0,20,20, 0, 0, 0,18,20, 0, 0,21,
-	18,21, 0, 0, 0,21,18, 0, 0, 0, 0,19, 0, 0, 0,21,
-	21, 0,20,21,17,19, 0,21, 0,21, 0, 0,21, 0,18,18,
-	 0,20,21,17,18, 0, 0, 0,21,19, 0,20,21,17,18, 0,
-	 0, 0,21,21, 0, 0, 0,20,19, 0, 0, 0,21,21, 0, 0,
-	 0, 0, 0, 0,21,21,19,18, 0, 0, 0, 0, 0, 0, 0,21,
-	19,18, 0,21,21,19, 0, 0, 0, 0,21, 0, 0,21,21,18,
-	17, 0, 0, 0, 0, 0, 0,21, 0,21,18, 0,12,12,14,14,
-	 0,15,14,17,17, 0,14,14,17,16, 0,19,17, 0, 0, 0,
-	19,19, 0, 0, 0,13,13,17,17, 0,17,17,20,20, 0,13,
-	13,18,18, 0,18,17, 0, 0, 0,18,21, 0, 0, 0,13,13,
-	17,17, 0,18,18,21,20, 0,14,14,18,19, 0,19,18,21,
-	 0, 0,19,19, 0, 0, 0,20,18,20, 0, 0, 0, 0, 0, 0,
-	 0,15,16, 0, 0, 0,21,21, 0, 0, 0,19,19, 0, 0, 0,
-	18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16, 0,21, 0, 0,
-	 0, 0, 0, 0,19,20, 0, 0, 0,15,15,20,21, 0,17,17,
-	21,21, 0,17,17, 0, 0, 0,19,18, 0, 0, 0,18,19, 0,
-	 0, 0,17,16, 0,21, 0, 0,20, 0, 0, 0,16,16, 0,20,
-	 0,19,19, 0,21, 0,19,18, 0,21, 0,16,16, 0, 0, 0,
-	21,21, 0, 0, 0,16,16, 0, 0, 0,21,21, 0, 0, 0,19,
-	19, 0, 0, 0,20, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,
-	 0,21, 0, 0,20, 0, 0, 0,20,18,21,21, 0,19,18, 0,
-	20, 0, 0, 0, 0, 0, 0,16,17,21, 0, 0, 0,21, 0, 0,
-	 0,19,20,21,20,
-};
-
-static const static_codebook _44pn1_p4_0 = {
-	5, 3125,
-	(long *)_vq_lengthlist__44pn1_p4_0,
-	1, -528744448, 1616642048, 3, 0,
-	(long *)_vq_quantlist__44pn1_p4_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p4_1[] = {
-	3,
-	2,
-	4,
-	1,
-	5,
-	0,
-	6,
-};
-
-static const long _vq_lengthlist__44pn1_p4_1[] = {
-	 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44pn1_p4_1 = {
-	1, 7,
-	(long *)_vq_lengthlist__44pn1_p4_1,
-	1, -533200896, 1611661312, 3, 0,
-	(long *)_vq_quantlist__44pn1_p4_1,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p5_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p5_0[] = {
-	 1, 7, 7, 6, 8, 8, 7, 8, 8, 7, 9, 9,11,11,11, 9,
-	 8, 8, 7, 9, 9,11,12,11, 9, 9, 9, 6, 7, 7,10,11,
-	11,10,10,10,10,11,11,15,14,14,12,12,12,11,11,11,
-	14,14,14,12,12,12, 5, 6, 6, 8, 5, 5, 8, 7, 7, 8,
-	 8, 8,12,10,10,10, 7, 7, 8, 7, 7,12,10,10,10, 7,
-	 7, 6, 7, 7,12,11,11,12,10,10,11,10,10,14,14,13,
-	13,10,10,11,10,10,16,14,14,14,11,10, 7, 7, 7,13,
-	12,12,12,12,11,11,11,11,15,14,17,13,12,12,12,11,
-	11,15,15,15,14,13,13,10, 9, 9,14,12,11,13,11,11,
-	12,11,11,16,15,14,14,11,11,12,11,11,17,14,14,15,
-	11,11, 7, 8, 8,12,11,11,13,10,10,11,10,10,17,14,
-	13,14,10,10,12,10,10,18,15,15,14,10,10, 8, 7, 7,
-	13,12,12,13,11,11,12,11,11,16,14,15,14,12,12,12,
-	11,11,18,16,16,14,12,12,11,10,10,13,12,11,13,11,
-	11,13,12,12, 0,15,14,14,11,11,13,11,11,16,15,15,
-	15,11,11,
-};
-
-static const static_codebook _44pn1_p5_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p5_0,
-	1, -527106048, 1620377600, 2, 0,
-	(long *)_vq_quantlist__44pn1_p5_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p5_1[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p5_1[] = {
-	 2, 6, 7, 6, 8, 8, 7, 7, 8, 7, 8, 8, 9, 9, 9, 8,
-	 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 6, 6, 6, 9, 7,
-	 7, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
-	10, 9, 8,10, 8, 8, 7, 6, 6, 9, 6, 6, 9, 6, 6, 9,
-	 7, 7,10, 8, 8,10, 6, 6, 9, 7, 7,10, 8, 8,10, 6,
-	 6, 7, 7, 7,11, 9, 9,11, 9, 9,10, 9, 9,12,10,10,
-	12, 8, 8,11, 9, 9,13, 9,10,12, 8, 8, 8, 7, 7,11,
-	 9,10,11,10,10,10, 9, 9,11,11,11,11, 9, 9,11,10,
-	 9,12,11,11,11, 9,10,10, 8, 8,11, 9,10,11, 9, 9,
-	11, 9, 9,12,10,10,11, 9, 9,11, 9, 9,12,10,11,11,
-	 9, 9, 8, 8, 8,12, 9, 9,12, 9, 9,11, 9, 9,13, 9,
-	 9,13, 8, 8,12, 9, 9,13,10,10,12, 8, 8, 9, 7, 7,
-	11,10,10,11,10,10,11,10,10,12,11,11,11,10, 9,11,
-	10,10,11,11,11,11, 9, 9,11, 9, 9,12,10,10,11,10,
-	10,12,10,10,11,11,11,11, 9, 9,11,10,10,12,11,11,
-	11, 9, 9,
-};
-
-static const static_codebook _44pn1_p5_1 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p5_1,
-	1, -530841600, 1616642048, 2, 0,
-	(long *)_vq_quantlist__44pn1_p5_1,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p6_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__44pn1_p6_0[] = {
-	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9,
-};
-
-static const static_codebook _44pn1_p6_0 = {
-	5, 243,
-	(long *)_vq_lengthlist__44pn1_p6_0,
-	1, -516716544, 1630767104, 2, 0,
-	(long *)_vq_quantlist__44pn1_p6_0,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p6_1[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44pn1_p6_1[] = {
-	 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-	12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44pn1_p6_1 = {
-	1, 25,
-	(long *)_vq_lengthlist__44pn1_p6_1,
-	1, -518864896, 1620639744, 5, 0,
-	(long *)_vq_quantlist__44pn1_p6_1,
-	0
-};
-
-static const long _vq_quantlist__44pn1_p6_2[] = {
-	12,
-	11,
-	13,
-	10,
-	14,
-	9,
-	15,
-	8,
-	16,
-	7,
-	17,
-	6,
-	18,
-	5,
-	19,
-	4,
-	20,
-	3,
-	21,
-	2,
-	22,
-	1,
-	23,
-	0,
-	24,
-};
-
-static const long _vq_lengthlist__44pn1_p6_2[] = {
-	 3, 5, 4, 5, 4, 5, 4, 5, 5, 5, 4, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44pn1_p6_2 = {
-	1, 25,
-	(long *)_vq_lengthlist__44pn1_p6_2,
-	1, -529006592, 1611661312, 5, 0,
-	(long *)_vq_quantlist__44pn1_p6_2,
-	0
-};
-
-static const long _huff_lengthlist__44pn1_short[] = {
-	 4, 3, 7, 9,12,16,16, 3, 2, 5, 7,11,14,15, 7, 4,
-	 5, 6, 9,12,15, 8, 5, 5, 5, 8,10,14, 9, 7, 6, 6,
-	 8,10,12,12,10,10, 7, 6, 8,10,15,12,10, 6, 4, 7,
-	 9,
-};
-
-static const static_codebook _huff_book__44pn1_short = {
-	2, 49,
-	(long *)_huff_lengthlist__44pn1_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_stereo.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_stereo.h
deleted file mode 100644
index e13b06a..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_stereo.h
+++ /dev/null
@@ -1,15782 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: static codebooks autogenerated by huff/huffbuld
- last modified: $Id: res_books_stereo.h 17025 2010-03-25 04:56:56Z xiphmont $
-
- ********************************************************************/
-
-#include "../../codebook.h"
-
-static const long _vq_quantlist__16c0_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16c0_s_p1_0[] = {
-         1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0,
-         0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
-         0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, 0,
-         0, 0, 0, 9, 9,12, 0, 0, 0, 0, 0, 0,10,12,11, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0,
-         0, 0, 0, 0, 9,12,10, 0, 0, 0, 0, 0, 0,10,11,12,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
-         0, 0, 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,12,11, 0,
-         0, 0, 0, 0, 0, 9,10,12, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,12,
-         0, 0, 0, 0, 0, 0, 9,12, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _16c0_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__16c0_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__16c0_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16c0_s_p3_0[] = {
-         1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 7, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 6, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _16c0_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__16c0_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16c0_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16c0_s_p4_0[] = {
-         1, 3, 2, 7, 8, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _16c0_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16c0_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16c0_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16c0_s_p5_0[] = {
-         1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
-         8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 8, 0, 0, 0, 7, 7,
-         8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0, 0, 0,
-         8, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _16c0_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16c0_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16c0_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__16c0_s_p6_0[] = {
-         1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11,
-        11,11, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
-        11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
-        10,11,11,12,12,12,13, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10,10,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,11,11,12,12,13,13,13,14, 0, 0, 0, 0, 0,
-        10,10,10,11,11,11,12,12,13,13,13,14, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,13,13,14,14, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,12,12,13,13,14,15,14, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,14,14,15,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,13,14,
-        14,
-};
-
-static const static_codebook _16c0_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__16c0_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__16c0_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16c0_s_p7_0[] = {
-         1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,11,10,10,11,
-        11,10, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11,
-        11,11,11,10, 6, 9, 9,11,12,12,11, 9, 9, 6, 9,10,
-        11,12,12,11, 9,10, 7,11,11,11,11,11,12,13,12, 6,
-         9,10,11,10,10,12,13,13, 6,10, 9,11,10,10,11,12,
-        13,
-};
-
-static const static_codebook _16c0_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16c0_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__16c0_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__16c0_s_p7_1[] = {
-         1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7,
-         8, 8, 8, 9, 9, 9,10,10,10, 6, 7, 8, 8, 8, 8, 9,
-         8,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, 7,
-         7, 8, 8, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9, 9,
-         9, 9,11,11,11, 8, 8, 9, 9, 9, 9, 9,10,10,11,11,
-         9, 9, 9, 9, 9, 9, 9,10,11,11,11,10,11, 9, 9, 9,
-         9,10, 9,11,11,11,10,11,10,10, 9, 9,10,10,11,11,
-        11,11,11, 9, 9, 9, 9,10,10,
-};
-
-static const static_codebook _16c0_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__16c0_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16c0_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__16c0_s_p8_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8,10,10, 6, 5, 6,
-         8, 8, 8, 8, 8, 8, 8, 9,10,10, 7, 6, 6, 8, 8, 8,
-         8, 8, 8, 8, 8,10,10, 0, 8, 8, 8, 8, 9, 8, 9, 9,
-         9,10,10,10, 0, 9, 8, 8, 8, 9, 9, 8, 8, 9, 9,10,
-        10, 0,12,11, 8, 8, 9, 9, 9, 9,10,10,11,10, 0,12,
-        13, 8, 8, 9,10, 9, 9,11,11,11,12, 0, 0, 0, 8, 8,
-         8, 8,10, 9,12,13,12,14, 0, 0, 0, 8, 8, 8, 9,10,
-        10,12,12,13,14, 0, 0, 0,13,13, 9, 9,11,11, 0, 0,
-        14, 0, 0, 0, 0,14,14,10,10,12,11,12,14,14,14, 0,
-         0, 0, 0, 0,11,11,13,13,14,13,14,14, 0, 0, 0, 0,
-         0,12,13,13,12,13,14,14,14,
-};
-
-static const static_codebook _16c0_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__16c0_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__16c0_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16c0_s_p8_1[] = {
-         1, 4, 3, 5, 5, 7, 7, 7, 6, 6, 7, 7, 7, 5, 5, 7,
-         7, 7, 6, 6, 7, 7, 7, 6, 6,
-};
-
-static const static_codebook _16c0_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__16c0_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16c0_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p9_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16c0_s_p9_0[] = {
-         1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _16c0_s_p9_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16c0_s_p9_0,
-        1, -518803456, 1628680192, 2, 0,
-        (long *)_vq_quantlist__16c0_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__16c0_s_p9_1[] = {
-         1, 5, 5, 5, 5, 9,11,11,10,10,10,10,10,10,10, 7,
-         6, 6, 6, 6,10,10,10,10,10,10,10,10,10,10, 7, 6,
-         6, 6, 6,10, 9,10,10,10,10,10,10,10,10,10, 7, 7,
-         8, 9,10,10,10,10,10,10,10,10,10,10,10, 8, 7,10,
-        10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _16c0_s_p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__16c0_s_p9_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__16c0_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__16c0_s_p9_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__16c0_s_p9_2[] = {
-         1, 5, 5, 7, 8, 8, 7, 9, 9, 9,12,12,11,12,12,10,
-        10,11,12,12,12,11,12,12, 8, 9, 8, 7, 9,10,10,11,
-        11,10,11,12,10,12,10,12,12,12,11,12,11, 9, 8, 8,
-         9,10, 9, 8, 9,10,12,12,11,11,12,11,10,11,12,11,
-        12,12, 8, 9, 9, 9,10,11,12,11,12,11,11,11,11,12,
-        12,11,11,12,12,11,11, 9, 9, 8, 9, 9,11, 9, 9,10,
-         9,11,11,11,11,12,11,11,10,12,12,12, 9,12,11,10,
-        11,11,11,11,12,12,12,11,11,11,12,10,12,12,12,10,
-        10, 9,10, 9,10,10, 9, 9, 9,10,10,12,10,11,11, 9,
-        11,11,10,11,11,11,10,10,10, 9, 9,10,10, 9, 9,10,
-        11,11,10,11,10,11,10,11,11,10,11,11,11,10, 9,10,
-        10, 9,10, 9, 9,11, 9, 9,11,10,10,11,11,10,10,11,
-        10,11, 8, 9,11,11,10, 9,10,11,11,10,11,11,10,10,
-        10,11,10, 9,10,10,11, 9,10,10, 9,11,10,10,10,10,
-        11,10,11,11, 9,11,10,11,10,10,11,11,10,10,10, 9,
-        10,10,11,11,11, 9,10,10,10,10,10,11,10,10,10, 9,
-        10,10,11,10,10,10,10,10, 9,10,11,10,10,10,10,11,
-        11,11,10,10,10,10,10,11,10,11,10,11,10,10,10, 9,
-        11,11,10,10,10,11,11,10,10,10,10,10,10,10,10,11,
-        11, 9,10,10,10,11,10,11,10,10,10,11, 9,10,11,10,
-        11,10,10, 9,10,10,10,11,10,11,10,10,10,10,10,11,
-        11,10,11,11,10,10,11,11,10, 9, 9,10,10,10,10,10,
-         9,11, 9,10,10,10,11,11,10,10,10,10,11,11,11,10,
-         9, 9,10,10,11,10,10,10,10,10,11,11,11,10,10,10,
-        11,11,11, 9,10,10,10,10, 9,10, 9,10,11,10,11,10,
-        10,11,11,10,11,11,11,11,11,10,11,10,10,10, 9,11,
-        11,10,11,11,11,11,11,11,11,11,11,10,11,10,10,10,
-        10,11,10,10,11, 9,10,10,10,
-};
-
-static const static_codebook _16c0_s_p9_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__16c0_s_p9_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__16c0_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__16c0_s_single[] = {
-         3, 4,19, 7, 9, 7, 8,11, 9,12, 4, 1,19, 6, 7, 7,
-         8,10,11,13,18,18,18,18,18,18,18,18,18,18, 8, 6,
-        18, 8, 9, 9,11,12,14,18, 9, 6,18, 9, 7, 8, 9,11,
-        12,18, 7, 6,18, 8, 7, 7, 7, 9,11,17, 8, 8,18, 9,
-         7, 6, 6, 8,11,17,10,10,18,12, 9, 8, 7, 9,12,18,
-        13,15,18,15,13,11,10,11,15,18,14,18,18,18,18,18,
-        16,16,18,18,
-};
-
-static const static_codebook _huff_book__16c0_s_single = {
-        2, 100,
-        (long *)_huff_lengthlist__16c0_s_single,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__16c1_s_long[] = {
-         2, 5,20, 7,10, 7, 8,10,11,11, 4, 2,20, 5, 8, 6,
-         7, 9,10,10,20,20,20,20,19,19,19,19,19,19, 7, 5,
-        19, 6,10, 7, 9,11,13,17,11, 8,19,10, 7, 7, 8,10,
-        11,15, 7, 5,19, 7, 7, 5, 6, 9,11,16, 7, 6,19, 8,
-         7, 6, 6, 7, 9,13, 9, 9,19,11, 9, 8, 6, 7, 8,13,
-        12,14,19,16,13,10, 9, 8, 9,13,14,17,19,18,18,17,
-        12,11,11,13,
-};
-
-static const static_codebook _huff_book__16c1_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__16c1_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16c1_s_p1_0[] = {
-         1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
-         0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
-         0, 0, 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
-         0, 0, 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _16c1_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__16c1_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__16c1_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16c1_s_p3_0[] = {
-         1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _16c1_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__16c1_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16c1_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16c1_s_p4_0[] = {
-         1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _16c1_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16c1_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16c1_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16c1_s_p5_0[] = {
-         1, 3, 3, 5, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
-         9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 8, 8,
-         8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
-         9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _16c1_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16c1_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16c1_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__16c1_s_p6_0[] = {
-         1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,12,
-        12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,12,12, 0, 0, 0, 8, 8, 8, 9,10, 9,10,10,10,10,
-        11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,11,
-        11,11,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
-        11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
-        10,11,11,12,12,13,13, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,11,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
-        14,
-};
-
-static const static_codebook _16c1_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__16c1_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__16c1_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16c1_s_p7_0[] = {
-         1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9,10,10,
-        10, 9, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11,
-        11,11,10,10, 6,10, 9,11,11,11,11,10,10, 6,10,10,
-        11,11,11,11,10,10, 7,11,11,11,11,11,12,12,11, 6,
-        10,10,11,10,10,11,11,11, 6,10,10,10,11,10,11,11,
-        11,
-};
-
-static const static_codebook _16c1_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16c1_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__16c1_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__16c1_s_p7_1[] = {
-         2, 3, 3, 5, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6,
-         7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
-         8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8,
-         8, 9, 9,10,10,10,10,10, 9, 9, 8, 8, 9, 9,10,10,
-        10,10,10, 8, 8, 8, 8, 9, 9,
-};
-
-static const static_codebook _16c1_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__16c1_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16c1_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__16c1_s_p8_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5,
-         7, 8, 8, 9, 8, 8, 9, 9,10,11, 6, 5, 5, 8, 8, 9,
-         9, 8, 8, 9,10,10,11, 0, 8, 8, 8, 9, 9, 9, 9, 9,
-        10,10,11,11, 0, 9, 9, 9, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,13,13, 9, 9,10,10,10,10,11,11,12,12, 0,14,
-        13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
-         9, 9,11,11,12,12,13,12, 0, 0, 0,10,10, 9, 9,10,
-        10,12,12,13,13, 0, 0, 0,13,14,11,10,11,11,12,12,
-        13,14, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,12,12,12,12,13,13,14,15, 0, 0, 0, 0,
-         0,12,12,12,12,13,13,14,15,
-};
-
-static const static_codebook _16c1_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__16c1_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__16c1_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16c1_s_p8_1[] = {
-         2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
-         6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _16c1_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__16c1_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16c1_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__16c1_s_p9_0[] = {
-         1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _16c1_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__16c1_s_p9_0,
-        1, -513964032, 1628680192, 4, 0,
-        (long *)_vq_quantlist__16c1_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__16c1_s_p9_1[] = {
-         1, 4, 4, 4, 4, 8, 8,12,13,14,14,14,14,14,14, 6,
-         6, 6, 6, 6,10, 9,14,14,14,14,14,14,14,14, 7, 6,
-         5, 6, 6,10, 9,12,13,13,13,13,13,13,13,13, 7, 7,
-         9, 9,11,11,12,13,13,13,13,13,13,13,13, 7, 7, 8,
-         8,11,12,13,13,13,13,13,13,13,13,13,12,12,10,10,
-        13,12,13,13,13,13,13,13,13,13,13,12,12,10,10,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,12,13,12,
-        13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,
-};
-
-static const static_codebook _16c1_s_p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__16c1_s_p9_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__16c1_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__16c1_s_p9_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__16c1_s_p9_2[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9,10,
-        10,10, 9,10,10,11,12,12, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,10,10,10,11,11,10,12,11,11,13,11, 7, 7, 8,
-         8, 8, 8, 9, 9, 9,10,10,10,10, 9,10,10,11,11,12,
-        11,11, 8, 8, 8, 8, 9, 9,10,10,10,10,11,11,11,11,
-        11,11,11,12,11,12,12, 8, 8, 9, 9, 9, 9, 9,10,10,
-        10,10,10,10,11,11,11,11,11,11,12,11, 9, 9, 9, 9,
-        10,10,10,10,11,10,11,11,11,11,11,11,12,12,12,12,
-        11, 9, 9, 9, 9,10,10,10,10,11,11,11,11,11,11,11,
-        11,11,12,12,12,13, 9,10,10, 9,11,10,10,10,10,11,
-        11,11,11,11,10,11,12,11,12,12,11,12,11,10, 9,10,
-        10,11,10,11,11,11,11,11,11,11,11,11,12,12,11,12,
-        12,12,10,10,10,11,10,11,11,11,11,11,11,11,11,11,
-        11,11,12,13,12,12,11, 9,10,10,11,11,10,11,11,11,
-        12,11,11,11,11,11,12,12,13,13,12,13,10,10,12,10,
-        11,11,11,11,11,11,11,11,11,12,12,11,13,12,12,12,
-        12,13,12,11,11,11,11,11,11,12,11,12,11,11,11,11,
-        12,12,13,12,11,12,12,11,11,11,11,11,12,11,11,11,
-        11,12,11,11,12,11,12,13,13,12,12,12,12,11,11,11,
-        11,11,12,11,11,12,11,12,11,11,11,11,13,12,12,12,
-        12,13,11,11,11,12,12,11,11,11,12,11,12,12,12,11,
-        12,13,12,11,11,12,12,11,12,11,11,11,12,12,11,12,
-        11,11,11,12,12,12,12,13,12,13,12,12,12,12,11,11,
-        12,11,11,11,11,11,11,12,12,12,13,12,11,13,13,12,
-        12,11,12,10,11,11,11,11,12,11,12,12,11,12,12,13,
-        12,12,13,12,12,12,12,12,11,12,12,12,11,12,11,11,
-        11,12,13,12,13,13,13,13,13,12,13,13,12,12,13,11,
-        11,11,11,11,12,11,11,12,11,
-};
-
-static const static_codebook _16c1_s_p9_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__16c1_s_p9_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__16c1_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__16c1_s_short[] = {
-         5, 6,17, 8,12, 9,10,10,12,13, 5, 2,17, 4, 9, 5,
-         7, 8,11,13,16,16,16,16,16,16,16,16,16,16, 6, 4,
-        16, 5,10, 5, 7,10,14,16,13, 9,16,11, 8, 7, 8, 9,
-        13,16, 7, 4,16, 5, 7, 4, 6, 8,11,13, 8, 6,16, 7,
-         8, 5, 5, 7, 9,13, 9, 8,16, 9, 8, 6, 6, 7, 9,13,
-        11,11,16,10,10, 7, 7, 7, 9,13,13,13,16,13,13, 9,
-         9, 9,10,13,
-};
-
-static const static_codebook _huff_book__16c1_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__16c1_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__16c2_s_long[] = {
-	 4, 7, 9, 9, 9, 8, 9,10,13,16, 5, 4, 5, 6, 7, 7,
-	 8, 9,12,16, 6, 5, 5, 5, 7, 7, 9,10,12,15, 7, 6,
-	 5, 4, 5, 6, 8, 9,10,13, 8, 7, 7, 5, 5, 5, 7, 9,
-	10,12, 7, 7, 7, 6, 5, 5, 6, 7,10,12, 8, 8, 8, 7,
-	 7, 5, 5, 6, 9,11, 8, 9, 9, 8, 8, 6, 6, 5, 8,11,
-	10,11,12,12,11, 9, 9, 8, 9,12,13,14,15,15,14,12,
-	12,11,11,13,
-};
-
-static const static_codebook _huff_book__16c2_s_long = {
-	2, 100,
-	(long *)_huff_lengthlist__16c2_s_long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__16c2_s_p1_0[] = {
-	 1, 3, 3, 0, 0, 0, 0, 0, 0, 4, 5, 5, 0, 0, 0, 0,
-	 0, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0,
-};
-
-static const static_codebook _16c2_s_p1_0 = {
-	4, 81,
-	(long *)_vq_lengthlist__16c2_s_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__16c2_s_p1_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__16c2_s_p2_0[] = {
-	 2, 4, 4, 7, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
-	 0, 0, 8, 8, 0, 0, 0, 8, 8, 4, 4, 4, 8, 7, 0, 0,
-	 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
-	 9, 9, 4, 4, 4, 7, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8,
-	 8, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 7, 8, 8,10, 9,
-	 0, 0, 0,12,11, 0, 0, 0,11,12, 0, 0, 0,14,13, 0,
-	 0, 0,14,14, 7, 8, 8, 9,10, 0, 0, 0,11,12, 0, 0,
-	 0,11,11, 0, 0, 0,14,14, 0, 0, 0,14,14, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8,11,11, 0, 0, 0,
-	12,11, 0, 0, 0,12,12, 0, 0, 0,13,12, 0, 0, 0,13,
-	13, 8, 8, 8,11,11, 0, 0, 0,11,11, 0, 0, 0,12,12,
-	 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 8, 9, 8,12,11, 0, 0, 0,12,12, 0,
-	 0, 0,12,11, 0, 0, 0,13,13, 0, 0, 0,13,13, 8, 8,
-	 8,11,12, 0, 0, 0,11,12, 0, 0, 0,11,12, 0, 0, 0,
-	13,14, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 8, 9, 9,14,14, 0, 0, 0,13,13, 0, 0, 0,13,
-	13, 0, 0, 0,13,12, 0, 0, 0,13,13, 8, 9, 9,14,14,
-	 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0, 0,12,13, 0,
-	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
-	 9, 9,14,14, 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0,
-	 0,13,13, 0, 0, 0,13,12, 8, 9, 9,14,14, 0, 0, 0,
-	13,13, 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0, 0,12,
-	12,
-};
-
-static const static_codebook _16c2_s_p2_0 = {
-	4, 625,
-	(long *)_vq_lengthlist__16c2_s_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__16c2_s_p2_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p3_0[] = {
-	4,
-	3,
-	5,
-	2,
-	6,
-	1,
-	7,
-	0,
-	8,
-};
-
-static const long _vq_lengthlist__16c2_s_p3_0[] = {
-	 1, 3, 3, 5, 5, 7, 7, 8, 8, 0, 0, 0, 6, 6, 8, 8,
-	 9, 9, 0, 0, 0, 6, 6, 8, 8, 9, 9, 0, 0, 0, 7, 7,
-	 8, 9,10,10, 0, 0, 0, 7, 7, 9, 9,10,10, 0, 0, 0,
-	 8, 8, 9, 9,11,11, 0, 0, 0, 7, 7, 9, 9,11,11, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0,
-};
-
-static const static_codebook _16c2_s_p3_0 = {
-	2, 81,
-	(long *)_vq_lengthlist__16c2_s_p3_0,
-	1, -531628032, 1611661312, 4, 0,
-	(long *)_vq_quantlist__16c2_s_p3_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p4_0[] = {
-	8,
-	7,
-	9,
-	6,
-	10,
-	5,
-	11,
-	4,
-	12,
-	3,
-	13,
-	2,
-	14,
-	1,
-	15,
-	0,
-	16,
-};
-
-static const long _vq_lengthlist__16c2_s_p4_0[] = {
-	 2, 3, 3, 5, 5, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9,
-	 9, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
-	11,10, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
-	10,10,10, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
-	11,11,11,11, 0, 0, 0, 7, 6, 8, 8, 9, 9, 9, 9,10,
-	10,11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
-	11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
-	10,11,11,11,11,12,12, 0, 0, 0, 7, 8, 8, 8, 9, 9,
-	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
-	 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0,
-};
-
-static const static_codebook _16c2_s_p4_0 = {
-	2, 289,
-	(long *)_vq_lengthlist__16c2_s_p4_0,
-	1, -529530880, 1611661312, 5, 0,
-	(long *)_vq_quantlist__16c2_s_p4_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p5_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__16c2_s_p5_0[] = {
-	 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6,10,11,10,10,
-	10,11, 4, 6, 6,10,10,11,10,11,10, 5,10,10, 9,12,
-	11,10,12,12, 7,10,10,12,12,12,12,13,13, 7,11,10,
-	11,12,12,12,13,13, 6,11,10,10,12,12,11,12,12, 7,
-	11,10,12,13,13,12,12,12, 7,10,11,12,13,13,12,12,
-	12,
-};
-
-static const static_codebook _16c2_s_p5_0 = {
-	4, 81,
-	(long *)_vq_lengthlist__16c2_s_p5_0,
-	1, -529137664, 1618345984, 2, 0,
-	(long *)_vq_quantlist__16c2_s_p5_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p5_1[] = {
-	5,
-	4,
-	6,
-	3,
-	7,
-	2,
-	8,
-	1,
-	9,
-	0,
-	10,
-};
-
-static const long _vq_lengthlist__16c2_s_p5_1[] = {
-	 2, 3, 3, 6, 6, 6, 6, 7, 7, 7, 7,11,10,10, 6, 6,
-	 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
-	 8,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,11,11,11, 6,
-	 7, 8, 8, 8, 8, 9, 9,11,11,11, 7, 7, 8, 8, 8, 8,
-	 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,11,11,11,
-	 8, 8, 8, 8, 8, 8, 8, 8,11,11,11,11,11, 8, 8, 8,
-	 8, 8, 8,12,11,11,11,11, 8, 8, 8, 8, 8, 8,12,11,
-	11,11,11, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _16c2_s_p5_1 = {
-	2, 121,
-	(long *)_vq_lengthlist__16c2_s_p5_1,
-	1, -531365888, 1611661312, 4, 0,
-	(long *)_vq_quantlist__16c2_s_p5_1,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p6_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__16c2_s_p6_0[] = {
-	 1, 4, 4, 6, 6, 8, 7, 8, 8, 9, 9,10,10, 5, 5, 5,
-	 7, 7, 9, 9, 9, 9,11,11,12,12, 6, 5, 5, 7, 7, 9,
-	 9,10, 9,11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,
-	11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
-	12, 0,11,11, 8, 8,10,10,11,11,12,12,13,13, 0,12,
-	12, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _16c2_s_p6_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__16c2_s_p6_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__16c2_s_p6_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p6_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__16c2_s_p6_1[] = {
-	 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
-	 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _16c2_s_p6_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__16c2_s_p6_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__16c2_s_p6_1,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p7_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__16c2_s_p7_0[] = {
-	 1, 4, 4, 7, 7, 8, 8, 8, 8,10, 9,10,10, 5, 5, 5,
-	 7, 7, 9, 9,10,10,11,10,12,11, 6, 5, 5, 7, 7, 9,
-	 9,10,10,11,11,12,12,20, 7, 7, 7, 7, 9, 9,10,10,
-	11,11,12,12,20, 7, 7, 7, 7, 9, 9,11,10,12,11,12,
-	12,20,11,11, 8, 8,10,10,11,11,12,12,13,13,20,12,
-	12, 8, 8, 9, 9,11,11,12,12,13,13,20,20,21,10,10,
-	10,10,11,11,12,12,13,13,21,21,21,10,10,10,10,11,
-	11,12,12,13,13,21,21,21,14,14,11,11,12,12,13,13,
-	13,14,21,21,21,16,15,11,11,12,11,13,13,14,14,21,
-	21,21,21,21,13,13,12,12,13,13,14,14,21,21,21,21,
-	21,13,13,12,12,13,13,14,14,
-};
-
-static const static_codebook _16c2_s_p7_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__16c2_s_p7_0,
-	1, -523206656, 1618345984, 4, 0,
-	(long *)_vq_quantlist__16c2_s_p7_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p7_1[] = {
-	5,
-	4,
-	6,
-	3,
-	7,
-	2,
-	8,
-	1,
-	9,
-	0,
-	10,
-};
-
-static const long _vq_lengthlist__16c2_s_p7_1[] = {
-	 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 9, 9, 6, 7,
-	 7, 7, 7, 7, 8, 8, 9, 9, 9, 6, 6, 7, 7, 7, 7, 8,
-	 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7,
-	 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
-	 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
-	 7, 7, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7,
-	 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7, 7, 8, 8, 9, 9,
-	 9, 9, 9, 7, 7, 7, 7, 8, 8,
-};
-
-static const static_codebook _16c2_s_p7_1 = {
-	2, 121,
-	(long *)_vq_lengthlist__16c2_s_p7_1,
-	1, -531365888, 1611661312, 4, 0,
-	(long *)_vq_quantlist__16c2_s_p7_1,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p8_0[] = {
-	7,
-	6,
-	8,
-	5,
-	9,
-	4,
-	10,
-	3,
-	11,
-	2,
-	12,
-	1,
-	13,
-	0,
-	14,
-};
-
-static const long _vq_lengthlist__16c2_s_p8_0[] = {
-	 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,10, 6,
-	 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11, 6, 5,
-	 5, 8, 7, 9, 9, 8, 8, 9, 9,10,10,11,11,20, 8, 8,
-	 8, 8, 9, 9, 9, 9,10,10,11,10,12,11,20, 8, 8, 8,
-	 8, 9, 9, 9, 9,10,10,11,11,12,12,20,12,12, 9, 9,
-	10,10,10,10,11,11,12,12,13,12,20,13,13, 9, 9,10,
-	10,10,10,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,
-	10,10,11,11,12,12,13,12,20,20,20, 9, 9, 9, 8,10,
-	10,12,11,12,12,13,13,20,20,20,13,13,10,10,11,11,
-	12,12,13,13,13,13,20,20,20,13,13,10,10,11,10,12,
-	11,13,13,14,14,20,20,20,20,20,11,11,11,11,12,12,
-	13,13,14,14,20,20,20,20,20,11,10,11,11,13,11,13,
-	13,14,14,20,20,21,21,21,14,14,11,12,13,13,13,13,
-	14,14,21,21,21,21,21,15,15,12,11,13,12,14,13,15,
-	14,
-};
-
-static const static_codebook _16c2_s_p8_0 = {
-	2, 225,
-	(long *)_vq_lengthlist__16c2_s_p8_0,
-	1, -520986624, 1620377600, 4, 0,
-	(long *)_vq_quantlist__16c2_s_p8_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p8_1[] = {
-	10,
-	9,
-	11,
-	8,
-	12,
-	7,
-	13,
-	6,
-	14,
-	5,
-	15,
-	4,
-	16,
-	3,
-	17,
-	2,
-	18,
-	1,
-	19,
-	0,
-	20,
-};
-
-static const long _vq_lengthlist__16c2_s_p8_1[] = {
-	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,10, 7, 7, 8,
-	 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
-	11,11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-	 9, 9, 9,10, 9,10,10,10,10,11,11,11, 8, 8, 9, 9,
-	 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,
-	11, 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
-	10,10,10,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
-	10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9,
-	 9, 9, 9,10,10,10,10,10,10,10,10,10,10,11,11,11,
-	11,11, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
-	10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
-	10,10,10,10,10,10,10,11,11,11,11,11,10, 9,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
-	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
-	11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
-	10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
-	10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
-	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,
-	11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
-	10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
-	10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _16c2_s_p8_1 = {
-	2, 441,
-	(long *)_vq_lengthlist__16c2_s_p8_1,
-	1, -529268736, 1611661312, 5, 0,
-	(long *)_vq_quantlist__16c2_s_p8_1,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p9_0[] = {
-	8,
-	7,
-	9,
-	6,
-	10,
-	5,
-	11,
-	4,
-	12,
-	3,
-	13,
-	2,
-	14,
-	1,
-	15,
-	0,
-	16,
-};
-
-static const long _vq_lengthlist__16c2_s_p9_0[] = {
-	 1, 4, 3,10, 8,10,10,10,10,10,10,10,10,10,10,10,
-	10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10, 6,10, 9,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,
-};
-
-static const static_codebook _16c2_s_p9_0 = {
-	2, 289,
-	(long *)_vq_lengthlist__16c2_s_p9_0,
-	1, -509798400, 1631393792, 5, 0,
-	(long *)_vq_quantlist__16c2_s_p9_0,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p9_1[] = {
-	9,
-	8,
-	10,
-	7,
-	11,
-	6,
-	12,
-	5,
-	13,
-	4,
-	14,
-	3,
-	15,
-	2,
-	16,
-	1,
-	17,
-	0,
-	18,
-};
-
-static const long _vq_lengthlist__16c2_s_p9_1[] = {
-	 1, 4, 4, 7, 7, 7, 7, 7, 7, 8, 8,10, 9,11,10,13,
-	11,14,13, 6, 6, 6, 8, 8, 8, 8, 8, 7, 9, 8,11, 9,
-	13,11,14,12,14,13, 5, 6, 6, 8, 8, 8, 8, 8, 8, 9,
-	 9,11,11,13,11,14,13,15,15,17, 8, 8, 8, 8, 9, 9,
-	 9, 8,11, 9,12,10,13,11,14,12,14,13,17, 8, 8, 8,
-	 8, 9, 9, 9, 9,10,10,11,11,13,13,13,14,16,15,17,
-	12,12, 8, 8, 9, 9,10,10,11,11,12,11,13,12,13,12,
-	14,13,16,12,12, 8, 8, 9, 9,10,10,11,11,12,12,13,
-	13,14,14,15,15,17,17,17, 9, 9, 9, 9,11,11,12,12,
-	12,13,13,13,16,14,14,14,17,17,17, 9, 8, 9, 8,11,
-	10,12,12,13,13,14,14,15,15,16,16,17,17,17,12,12,
-	10,10,11,12,12,13,13,14,13,15,15,14,16,15,17,17,
-	17,12,12,10, 8,12, 9,13,12,14,14,15,14,15,16,16,
-	16,17,17,17,17,17,11,11,12,12,14,14,14,16,15,16,
-	15,16,15,17,17,17,17,17,17,11, 9,12,10,13,11,15,
-	14,16,16,17,16,16,15,17,17,17,17,17,15,15,12,12,
-	14,14,15,16,16,15,16,16,17,17,17,17,17,17,17,14,
-	14,12,10,14,11,15,12,17,16,15,16,17,16,17,17,17,
-	17,17,17,17,13,13,14,14,14,16,17,17,16,17,17,17,
-	17,17,17,17,17,17,17,13, 9,13,12,15,13,16,16,17,
-	17,17,17,17,17,17,17,17,17,17,15,17,14,14,15,16,
-	16,17,16,17,16,17,17,17,17,17,17,17,17,17,17,14,
-	13,15,16,16,17,16,17,17,17,
-};
-
-static const static_codebook _16c2_s_p9_1 = {
-	2, 361,
-	(long *)_vq_lengthlist__16c2_s_p9_1,
-	1, -518287360, 1622704128, 5, 0,
-	(long *)_vq_quantlist__16c2_s_p9_1,
-	0
-};
-
-static const long _vq_quantlist__16c2_s_p9_2[] = {
-	24,
-	23,
-	25,
-	22,
-	26,
-	21,
-	27,
-	20,
-	28,
-	19,
-	29,
-	18,
-	30,
-	17,
-	31,
-	16,
-	32,
-	15,
-	33,
-	14,
-	34,
-	13,
-	35,
-	12,
-	36,
-	11,
-	37,
-	10,
-	38,
-	9,
-	39,
-	8,
-	40,
-	7,
-	41,
-	6,
-	42,
-	5,
-	43,
-	4,
-	44,
-	3,
-	45,
-	2,
-	46,
-	1,
-	47,
-	0,
-	48,
-};
-
-static const long _vq_lengthlist__16c2_s_p9_2[] = {
-	 2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
-	 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-	 7,
-};
-
-static const static_codebook _16c2_s_p9_2 = {
-	1, 49,
-	(long *)_vq_lengthlist__16c2_s_p9_2,
-	1, -526909440, 1611661312, 6, 0,
-	(long *)_vq_quantlist__16c2_s_p9_2,
-	0
-};
-
-static const long _huff_lengthlist__16c2_s_short[] = {
-	 7,10,12,11,12,13,15,16,18,15,10, 8, 8, 8, 9,10,
-	12,13,14,17,10, 7, 7, 7, 7, 8,10,12,15,18,10, 7,
-	 7, 5, 5, 6, 8,10,13,15,10, 7, 6, 5, 4, 4, 6, 9,
-	12,15,11, 7, 7, 5, 4, 3, 4, 7,11,13,12, 9, 8, 7,
-	 5, 4, 4, 5,10,13,11,11,11, 9, 7, 5, 5, 5, 9,12,
-	13,12,13,12,10, 8, 8, 7, 9,13,14,14,14,14,13,11,
-	11,10,10,13,
-};
-
-static const static_codebook _huff_book__16c2_s_short = {
-	2, 100,
-	(long *)_huff_lengthlist__16c2_s_short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__8c0_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8c0_s_p1_0[] = {
-         1, 5, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
-         0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0, 0,
-         0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 9,11,11, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,10, 0, 0,
-         0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 9,11,11,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,11, 0,
-         0, 0, 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,11,11,
-         0, 0, 0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _8c0_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__8c0_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__8c0_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8c0_s_p3_0[] = {
-         1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 7, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 8, 8,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 7, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _8c0_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__8c0_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8c0_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8c0_s_p4_0[] = {
-         1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _8c0_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8c0_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8c0_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8c0_s_p5_0[] = {
-         1, 3, 3, 5, 5, 7, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
-         8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 9, 0, 0, 0, 8, 8,
-         8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8, 9, 9, 0, 0, 0,
-         9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _8c0_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8c0_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8c0_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__8c0_s_p6_0[] = {
-         1, 3, 3, 6, 6, 8, 8, 9, 9, 8, 8,10, 9,10,10,11,
-        11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,12,11, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,11,
-        10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,10,
-        11,11,11,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,
-        10,11,11,12,12,13,13, 0, 0, 0,10,10,10,10,11,11,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10, 9,10,
-        11,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10, 9,10,11,12,12,13,13,14,13, 0, 0, 0, 0, 0, 9,
-         9, 9,10,10,10,11,11,13,12,13,13, 0, 0, 0, 0, 0,
-        10,10,10,10,11,11,12,12,13,13,14,14, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,13,13,13,14, 0, 0, 0,
-         0, 0, 0, 0,11,11,11,11,12,12,13,14,14,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,13, 0,
-         0, 0, 0, 0, 0, 0,11,11,12,12,13,13,14,14,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
-        14,
-};
-
-static const static_codebook _8c0_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__8c0_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__8c0_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8c0_s_p7_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,11, 9,10,12,
-         9,10, 4, 7, 7,10,10,10,11, 9, 9, 6,11,10,11,11,
-        12,11,11,11, 6,10,10,11,11,12,11,10,10, 6, 9,10,
-        11,11,11,11,10,10, 7,10,11,12,11,11,12,11,12, 6,
-         9, 9,10, 9, 9,11,10,10, 6, 9, 9,10,10,10,11,10,
-        10,
-};
-
-static const static_codebook _8c0_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8c0_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__8c0_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__8c0_s_p7_1[] = {
-         1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10, 7, 7,
-         8, 8, 9, 9, 9, 9,10,10, 9, 7, 7, 8, 8, 9, 9, 9,
-         9,10,10,10, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10, 8,
-         8, 9, 9, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9,10,
-        10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10,11,10,11,
-         9, 9, 9, 9,10,10,10,10,11,11,11,10,10, 9, 9,10,
-        10,10, 9,11,10,10,10,10,10,10, 9, 9,10,10,11,11,
-        10,10,10, 9, 9, 9,10,10,10,
-};
-
-static const static_codebook _8c0_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__8c0_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8c0_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__8c0_s_p8_0[] = {
-         1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 6, 6,
-         7, 7, 8, 8, 7, 7, 8, 9,10,10, 7, 6, 6, 7, 7, 8,
-         7, 7, 7, 9, 9,10,12, 0, 8, 8, 8, 8, 8, 9, 8, 8,
-         9, 9,10,10, 0, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9,11,
-        10, 0, 0,13, 9, 8, 9, 9, 9, 9,10,10,11,11, 0,13,
-         0, 9, 9, 9, 9, 9, 9,11,10,11,11, 0, 0, 0, 8, 9,
-        10, 9,10,10,13,11,12,12, 0, 0, 0, 8, 9, 9, 9,10,
-        10,13,12,12,13, 0, 0, 0,12, 0,10,10,12,11,10,11,
-        12,12, 0, 0, 0,13,13,10,10,10,11,12, 0,13, 0, 0,
-         0, 0, 0, 0,13,11, 0,12,12,12,13,12, 0, 0, 0, 0,
-         0, 0,13,13,11,13,13,11,12,
-};
-
-static const static_codebook _8c0_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__8c0_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__8c0_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8c0_s_p8_1[] = {
-         1, 3, 4, 5, 5, 7, 6, 6, 6, 5, 7, 7, 7, 6, 6, 7,
-         7, 7, 6, 6, 7, 7, 7, 6, 6,
-};
-
-static const static_codebook _8c0_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__8c0_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8c0_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p9_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8c0_s_p9_0[] = {
-         1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _8c0_s_p9_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8c0_s_p9_0,
-        1, -518803456, 1628680192, 2, 0,
-        (long *)_vq_quantlist__8c0_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__8c0_s_p9_1[] = {
-         1, 4, 4, 5, 5,10, 8,11,11,11,11,11,11,11,11, 6,
-         6, 6, 7, 6,11,10,11,11,11,11,11,11,11,11, 7, 5,
-         6, 6, 6, 8, 7,11,11,11,11,11,11,11,11,11, 7, 8,
-         8, 8, 9, 9,11,11,11,11,11,11,11,11,11, 9, 8, 7,
-         8, 9,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,
-};
-
-static const static_codebook _8c0_s_p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__8c0_s_p9_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__8c0_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__8c0_s_p9_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__8c0_s_p9_2[] = {
-         1, 5, 5, 7, 7, 8, 7, 8, 8,10,10, 9, 9,10,10,10,
-        11,11,10,12,11,12,12,12, 9, 8, 8, 8, 8, 8, 9,10,
-        10,10,10,11,11,11,10,11,11,12,12,11,12, 8, 8, 7,
-         7, 8, 9,10,10,10, 9,10,10, 9,10,10,11,11,11,11,
-        11,11, 9, 9, 9, 9, 8, 9,10,10,11,10,10,11,11,12,
-        10,10,12,12,11,11,10, 9, 9,10, 8, 9,10,10,10, 9,
-        10,10,11,11,10,11,10,10,10,12,12,12, 9,10, 9,10,
-         9, 9,10,10,11,11,11,11,10,10,10,11,12,11,12,11,
-        12,10,11,10,11, 9,10, 9,10, 9,10,10, 9,10,10,11,
-        10,11,11,11,11,12,11, 9,10,10,10,10,11,11,11,11,
-        11,10,11,11,11,11,10,12,10,12,12,11,12,10,10,11,
-        10, 9,11,10,11, 9,10,11,10,10,10,11,11,11,11,12,
-        12,10, 9, 9,11,10, 9,12,11,10,12,12,11,11,11,11,
-        10,11,11,12,11,10,12, 9,11,10,11,10,10,11,10,11,
-         9,10,10,10,11,12,11,11,12,11,10,10,11,11, 9,10,
-        10,12,10,11,10,10,10, 9,10,10,10,10, 9,10,10,11,
-        11,11,11,12,11,10,10,10,10,11,11,10,11,11, 9,11,
-        10,12,10,12,11,10,11,10,10,10,11,10,10,11,11,10,
-        11,10,10,10,10,11,11,12,10,10,10,11,10,11,12,11,
-        10,11,10,10,11,11,10,12,10, 9,10,10,11,11,11,10,
-        12,10,10,11,11,11,10,10,11,10,10,10,11,10,11,10,
-        12,11,11,10,10,10,12,10,10,11, 9,10,11,11,11,10,
-        10,11,10,10, 9,11,11,12,12,11,12,11,11,11,11,11,
-        11, 9,10,11,10,12,10,10,10,10,11,10,10,11,10,10,
-        12,10,10,10,10,10, 9,12,10,10,10,10,12, 9,11,10,
-        10,11,10,12,12,10,12,12,12,10,10,10,10, 9,10,11,
-        10,10,12,10,10,12,11,10,11,10,10,12,11,10,12,10,
-        10,11, 9,11,10, 9,10, 9,10,
-};
-
-static const static_codebook _8c0_s_p9_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__8c0_s_p9_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__8c0_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__8c0_s_single[] = {
-         4, 5,18, 7,10, 6, 7, 8, 9,10, 5, 2,18, 5, 7, 5,
-         6, 7, 8,11,17,17,17,17,17,17,17,17,17,17, 7, 4,
-        17, 6, 9, 6, 8,10,12,15,11, 7,17, 9, 6, 6, 7, 9,
-        11,15, 6, 4,17, 6, 6, 4, 5, 8,11,16, 6, 6,17, 8,
-         6, 5, 6, 9,13,16, 8, 9,17,11, 9, 8, 8,11,13,17,
-         9,12,17,15,14,13,12,13,14,17,12,15,17,17,17,17,
-        17,16,17,17,
-};
-
-static const static_codebook _huff_book__8c0_s_single = {
-        2, 100,
-        (long *)_huff_lengthlist__8c0_s_single,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8c1_s_p1_0[] = {
-         1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
-         0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
-         0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 8, 8,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 8,10, 8, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _8c1_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__8c1_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__8c1_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8c1_s_p3_0[] = {
-         2, 4, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _8c1_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__8c1_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8c1_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8c1_s_p4_0[] = {
-         1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _8c1_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8c1_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8c1_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8c1_s_p5_0[] = {
-         1, 3, 3, 4, 5, 6, 6, 8, 8, 0, 0, 0, 8, 8, 7, 7,
-         9, 9, 0, 0, 0, 8, 8, 7, 7, 9, 9, 0, 0, 0, 9,10,
-         8, 8, 9, 9, 0, 0, 0,10,10, 8, 8, 9, 9, 0, 0, 0,
-        11,10, 8, 8,10,10, 0, 0, 0,11,11, 8, 8,10,10, 0,
-         0, 0,12,12, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _8c1_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8c1_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8c1_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__8c1_s_p6_0[] = {
-         1, 3, 3, 5, 5, 8, 8, 8, 8, 9, 9,10,10,11,11,11,
-        11, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,11,
-        12,12,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,
-        11,12,12,12,12, 0, 0, 0,10,10, 9, 9,10,10,10,10,
-        11,11,12,12,13,13, 0, 0, 0,10,10, 9, 9,10,10,10,
-        10,11,11,12,12,13,13, 0, 0, 0,11,11, 9, 9,10,10,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,11,11,12,11,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,11,11,11,11,12,12,13,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,11,10,11,11,12,12,13,13,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,13, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
-        14,
-};
-
-static const static_codebook _8c1_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__8c1_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__8c1_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8c1_s_p7_0[] = {
-         1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
-         9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
-        10,11,10,10, 6, 9, 9,10, 9,10,11,10,10, 6, 9, 9,
-        10, 9, 9,11, 9,10, 7,10,10,11,11,11,11,10,10, 6,
-         9, 9,10,10,10,11, 9, 9, 6, 9, 9,10,10,10,10, 9,
-         9,
-};
-
-static const static_codebook _8c1_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8c1_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__8c1_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__8c1_s_p7_1[] = {
-         2, 3, 3, 5, 5, 7, 7, 7, 7, 7, 7,10,10, 9, 7, 7,
-         7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8,
-         8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
-         8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 8, 8, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _8c1_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__8c1_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8c1_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__8c1_s_p8_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5,
-         7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8,
-         8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-         9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9, 9, 9,10, 9,10,11,11,11, 0,13,
-        12, 9, 8, 9, 9,10,10,11,11,12,11, 0, 0, 0, 9, 9,
-         9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,12,11,
-        13,12, 0, 0, 0,14,14,10,10,11,10,11,11,12,12, 0,
-         0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0,
-         0,12,12,11,10,12,11,13,12,
-};
-
-static const static_codebook _8c1_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__8c1_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__8c1_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8c1_s_p8_1[] = {
-         2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
-         6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _8c1_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__8c1_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8c1_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__8c1_s_p9_0[] = {
-         1, 3, 3,10,10,10,10,10,10,10,10,10,10, 5, 6, 6,
-        10,10,10,10,10,10,10,10,10,10, 6, 7, 8,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10, 9, 9, 9, 9,
-};
-
-static const static_codebook _8c1_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__8c1_s_p9_0,
-        1, -513964032, 1628680192, 4, 0,
-        (long *)_vq_quantlist__8c1_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__8c1_s_p9_1[] = {
-         1, 4, 4, 5, 5, 7, 7, 9, 9,11,11,12,12,13,13, 6,
-         5, 5, 6, 6, 9, 9,10,10,12,12,12,13,15,14, 6, 5,
-         5, 7, 7, 9, 9,10,10,12,12,12,13,14,13,17, 7, 7,
-         8, 8,10,10,11,11,12,13,13,13,13,13,17, 7, 7, 8,
-         8,10,10,11,11,13,13,13,13,14,14,17,11,11, 9, 9,
-        11,11,12,12,12,13,13,14,15,13,17,12,12, 9, 9,11,
-        11,12,12,13,13,13,13,14,16,17,17,17,11,12,12,12,
-        13,13,13,14,15,14,15,15,17,17,17,12,12,11,11,13,
-        13,14,14,15,14,15,15,17,17,17,15,15,13,13,14,14,
-        15,14,15,15,16,15,17,17,17,15,15,13,13,13,14,14,
-        15,15,15,15,16,17,17,17,17,16,14,15,14,14,15,14,
-        14,15,15,15,17,17,17,17,17,14,14,16,14,15,15,15,
-        15,15,15,17,17,17,17,17,17,16,16,15,17,15,15,14,
-        17,15,17,16,17,17,17,17,16,15,14,15,15,15,15,15,
-        15,
-};
-
-static const static_codebook _8c1_s_p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__8c1_s_p9_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__8c1_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__8c1_s_p9_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__8c1_s_p9_2[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
-         9, 9, 9, 9, 9,11,11,12, 7, 7, 7, 7, 8, 8, 9, 9,
-         9, 9,10,10,10,10,10,10,10,10,11,11,11, 7, 7, 7,
-         7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,11,
-        11,12, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,
-        10,10,10,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
-         9,10,10,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,
-        11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,
-        10,10,10,11,12,11, 9, 9, 8, 9, 9, 9, 9, 9,10,10,
-        10,10,10,10,10,10,10,10,11,11,11,11,11, 8, 8, 9,
-         9, 9, 9,10,10,10,10,10,10,10,10,10,10,11,12,11,
-        12,11, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
-        10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
-        10,10,10,10,10,10,10,12,11,12,11,11, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,12,11,11,11,
-        11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        11,11,11,12,11,11,12,11,10,10,10,10,10,10,10,10,
-        10,10,10,10,11,10,11,11,11,11,11,11,11,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,11,11,12,11,12,
-        11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        11,11,12,11,12,11,11,11,11,10,10,10,10,10,10,10,
-        10,10,10,10,10,11,11,12,11,11,12,11,11,12,10,10,
-        11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
-        11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,12,
-        12,11,12,11,11,12,12,12,11,11,10,10,10,10,10,10,
-        10,10,10,11,12,12,11,12,12,11,12,11,11,11,11,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _8c1_s_p9_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__8c1_s_p9_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__8c1_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__8c1_s_single[] = {
-         4, 6,18, 8,11, 8, 8, 9, 9,10, 4, 4,18, 5, 9, 5,
-         6, 7, 8,10,18,18,18,18,17,17,17,17,17,17, 7, 5,
-        17, 6,11, 6, 7, 8, 9,12,12, 9,17,12, 8, 8, 9,10,
-        10,13, 7, 5,17, 6, 8, 4, 5, 6, 8,10, 6, 5,17, 6,
-         8, 5, 4, 5, 7, 9, 7, 7,17, 8, 9, 6, 5, 5, 6, 8,
-         8, 8,17, 9,11, 8, 6, 6, 6, 7, 9,10,17,12,12,10,
-         9, 7, 7, 8,
-};
-
-static const static_codebook _huff_book__8c1_s_single = {
-        2, 100,
-        (long *)_huff_lengthlist__8c1_s_single,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c2_s_long[] = {
-         6, 6,12,10,10,10, 9,10,12,12, 6, 1,10, 5, 6, 6,
-         7, 9,11,14,12, 9, 8,11, 7, 8, 9,11,13,15,10, 5,
-        12, 7, 8, 7, 9,12,14,15,10, 6, 7, 8, 5, 6, 7, 9,
-        12,14, 9, 6, 8, 7, 6, 6, 7, 9,12,12, 9, 7, 9, 9,
-         7, 6, 6, 7,10,10,10, 9,10,11, 8, 7, 6, 6, 8,10,
-        12,11,13,13,11,10, 8, 8, 8,10,11,13,15,15,14,13,
-        10, 8, 8, 9,
-};
-
-static const static_codebook _huff_book__44c2_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c2_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c2_s_p1_0[] = {
-         2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0,
-         0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
-         0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c2_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c2_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c2_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c2_s_p2_0[] = {
-         1, 4, 4, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0,
-         8, 8, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8,
-         8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
-         0, 0, 4, 6, 6, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,11,11, 0, 0,
-         0,11,11, 0, 0, 0,12,11, 0, 0, 0, 0, 0, 0, 0, 7,
-         8, 8, 0, 0, 0,10,11, 0, 0, 0,11,11, 0, 0, 0,11,
-        12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0,11,11, 0, 0, 0,11,11,
-         0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0,
-         0, 0,10,11, 0, 0, 0,10,11, 0, 0, 0,11,11, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         8, 9, 9, 0, 0, 0,11,12, 0, 0, 0,11,12, 0, 0, 0,
-        12,11, 0, 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0,12,
-        11, 0, 0, 0,12,11, 0, 0, 0,11,12, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c2_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c2_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c2_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c2_s_p3_0[] = {
-         2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c2_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c2_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c2_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c2_s_p4_0[] = {
-         1, 3, 3, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 0, 0,
-         0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 7, 7, 6, 6,
-         0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0,
-         7, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c2_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c2_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c2_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c2_s_p5_0[] = {
-         1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 7, 7, 7, 7, 7, 7,
-         9, 9, 0, 7, 7, 7, 7, 7, 7, 9, 9, 0, 8, 8, 7, 7,
-         8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
-         9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
-        11,
-};
-
-static const static_codebook _44c2_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c2_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c2_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c2_s_p6_0[] = {
-         1, 4, 3, 6, 6, 8, 8, 9, 9, 9, 9, 9, 9,10,10,11,
-        11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        12,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,11,12, 0, 8, 8, 7, 7, 9, 9,10,10, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10, 9,10,
-        10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
-        11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
-        10,11,11,12,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,10,10,11,11,12,12,13,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
-        14,
-};
-
-static const static_codebook _44c2_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c2_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c2_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c2_s_p7_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,10, 9, 9, 7,10,10,11,10,
-        11,11,10,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
-        11,10,11,11,10,10, 7,11,10,11,11,11,12,11,11, 6,
-         9, 9,11,10,10,11,11,10, 6, 9, 9,11,10,10,12,10,
-        11,
-};
-
-static const static_codebook _44c2_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c2_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c2_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c2_s_p7_1[] = {
-         2, 3, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 7, 7, 6, 6,
-         7, 7, 8, 8, 8, 8, 9, 6, 6, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 8, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c2_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c2_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c2_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c2_s_p8_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 5, 7, 7, 8,
-         8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
-        13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
-        10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11,
-        11,12,12,12,12, 0, 0, 0,14,14,10,11,11,11,12,12,
-        13,13, 0, 0, 0,14,14,11,10,11,11,13,12,13,13, 0,
-         0, 0, 0, 0,12,12,11,12,13,12,14,14, 0, 0, 0, 0,
-         0,12,12,12,12,13,12,14,14,
-};
-
-static const static_codebook _44c2_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c2_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c2_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c2_s_p8_1[] = {
-         2, 4, 4, 5, 4, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c2_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c2_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c2_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c2_s_p9_0[] = {
-         1, 5, 4,12,12,12,12,12,12,12,12,12,12, 4, 9, 8,
-        11,11,11,11,11,11,11,11,11,11, 2, 8, 7,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c2_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c2_s_p9_0,
-        1, -514541568, 1627103232, 4, 0,
-        (long *)_vq_quantlist__44c2_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p9_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c2_s_p9_1[] = {
-         1, 4, 4, 6, 6, 7, 6, 8, 8,10, 9,10,10, 6, 5, 5,
-         7, 7, 8, 7,10, 9,11,11,12,13, 6, 5, 5, 7, 7, 8,
-         8,10,10,11,11,13,13,18, 8, 8, 8, 8, 9, 9,10,10,
-        12,12,12,13,18, 8, 8, 8, 8, 9, 9,10,10,12,12,13,
-        13,18,11,11, 8, 8,10,10,11,11,12,11,13,12,18,11,
-        11, 9, 7,10,10,11,11,11,12,12,13,17,17,17,10,10,
-        11,11,12,12,12,10,12,12,17,17,17,11,10,11,10,13,
-        12,11,12,12,12,17,17,17,15,14,11,11,12,11,13,10,
-        13,12,17,17,17,14,14,12,10,11,11,13,13,13,13,17,
-        17,16,17,16,13,13,12,10,13,10,14,13,17,16,17,16,
-        17,13,12,12,10,13,11,14,14,
-};
-
-static const static_codebook _44c2_s_p9_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c2_s_p9_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44c2_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c2_s_p9_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c2_s_p9_2[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
-         8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9,10, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 8, 7, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9,10, 9, 9, 9,10,11,10, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9,10,10,10,10,11,10, 8, 8, 9, 9, 9, 9,
-         9, 9,10, 9, 9,10, 9,10,11,10,11,11,11, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9,10,10,11,11,11,11,11, 9, 9,
-         9, 9, 9, 9,10, 9, 9, 9,10,10,11,11,11,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,11,11,11,11,11,
-         9, 9, 9, 9,10,10, 9, 9, 9,10,10,10,11,11,11,11,
-        11,11,11, 9, 9, 9,10, 9, 9,10,10,10,10,11,11,10,
-        11,11,11,11,10, 9,10,10, 9, 9, 9, 9,10,10,11,10,
-        11,11,11,11,11, 9, 9, 9, 9,10, 9,10,10,10,10,11,
-        10,11,11,11,11,11,10,10, 9, 9,10, 9,10,10,10,10,
-        10,10,10,11,11,11,11,11,11, 9, 9,10, 9,10, 9,10,
-        10,
-};
-
-static const static_codebook _44c2_s_p9_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c2_s_p9_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c2_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c2_s_short[] = {
-        11, 9,13,12,12,11,12,12,13,15, 8, 2,11, 4, 8, 5,
-         7,10,12,15,13, 7,10, 9, 8, 8,10,13,17,17,11, 4,
-        12, 5, 9, 5, 8,11,14,16,12, 6, 8, 7, 6, 6, 8,11,
-        13,16,11, 4, 9, 5, 6, 4, 6,10,13,16,11, 6,11, 7,
-         7, 6, 7,10,13,15,13, 9,12, 9, 8, 6, 8,10,12,14,
-        14,10,10, 8, 6, 5, 6, 9,11,13,15,11,11, 9, 6, 5,
-         6, 8, 9,12,
-};
-
-static const static_codebook _huff_book__44c2_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c2_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c3_s_long[] = {
-         5, 6,11,11,11,11,10,10,12,11, 5, 2,11, 5, 6, 6,
-         7, 9,11,13,13,10, 7,11, 6, 7, 8, 9,10,12,11, 5,
-        11, 6, 8, 7, 9,11,14,15,11, 6, 6, 8, 4, 5, 7, 8,
-        10,13,10, 5, 7, 7, 5, 5, 6, 8,10,11,10, 7, 7, 8,
-         6, 5, 5, 7, 9, 9,11, 8, 8,11, 8, 7, 6, 6, 7, 9,
-        12,11,10,13, 9, 9, 7, 7, 7, 9,11,13,12,15,12,11,
-         9, 8, 8, 8,
-};
-
-static const static_codebook _huff_book__44c3_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c3_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c3_s_p1_0[] = {
-         2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0,
-         0, 0, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
-         0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c3_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c3_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c3_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c3_s_p2_0[] = {
-         2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
-         7, 8, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7,
-         7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-         0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0,
-         0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5,
-         7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9,
-         9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7,
-         0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0,
-         0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         8,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0,
-        10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0, 9,
-         9, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c3_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c3_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c3_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c3_s_p3_0[] = {
-         2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c3_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c3_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c3_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c3_s_p4_0[] = {
-         2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
-         0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
-         7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c3_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c3_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c3_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c3_s_p5_0[] = {
-         1, 3, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 7, 8,
-         9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
-         8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
-         9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0,
-         0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11,
-        11,
-};
-
-static const static_codebook _44c3_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c3_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c3_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c3_s_p6_0[] = {
-         2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        10, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
-        11,11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
-        10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,11,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9,
-         9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,10,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 8,
-         9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8,
-         8, 9, 9,10,10,11,11,12,11,12,12, 0, 0, 0, 0, 0,
-         9,10,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,10,10,11,11,12,12,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0,
-         0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,
-        13,
-};
-
-static const static_codebook _44c3_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c3_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c3_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c3_s_p7_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
-        10,12,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
-        11,10,10,11,10,10, 7,11,11,11,11,11,12,11,11, 6,
-         9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10,
-        10,
-};
-
-static const static_codebook _44c3_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c3_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c3_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c3_s_p7_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
-         7, 8, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 8, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c3_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c3_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c3_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c3_s_p8_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8,
-         8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9,10,10,10,10,11,11,11,12, 0,13,
-        13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
-        10,10,11,11,12,12,12,12, 0, 0, 0,10,10,10,10,11,
-        11,12,12,12,12, 0, 0, 0,14,14,11,11,11,11,12,12,
-        13,13, 0, 0, 0,14,14,11,11,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,12,12,12,12,13,13,14,13, 0, 0, 0, 0,
-         0,13,13,12,12,13,12,14,13,
-};
-
-static const static_codebook _44c3_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c3_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c3_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c3_s_p8_1[] = {
-         2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c3_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c3_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c3_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c3_s_p9_0[] = {
-         1, 4, 4,12,12,12,12,12,12,12,12,12,12, 4, 9, 8,
-        12,12,12,12,12,12,12,12,12,12, 2, 9, 7,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c3_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c3_s_p9_0,
-        1, -514332672, 1627381760, 4, 0,
-        (long *)_vq_quantlist__44c3_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c3_s_p9_1[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 9,10,10,10,10, 6,
-         5, 5, 7, 7, 8, 8,10, 8,11,10,12,12,13,13, 6, 5,
-         5, 7, 7, 8, 8,10, 9,11,11,12,12,13,12,18, 8, 8,
-         8, 8, 9, 9,10, 9,11,10,12,12,13,13,18, 8, 8, 8,
-         8, 9, 9,10,10,11,11,13,12,14,13,18,11,11, 9, 9,
-        10,10,11,11,11,12,13,12,13,14,18,11,11, 9, 8,11,
-        10,11,11,11,11,12,12,14,13,18,18,18,10,11,10,11,
-        12,12,12,12,13,12,14,13,18,18,18,10,11,11, 9,12,
-        11,12,12,12,13,13,13,18,18,17,14,14,11,11,12,12,
-        13,12,14,12,14,13,18,18,18,14,14,11,10,12, 9,12,
-        13,13,13,13,13,18,18,17,16,18,13,13,12,12,13,11,
-        14,12,14,14,17,18,18,17,18,13,12,13,10,12,11,14,
-        14,14,14,17,18,18,18,18,15,16,12,12,13,10,14,12,
-        14,15,18,18,18,16,17,16,14,12,11,13,10,13,13,14,
-        15,
-};
-
-static const static_codebook _44c3_s_p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c3_s_p9_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44c3_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c3_s_p9_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c3_s_p9_2[] = {
-         2, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
-         8,10, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 8, 9, 9, 9,
-         9, 9,10, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,11, 9, 9,
-         9, 9, 9, 9,10,10, 9, 9,10, 9,11,10,11,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9,10,10,10, 9,11,11,11,11,11,
-         9, 9, 9, 9,10,10, 9, 9, 9, 9,10, 9,11,11,11,11,
-        11,11,11, 9, 9, 9, 9, 9, 9,10,10,10,10,11,11,11,
-        11,11,11,11,10, 9,10,10, 9,10, 9, 9,10, 9,11,10,
-        10,11,11,11,11, 9,10, 9, 9, 9, 9,10,10,10,10,11,
-        11,11,11,11,11,10,10,10, 9, 9,10, 9,10, 9,10,10,
-        10,10,11,11,11,11,11,11,11, 9, 9, 9, 9, 9,10,10,
-        10,
-};
-
-static const static_codebook _44c3_s_p9_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c3_s_p9_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c3_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c3_s_short[] = {
-        10, 9,13,11,14,10,12,13,13,14, 7, 2,12, 5,10, 5,
-         7,10,12,14,12, 6, 9, 8, 7, 7, 9,11,13,16,10, 4,
-        12, 5,10, 6, 8,12,14,16,12, 6, 8, 7, 6, 5, 7,11,
-        12,16,10, 4, 8, 5, 6, 4, 6, 9,13,16,10, 6,10, 7,
-         7, 6, 7, 9,13,15,12, 9,11, 9, 8, 6, 7,10,12,14,
-        14,11,10, 9, 6, 5, 6, 9,11,13,15,13,11,10, 6, 5,
-         6, 8, 9,11,
-};
-
-static const static_codebook _huff_book__44c3_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c3_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c4_s_long[] = {
-         4, 7,11,11,11,11,10,11,12,11, 5, 2,11, 5, 6, 6,
-         7, 9,11,12,11, 9, 6,10, 6, 7, 8, 9,10,11,11, 5,
-        11, 7, 8, 8, 9,11,13,14,11, 6, 5, 8, 4, 5, 7, 8,
-        10,11,10, 6, 7, 7, 5, 5, 6, 8, 9,11,10, 7, 8, 9,
-         6, 6, 6, 7, 8, 9,11, 9, 9,11, 7, 7, 6, 6, 7, 9,
-        12,12,10,13, 9, 8, 7, 7, 7, 8,11,13,11,14,11,10,
-         9, 8, 7, 7,
-};
-
-static const static_codebook _huff_book__44c4_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c4_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c4_s_p1_0[] = {
-         2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0,
-         0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
-         0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c4_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c4_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c4_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c4_s_p2_0[] = {
-         2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
-         7, 7, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7,
-         7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-         0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 7, 7, 0, 0,
-         0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5,
-         7, 8, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9,
-         9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7,
-         0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0,
-         0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         7,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0,
-        10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0, 9,
-         9, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c4_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c4_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c4_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c4_s_p3_0[] = {
-         2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c4_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c4_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c4_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c4_s_p4_0[] = {
-         2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
-         0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
-         7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c4_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c4_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c4_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c4_s_p5_0[] = {
-         2, 3, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
-         9, 9, 0, 4, 5, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7,
-         8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10, 9, 0, 0, 0,
-         9, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _44c4_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c4_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c4_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c4_s_p6_0[] = {
-         2, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,
-        11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        11,11, 0, 4, 4, 7, 6, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9,
-         9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,
-         9,10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9,
-         9, 9, 9,10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0,
-        10,10,10,10,11,11,11,11,12,12,13,12, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,11,11,12,12,12,12, 0, 0, 0,
-         0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,12,12,13,13,13,13,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,
-        13,
-};
-
-static const static_codebook _44c4_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c4_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c4_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c4_s_p7_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
-        10,11,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
-        11,10,10,11,10,10, 7,11,11,12,11,11,12,11,11, 6,
-         9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10,
-        10,
-};
-
-static const static_codebook _44c4_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c4_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c4_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c4_s_p7_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
-         7, 8, 8, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 9, 9,
-};
-
-static const static_codebook _44c4_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c4_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c4_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c4_s_p8_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
-         7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8,
-         8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9, 9, 9,10,10,10,10,11,11, 0,13,
-        13, 9, 9,10, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
-        10,10,10,10,11,11,12,12, 0, 0, 0,10,10,10,10,10,
-        10,11,11,12,12, 0, 0, 0,14,14,11,11,11,11,12,12,
-        12,12, 0, 0, 0,14,14,11,11,11,11,12,12,12,13, 0,
-         0, 0, 0, 0,12,12,12,12,12,12,13,13, 0, 0, 0, 0,
-         0,13,12,12,12,12,12,13,13,
-};
-
-static const static_codebook _44c4_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c4_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c4_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c4_s_p8_1[] = {
-         2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 5, 4, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c4_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c4_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c4_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c4_s_p9_0[] = {
-         1, 3, 3,12,12,12,12,12,12,12,12,12,12, 4, 7, 7,
-        12,12,12,12,12,12,12,12,12,12, 3, 8, 8,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _44c4_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c4_s_p9_0,
-        1, -513964032, 1628680192, 4, 0,
-        (long *)_vq_quantlist__44c4_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c4_s_p9_1[] = {
-         1, 4, 4, 5, 5, 7, 7, 9, 8,10, 9,10,10,10,10, 6,
-         5, 5, 7, 7, 9, 8,10, 9,11,10,12,12,13,13, 6, 5,
-         5, 7, 7, 9, 9,10,10,11,11,12,12,12,13,19, 8, 8,
-         8, 8, 9, 9,10,10,12,11,12,12,13,13,19, 8, 8, 8,
-         8, 9, 9,11,11,12,12,13,13,13,13,19,12,12, 9, 9,
-        11,11,11,11,12,11,13,12,13,13,18,12,12, 9, 9,11,
-        10,11,11,12,12,12,13,13,14,19,18,18,11,11,11,11,
-        12,12,13,12,13,13,14,14,16,18,18,11,11,11,10,12,
-        11,13,13,13,13,13,14,17,18,18,14,15,11,12,12,13,
-        13,13,13,14,14,14,18,18,18,15,15,12,10,13,10,13,
-        13,13,13,13,14,18,17,18,17,18,12,13,12,13,13,13,
-        14,14,16,14,18,17,18,18,17,13,12,13,10,12,12,14,
-        14,14,14,17,18,18,18,18,14,15,12,12,13,12,14,14,
-        15,15,18,18,18,17,18,15,14,12,11,12,12,14,14,14,
-        15,
-};
-
-static const static_codebook _44c4_s_p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c4_s_p9_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44c4_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c4_s_p9_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44c4_s_p9_2[] = {
-         2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-         8, 9, 9, 9, 9,11, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10,10,11, 6, 6, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,11,
-         7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,
-        10,10,10,10,12,11,11, 7, 7, 8, 8, 9, 9, 9, 9, 9,
-         9,10,10,10,10,10,10,10,10,12,11,12, 8, 8, 8, 8,
-         9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,11,
-        11, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,10,10,10,
-        10,10,10,11,11,12, 9, 9, 9, 9, 9, 9,10, 9,10,10,
-        10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9,
-         9,10,10,10,10,10,10,10,10,10,10,10,10,11,12,11,
-        11,11, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
-        10,10,10,10,10,10,10,11,11,11,12,12,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,11,12,11,12,
-        11,11,11, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,11,12,11,11,11,11,11,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,11,11,11,12,11,11,11,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,12,11,11,12,11,
-        11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
-        10,10,10,10,10,11,11,11,11,12,12,11,11,11,11,11,
-        11,11,10,10,10,10,10,10,10,10,12,12,12,11,11,11,
-        12,11,11,11,10,10,10,10,10,10,10,10,10,10,10,12,
-        11,12,12,12,12,12,11,12,11,11,10,10,10,10,10,10,
-        10,10,10,10,12,12,12,12,11,11,11,11,11,11,11,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c4_s_p9_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__44c4_s_p9_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c4_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c4_s_short[] = {
-         4, 7,14,10,15,10,12,15,16,15, 4, 2,11, 5,10, 6,
-         8,11,14,14,14,10, 7,11, 6, 8,10,11,13,15, 9, 4,
-        11, 5, 9, 6, 9,12,14,15,14, 9, 6, 9, 4, 5, 7,10,
-        12,13, 9, 5, 7, 6, 5, 5, 7,10,13,13,10, 8, 9, 8,
-         7, 6, 8,10,14,14,13,11,10,10, 7, 7, 8,11,14,15,
-        13,12, 9, 9, 6, 5, 7,10,14,17,15,13,11,10, 6, 6,
-         7, 9,12,17,
-};
-
-static const static_codebook _huff_book__44c4_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c4_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c5_s_long[] = {
-         3, 8, 9,13,10,12,12,12,12,12, 6, 4, 6, 8, 6, 8,
-        10,10,11,12, 8, 5, 4,10, 4, 7, 8, 9,10,11,13, 8,
-        10, 8, 9, 9,11,12,13,14,10, 6, 4, 9, 3, 5, 6, 8,
-        10,11,11, 8, 6, 9, 5, 5, 6, 7, 9,11,12, 9, 7,11,
-         6, 6, 6, 7, 8,10,12,11, 9,12, 7, 7, 6, 6, 7, 9,
-        13,12,10,13, 9, 8, 7, 7, 7, 8,11,15,11,15,11,10,
-         9, 8, 7, 7,
-};
-
-static const static_codebook _huff_book__44c5_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c5_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c5_s_p1_0[] = {
-         2, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
-         0, 0, 4, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
-         0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
-         0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c5_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c5_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c5_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c5_s_p2_0[] = {
-         2, 4, 4, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
-         8, 7, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8,
-         8, 0, 0, 0, 8, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
-         0, 0, 4, 6, 6, 0, 0, 0, 8, 8, 0, 0, 0, 7, 8, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 8, 8, 0, 0,
-         0, 8, 8, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 5,
-         7, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,
-        10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 5, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8,
-         0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0,
-         0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         8,10,10, 0, 0, 0,10,10, 0, 0, 0, 9,10, 0, 0, 0,
-        11,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0,10,
-        10, 0, 0, 0,10,10, 0, 0, 0,10,11, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c5_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c5_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c5_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c5_s_p3_0[] = {
-         2, 4, 3, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 5, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 5, 6, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c5_s_p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c5_s_p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c5_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c5_s_p4_0[] = {
-         2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
-         0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
-         7, 7, 0, 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 0, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c5_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c5_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c5_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c5_s_p5_0[] = {
-         2, 4, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
-         9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7,
-         7, 7, 9, 9, 0, 0, 0, 7, 6, 7, 7, 9, 9, 0, 0, 0,
-         8, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
-         0, 0, 9, 9, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _44c5_s_p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c5_s_p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c5_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p6_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c5_s_p6_0[] = {
-         2, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,11,
-        11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        12,12, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,12,12, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10,10,
-        11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 9,10,10,10,
-        10,11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,
-        10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
-        10,10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9,
-         9, 9,10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0,
-        10,10,10,10,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,11,11,12,12,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,11,11,12,12,12,13,13,13, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,13,12,13,13,13,13,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,
-        13,
-};
-
-static const static_codebook _44c5_s_p6_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c5_s_p6_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c5_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c5_s_p7_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
-        10,11,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
-        11,10,10,11,10,10, 7,11,11,12,11,11,12,11,11, 6,
-         9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10,
-        10,
-};
-
-static const static_codebook _44c5_s_p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c5_s_p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c5_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c5_s_p7_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
-         7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 9,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c5_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c5_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c5_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c5_s_p8_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
-         7, 7, 8, 8, 8, 9,10,10,10,10, 7, 5, 5, 7, 7, 8,
-         8, 9, 9,10,10,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9, 9,10,10,10,10,10,11,11, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0,10,10,
-        10,10,10,10,11,11,11,11, 0, 0, 0,10,10,10,10,10,
-        10,11,11,12,12, 0, 0, 0,14,14,11,11,11,11,12,12,
-        12,12, 0, 0, 0,14,14,11,11,11,11,12,12,12,12, 0,
-         0, 0, 0, 0,12,12,12,12,12,12,13,13, 0, 0, 0, 0,
-         0,12,12,12,12,12,12,13,13,
-};
-
-static const static_codebook _44c5_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c5_s_p8_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c5_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p8_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c5_s_p8_1[] = {
-         2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c5_s_p8_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c5_s_p8_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c5_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p9_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c5_s_p9_0[] = {
-         1, 3, 3,13,13,13,13,13,13,13,13,13,13,13,13, 4,
-         7, 7,13,13,13,13,13,13,13,13,13,13,13,13, 3, 8,
-         6,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44c5_s_p9_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c5_s_p9_0,
-        1, -512522752, 1628852224, 4, 0,
-        (long *)_vq_quantlist__44c5_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p9_1[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c5_s_p9_1[] = {
-         1, 4, 4, 5, 5, 7, 7, 9, 8,10, 9,10,10,11,10,11,
-        11, 6, 5, 5, 7, 7, 8, 9,10,10,11,10,12,11,12,11,
-        13,12, 6, 5, 5, 7, 7, 9, 9,10,10,11,11,12,12,13,
-        12,13,13,18, 8, 8, 8, 8, 9, 9,10,11,11,11,12,11,
-        13,11,13,12,18, 8, 8, 8, 8,10,10,11,11,12,12,13,
-        13,13,13,13,14,18,12,12, 9, 9,11,11,11,11,12,12,
-        13,12,13,12,13,13,20,13,12, 9, 9,11,11,11,11,12,
-        12,13,13,13,14,14,13,20,18,19,11,12,11,11,12,12,
-        13,13,13,13,13,13,14,13,18,19,19,12,11,11,11,12,
-        12,13,12,13,13,13,14,14,13,18,17,19,14,15,12,12,
-        12,13,13,13,14,14,14,14,14,14,19,19,19,16,15,12,
-        11,13,12,14,14,14,13,13,14,14,14,19,18,19,18,19,
-        13,13,13,13,14,14,14,13,14,14,14,14,18,17,19,19,
-        19,13,13,13,11,13,11,13,14,14,14,14,14,19,17,17,
-        18,18,16,16,13,13,13,13,14,13,15,15,14,14,19,19,
-        17,17,18,16,16,13,11,14,10,13,12,14,14,14,14,19,
-        19,19,19,19,18,17,13,14,13,11,14,13,14,14,15,15,
-        19,19,19,17,19,18,18,14,13,12,11,14,11,15,15,15,
-        15,
-};
-
-static const static_codebook _44c5_s_p9_1 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c5_s_p9_1,
-        1, -520814592, 1620377600, 5, 0,
-        (long *)_vq_quantlist__44c5_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c5_s_p9_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44c5_s_p9_2[] = {
-         3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 9,11, 5, 6, 7, 7, 8, 7, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, 5, 5, 7, 7, 7,
-         7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
-         7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-         9,10, 9,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,11,11,
-        11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,
-        10,10,10,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9,
-         9, 9, 9,10, 9,10,10,10,10,10,10,10,10,11,11,11,
-        11,11, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,
-        10,10,11,11,11,11,11, 9, 9, 9, 9, 9, 9,10,10,10,
-        10,10,10,10,10,10,10,11,11,11,11,11, 9, 9,10, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
-        11,11,11, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
-        10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
-        11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
-        10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
-        10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
-        11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,
-        11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
-        10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c5_s_p9_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__44c5_s_p9_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c5_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c5_s_short[] = {
-         5, 8,10,14,11,11,12,16,15,17, 5, 5, 7, 9, 7, 8,
-        10,13,17,17, 7, 5, 5,10, 5, 7, 8,11,13,15,10, 8,
-        10, 8, 8, 8,11,15,18,18, 8, 5, 5, 8, 3, 4, 6,10,
-        14,16, 9, 7, 6, 7, 4, 3, 5, 9,14,18,10, 9, 8,10,
-         6, 5, 6, 9,14,18,12,12,11,12, 8, 7, 8,11,14,18,
-        14,13,12,10, 7, 5, 6, 9,14,18,14,14,13,10, 6, 5,
-         6, 8,11,16,
-};
-
-static const static_codebook _huff_book__44c5_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c5_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c6_s_long[] = {
-         3, 8,11,13,14,14,13,13,16,14, 6, 3, 4, 7, 9, 9,
-        10,11,14,13,10, 4, 3, 5, 7, 7, 9,10,13,15,12, 7,
-         4, 4, 6, 6, 8,10,13,15,12, 8, 6, 6, 6, 6, 8,10,
-        13,14,11, 9, 7, 6, 6, 6, 7, 8,12,11,13,10, 9, 8,
-         7, 6, 6, 7,11,11,13,11,10, 9, 9, 7, 7, 6,10,11,
-        13,13,13,13,13,11, 9, 8,10,12,12,15,15,16,15,12,
-        11,10,10,12,
-};
-
-static const static_codebook _huff_book__44c6_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c6_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c6_s_p1_0[] = {
-         1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 9, 0,
-         9, 8, 5, 7, 8, 0, 9, 9, 0, 8, 9, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 5, 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9,
-         0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
-         9, 9, 0, 8, 8, 0, 8, 8, 5, 9, 9, 0, 8, 8, 0, 8,
-         8,
-};
-static const static_codebook _44c6_s_p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c6_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c6_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c6_s_p2_0[] = {
-         3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
-         7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8,
-         8,10,10, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0,
-        11,11, 5, 7, 7, 9, 9, 0, 8, 8,10,10, 0, 7, 8, 9,
-        10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,11,
-         0,11,11,12,12, 0,11,10,12,12, 0,13,14,14,14, 0,
-         0, 0,14,13, 8, 9, 9,11,11, 0,11,11,12,12, 0,10,
-        11,12,12, 0,14,13,14,14, 0, 0, 0,13,14, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10,
-         0, 7, 7,10,10, 0, 9, 9,11,10, 0, 0, 0,11,11, 5,
-         7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9,
-         9,10,11, 0, 0, 0,11,11, 8,10, 9,12,12, 0,10,10,
-        12,12, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,
-        13, 8, 9,10,12,12, 0,10,10,11,12, 0,10,10,12,12,
-         0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 5, 8, 8,11,11, 0, 7, 7,10,10, 0, 7, 7,
-        10,10, 0, 9, 9,10,11, 0, 0, 0,11,10, 5, 8, 8,11,
-        11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,11,
-         0, 0, 0,10,11, 8,10,10,12,12, 0,10,10,12,12, 0,
-        10,10,12,12, 0,12,13,13,13, 0, 0, 0,14,13, 8,10,
-        10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,13,12,
-        13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         7,10,10,14,13, 0, 9, 9,13,12, 0, 9, 9,12,12, 0,
-        10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,14, 0, 9,
-         9,12,13, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0,
-        12,12, 9,11,11,14,13, 0,11,10,14,13, 0,11,11,13,
-        13, 0,12,12,13,13, 0, 0, 0,13,13, 9,11,11,13,14,
-         0,10,11,13,14, 0,11,11,13,13, 0,12,12,13,13, 0,
-         0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-        11,11,14,14, 0,11,11,13,13, 0,11,10,13,13, 0,12,
-        12,13,13, 0, 0, 0,13,13, 9,11,11,14,14, 0,11,11,
-        13,13, 0,10,11,13,13, 0,12,12,14,13, 0, 0, 0,13,
-        13,
-};
-
-static const static_codebook _44c6_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c6_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c6_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c6_s_p3_0[] = {
-         2, 3, 4, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
-         9,10, 0, 4, 4, 6, 6, 7, 7,10, 9, 0, 5, 5, 7, 7,
-         8, 8,10,10, 0, 0, 0, 7, 6, 8, 8,10,10, 0, 0, 0,
-         7, 7, 9, 9,11,11, 0, 0, 0, 7, 7, 9, 9,11,11, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c6_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c6_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p4_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c6_s_p4_0[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9,10,10,
-        10, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,
-        11,11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,
-        10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,11,11, 0, 0, 0, 7, 7, 9, 9,10,10,10,10,
-        11,11,11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10,
-        10,11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
-        10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8, 9,
-         9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c6_s_p4_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c6_s_p4_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c6_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p5_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c6_s_p5_0[] = {
-         1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6, 9, 9,10,10,
-        10, 9, 4, 6, 6, 9,10, 9,10, 9,10, 6, 9, 9,10,12,
-        11,10,11,11, 7,10, 9,11,12,12,12,12,12, 7,10,10,
-        11,12,12,12,12,12, 6,10,10,10,12,12,11,12,12, 7,
-         9,10,11,12,12,12,12,12, 7,10, 9,12,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44c6_s_p5_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c6_s_p5_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c6_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p5_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c6_s_p5_1[] = {
-         3, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6,
-         7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6, 7, 7, 8, 8, 8,
-         8,11, 6, 6, 6, 6, 8, 8, 8, 8, 9, 9,11,11,11, 6,
-         6, 7, 8, 8, 8, 8, 9,11,11,11, 7, 7, 8, 8, 8, 8,
-         8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 8, 8,11,11,11,
-         8, 8, 8, 8, 8, 8, 8, 8,11,11,11,10,10, 8, 8, 8,
-         8, 8, 8,11,11,11,10,10, 8, 8, 8, 8, 8, 8,11,11,
-        11,10,10, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c6_s_p5_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c6_s_p5_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p5_1,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c6_s_p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 8, 8,10, 9,10,10, 6, 5, 5,
-         7, 7, 9, 9, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 9,
-         9,10, 9,11,10,11,11, 0, 6, 6, 7, 7, 9, 9,10,10,
-        11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
-        12, 0,11,11, 8, 8,10,10,11,11,12,12,12,12, 0,11,
-        12, 9, 8,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c6_s_p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c6_s_p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c6_s_p6_1[] = {
-         3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c6_s_p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c6_s_p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c6_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c6_s_p7_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 8, 8,10,10,11,10, 6, 5, 5,
-         7, 7, 8, 8, 9, 9,10,10,12,11, 6, 5, 5, 7, 7, 8,
-         8, 9, 9,10,10,12,11,21, 7, 7, 7, 7, 9, 9,10,10,
-        11,11,12,12,21, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
-        12,21,12,12, 9, 9,10,10,11,11,11,11,12,12,21,12,
-        12, 9, 9,10,10,11,11,12,12,12,12,21,21,21,11,11,
-        10,10,11,12,12,12,13,13,21,21,21,11,11,10,10,12,
-        12,12,12,13,13,21,21,21,15,15,11,11,12,12,13,13,
-        13,13,21,21,21,15,16,11,11,12,12,13,13,14,14,21,
-        21,21,21,20,13,13,13,13,13,13,14,14,20,20,20,20,
-        20,13,13,13,13,13,13,14,14,
-};
-
-static const static_codebook _44c6_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c6_s_p7_0,
-        1, -523206656, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c6_s_p7_1[] = {
-         3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 9, 5, 5, 6, 6,
-         7, 7, 7, 7, 8, 7, 8, 5, 5, 6, 6, 7, 7, 7, 7, 7,
-         7, 9, 6, 6, 7, 7, 7, 7, 8, 7, 7, 8, 9, 9, 9, 7,
-         7, 7, 7, 7, 7, 7, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
-         8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
-         8, 8, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 8, 8, 8, 7,
-         7, 8, 8, 9, 9, 9, 8, 8, 8, 8, 7, 7, 8, 8, 9, 9,
-         9, 8, 8, 7, 7, 7, 7, 8, 8,
-};
-
-static const static_codebook _44c6_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c6_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p8_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c6_s_p8_0[] = {
-         1, 4, 4, 7, 7, 8, 8, 7, 7, 8, 7, 9, 8,10, 9, 6,
-         5, 5, 8, 8, 9, 9, 8, 8, 9, 9,11,10,11,10, 6, 5,
-         5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11,18, 8, 8,
-         9, 8,10,10, 9, 9,10,10,10,10,11,10,18, 8, 8, 9,
-         9,10,10, 9, 9,10,10,11,11,12,12,18,12,13, 9,10,
-        10,10, 9,10,10,10,11,11,12,11,18,13,13, 9, 9,10,
-        10,10,10,10,10,11,11,12,12,18,18,18,10,10, 9, 9,
-        11,11,11,11,11,12,12,12,18,18,18,10, 9,10, 9,11,
-        10,11,11,11,11,13,12,18,18,18,14,13,10,10,11,11,
-        12,12,12,12,12,12,18,18,18,14,13,10,10,11,10,12,
-        12,12,12,12,12,18,18,18,18,18,12,12,11,11,12,12,
-        13,13,13,14,18,18,18,18,18,12,12,11,11,12,11,13,
-        13,14,13,18,18,18,18,18,16,16,11,12,12,13,13,13,
-        14,13,18,18,18,18,18,16,15,12,11,12,11,13,11,15,
-        14,
-};
-
-static const static_codebook _44c6_s_p8_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c6_s_p8_0,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p8_1[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44c6_s_p8_1[] = {
-         3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
-         8, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,10,
-         7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9,10,11,11, 8, 7, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,
-        11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,11,
-        11,11, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9,10, 9, 9,
-        10, 9,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,10,10,
-        10,10, 9,10,10, 9,10,11,11,11,11,11, 9, 9, 9, 9,
-        10,10,10, 9,10,10,10,10, 9,10,10, 9,11,11,11,11,
-        11,11,11, 9, 9, 9, 9,10,10,10,10, 9,10,10,10,10,
-        10,11,11,11,11,11,11,11,10, 9,10,10,10,10,10,10,
-        10, 9,10, 9,10,10,11,11,11,11,11,11,11,10, 9,10,
-         9,10,10, 9,10,10,10,10,10,10,10,11,11,11,11,11,
-        11,11,10,10,10,10,10,10,10, 9,10,10,10,10,10, 9,
-        11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
-        10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
-        10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
-        11,11,11,10,10,10,10,10,10,10,10,10, 9,10,10,11,
-        11,11,11,11,11,11,11,11,10,10,10, 9,10,10,10,10,
-        10,10,10,10,10,11,11,11,11,11,11,11,11,10,11, 9,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c6_s_p8_1 = {
-        2, 441,
-        (long *)_vq_lengthlist__44c6_s_p8_1,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c6_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c6_s_p9_0[] = {
-         1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4, 7, 7,
-        11,11,11,11,11,11,11,11,11,11, 5, 8, 9,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c6_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c6_s_p9_0,
-        1, -511845376, 1630791680, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p9_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c6_s_p9_1[] = {
-         1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8, 8, 8, 6, 6, 6,
-         8, 8, 8, 8, 8, 7, 9, 8,10,10, 5, 6, 6, 8, 8, 9,
-         9, 8, 8,10,10,10,10,16, 9, 9, 9, 9, 9, 9, 9, 8,
-        10, 9,11,11,16, 8, 9, 9, 9, 9, 9, 9, 9,10,10,11,
-        11,16,13,13, 9, 9,10, 9, 9,10,11,11,11,12,16,13,
-        14, 9, 8,10, 8, 9, 9,10,10,12,11,16,14,16, 9, 9,
-         9, 9,11,11,12,11,12,11,16,16,16, 9, 7, 9, 6,11,
-        11,11,10,11,11,16,16,16,11,12, 9,10,11,11,12,11,
-        13,13,16,16,16,12,11,10, 7,12,10,12,12,12,12,16,
-        16,15,16,16,10,11,10,11,13,13,14,12,16,16,16,15,
-        15,12,10,11,11,13,11,12,13,
-};
-
-static const static_codebook _44c6_s_p9_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c6_s_p9_1,
-        1, -518889472, 1622704128, 4, 0,
-        (long *)_vq_quantlist__44c6_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c6_s_p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44c6_s_p9_2[] = {
-         2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _44c6_s_p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44c6_s_p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44c6_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c6_s_short[] = {
-         3, 9,11,11,13,14,19,17,17,19, 5, 4, 5, 8,10,10,
-        13,16,18,19, 7, 4, 4, 5, 8, 9,12,14,17,19, 8, 6,
-         5, 5, 7, 7,10,13,16,18,10, 8, 7, 6, 5, 5, 8,11,
-        17,19,11, 9, 7, 7, 5, 4, 5, 8,17,19,13,11, 8, 7,
-         7, 5, 5, 7,16,18,14,13, 8, 6, 6, 5, 5, 7,16,18,
-        18,16,10, 8, 8, 7, 7, 9,16,18,18,18,12,10,10, 9,
-         9,10,17,18,
-};
-
-static const static_codebook _huff_book__44c6_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c6_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c7_s_long[] = {
-         3, 8,11,13,15,14,14,13,15,14, 6, 4, 5, 7, 9,10,
-        11,11,14,13,10, 4, 3, 5, 7, 8, 9,10,13,13,12, 7,
-         4, 4, 5, 6, 8, 9,12,14,13, 9, 6, 5, 5, 6, 8, 9,
-        12,14,12, 9, 7, 6, 5, 5, 6, 8,11,11,12,11, 9, 8,
-         7, 6, 6, 7,10,11,13,11,10, 9, 8, 7, 6, 6, 9,11,
-        13,13,12,12,12,10, 9, 8, 9,11,12,14,15,15,14,12,
-        11,10,10,12,
-};
-
-static const static_codebook _huff_book__44c7_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c7_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c7_s_p1_0[] = {
-         1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 9, 0,
-         9, 8, 5, 7, 8, 0, 9, 9, 0, 8, 9, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 5, 9, 9, 0, 8, 8, 0, 8, 8, 5, 8, 9,
-         0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
-         9, 9, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8,
-         8,
-};
-
-static const static_codebook _44c7_s_p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c7_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c7_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c7_s_p2_0[] = {
-         3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
-         7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8,
-         8,10,10, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0,
-        11,11, 5, 7, 7, 9, 9, 0, 8, 8,10,10, 0, 7, 8, 9,
-        10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
-         0,11,11,12,12, 0,11,10,12,12, 0,13,14,14,14, 0,
-         0, 0,14,13, 8, 9, 9,10,11, 0,11,11,12,12, 0,10,
-        11,12,12, 0,13,13,14,14, 0, 0, 0,13,14, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10,
-         0, 7, 7,10,10, 0, 9, 9,11,10, 0, 0, 0,11,11, 5,
-         7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9,
-         9,10,11, 0, 0, 0,11,11, 8,10, 9,12,12, 0,10,10,
-        12,12, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,
-        13, 8, 9,10,12,12, 0,10,10,12,12, 0,10,10,11,12,
-         0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 5, 8, 8,11,11, 0, 7, 7,10,10, 0, 7, 7,
-        10,10, 0, 9, 9,10,11, 0, 0, 0,11,10, 5, 8, 8,10,
-        11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,10,
-         0, 0, 0,10,11, 9,10,10,12,12, 0,10,10,12,12, 0,
-        10,10,12,12, 0,12,13,13,13, 0, 0, 0,13,12, 9,10,
-        10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,13,12,
-        13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         7,10,10,14,13, 0, 9, 9,12,12, 0, 9, 9,12,12, 0,
-        10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,14, 0, 9,
-         9,12,13, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0,
-        12,12, 9,11,11,14,13, 0,11,10,13,12, 0,11,11,13,
-        13, 0,12,12,13,13, 0, 0, 0,13,13, 9,11,11,13,14,
-         0,10,11,12,13, 0,11,11,13,13, 0,12,12,13,13, 0,
-         0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-        11,11,14,14, 0,10,11,13,13, 0,11,10,13,13, 0,12,
-        12,13,13, 0, 0, 0,13,12, 9,11,11,14,14, 0,11,10,
-        13,13, 0,10,11,13,13, 0,12,12,14,13, 0, 0, 0,13,
-        13,
-};
-
-static const static_codebook _44c7_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c7_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c7_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c7_s_p3_0[] = {
-         2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
-         9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
-         8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
-         7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c7_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c7_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p4_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c7_s_p4_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,
-        12,12, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
-        11,12,12, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
-        11,12,12,12, 0, 0, 0, 6, 6, 8, 7, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
-        11,11,12,12,13,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
-        10,11,11,12,12,12,13, 0, 0, 0, 7, 7, 8, 8, 9, 9,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
-         9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c7_s_p4_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c7_s_p4_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c7_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p5_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c7_s_p5_0[] = {
-         1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 7,10,10,10,10,
-        10, 9, 4, 6, 6,10,10,10,10, 9,10, 5,10,10, 9,11,
-        12,10,11,12, 7,10,10,11,12,12,12,12,12, 7,10,10,
-        11,12,12,12,12,12, 6,10,10,10,12,12,11,12,12, 7,
-        10,10,12,12,12,12,11,12, 7,10,10,11,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44c7_s_p5_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c7_s_p5_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c7_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p5_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c7_s_p5_1[] = {
-         3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6,
-         7, 7, 8, 8, 9, 9,11, 4, 4, 6, 6, 7, 7, 8, 8, 9,
-         9,12, 5, 5, 6, 6, 7, 7, 9, 9, 9, 9,12,12,12, 6,
-         6, 7, 7, 9, 9, 9, 9,11,11,11, 7, 7, 7, 7, 8, 8,
-         9, 9,11,11,11, 7, 7, 7, 7, 8, 8, 9, 9,11,11,11,
-         7, 7, 8, 8, 8, 8, 9, 9,11,11,11,11,11, 8, 8, 8,
-         8, 8, 9,11,11,11,11,11, 8, 8, 8, 8, 8, 8,11,11,
-        11,11,11, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c7_s_p5_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c7_s_p5_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p5_1,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c7_s_p6_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 8,10,10, 6, 5, 5,
-         7, 7, 8, 8, 9, 9, 9,10,11,11, 7, 5, 5, 7, 7, 8,
-         8, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 8, 9, 9,
-        10,10,11,11, 0, 8, 8, 7, 7, 8, 9, 9, 9,10,10,11,
-        11, 0,11,11, 9, 9,10,10,11,10,11,11,12,12, 0,12,
-        12, 9, 9,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c7_s_p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c7_s_p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c7_s_p6_1[] = {
-         3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c7_s_p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c7_s_p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c7_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c7_s_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 8, 9, 9,10,10,12,11, 6, 5, 5,
-         7, 7, 8, 8, 9,10,11,11,12,12, 7, 5, 5, 7, 7, 8,
-         8,10,10,11,11,12,12,20, 7, 7, 7, 7, 8, 9,10,10,
-        11,11,12,13,20, 7, 7, 7, 7, 9, 9,10,10,11,12,13,
-        13,20,11,11, 8, 8, 9, 9,11,11,12,12,13,13,20,11,
-        11, 8, 8, 9, 9,11,11,12,12,13,13,20,20,20,10,10,
-        10,10,12,12,13,13,13,13,20,20,20,10,10,10,10,12,
-        12,13,13,13,14,20,20,20,14,14,11,11,12,12,13,13,
-        14,14,20,20,20,14,14,11,11,12,12,13,13,14,14,20,
-        20,20,20,19,13,13,13,13,14,14,15,14,19,19,19,19,
-        19,13,13,13,13,14,14,15,15,
-};
-
-static const static_codebook _44c7_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c7_s_p7_0,
-        1, -523206656, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c7_s_p7_1[] = {
-         4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 6, 6, 7, 7,
-         7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 7, 7, 7, 7, 7, 7,
-         7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7,
-         7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
-         7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
-         7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
-         7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
-         8, 8, 8, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c7_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c7_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p8_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c7_s_p8_0[] = {
-         1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8, 9, 9,10,10, 6,
-         5, 5, 7, 7, 9, 9, 8, 8,10, 9,11,10,12,11, 6, 5,
-         5, 8, 7, 9, 9, 8, 8,10,10,11,11,12,11,19, 8, 8,
-         8, 8,10,10, 9, 9,10,10,11,11,12,11,19, 8, 8, 8,
-         8,10,10, 9, 9,10,10,11,11,12,12,19,12,12, 9, 9,
-        10,10, 9,10,10,10,11,11,12,12,19,12,12, 9, 9,10,
-        10,10,10,10,10,12,12,12,12,19,19,19, 9, 9, 9, 9,
-        11,10,11,11,12,11,13,13,19,19,19, 9, 9, 9, 9,11,
-        10,11,11,11,12,13,13,19,19,19,13,13,10,10,11,11,
-        12,12,12,12,13,12,19,19,19,14,13,10,10,11,11,12,
-        12,12,13,13,13,19,19,19,19,19,12,12,12,11,12,13,
-        14,13,13,13,19,19,19,19,19,12,12,12,11,12,12,13,
-        14,13,14,19,19,19,19,19,16,16,12,13,12,13,13,14,
-        15,14,19,18,18,18,18,16,15,12,11,12,11,14,12,14,
-        14,
-};
-
-static const static_codebook _44c7_s_p8_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c7_s_p8_0,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p8_1[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44c7_s_p8_1[] = {
-         3, 5, 5, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
-         7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
-        10, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,11,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9, 9,10,11,10,
-        11,10, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,10, 9, 9,
-         9, 9,11,10,11,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9,
-        10, 9, 9,10, 9, 9,10,11,10,10,11,10, 9, 9, 9, 9,
-         9,10,10, 9,10,10,10,10, 9,10,10,10,10,10,10,11,
-        11,11,10, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,11,11,10,10,10,10,10,10,10,10,10,10,10,
-        10, 9,10,10, 9,10,11,11,10,11,10,11,10, 9,10,10,
-         9,10,10,10,10,10,10,10,10,10,10,11,11,11,11,10,
-        11,11,10,10,10,10,10,10, 9,10, 9,10,10, 9,10, 9,
-        10,10,10,11,10,11,10,11,11,10,10,10,10,10,10, 9,
-        10,10,10,10,10,10,10,11,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,11,10,11,
-        11,10,10,10,10, 9, 9,10,10, 9, 9,10, 9,10,10,10,
-        10,11,11,10,10,10,10,10,10,10, 9, 9,10,10,10, 9,
-         9,10,10,10,10,10,11,10,11,10,10,10,10,10,10, 9,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c7_s_p8_1 = {
-        2, 441,
-        (long *)_vq_lengthlist__44c7_s_p8_1,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c7_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c7_s_p9_0[] = {
-         1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4, 6, 6,
-        11,11,11,11,11,11,11,11,11,11, 4, 7, 7,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c7_s_p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c7_s_p9_0,
-        1, -511845376, 1630791680, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p9_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c7_s_p9_1[] = {
-         1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8, 8, 8, 6, 6, 6,
-         8, 8, 9, 8, 8, 7, 9, 8,11,10, 5, 6, 6, 8, 8, 9,
-         8, 8, 8,10, 9,11,11,16, 8, 8, 9, 8, 9, 9, 9, 8,
-        10, 9,11,10,16, 8, 8, 9, 9,10,10, 9, 9,10,10,11,
-        11,16,13,13, 9, 9,10,10, 9,10,11,11,12,11,16,13,
-        13, 9, 8,10, 9,10,10,10,10,11,11,16,14,16, 8, 9,
-         9, 9,11,10,11,11,12,11,16,16,16, 9, 7,10, 7,11,
-        10,11,11,12,11,16,16,16,12,12, 9,10,11,11,12,11,
-        12,12,16,16,16,12,10,10, 7,11, 8,12,11,12,12,16,
-        16,15,16,16,11,12,10,10,12,11,12,12,16,16,16,15,
-        15,11,11,10,10,12,12,12,12,
-};
-
-static const static_codebook _44c7_s_p9_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c7_s_p9_1,
-        1, -518889472, 1622704128, 4, 0,
-        (long *)_vq_quantlist__44c7_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c7_s_p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44c7_s_p9_2[] = {
-         2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _44c7_s_p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44c7_s_p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44c7_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c7_s_short[] = {
-         4,11,12,14,15,15,17,17,18,18, 5, 6, 6, 8, 9,10,
-        13,17,18,19, 7, 5, 4, 6, 8, 9,11,15,19,19, 8, 6,
-         5, 5, 6, 7,11,14,16,17, 9, 7, 7, 6, 7, 7,10,13,
-        15,19,10, 8, 7, 6, 7, 6, 7, 9,14,16,12,10, 9, 7,
-         7, 6, 4, 5,10,15,14,13,11, 7, 6, 6, 4, 2, 7,13,
-        16,16,15, 9, 8, 8, 8, 6, 9,13,19,19,17,12,11,10,
-        10, 9,11,14,
-};
-
-static const static_codebook _huff_book__44c7_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c7_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c8_s_long[] = {
-         3, 8,12,13,14,14,14,13,14,14, 6, 4, 5, 8,10,10,
-        11,11,14,13, 9, 5, 4, 5, 7, 8, 9,10,13,13,12, 7,
-         5, 4, 5, 6, 8, 9,12,13,13, 9, 6, 5, 5, 5, 7, 9,
-        11,14,12,10, 7, 6, 5, 4, 6, 7,10,11,12,11, 9, 8,
-         7, 5, 5, 6,10,10,13,12,10, 9, 8, 6, 6, 5, 8,10,
-        14,13,12,12,11,10, 9, 7, 8,10,12,13,14,14,13,12,
-        11, 9, 9,10,
-};
-
-static const static_codebook _huff_book__44c8_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c8_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c8_s_p1_0[] = {
-         1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 7, 7, 0, 9, 8, 0,
-         9, 8, 6, 7, 7, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 5, 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9,
-         0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
-         9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8,
-         8,
-};
-
-static const static_codebook _44c8_s_p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c8_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c8_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c8_s_p2_0[] = {
-         3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
-         7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8,
-         7,10, 9, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0,
-        11,11, 5, 7, 7, 9, 9, 0, 7, 8, 9,10, 0, 7, 8, 9,
-        10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
-         0,11,10,12,11, 0,11,10,12,12, 0,13,13,14,14, 0,
-         0, 0,14,13, 8, 9, 9,10,11, 0,10,11,12,12, 0,10,
-        11,12,12, 0,13,13,14,14, 0, 0, 0,13,14, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10,
-         0, 7, 7,10,10, 0, 9, 9,10,10, 0, 0, 0,11,10, 5,
-         7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9,
-         9,10,10, 0, 0, 0,10,10, 8,10, 9,12,12, 0,10,10,
-        12,11, 0,10,10,12,12, 0,12,12,13,12, 0, 0, 0,13,
-        12, 8, 9,10,12,12, 0,10,10,11,12, 0,10,10,11,12,
-         0,12,12,13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 6, 8, 7,11,10, 0, 7, 7,10,10, 0, 7, 7,
-        10,10, 0, 9, 9,10,11, 0, 0, 0,10,10, 6, 7, 8,10,
-        11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,10,10,
-         0, 0, 0,10,10, 9,10, 9,12,12, 0,10,10,12,12, 0,
-        10,10,12,11, 0,12,12,13,13, 0, 0, 0,13,12, 8, 9,
-        10,12,12, 0,10,10,12,12, 0,10,10,11,12, 0,12,12,
-        13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         7,10,10,13,13, 0, 9, 9,12,12, 0, 9, 9,12,12, 0,
-        10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,13, 0, 9,
-         9,12,12, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0,
-        12,12, 9,11,11,14,13, 0,10,10,13,12, 0,11,10,13,
-        12, 0,12,12,13,12, 0, 0, 0,13,13, 9,11,11,13,14,
-         0,10,11,12,13, 0,10,11,13,13, 0,12,12,12,13, 0,
-         0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-        11,11,14,14, 0,10,11,13,13, 0,11,10,13,13, 0,11,
-        12,13,13, 0, 0, 0,13,12, 9,11,11,14,14, 0,11,10,
-        13,13, 0,10,11,13,13, 0,12,12,13,13, 0, 0, 0,12,
-        13,
-};
-
-static const static_codebook _44c8_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c8_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c8_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c8_s_p3_0[] = {
-         2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
-         9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
-         8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
-         7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c8_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c8_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c8_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p4_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c8_s_p4_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 8,10,10,11,11,
-        11,11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
-        11,11,11, 0, 6, 5, 6, 6, 7, 7, 9, 9, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 6, 6, 7, 7, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
-        11,11,11,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
-        10,11,11,11,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
-         9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c8_s_p4_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c8_s_p4_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c8_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p5_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c8_s_p5_0[] = {
-         1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 7, 6,10,10,10,10,
-        10,10, 4, 6, 6,10,10,10,10, 9,10, 5,10,10, 9,11,
-        11,10,11,11, 7,10,10,11,12,12,12,12,12, 7,10,10,
-        11,12,12,12,12,12, 6,10,10,10,12,12,10,12,12, 7,
-        10,10,11,12,12,12,12,12, 7,10,10,11,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44c8_s_p5_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c8_s_p5_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c8_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p5_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c8_s_p5_1[] = {
-         3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 5, 6, 6,
-         7, 7, 8, 8, 8, 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         9,12, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,12,12,12, 6,
-         6, 7, 7, 8, 8, 9, 9,11,11,11, 6, 6, 7, 7, 8, 8,
-         8, 8,11,11,11, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11,
-         7, 7, 7, 8, 8, 8, 8, 8,11,11,11,11,11, 7, 7, 8,
-         8, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 8, 8,11,11,
-        11,11,11, 7, 7, 7, 7, 8, 8,
-};
-
-static const static_codebook _44c8_s_p5_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c8_s_p5_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c8_s_p5_1,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c8_s_p6_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
-         7, 7, 8, 8, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 8,
-         8, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,
-        10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,10,10,11,
-        11, 0,11,11, 9, 9,10,10,11,11,11,11,12,12, 0,12,
-        12, 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c8_s_p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c8_s_p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c8_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c8_s_p6_1[] = {
-         3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c8_s_p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c8_s_p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c8_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c8_s_p7_0[] = {
-         1, 4, 4, 6, 6, 8, 7, 9, 9,10,10,12,12, 6, 5, 5,
-         7, 7, 8, 8,10,10,11,11,12,12, 7, 5, 5, 7, 7, 8,
-         8,10,10,11,11,12,12,21, 7, 7, 7, 7, 8, 9,10,10,
-        11,11,12,12,21, 7, 7, 7, 7, 9, 9,10,10,12,12,13,
-        13,21,11,11, 8, 8, 9, 9,11,11,12,12,13,13,21,11,
-        11, 8, 8, 9, 9,11,11,12,12,13,13,21,21,21,10,10,
-        10,10,11,11,12,13,13,13,21,21,21,10,10,10,10,11,
-        11,13,13,14,13,21,21,21,13,13,11,11,12,12,13,13,
-        14,14,21,21,21,14,14,11,11,12,12,13,13,14,14,21,
-        21,21,21,20,13,13,13,12,14,14,16,15,20,20,20,20,
-        20,13,13,13,13,14,13,15,15,
-};
-
-static const static_codebook _44c8_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c8_s_p7_0,
-        1, -523206656, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44c8_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c8_s_p7_1[] = {
-         4, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 7,
-         7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7,
-         7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7,
-         7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
-         7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
-         7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
-         7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
-         8, 8, 8, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c8_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c8_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c8_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p8_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c8_s_p8_0[] = {
-         1, 4, 4, 7, 6, 8, 8, 8, 7, 9, 8,10,10,11,10, 6,
-         5, 5, 7, 7, 9, 9, 8, 8,10,10,11,11,12,11, 6, 5,
-         5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,20, 8, 8,
-         8, 8, 9, 9, 9, 9,10,10,11,11,12,12,20, 8, 8, 8,
-         8,10, 9, 9, 9,10,10,11,11,12,12,20,12,12, 9, 9,
-        10,10,10,10,10,11,12,12,12,12,20,12,12, 9, 9,10,
-        10,10,10,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,
-        11,10,11,11,12,12,12,13,20,19,19, 9, 9, 9, 9,11,
-        11,11,12,12,12,13,13,19,19,19,13,13,10,10,11,11,
-        12,12,13,13,13,13,19,19,19,14,13,11,10,11,11,12,
-        12,12,13,13,13,19,19,19,19,19,12,12,12,12,13,13,
-        13,13,14,13,19,19,19,19,19,12,12,12,11,12,12,13,
-        14,14,14,19,19,19,19,19,16,15,13,12,13,13,13,14,
-        14,14,19,19,19,19,19,17,17,13,12,13,11,14,13,15,
-        15,
-};
-
-static const static_codebook _44c8_s_p8_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c8_s_p8_0,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44c8_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p8_1[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44c8_s_p8_1[] = {
-         4, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
-         8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
-         7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
-        10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
-        10,10, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9,
-         9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,10,10,10,10,
-        10,10,10, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,
-         9,10,10,10,10,10,10,10, 9,10,10, 9,10,10,10,10,
-         9,10, 9,10,10, 9,10,10,10,10,10,10,10, 9,10,10,
-        10,10,10,10, 9, 9,10,10, 9,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
-        10, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10, 9, 9,10, 9, 9, 9,10,10,10,10,10,10,
-        10,10,10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10, 9,
-         9,10, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-        10, 9, 9,10,10, 9,10, 9, 9,
-};
-
-static const static_codebook _44c8_s_p8_1 = {
-        2, 441,
-        (long *)_vq_lengthlist__44c8_s_p8_1,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c8_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p9_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c8_s_p9_0[] = {
-         1, 4, 3,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11, 4, 7, 7,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11, 4, 8,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _44c8_s_p9_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c8_s_p9_0,
-        1, -509798400, 1631393792, 5, 0,
-        (long *)_vq_quantlist__44c8_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p9_1[] = {
-        9,
-        8,
-        10,
-        7,
-        11,
-        6,
-        12,
-        5,
-        13,
-        4,
-        14,
-        3,
-        15,
-        2,
-        16,
-        1,
-        17,
-        0,
-        18,
-};
-
-static const long _vq_lengthlist__44c8_s_p9_1[] = {
-         1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,10,10,
-        10,11,11, 6, 6, 6, 8, 8, 9, 8, 8, 7,10, 8,11,10,
-        12,11,12,12,13,13, 5, 5, 6, 8, 8, 9, 9, 8, 8,10,
-         9,11,11,12,12,13,13,13,13,17, 8, 8, 9, 9, 9, 9,
-         9, 9,10, 9,12,10,12,12,13,12,13,13,17, 9, 8, 9,
-         9, 9, 9, 9, 9,10,10,12,12,12,12,13,13,13,13,17,
-        13,13, 9, 9,10,10,10,10,11,11,12,11,13,12,13,13,
-        14,15,17,13,13, 9, 8,10, 9,10,10,11,11,12,12,14,
-        13,15,13,14,15,17,17,17, 9,10, 9,10,11,11,12,12,
-        12,12,13,13,14,14,15,15,17,17,17, 9, 8, 9, 8,11,
-        11,12,12,12,12,14,13,14,14,14,15,17,17,17,12,14,
-         9,10,11,11,12,12,14,13,13,14,15,13,15,15,17,17,
-        17,13,11,10, 8,11, 9,13,12,13,13,13,13,13,14,14,
-        14,17,17,17,17,17,11,12,11,11,13,13,14,13,15,14,
-        13,15,16,15,17,17,17,17,17,11,11,12, 8,13,12,14,
-        13,17,14,15,14,15,14,17,17,17,17,17,15,15,12,12,
-        12,12,13,14,14,14,15,14,17,14,17,17,17,17,17,16,
-        17,12,12,13,12,13,13,14,14,14,14,14,14,17,17,17,
-        17,17,17,17,14,14,13,12,13,13,15,15,14,13,15,17,
-        17,17,17,17,17,17,17,13,14,13,13,13,13,14,15,15,
-        15,14,15,17,17,17,17,17,17,17,16,15,13,14,13,13,
-        14,14,15,14,14,16,17,17,17,17,17,17,17,16,16,13,
-        14,13,13,14,14,15,14,15,14,
-};
-
-static const static_codebook _44c8_s_p9_1 = {
-        2, 361,
-        (long *)_vq_lengthlist__44c8_s_p9_1,
-        1, -518287360, 1622704128, 5, 0,
-        (long *)_vq_quantlist__44c8_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c8_s_p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44c8_s_p9_2[] = {
-         2, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _44c8_s_p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44c8_s_p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44c8_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c8_s_short[] = {
-         4,11,13,14,15,15,18,17,19,17, 5, 6, 8, 9,10,10,
-        12,15,19,19, 6, 6, 6, 6, 8, 8,11,14,18,19, 8, 6,
-         5, 4, 6, 7,10,13,16,17, 9, 7, 6, 5, 6, 7, 9,12,
-        15,19,10, 8, 7, 6, 6, 6, 7, 9,13,15,12,10, 9, 8,
-         7, 6, 4, 5,10,15,13,13,11, 8, 6, 6, 4, 2, 7,12,
-        17,15,16,10, 8, 8, 7, 6, 9,12,19,18,17,13,11,10,
-        10, 9,11,14,
-};
-
-static const static_codebook _huff_book__44c8_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c8_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c9_s_long[] = {
-         3, 8,12,14,15,15,15,13,15,15, 6, 5, 8,10,12,12,
-        13,12,14,13,10, 6, 5, 6, 8, 9,11,11,13,13,13, 8,
-         5, 4, 5, 6, 8,10,11,13,14,10, 7, 5, 4, 5, 7, 9,
-        11,12,13,11, 8, 6, 5, 4, 5, 7, 9,11,12,11,10, 8,
-         7, 5, 4, 5, 9,10,13,13,11,10, 8, 6, 5, 4, 7, 9,
-        15,14,13,12,10, 9, 8, 7, 8, 9,12,12,14,13,12,11,
-        10, 9, 8, 9,
-};
-
-static const static_codebook _huff_book__44c9_s_long = {
-        2, 100,
-        (long *)_huff_lengthlist__44c9_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c9_s_p1_0[] = {
-         1, 5, 5, 0, 5, 5, 0, 5, 5, 6, 8, 8, 0, 9, 8, 0,
-         9, 8, 6, 8, 8, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 5, 8, 8, 0, 7, 7, 0, 8, 8, 5, 8, 8,
-         0, 7, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
-         9, 8, 0, 8, 8, 0, 7, 7, 5, 8, 9, 0, 8, 8, 0, 7,
-         7,
-};
-
-static const static_codebook _44c9_s_p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c9_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c9_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c9_s_p2_0[] = {
-         3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
-         7, 7, 9, 9, 0, 0, 0, 9, 9, 6, 7, 7, 9, 8, 0, 8,
-         8, 9, 9, 0, 8, 7, 9, 9, 0, 9,10,10,10, 0, 0, 0,
-        11,10, 6, 7, 7, 8, 9, 0, 8, 8, 9, 9, 0, 7, 8, 9,
-         9, 0,10, 9,11,10, 0, 0, 0,10,10, 8, 9, 8,10,10,
-         0,10,10,12,11, 0,10,10,11,11, 0,12,13,13,13, 0,
-         0, 0,13,12, 8, 8, 9,10,10, 0,10,10,11,12, 0,10,
-        10,11,11, 0,13,12,13,13, 0, 0, 0,13,13, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 6, 8, 7,10,10, 0, 7, 7,10, 9,
-         0, 7, 7,10,10, 0, 9, 9,10,10, 0, 0, 0,10,10, 6,
-         7, 8,10,10, 0, 7, 7, 9,10, 0, 7, 7,10,10, 0, 9,
-         9,10,10, 0, 0, 0,10,10, 8, 9, 9,11,11, 0,10,10,
-        11,11, 0,10,10,11,11, 0,12,12,12,12, 0, 0, 0,12,
-        12, 8, 9,10,11,11, 0, 9,10,11,11, 0,10,10,11,11,
-         0,12,12,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 5, 8, 7,10,10, 0, 7, 7,10,10, 0, 7, 7,
-        10, 9, 0, 9, 9,10,10, 0, 0, 0,10,10, 6, 7, 8,10,
-        10, 0, 7, 7,10,10, 0, 7, 7, 9,10, 0, 9, 9,10,10,
-         0, 0, 0,10,10, 8,10, 9,12,11, 0,10,10,12,11, 0,
-        10, 9,11,11, 0,11,12,12,12, 0, 0, 0,12,12, 8, 9,
-        10,11,12, 0,10,10,11,11, 0, 9,10,11,11, 0,12,11,
-        12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         7,10, 9,12,12, 0, 9, 9,12,11, 0, 9, 9,11,11, 0,
-        10,10,12,11, 0, 0, 0,11,12, 7, 9,10,12,12, 0, 9,
-         9,11,12, 0, 9, 9,11,11, 0,10,10,11,12, 0, 0, 0,
-        11,11, 9,11,10,13,12, 0,10,10,12,12, 0,10,10,12,
-        12, 0,11,11,12,12, 0, 0, 0,13,12, 9,10,11,12,13,
-         0,10,10,12,12, 0,10,10,12,12, 0,11,12,12,12, 0,
-         0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
-        11,10,13,13, 0,10,10,12,12, 0,10,10,12,12, 0,11,
-        12,12,12, 0, 0, 0,12,12, 9,10,11,13,13, 0,10,10,
-        12,12, 0,10,10,12,12, 0,12,11,13,12, 0, 0, 0,12,
-        12,
-};
-
-static const static_codebook _44c9_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c9_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c9_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c9_s_p3_0[] = {
-         3, 4, 4, 5, 5, 6, 6, 8, 8, 0, 4, 4, 5, 5, 6, 7,
-         8, 8, 0, 4, 4, 5, 5, 7, 7, 8, 8, 0, 5, 5, 6, 6,
-         7, 7, 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0,
-         7, 7, 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c9_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c9_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c9_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p4_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c9_s_p4_0[] = {
-         3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,10,
-        10, 0, 5, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
-        11,11, 0, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
-        10,11,11, 0, 6, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,
-        11,11,11,12, 0, 0, 0, 6, 6, 7, 7, 8, 8, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 7, 7, 7, 7, 9, 9, 9, 9,
-        10,10,11,11,12,12, 0, 0, 0, 7, 7, 7, 8, 9, 9, 9,
-         9,10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
-         9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c9_s_p4_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c9_s_p4_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c9_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p5_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c9_s_p5_0[] = {
-         1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 7, 6, 9,10,10,10,
-        10, 9, 4, 6, 7, 9,10,10,10, 9,10, 5, 9, 9, 9,11,
-        11,10,11,11, 7,10, 9,11,12,11,12,12,12, 7, 9,10,
-        11,11,12,12,12,12, 6,10,10,10,12,12,10,12,11, 7,
-        10,10,11,12,12,11,12,12, 7,10,10,11,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44c9_s_p5_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c9_s_p5_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c9_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p5_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c9_s_p5_1[] = {
-         4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7,11, 5, 5, 6, 6,
-         7, 7, 7, 7, 8, 8,11, 5, 5, 6, 6, 7, 7, 7, 7, 8,
-         8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11, 6,
-         6, 7, 7, 7, 8, 8, 8,11,11,11, 6, 6, 7, 7, 7, 8,
-         8, 8,11,11,11, 6, 6, 7, 7, 7, 7, 8, 8,11,11,11,
-         7, 7, 7, 7, 7, 7, 8, 8,11,11,11,10,10, 7, 7, 7,
-         7, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 7, 7,11,11,
-        11,11,11, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c9_s_p5_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c9_s_p5_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c9_s_p5_1,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c9_s_p6_0[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 5, 4, 4,
-         6, 6, 8, 8, 9, 9, 9, 9,10,10, 6, 4, 4, 6, 6, 8,
-         8, 9, 9, 9, 9,10,10, 0, 6, 6, 7, 7, 8, 8, 9, 9,
-        10,10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
-        11, 0,10,10, 8, 8, 9, 9,10,10,11,11,12,12, 0,11,
-        11, 8, 8, 9, 9,10,10,11,11,12,12, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c9_s_p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c9_s_p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c9_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c9_s_p6_1[] = {
-         4, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5,
-         5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44c9_s_p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c9_s_p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c9_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c9_s_p7_0[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8,10,10,11,11, 6, 4, 4,
-         6, 6, 8, 8, 9, 9,10,10,12,12, 6, 4, 5, 6, 6, 8,
-         8, 9, 9,10,10,12,12,20, 6, 6, 6, 6, 8, 8, 9,10,
-        11,11,12,12,20, 6, 6, 6, 6, 8, 8,10,10,11,11,12,
-        12,20,10,10, 7, 7, 9, 9,10,10,11,11,12,12,20,11,
-        11, 7, 7, 9, 9,10,10,11,11,12,12,20,20,20, 9, 9,
-         9, 9,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,11,
-        11,12,12,13,13,20,20,20,13,13,10,10,11,11,12,13,
-        13,13,20,20,20,13,13,10,10,11,11,12,13,13,13,20,
-        20,20,20,19,12,12,12,12,13,13,14,15,19,19,19,19,
-        19,12,12,12,12,13,13,14,14,
-};
-
-static const static_codebook _44c9_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c9_s_p7_0,
-        1, -523206656, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44c9_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c9_s_p7_1[] = {
-         5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6,
-         7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, 7,
-         7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 6,
-         6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
-         7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
-         7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
-         7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
-         8, 8, 8, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c9_s_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c9_s_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c9_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p8_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44c9_s_p8_0[] = {
-         1, 4, 4, 7, 6, 8, 8, 8, 8, 9, 9,10,10,11,10, 6,
-         5, 5, 7, 7, 9, 9, 8, 9,10,10,11,11,12,12, 6, 5,
-         5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,21, 7, 8,
-         8, 8, 9, 9, 9, 9,10,10,11,11,12,12,21, 8, 8, 8,
-         8, 9, 9, 9, 9,10,10,11,11,12,12,21,11,12, 9, 9,
-        10,10,10,10,10,11,11,12,12,12,21,12,12, 9, 8,10,
-        10,10,10,11,11,12,12,13,13,21,21,21, 9, 9, 9, 9,
-        11,11,11,11,12,12,12,13,21,20,20, 9, 9, 9, 9,10,
-        11,11,11,12,12,13,13,20,20,20,13,13,10,10,11,11,
-        12,12,13,13,13,13,20,20,20,13,13,10,10,11,11,12,
-        12,13,13,13,13,20,20,20,20,20,12,12,12,12,12,12,
-        13,13,14,14,20,20,20,20,20,12,12,12,11,13,12,13,
-        13,14,14,20,20,20,20,20,15,16,13,12,13,13,14,13,
-        14,14,20,20,20,20,20,16,15,12,12,13,12,14,13,14,
-        14,
-};
-
-static const static_codebook _44c9_s_p8_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44c9_s_p8_0,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44c9_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p8_1[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44c9_s_p8_1[] = {
-         4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
-         7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
-        10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
-        10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,
-        10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,
-         9,10,10,10,10,10,10,10, 9, 9, 9,10,10,10,10,10,
-         9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10, 9, 9,10,
-         9,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
-        10,10,10,10, 9, 9,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
-        10,10, 9, 9,10, 9, 9, 9, 9, 9,10,10,10,10,10,10,
-        10,10,10,10,10, 9, 9,10,10, 9, 9,10, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10, 9, 9,10, 9, 9, 9,
-         9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, 9,
-         9, 9, 9,10, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44c9_s_p8_1 = {
-        2, 441,
-        (long *)_vq_lengthlist__44c9_s_p8_1,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c9_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p9_0[] = {
-        9,
-        8,
-        10,
-        7,
-        11,
-        6,
-        12,
-        5,
-        13,
-        4,
-        14,
-        3,
-        15,
-        2,
-        16,
-        1,
-        17,
-        0,
-        18,
-};
-
-static const long _vq_lengthlist__44c9_s_p9_0[] = {
-         1, 4, 3,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12, 4, 5, 6,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12, 4, 6, 6,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,11,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c9_s_p9_0 = {
-        2, 361,
-        (long *)_vq_lengthlist__44c9_s_p9_0,
-        1, -508535424, 1631393792, 5, 0,
-        (long *)_vq_quantlist__44c9_s_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p9_1[] = {
-        9,
-        8,
-        10,
-        7,
-        11,
-        6,
-        12,
-        5,
-        13,
-        4,
-        14,
-        3,
-        15,
-        2,
-        16,
-        1,
-        17,
-        0,
-        18,
-};
-
-static const long _vq_lengthlist__44c9_s_p9_1[] = {
-         1, 4, 4, 7, 7, 7, 7, 8, 7, 9, 8, 9, 9,10,10,11,
-        11,11,11, 6, 5, 5, 8, 8, 9, 9, 9, 8,10, 9,11,10,
-        12,12,13,12,13,13, 5, 5, 5, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12,13,12,13,13,17, 8, 8, 9, 9, 9, 9,
-         9, 9,10,10,12,11,13,12,13,13,13,13,18, 8, 8, 9,
-         9, 9, 9, 9, 9,11,11,12,12,13,13,13,13,13,13,17,
-        13,12, 9, 9,10,10,10,10,11,11,12,12,12,13,13,13,
-        14,14,18,13,12, 9, 9,10,10,10,10,11,11,12,12,13,
-        13,13,14,14,14,17,18,18,10,10,10,10,11,11,11,12,
-        12,12,14,13,14,13,13,14,18,18,18,10, 9,10, 9,11,
-        11,12,12,12,12,13,13,15,14,14,14,18,18,16,13,14,
-        10,11,11,11,12,13,13,13,13,14,13,13,14,14,18,18,
-        18,14,12,11, 9,11,10,13,12,13,13,13,14,14,14,13,
-        14,18,18,17,18,18,11,12,12,12,13,13,14,13,14,14,
-        13,14,14,14,18,18,18,18,17,12,10,12, 9,13,11,13,
-        14,14,14,14,14,15,14,18,18,17,17,18,14,15,12,13,
-        13,13,14,13,14,14,15,14,15,14,18,17,18,18,18,15,
-        15,12,10,14,10,14,14,13,13,14,14,14,14,18,16,18,
-        18,18,18,17,14,14,13,14,14,13,13,14,14,14,15,15,
-        18,18,18,18,17,17,17,14,14,14,12,14,13,14,14,15,
-        14,15,14,18,18,18,18,18,18,18,17,16,13,13,13,14,
-        14,14,14,15,16,15,18,18,18,18,18,18,18,17,17,13,
-        13,13,13,14,13,14,15,15,15,
-};
-
-static const static_codebook _44c9_s_p9_1 = {
-        2, 361,
-        (long *)_vq_lengthlist__44c9_s_p9_1,
-        1, -518287360, 1622704128, 5, 0,
-        (long *)_vq_quantlist__44c9_s_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44c9_s_p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44c9_s_p9_2[] = {
-         2, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _44c9_s_p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44c9_s_p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44c9_s_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44c9_s_short[] = {
-         5,13,18,16,17,17,19,18,19,19, 5, 7,10,11,12,12,
-        13,16,17,18, 6, 6, 7, 7, 9, 9,10,14,17,19, 8, 7,
-         6, 5, 6, 7, 9,12,19,17, 8, 7, 7, 6, 5, 6, 8,11,
-        15,19, 9, 8, 7, 6, 5, 5, 6, 8,13,15,11,10, 8, 8,
-         7, 5, 4, 4,10,14,12,13,11, 9, 7, 6, 4, 2, 6,12,
-        18,16,16,13, 8, 7, 7, 5, 8,13,16,17,18,15,11, 9,
-         9, 8,10,13,
-};
-
-static const static_codebook _huff_book__44c9_s_short = {
-        2, 100,
-        (long *)_huff_lengthlist__44c9_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c0_s_long[] = {
-         5, 4, 8, 9, 8, 9,10,12,15, 4, 1, 5, 5, 6, 8,11,
-        12,12, 8, 5, 8, 9, 9,11,13,12,12, 9, 5, 8, 5, 7,
-         9,12,13,13, 8, 6, 8, 7, 7, 9,11,11,11, 9, 7, 9,
-         7, 7, 7, 7,10,12,10,10,11, 9, 8, 7, 7, 9,11,11,
-        12,13,12,11, 9, 8, 9,11,13,16,16,15,15,12,10,11,
-        12,
-};
-
-static const static_codebook _huff_book__44c0_s_long = {
-        2, 81,
-        (long *)_huff_lengthlist__44c0_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c0_s_p1_0[] = {
-         1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
-         0, 0, 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,11,
-         0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c0_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c0_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c0_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c0_s_p2_0[] = {
-         1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c0_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c0_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c0_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c0_s_p3_0[] = {
-         1, 3, 2, 8, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
-         0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c0_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c0_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c0_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c0_s_p4_0[] = {
-         1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
-         9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
-         7, 8, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0,
-         9, 9, 8, 8,10,10, 0, 0, 0, 8, 9, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
-        10,
-};
-
-static const static_codebook _44c0_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c0_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c0_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p5_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c0_s_p5_0[] = {
-         1, 4, 3, 6, 6, 8, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9, 9,10,10,10,
-        11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
-        10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
-        10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,
-        10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,11,11,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,11,10,11,11,11,11,12,12,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,11,12,12,12,12,13,13, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,12,12,12,12,13,13,13, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44c0_s_p5_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c0_s_p5_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c0_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p6_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c0_s_p6_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
-         9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
-        11,12,10,11, 6, 9, 9,11,10,11,11,10,10, 6, 9, 9,
-        11,10,11,11,10,10, 7,11,10,12,11,11,11,11,11, 7,
-         9, 9,10,10,10,11,11,10, 6, 9, 9,11,10,10,11,10,
-        10,
-};
-
-static const static_codebook _44c0_s_p6_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c0_s_p6_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c0_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p6_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c0_s_p6_1[] = {
-         2, 3, 3, 6, 6, 7, 7, 7, 7, 7, 8,10,10,10, 6, 6,
-         7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
-         8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c0_s_p6_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c0_s_p6_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c0_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c0_s_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
-         8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
-        10,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
-        11,11,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
-        13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,11,11,11,11,13,12,13,13, 0, 0, 0, 0,
-         0,12,12,11,11,12,12,13,13,
-};
-
-static const static_codebook _44c0_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c0_s_p7_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c0_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p7_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c0_s_p7_1[] = {
-         2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
-         6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c0_s_p7_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c0_s_p7_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c0_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p8_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c0_s_p8_0[] = {
-         1, 5, 5,10,10, 6, 9, 8,10,10, 6,10, 9,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10, 8,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,
-};
-
-static const static_codebook _44c0_s_p8_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c0_s_p8_0,
-        1, -518283264, 1627103232, 3, 0,
-        (long *)_vq_quantlist__44c0_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p8_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c0_s_p8_1[] = {
-         1, 4, 4, 6, 6, 7, 7, 9, 9,11,12,13,12, 6, 5, 5,
-         7, 7, 8, 8,10, 9,12,12,12,12, 6, 5, 5, 7, 7, 8,
-         8,10, 9,12,11,11,13,16, 7, 7, 8, 8, 9, 9,10,10,
-        12,12,13,12,16, 7, 7, 8, 7, 9, 9,10,10,11,12,12,
-        13,16,10,10, 8, 8,10,10,11,12,12,12,13,13,16,11,
-        10, 8, 7,11,10,11,11,12,11,13,13,16,16,16,10,10,
-        10,10,11,11,13,12,13,13,16,16,16,11, 9,11, 9,15,
-        13,12,13,13,13,16,16,16,15,13,11,11,12,13,12,12,
-        14,13,16,16,16,14,13,11,11,13,12,14,13,13,13,16,
-        16,16,16,16,13,13,13,12,14,13,14,14,16,16,16,16,
-        16,13,13,12,12,14,14,15,13,
-};
-
-static const static_codebook _44c0_s_p8_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c0_s_p8_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44c0_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c0_s_p8_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c0_s_p8_2[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-         8,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
-         9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
-         9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 8, 9, 9,
-         9, 9, 9,10, 9,10,10,10,10, 7, 7, 8, 8, 9, 9, 9,
-         9, 9, 9,10, 9,10,10,10,10,10, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 9,11,10,10,10,10, 8, 8, 9,
-         9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,11,11, 9, 9,
-         9, 9, 9, 9, 9, 9,10, 9, 9,10,11,10,10,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,10,11,
-        11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
-        11,11,11,11, 9,10, 9,10, 9, 9, 9, 9,10, 9,10,11,
-        10,11,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9,10,11,
-        11,10,11,11,10,11,10,10,10, 9, 9, 9, 9,10, 9, 9,
-        10,11,10,11,11,11,11,10,11,10,10, 9,10, 9, 9, 9,
-        10,
-};
-
-static const static_codebook _44c0_s_p8_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c0_s_p8_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c0_s_p8_2,
-        0
-};
-
-static const long _huff_lengthlist__44c0_s_short[] = {
-         9, 8,12,11,12,13,14,14,16, 6, 1, 5, 6, 6, 9,12,
-        14,17, 9, 4, 5, 9, 7, 9,13,15,16, 8, 5, 8, 6, 8,
-        10,13,17,17, 9, 6, 7, 7, 8, 9,13,15,17,11, 8, 9,
-         9, 9,10,12,16,16,13, 7, 8, 7, 7, 9,12,14,15,13,
-         6, 7, 5, 5, 7,10,13,13,14, 7, 8, 5, 6, 7, 9,10,
-        12,
-};
-
-static const static_codebook _huff_book__44c0_s_short = {
-        2, 81,
-        (long *)_huff_lengthlist__44c0_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c0_sm_long[] = {
-         5, 4, 9,10, 9,10,11,12,13, 4, 1, 5, 7, 7, 9,11,
-        12,14, 8, 5, 7, 9, 8,10,13,13,13,10, 7, 9, 4, 6,
-         7,10,12,14, 9, 6, 7, 6, 6, 7,10,12,12, 9, 8, 9,
-         7, 6, 7, 8,11,12,11,11,11, 9, 8, 7, 8,10,12,12,
-        13,14,12,11, 9, 9, 9,12,12,17,17,15,16,12,10,11,
-        13,
-};
-
-static const static_codebook _huff_book__44c0_sm_long = {
-        2, 81,
-        (long *)_huff_lengthlist__44c0_sm_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c0_sm_p1_0[] = {
-         1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
-         0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 9,10,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 9,10,10, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c0_sm_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c0_sm_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c0_sm_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c0_sm_p2_0[] = {
-         1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c0_sm_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c0_sm_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c0_sm_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c0_sm_p3_0[] = {
-         1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 4, 7, 7, 0, 0,
-         0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 6, 7, 8, 8,
-         0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0,
-         9,10, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
-         0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c0_sm_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c0_sm_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c0_sm_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c0_sm_p4_0[] = {
-         1, 4, 3, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 8, 7,
-         9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
-         8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
-         9, 9, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0,
-         0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0, 9, 9,11,
-        11,
-};
-
-static const static_codebook _44c0_sm_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c0_sm_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c0_sm_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p5_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c0_sm_p5_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11,
-        11,11, 0, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
-        11,11,11, 0, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
-        11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
-        10,11,11,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,11,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,12,13,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,11,12,12,13,13,13,13, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44c0_sm_p5_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c0_sm_p5_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c0_sm_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p6_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c0_sm_p6_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
-        11,11,10,10, 6, 9, 9,11,11,10,11,10,10, 6, 9, 9,
-        11,10,11,11,10,10, 7,11,10,11,11,11,11,11,11, 6,
-         9, 9,11,10,10,11,11,10, 6, 9, 9,11,10,10,11,10,
-        11,
-};
-
-static const static_codebook _44c0_sm_p6_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c0_sm_p6_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c0_sm_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p6_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c0_sm_p6_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 8, 9, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8, 9, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
-         8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c0_sm_p6_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c0_sm_p6_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c0_sm_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c0_sm_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 5, 7, 7, 8,
-         8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0, 9,10,
-        10,10,11,11,12,11,12,12, 0, 0, 0,10,10, 9, 9,11,
-        11,12,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
-        13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,11,12,11,11,13,12,13,13, 0, 0, 0, 0,
-         0,12,12,11,11,13,12,14,14,
-};
-
-static const static_codebook _44c0_sm_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c0_sm_p7_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c0_sm_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p7_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c0_sm_p7_1[] = {
-         2, 4, 4, 4, 4, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
-         6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c0_sm_p7_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c0_sm_p7_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c0_sm_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p8_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c0_sm_p8_0[] = {
-         1, 3, 3,11,11,11,11,11,11, 3, 7, 6,11,11,11,11,
-        11,11, 4, 8, 7,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44c0_sm_p8_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c0_sm_p8_0,
-        1, -516186112, 1627103232, 4, 0,
-        (long *)_vq_quantlist__44c0_sm_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p8_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c0_sm_p8_1[] = {
-         1, 4, 4, 6, 6, 7, 7, 9, 9,10,11,12,12, 6, 5, 5,
-         7, 7, 8, 8,10,10,12,11,12,12, 6, 5, 5, 7, 7, 8,
-         8,10,10,12,11,12,12,17, 7, 7, 8, 8, 9, 9,10,10,
-        12,12,13,13,18, 7, 7, 8, 7, 9, 9,10,10,12,12,12,
-        13,19,10,10, 8, 8,10,10,11,11,12,12,13,14,19,11,
-        10, 8, 7,10,10,11,11,12,12,13,12,19,19,19,10,10,
-        10,10,11,11,12,12,13,13,19,19,19,11, 9,11, 9,14,
-        12,13,12,13,13,19,20,18,13,14,11,11,12,12,13,13,
-        14,13,20,20,20,15,13,11,10,13,11,13,13,14,13,20,
-        20,20,20,20,13,14,12,12,13,13,13,13,20,20,20,20,
-        20,13,13,12,12,16,13,15,13,
-};
-
-static const static_codebook _44c0_sm_p8_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c0_sm_p8_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44c0_sm_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c0_sm_p8_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c0_sm_p8_2[] = {
-         2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-         8,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
-         9,10, 9, 9,10,10,10,11, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9,10, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9, 9,10,10,11,10,10, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10,10,10,11,11, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,11,11,11,11,11, 9, 9,
-         9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,10,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,11,11,
-        11,11,11, 9, 9,10, 9, 9, 9, 9, 9, 9, 9,10,11,10,
-        11,11,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9,10,11,
-        11,11,11,11,11, 9,10, 9, 9, 9, 9, 9, 9, 9, 9,11,
-        11,10,11,11,11,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
-        10,11,10,11,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _44c0_sm_p8_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c0_sm_p8_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c0_sm_p8_2,
-        0
-};
-
-static const long _huff_lengthlist__44c0_sm_short[] = {
-         6, 6,12,13,13,14,16,17,17, 4, 2, 5, 8, 7, 9,12,
-        15,15, 9, 4, 5, 9, 7, 9,12,16,18,11, 6, 7, 4, 6,
-         8,11,14,18,10, 5, 6, 5, 5, 7,10,14,17,10, 5, 7,
-         7, 6, 7,10,13,16,11, 5, 7, 7, 7, 8,10,12,15,13,
-         6, 7, 5, 5, 7, 9,12,13,16, 8, 9, 6, 6, 7, 9,10,
-        12,
-};
-
-static const static_codebook _huff_book__44c0_sm_short = {
-        2, 81,
-        (long *)_huff_lengthlist__44c0_sm_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c1_s_long[] = {
-         5, 5, 9,10, 9, 9,10,11,12, 5, 1, 5, 6, 6, 7,10,
-        12,14, 9, 5, 6, 8, 8,10,12,14,14,10, 5, 8, 5, 6,
-         8,11,13,14, 9, 5, 7, 6, 6, 8,10,12,11, 9, 7, 9,
-         7, 6, 6, 7,10,10,10, 9,12, 9, 8, 7, 7,10,12,11,
-        11,13,12,10, 9, 8, 9,11,11,14,15,15,13,11, 9, 9,
-        11,
-};
-
-static const static_codebook _huff_book__44c1_s_long = {
-        2, 81,
-        (long *)_huff_lengthlist__44c1_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c1_s_p1_0[] = {
-         2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
-         0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
-         0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
-         0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
-         0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
-         0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
-         0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
-         0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c1_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c1_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c1_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c1_s_p2_0[] = {
-         2, 3, 4, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c1_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c1_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c1_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c1_s_p3_0[] = {
-         1, 3, 2, 7, 7, 0, 0, 0, 0, 0,13,13, 6, 6, 0, 0,
-         0, 0, 0,12, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
-         0, 0,11,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c1_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c1_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c1_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c1_s_p4_0[] = {
-         1, 3, 3, 6, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
-         9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
-         8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
-         9, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
-         0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
-        11,
-};
-
-static const static_codebook _44c1_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c1_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c1_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p5_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c1_s_p5_0[] = {
-         1, 4, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
-        11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
-        10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,11, 0, 0, 0, 8, 8, 9, 9, 9,10,10,10,
-        10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10, 9,10,
-        10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
-        10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,12,12,12,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44c1_s_p5_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c1_s_p5_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c1_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p6_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c1_s_p6_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 6,10,10,11,11,
-        11,11,10,10, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
-        11,10,11,11,10,10, 7,11,10,11,11,11,12,11,11, 7,
-         9, 9,11,10,10,11,11,10, 6, 9, 9,10,10,10,12,10,
-        11,
-};
-
-static const static_codebook _44c1_s_p6_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c1_s_p6_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c1_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p6_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c1_s_p6_1[] = {
-         2, 3, 3, 6, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6,
-         7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
-         8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c1_s_p6_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c1_s_p6_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c1_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c1_s_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 9, 7, 5, 6,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8,
-         8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9, 9,10,10,10,11,11,11,11, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0,10,10,
-        10,10,11,11,12,11,12,12, 0, 0, 0,10,10,10, 9,11,
-        11,12,11,13,12, 0, 0, 0,13,13,10,10,11,11,12,12,
-        13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,11,12,11,11,12,12,14,13, 0, 0, 0, 0,
-         0,12,11,11,11,13,10,14,13,
-};
-
-static const static_codebook _44c1_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c1_s_p7_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c1_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p7_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c1_s_p7_1[] = {
-         2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
-         6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c1_s_p7_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c1_s_p7_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c1_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c1_s_p8_0[] = {
-         1, 4, 3,10,10,10,10,10,10,10,10,10,10, 4, 8, 6,
-        10,10,10,10,10,10,10,10,10,10, 4, 8, 7,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c1_s_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c1_s_p8_0,
-        1, -514541568, 1627103232, 4, 0,
-        (long *)_vq_quantlist__44c1_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p8_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c1_s_p8_1[] = {
-         1, 4, 4, 6, 5, 7, 7, 9, 9,10,10,12,12, 6, 5, 5,
-         7, 7, 8, 8,10,10,12,11,12,12, 6, 5, 5, 7, 7, 8,
-         8,10,10,11,11,12,12,15, 7, 7, 8, 8, 9, 9,11,11,
-        12,12,13,12,15, 8, 8, 8, 7, 9, 9,10,10,12,12,13,
-        13,16,11,10, 8, 8,10,10,11,11,12,12,13,13,16,11,
-        11, 9, 8,11,10,11,11,12,12,13,12,16,16,16,10,11,
-        10,11,12,12,12,12,13,13,16,16,16,11, 9,11, 9,14,
-        12,12,12,13,13,16,16,16,12,14,11,12,12,12,13,13,
-        14,13,16,16,16,15,13,12,10,13,10,13,14,13,13,16,
-        16,16,16,16,13,14,12,13,13,12,13,13,16,16,16,16,
-        16,13,12,12,11,14,12,15,13,
-};
-
-static const static_codebook _44c1_s_p8_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c1_s_p8_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44c1_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c1_s_p8_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c1_s_p8_2[] = {
-         2, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-         8,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10,10,10, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
-         9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
-         9,10, 9, 9,10,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9, 9,10,10,11,11,11, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10,10,11,11,11, 8, 8, 9,
-         9, 9, 9,10, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,10,11,11,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10,11,11,
-        11,11,11, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,10,11,11,
-        11,11,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9,10,11,
-        11,11,11,11,11, 9,10, 9, 9, 9, 9,10, 9, 9, 9,11,
-        11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9,10, 9,
-        11,11,10,11,11,11,11,10,11, 9, 9, 9, 9, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _44c1_s_p8_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c1_s_p8_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c1_s_p8_2,
-        0
-};
-
-static const long _huff_lengthlist__44c1_s_short[] = {
-         6, 8,13,12,13,14,15,16,16, 4, 2, 4, 7, 6, 8,11,
-        13,15,10, 4, 4, 8, 6, 8,11,14,17,11, 5, 6, 5, 6,
-         8,12,14,17,11, 5, 5, 6, 5, 7,10,13,16,12, 6, 7,
-         8, 7, 8,10,13,15,13, 8, 8, 7, 7, 8,10,12,15,15,
-         7, 7, 5, 5, 7, 9,12,14,15, 8, 8, 6, 6, 7, 8,10,
-        11,
-};
-
-static const static_codebook _huff_book__44c1_s_short = {
-        2, 81,
-        (long *)_huff_lengthlist__44c1_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44c1_sm_long[] = {
-         5, 4, 8,10, 9, 9,10,11,12, 4, 2, 5, 6, 6, 8,10,
-        11,13, 8, 4, 6, 8, 7, 9,12,12,14,10, 6, 8, 4, 5,
-         6, 9,11,12, 9, 5, 6, 5, 5, 6, 9,11,11, 9, 7, 9,
-         6, 5, 5, 7,10,10,10, 9,11, 8, 7, 6, 7, 9,11,11,
-        12,13,10,10, 9, 8, 9,11,11,15,15,12,13,11, 9,10,
-        11,
-};
-
-static const static_codebook _huff_book__44c1_sm_long = {
-        2, 81,
-        (long *)_huff_lengthlist__44c1_sm_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c1_sm_p1_0[] = {
-         1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
-         0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
-         0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 9,10, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c1_sm_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44c1_sm_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44c1_sm_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c1_sm_p2_0[] = {
-         2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 6, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c1_sm_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44c1_sm_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c1_sm_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c1_sm_p3_0[] = {
-         1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 5, 6, 6, 0, 0,
-         0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44c1_sm_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c1_sm_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c1_sm_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44c1_sm_p4_0[] = {
-         1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7, 8, 8,
-         9, 9, 0, 6, 6, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
-         8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
-         8, 8, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0,
-         0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0, 9, 9,11,
-        11,
-};
-
-static const static_codebook _44c1_sm_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44c1_sm_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c1_sm_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p5_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c1_sm_p5_0[] = {
-         2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,
-        11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,
-        10,11,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,10,
-        10,11,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,
-        10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-         9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-         9, 9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0, 0,
-         0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0,
-         0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44c1_sm_p5_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c1_sm_p5_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c1_sm_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p6_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44c1_sm_p6_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
-         9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
-        11,11,10,10, 6, 9, 9,11,11,10,11,10,10, 6, 9, 9,
-        11,10,11,11,10,10, 7,11,11,11,11,11,11,11,11, 6,
-         9, 9,11,10,10,11,11,10, 6, 9, 9,10,10,10,11,10,
-        11,
-};
-
-static const static_codebook _44c1_sm_p6_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44c1_sm_p6_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44c1_sm_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p6_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44c1_sm_p6_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
-         8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 9, 8,10,10,10,10,10, 8, 8, 8,
-         8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
-        10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c1_sm_p6_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44c1_sm_p6_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44c1_sm_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c1_sm_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
-         8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0, 9,10,
-         9,10,11,11,12,11,13,12, 0, 0, 0,10,10, 9, 9,11,
-        11,12,12,13,12, 0, 0, 0,13,13,10,10,11,11,12,12,
-        13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,11,12,11,11,12,13,14,13, 0, 0, 0, 0,
-         0,12,12,11,11,13,12,14,13,
-};
-
-static const static_codebook _44c1_sm_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c1_sm_p7_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44c1_sm_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p7_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44c1_sm_p7_1[] = {
-         2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c1_sm_p7_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44c1_sm_p7_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44c1_sm_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p8_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c1_sm_p8_0[] = {
-         1, 3, 3,13,13,13,13,13,13,13,13,13,13, 3, 6, 6,
-        13,13,13,13,13,13,13,13,13,13, 4, 8, 7,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,
-};
-
-static const static_codebook _44c1_sm_p8_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c1_sm_p8_0,
-        1, -514541568, 1627103232, 4, 0,
-        (long *)_vq_quantlist__44c1_sm_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p8_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44c1_sm_p8_1[] = {
-         1, 4, 4, 6, 6, 7, 7, 9, 9,10,11,12,12, 6, 5, 5,
-         7, 7, 8, 7,10,10,11,11,12,12, 6, 5, 5, 7, 7, 8,
-         8,10,10,11,11,12,12,16, 7, 7, 8, 8, 9, 9,11,11,
-        12,12,13,13,17, 7, 7, 8, 7, 9, 9,11,10,12,12,13,
-        13,19,11,10, 8, 8,10,10,11,11,12,12,13,13,19,11,
-        11, 9, 7,11,10,11,11,12,12,13,12,19,19,19,10,10,
-        10,10,11,12,12,12,13,14,18,19,19,11, 9,11, 9,13,
-        12,12,12,13,13,19,20,19,13,15,11,11,12,12,13,13,
-        14,13,18,19,20,15,13,12,10,13,10,13,13,13,14,20,
-        20,20,20,20,13,14,12,12,13,12,13,13,20,20,20,20,
-        20,13,12,12,12,14,12,14,13,
-};
-
-static const static_codebook _44c1_sm_p8_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44c1_sm_p8_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44c1_sm_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44c1_sm_p8_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44c1_sm_p8_2[] = {
-         2, 5, 5, 6, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
-         8,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9,10,10, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9, 9,10,10,11,10,10, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9,
-         9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,11,11,11, 9,
-         8, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,10,11,11,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,11,11,
-        11,11,11, 9, 9,10, 9, 9, 9, 9,10, 9,10,10,11,10,
-        11,11,11,11, 9,10,10,10, 9, 9, 9, 9, 9, 9,10,11,
-        11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,
-        11,10,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9,10, 9,
-        10,11,10,11,11,11,11,11,11, 9, 9,10, 9, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _44c1_sm_p8_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44c1_sm_p8_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44c1_sm_p8_2,
-        0
-};
-
-static const long _huff_lengthlist__44c1_sm_short[] = {
-         4, 7,13,14,14,15,16,18,18, 4, 2, 5, 8, 7, 9,12,
-        15,15,10, 4, 5,10, 6, 8,11,15,17,12, 5, 7, 5, 6,
-         8,11,14,17,11, 5, 6, 6, 5, 6, 9,13,17,12, 6, 7,
-         6, 5, 6, 8,12,14,14, 7, 8, 6, 6, 7, 9,11,14,14,
-         8, 9, 6, 5, 6, 9,11,13,16,10,10, 7, 6, 7, 8,10,
-        11,
-};
-
-static const static_codebook _huff_book__44c1_sm_short = {
-        2, 81,
-        (long *)_huff_lengthlist__44c1_sm_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44cn1_s_long[] = {
-         4, 4, 7, 8, 7, 8,10,12,17, 3, 1, 6, 6, 7, 8,10,
-        12,15, 7, 6, 9, 9, 9,11,12,14,17, 8, 6, 9, 6, 7,
-         9,11,13,17, 7, 6, 9, 7, 7, 8, 9,12,15, 8, 8,10,
-         8, 7, 7, 7,10,14, 9,10,12,10, 8, 8, 8,10,14,11,
-        13,15,13,12,11,11,12,16,17,18,18,19,20,18,16,16,
-        20,
-};
-
-static const static_codebook _huff_book__44cn1_s_long = {
-        2, 81,
-        (long *)_huff_lengthlist__44cn1_s_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44cn1_s_p1_0[] = {
-         1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0,
-         0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
-         0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9,10, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, 0,
-         0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0,10,11,11, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0,
-         0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0,10,11,11,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
-         0, 0, 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,11, 0,
-         0, 0, 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,11,
-         0, 0, 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44cn1_s_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44cn1_s_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44cn1_s_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44cn1_s_p2_0[] = {
-         1, 4, 4, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44cn1_s_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44cn1_s_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44cn1_s_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44cn1_s_p3_0[] = {
-         1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
-         0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
-         0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
-         9, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
-         0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44cn1_s_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44cn1_s_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44cn1_s_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44cn1_s_p4_0[] = {
-         1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 6, 6, 7, 7,
-         9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0, 7, 7,
-         8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
-         9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0,
-         0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11,
-        11,
-};
-
-static const static_codebook _44cn1_s_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44cn1_s_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44cn1_s_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p5_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44cn1_s_p5_0[] = {
-         1, 4, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10,
-        10, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
-        11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
-        10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
-        10,10,11,11,11,12,12, 0, 0, 0, 9, 9,10, 9,10,10,
-        10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
-        10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
-        10,10,11,10,11,11,11,12,13,12,13,13, 0, 0, 0, 0,
-         0, 0, 0,11,10,11,11,12,12,12,12,13,13, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,13,13,13,13,13,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44cn1_s_p5_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44cn1_s_p5_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44cn1_s_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p6_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44cn1_s_p6_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 6, 6,10, 9, 9,11,
-         9, 9, 4, 6, 6,10, 9, 9,10, 9, 9, 7,10,10,11,11,
-        11,12,11,11, 7, 9, 9,11,11,10,11,10,10, 7, 9, 9,
-        11,10,11,11,10,10, 7,10,10,11,11,11,12,11,11, 7,
-         9, 9,11,10,10,11,10,10, 7, 9, 9,11,10,10,11,10,
-        10,
-};
-
-static const static_codebook _44cn1_s_p6_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44cn1_s_p6_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44cn1_s_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p6_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44cn1_s_p6_1[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 6,
-         8, 8, 8, 8, 8, 8,10,10,10, 7, 6, 7, 7, 8, 8, 8,
-         8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
-         7, 8, 8, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 9, 9,
-         9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10,
-        10,10,10, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44cn1_s_p6_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44cn1_s_p6_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44cn1_s_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44cn1_s_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,11,11, 7, 5, 5, 7, 7, 8,
-         8, 8, 8, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9, 9,10,10,10,11,11,11,12, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
-        10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11,
-        11,12,12,13,12, 0, 0, 0,14,14,11,10,11,12,12,13,
-        13,14, 0, 0, 0,15,15,11,11,12,11,12,12,14,13, 0,
-         0, 0, 0, 0,12,12,12,12,13,13,14,14, 0, 0, 0, 0,
-         0,13,13,12,12,13,13,13,14,
-};
-
-static const static_codebook _44cn1_s_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44cn1_s_p7_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44cn1_s_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p7_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44cn1_s_p7_1[] = {
-         2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
-         6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44cn1_s_p7_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44cn1_s_p7_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44cn1_s_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p8_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44cn1_s_p8_0[] = {
-         1, 7, 7,11,11, 8,11,11,11,11, 4,11, 3,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11, 7,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11, 8,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,
-};
-
-static const static_codebook _44cn1_s_p8_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44cn1_s_p8_0,
-        1, -518283264, 1627103232, 3, 0,
-        (long *)_vq_quantlist__44cn1_s_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p8_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44cn1_s_p8_1[] = {
-         1, 4, 4, 6, 6, 8, 8, 9,10,10,11,11,11, 6, 5, 5,
-         7, 7, 8, 8, 9,10, 9,11,11,12, 5, 5, 5, 7, 7, 8,
-         9,10,10,12,12,14,13,15, 7, 7, 8, 8, 9,10,11,11,
-        10,12,10,11,15, 7, 8, 8, 8, 9, 9,11,11,13,12,12,
-        13,15,10,10, 8, 8,10,10,12,12,11,14,10,10,15,11,
-        11, 8, 8,10,10,12,13,13,14,15,13,15,15,15,10,10,
-        10,10,12,12,13,12,13,10,15,15,15,10,10,11,10,13,
-        11,13,13,15,13,15,15,15,13,13,10,11,11,11,12,10,
-        14,11,15,15,14,14,13,10,10,12,11,13,13,14,14,15,
-        15,15,15,15,11,11,11,11,12,11,15,12,15,15,15,15,
-        15,12,12,11,11,14,12,13,14,
-};
-
-static const static_codebook _44cn1_s_p8_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44cn1_s_p8_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44cn1_s_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44cn1_s_p8_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44cn1_s_p8_2[] = {
-         3, 4, 3, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-         9,10,11,11, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10,10,10, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9,
-         9, 9,10, 9,10,11,10, 7, 6, 7, 7, 8, 8, 9, 9, 9,
-         9, 9, 9, 9,10,10,10,11, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9,
-         9, 9, 9, 9, 9, 9,10,11,11,11, 8, 8, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11, 8, 8, 8,
-         9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,11,11, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,10,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,10,11,11,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,
-        11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11,
-        10,11,11,11, 9,10,10, 9, 9, 9, 9, 9, 9, 9,10,11,
-        11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
-        11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
-        11,11,11,10,11,11,11,11,11, 9, 9, 9,10, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _44cn1_s_p8_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44cn1_s_p8_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44cn1_s_p8_2,
-        0
-};
-
-static const long _huff_lengthlist__44cn1_s_short[] = {
-        10, 9,12,15,12,13,16,14,16, 7, 1, 5,14, 7,10,13,
-        16,16, 9, 4, 6,16, 8,11,16,16,16,14, 4, 7,16, 9,
-        12,14,16,16,10, 5, 7,14, 9,12,14,15,15,13, 8, 9,
-        14,10,12,13,14,15,13, 9, 9, 7, 6, 8,11,12,12,14,
-         8, 8, 5, 4, 5, 8,11,12,16,10,10, 6, 5, 6, 8, 9,
-        10,
-};
-
-static const static_codebook _huff_book__44cn1_s_short = {
-        2, 81,
-        (long *)_huff_lengthlist__44cn1_s_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44cn1_sm_long[] = {
-         3, 3, 8, 8, 8, 8,10,12,14, 3, 2, 6, 7, 7, 8,10,
-        12,16, 7, 6, 7, 9, 8,10,12,14,16, 8, 6, 8, 4, 5,
-         7, 9,11,13, 7, 6, 8, 5, 6, 7, 9,11,14, 8, 8,10,
-         7, 7, 6, 8,10,13, 9,11,12, 9, 9, 7, 8,10,12,10,
-        13,15,11,11,10, 9,10,13,13,16,17,14,15,14,13,14,
-        17,
-};
-
-static const static_codebook _huff_book__44cn1_sm_long = {
-        2, 81,
-        (long *)_huff_lengthlist__44cn1_sm_long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p1_0[] = {
-         1, 4, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
-         0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
-         0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
-         0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
-         0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0, 0,
-         0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
-         0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
-         0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
-         0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10,
-         0, 0, 0, 0, 0, 0, 9,10, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44cn1_sm_p1_0 = {
-        8, 6561,
-        (long *)_vq_lengthlist__44cn1_sm_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44cn1_sm_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p2_0[] = {
-         1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 7, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44cn1_sm_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44cn1_sm_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44cn1_sm_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p3_0[] = {
-         1, 3, 4, 7, 7, 0, 0, 0, 0, 0, 4, 4, 7, 7, 0, 0,
-         0, 0, 0, 4, 5, 7, 7, 0, 0, 0, 0, 0, 6, 7, 8, 8,
-         0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0,
-         9, 9, 0, 0, 0, 0, 0, 0, 0,10, 9, 0, 0, 0, 0, 0,
-         0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0,
-};
-
-static const static_codebook _44cn1_sm_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44cn1_sm_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44cn1_sm_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p4_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p4_0[] = {
-         1, 4, 3, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 8, 7,
-         9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
-         8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
-         9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0,
-         0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11,
-        11,
-};
-
-static const static_codebook _44cn1_sm_p4_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44cn1_sm_p4_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44cn1_sm_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p5_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p5_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,
-        11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
-        12,12, 0, 6, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
-        11,12,12, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,11,
-        11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
-        11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
-        10,11,11,12,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
-        10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
-        10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
-        10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9,
-         9,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0, 0,
-        10,10,11,11,11,11,12,12,13,13,14,14, 0, 0, 0, 0,
-         0, 0, 0,11,11,11,11,12,12,13,13,14,14, 0, 0, 0,
-         0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0,
-         0, 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0,
-         0, 0, 0, 0, 0, 0,12,12,12,13,13,13,14,14,14,14,
-         0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,14,14,
-        14,
-};
-
-static const static_codebook _44cn1_sm_p5_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44cn1_sm_p5_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44cn1_sm_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p6_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p6_0[] = {
-         1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 6,10, 9, 9,11,
-         9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
-        11,11,11,10, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
-        11,10,11,11,10,10, 7,11,11,11,11,11,12,11,11, 7,
-         9, 9,11,10,10,12,10,10, 7, 9, 9,11,10,10,11,10,
-        10,
-};
-
-static const static_codebook _44cn1_sm_p6_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44cn1_sm_p6_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44cn1_sm_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p6_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p6_1[] = {
-         2, 4, 4, 5, 5, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
-         7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
-         8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
-         8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8,
-         8, 9, 9,10,10,10,10,10, 9, 9, 9, 9, 8, 9,10,10,
-        10,10,10, 8, 9, 8, 8, 9, 8,
-};
-
-static const static_codebook _44cn1_sm_p6_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44cn1_sm_p6_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44cn1_sm_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p7_0[] = {
-         1, 4, 4, 6, 6, 7, 7, 7, 7, 9, 9,10,10, 7, 5, 5,
-         7, 7, 8, 8, 8, 8,10, 9,11,10, 7, 5, 5, 7, 7, 8,
-         8, 8, 8, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
-        11, 0,12,12, 9, 9, 9,10,10,10,11,11,12,12, 0,13,
-        13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10,
-        10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11,
-        11,12,12,12,12, 0, 0, 0,14,14,11,11,11,11,12,13,
-        13,13, 0, 0, 0,14,14,11,10,11,11,12,12,13,13, 0,
-         0, 0, 0, 0,12,12,12,12,13,13,13,14, 0, 0, 0, 0,
-         0,13,12,12,12,13,13,13,14,
-};
-
-static const static_codebook _44cn1_sm_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44cn1_sm_p7_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44cn1_sm_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p7_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p7_1[] = {
-         2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
-         5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44cn1_sm_p7_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44cn1_sm_p7_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44cn1_sm_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p8_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p8_0[] = {
-         1, 4, 4,12,11,13,13,14,14, 4, 7, 7,11,13,14,14,
-        14,14, 3, 8, 3,14,14,14,14,14,14,14,10,12,14,14,
-        14,14,14,14,14,14, 5,14, 8,14,14,14,14,14,12,14,
-        13,14,14,14,14,14,14,14,13,14,10,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,
-};
-
-static const static_codebook _44cn1_sm_p8_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44cn1_sm_p8_0,
-        1, -516186112, 1627103232, 4, 0,
-        (long *)_vq_quantlist__44cn1_sm_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p8_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p8_1[] = {
-         1, 4, 4, 6, 6, 8, 8, 9, 9,10,11,11,11, 6, 5, 5,
-         7, 7, 8, 8,10,10,10,11,11,11, 6, 5, 5, 7, 7, 8,
-         8,10,10,11,12,12,12,14, 7, 7, 7, 8, 9, 9,11,11,
-        11,12,11,12,17, 7, 7, 8, 7, 9, 9,11,11,12,12,12,
-        12,14,11,11, 8, 8,10,10,11,12,12,13,11,12,14,11,
-        11, 8, 8,10,10,11,12,12,13,13,12,14,15,14,10,10,
-        10,10,11,12,12,12,12,11,14,13,16,10,10,10, 9,12,
-        11,12,12,13,14,14,15,14,14,13,10,10,11,11,12,11,
-        13,11,14,12,15,13,14,11,10,12,10,12,12,13,13,13,
-        13,14,15,15,12,12,11,11,12,11,13,12,14,14,14,14,
-        17,12,12,11,10,13,11,13,13,
-};
-
-static const static_codebook _44cn1_sm_p8_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44cn1_sm_p8_1,
-        1, -522616832, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44cn1_sm_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44cn1_sm_p8_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44cn1_sm_p8_2[] = {
-         3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9,10, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9,10, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9,11,10,11, 8, 8, 8, 8, 8, 8,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11, 8, 8, 8,
-         8, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,11, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,10,11,11, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,10,11,11,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,
-        11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,
-        11,11,11,11, 9,10,10,10, 9, 9, 9, 9, 9, 9,11,10,
-        11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
-        11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
-        10,11,11,11,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _44cn1_sm_p8_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44cn1_sm_p8_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44cn1_sm_p8_2,
-        0
-};
-
-static const long _huff_lengthlist__44cn1_sm_short[] = {
-         5, 6,12,14,12,14,16,17,18, 4, 2, 5,11, 7,10,12,
-        14,15, 9, 4, 5,11, 7,10,13,15,18,15, 6, 7, 5, 6,
-         8,11,13,16,11, 5, 6, 5, 5, 6, 9,13,15,12, 5, 7,
-         6, 5, 6, 9,12,14,12, 6, 7, 8, 6, 7, 9,12,13,14,
-         8, 8, 7, 5, 5, 8,10,12,16, 9, 9, 8, 6, 6, 7, 9,
-         9,
-};
-
-static const static_codebook _huff_book__44cn1_sm_short = {
-        2, 81,
-        (long *)_huff_lengthlist__44cn1_sm_short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/floor/floor_books.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/floor/floor_books.h
deleted file mode 100644
index 609b97b..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/floor/floor_books.h
+++ /dev/null
@@ -1,1546 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: static codebooks autogenerated by huff/huffbuld
- last modified: $Id: floor_books.h 16939 2010-03-01 08:38:14Z xiphmont $
-
- ********************************************************************/
-
-#include "../../codebook.h"
-
-static const long _huff_lengthlist_line_256x7_0sub1[] = {
-         0, 2, 3, 3, 3, 3, 4, 3, 4,
-};
-
-static const static_codebook _huff_book_line_256x7_0sub1 = {
-        1, 9,
-        (long *)_huff_lengthlist_line_256x7_0sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_0sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 5, 3,
-         6, 3, 6, 4, 6, 4, 7, 5, 7,
-};
-
-static const static_codebook _huff_book_line_256x7_0sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_256x7_0sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_0sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 3, 5, 3,
-         6, 3, 6, 4, 7, 6, 7, 8, 7, 9, 8, 9, 9, 9,10, 9,
-        11,13,11,13,10,10,13,13,13,13,13,13,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_256x7_0sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_256x7_0sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_1sub1[] = {
-         0, 3, 3, 3, 3, 2, 4, 3, 4,
-};
-
-static const static_codebook _huff_book_line_256x7_1sub1 = {
-        1, 9,
-        (long *)_huff_lengthlist_line_256x7_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_1sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 4, 3, 4, 4,
-         5, 4, 6, 5, 6, 7, 6, 8, 8,
-};
-
-static const static_codebook _huff_book_line_256x7_1sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_256x7_1sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_1sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 3, 6, 3, 7,
-         3, 8, 5, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7,
-};
-
-static const static_codebook _huff_book_line_256x7_1sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_256x7_1sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_class0[] = {
-         7, 5, 5, 9, 9, 6, 6, 9,12, 8, 7, 8,11, 8, 9,15,
-         6, 3, 3, 7, 7, 4, 3, 6, 9, 6, 5, 6, 8, 6, 8,15,
-         8, 5, 5, 9, 8, 5, 4, 6,10, 7, 5, 5,11, 8, 7,15,
-        14,15,13,13,13,13, 8,11,15,10, 7, 6,11, 9,10,15,
-};
-
-static const static_codebook _huff_book_line_256x7_class0 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_256x7_class0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x7_class1[] = {
-         5, 6, 8,15, 6, 9,10,15,10,11,12,15,15,15,15,15,
-         4, 6, 7,15, 6, 7, 8,15, 9, 8, 9,15,15,15,15,15,
-         6, 8, 9,15, 7, 7, 8,15,10, 9,10,15,15,15,15,15,
-        15,13,15,15,15,10,11,15,15,13,13,15,15,15,15,15,
-         4, 6, 7,15, 6, 8, 9,15,10,10,12,15,15,15,15,15,
-         2, 5, 6,15, 5, 6, 7,15, 8, 6, 7,15,15,15,15,15,
-         5, 6, 8,15, 5, 6, 7,15, 9, 6, 7,15,15,15,15,15,
-        14,12,13,15,12,10,11,15,15,15,15,15,15,15,15,15,
-         7, 8, 9,15, 9,10,10,15,15,14,14,15,15,15,15,15,
-         5, 6, 7,15, 7, 8, 9,15,12, 9,10,15,15,15,15,15,
-         7, 7, 9,15, 7, 7, 8,15,12, 8, 9,15,15,15,15,15,
-        13,13,14,15,12,11,12,15,15,15,15,15,15,15,15,15,
-        15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-        13,13,13,15,15,15,15,15,15,15,15,15,15,15,15,15,
-        15,12,13,15,15,12,13,15,15,14,15,15,15,15,15,15,
-        15,15,15,15,15,15,13,15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _huff_book_line_256x7_class1 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_256x7_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_0sub0[] = {
-         4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-         5, 6, 5, 6, 6, 6, 6, 5, 6, 6, 7, 6, 7, 6, 7, 6,
-         7, 6, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 9, 7, 9, 7,
-         9, 7, 9, 8, 9, 8,10, 8,10, 8,10, 7,10, 6,10, 8,
-        10, 8,11, 7,10, 7,11, 8,11,11,12,12,11,11,12,11,
-        13,11,13,11,13,12,15,12,13,13,14,14,14,14,14,15,
-        15,15,16,14,17,19,19,18,18,18,18,18,18,18,18,18,
-        18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-};
-
-static const static_codebook _huff_book_line_512x17_0sub0 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_512x17_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_1sub0[] = {
-         2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
-         6, 5, 6, 6, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 8, 7,
-};
-
-static const static_codebook _huff_book_line_512x17_1sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_512x17_1sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_1sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         4, 3, 5, 3, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 6, 5,
-         6, 5, 7, 5, 8, 6, 8, 6, 8, 6, 8, 6, 8, 7, 9, 7,
-         9, 7,11, 9,11,11,12,11,14,12,14,16,14,16,13,16,
-        14,16,12,15,13,16,14,16,13,14,12,15,13,15,13,13,
-        13,15,12,14,14,15,13,15,12,15,15,15,15,15,15,15,
-        15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _huff_book_line_512x17_1sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_512x17_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_2sub1[] = {
-         0, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 5, 4, 5, 3,
-         5, 3,
-};
-
-static const static_codebook _huff_book_line_512x17_2sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_512x17_2sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_2sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 6, 4, 6, 5,
-         6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 7, 8, 7, 9, 7,
-         9, 8,
-};
-
-static const static_codebook _huff_book_line_512x17_2sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_512x17_2sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_2sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 3, 3, 3, 4, 3, 4, 4, 5, 5, 6, 6, 7, 7,
-         7, 8, 8,11, 8, 9, 9, 9,10,11,11,11, 9,10,10,11,
-        11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _huff_book_line_512x17_2sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_512x17_2sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_3sub1[] = {
-         0, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 4, 5,
-         5, 5,
-};
-
-static const static_codebook _huff_book_line_512x17_3sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_512x17_3sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_3sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 2, 3, 3, 4, 3, 5, 4, 6, 4, 6, 5, 7, 6, 7,
-         6, 8, 6, 8, 7, 9, 8,10, 8,12, 9,13,10,15,10,15,
-        11,14,
-};
-
-static const static_codebook _huff_book_line_512x17_3sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_512x17_3sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_3sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 8, 4, 8, 4, 8, 4, 8, 5, 8, 5, 8, 6, 8,
-         4, 8, 4, 8, 5, 8, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _huff_book_line_512x17_3sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_512x17_3sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_class1[] = {
-         1, 2, 3, 6, 5, 4, 7, 7,
-};
-
-static const static_codebook _huff_book_line_512x17_class1 = {
-        1, 8,
-        (long *)_huff_lengthlist_line_512x17_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_class2[] = {
-         3, 3, 3,14, 5, 4, 4,11, 8, 6, 6,10,17,12,11,17,
-         6, 5, 5,15, 5, 3, 4,11, 8, 5, 5, 8,16, 9,10,14,
-        10, 8, 9,17, 8, 6, 6,13,10, 7, 7,10,16,11,13,14,
-        17,17,17,17,17,16,16,16,16,15,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_512x17_class2 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_512x17_class2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_512x17_class3[] = {
-         2, 4, 6,17, 4, 5, 7,17, 8, 7,10,17,17,17,17,17,
-         3, 4, 6,15, 3, 3, 6,15, 7, 6, 9,17,17,17,17,17,
-         6, 8,10,17, 6, 6, 8,16, 9, 8,10,17,17,15,16,17,
-        17,17,17,17,12,15,15,16,12,15,15,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_512x17_class3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_512x17_class3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x4_class0[] = {
-         7, 7, 7,11, 6, 6, 7,11, 7, 6, 6,10,12,10,10,13,
-         7, 7, 8,11, 7, 7, 7,11, 7, 6, 7,10,11,10,10,13,
-        10,10, 9,12, 9, 9, 9,11, 8, 8, 8,11,13,11,10,14,
-        15,15,14,15,15,14,13,14,15,12,12,17,17,17,17,17,
-         7, 7, 6, 9, 6, 6, 6, 9, 7, 6, 6, 8,11,11,10,12,
-         7, 7, 7, 9, 7, 6, 6, 9, 7, 6, 6, 9,13,10,10,11,
-        10, 9, 8,10, 9, 8, 8,10, 8, 8, 7, 9,13,12,10,11,
-        17,14,14,13,15,14,12,13,17,13,12,15,17,17,14,17,
-         7, 6, 6, 7, 6, 6, 5, 7, 6, 6, 6, 6,11, 9, 9, 9,
-         7, 7, 6, 7, 7, 6, 6, 7, 6, 6, 6, 6,10, 9, 8, 9,
-        10, 9, 8, 8, 9, 8, 7, 8, 8, 7, 6, 8,11,10, 9,10,
-        17,17,12,15,15,15,12,14,14,14,10,12,15,13,12,13,
-        11,10, 8,10,11,10, 8, 8,10, 9, 7, 7,10, 9, 9,11,
-        11,11, 9,10,11,10, 8, 9,10, 8, 6, 8,10, 9, 9,11,
-        14,13,10,12,12,11,10,10, 8, 7, 8,10,10,11,11,12,
-        17,17,15,17,17,17,17,17,17,13,12,17,17,17,14,17,
-};
-
-static const static_codebook _huff_book_line_128x4_class0 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_128x4_class0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x4_0sub0[] = {
-         2, 2, 2, 2,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub0 = {
-        1, 4,
-        (long *)_huff_lengthlist_line_128x4_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x4_0sub1[] = {
-         0, 0, 0, 0, 3, 2, 3, 2, 3, 3,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub1 = {
-        1, 10,
-        (long *)_huff_lengthlist_line_128x4_0sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x4_0sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 4, 3, 4, 3,
-         4, 4, 5, 4, 5, 4, 6, 5, 6,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_128x4_0sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x4_0sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 5, 3, 5, 3,
-         5, 4, 6, 5, 6, 5, 7, 6, 6, 7, 7, 9, 9,11,11,16,
-        11,14,10,11,11,13,16,15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x4_0sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4_class0[] = {
-         6, 7, 7,12, 6, 6, 7,12, 7, 6, 6,10,15,12,11,13,
-         7, 7, 8,13, 7, 7, 8,12, 7, 7, 7,11,12,12,11,13,
-        10, 9, 9,11, 9, 9, 9,10,10, 8, 8,12,14,12,12,14,
-        11,11,12,14,11,12,11,15,15,12,13,15,15,15,15,15,
-         6, 6, 7,10, 6, 6, 6,11, 7, 6, 6, 9,14,12,11,13,
-         7, 7, 7,10, 6, 6, 7, 9, 7, 7, 6,10,13,12,10,12,
-         9, 9, 9,11, 9, 9, 8, 9, 9, 8, 8,10,13,12,10,12,
-        12,12,11,13,12,12,11,12,15,13,12,15,15,15,14,14,
-         6, 6, 6, 8, 6, 6, 5, 6, 7, 7, 6, 5,11,10, 9, 8,
-         7, 6, 6, 7, 6, 6, 5, 6, 7, 7, 6, 6,11,10, 9, 8,
-         8, 8, 8, 9, 8, 8, 7, 8, 8, 8, 6, 7,11,10, 9, 9,
-        14,11,10,14,14,11,10,15,13,11, 9,11,15,12,12,11,
-        11, 9, 8, 8,10, 9, 8, 9,11,10, 9, 8,12,11,12,11,
-        13,10, 8, 9,11,10, 8, 9,10, 9, 8, 9,10, 8,12,12,
-        15,11,10,10,13,11,10,10, 8, 8, 7,12,10, 9,11,12,
-        15,12,11,15,13,11,11,15,12,14,11,13,15,15,13,13,
-};
-
-static const static_codebook _huff_book_line_256x4_class0 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_256x4_class0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4_0sub0[] = {
-         2, 2, 2, 2,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub0 = {
-        1, 4,
-        (long *)_huff_lengthlist_line_256x4_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4_0sub1[] = {
-         0, 0, 0, 0, 2, 2, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub1 = {
-        1, 10,
-        (long *)_huff_lengthlist_line_256x4_0sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4_0sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 3, 4, 3,
-         5, 3, 5, 4, 5, 4, 6, 4, 6,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_256x4_0sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4_0sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 5, 3, 5, 3,
-         6, 4, 7, 4, 7, 5, 7, 6, 7, 6, 7, 8,10,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_256x4_0sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_class0[] = {
-        10, 7, 8,13, 9, 6, 7,11,10, 8, 8,12,17,17,17,17,
-         7, 5, 5, 9, 6, 4, 4, 8, 8, 5, 5, 8,16,14,13,16,
-         7, 5, 5, 7, 6, 3, 3, 5, 8, 5, 4, 7,14,12,12,15,
-        10, 7, 8, 9, 7, 5, 5, 6, 9, 6, 5, 5,15,12, 9,10,
-};
-
-static const static_codebook _huff_book_line_128x7_class0 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x7_class0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_class1[] = {
-         8,13,17,17, 8,11,17,17,11,13,17,17,17,17,17,17,
-         6,10,16,17, 6,10,15,17, 8,10,16,17,17,17,17,17,
-         9,13,15,17, 8,11,17,17,10,12,17,17,17,17,17,17,
-        17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-         6,11,15,17, 7,10,15,17, 8,10,17,17,17,15,17,17,
-         4, 8,13,17, 4, 7,13,17, 6, 8,15,17,16,15,17,17,
-         6,11,15,17, 6, 9,13,17, 8,10,17,17,15,17,17,17,
-        16,17,17,17,12,14,15,17,13,14,15,17,17,17,17,17,
-         5,10,14,17, 5, 9,14,17, 7, 9,15,17,15,15,17,17,
-         3, 7,12,17, 3, 6,11,17, 5, 7,13,17,12,12,17,17,
-         5, 9,14,17, 3, 7,11,17, 5, 8,13,17,13,11,16,17,
-        12,17,17,17, 9,14,15,17,10,11,14,17,16,14,17,17,
-         8,12,17,17, 8,12,17,17,10,12,17,17,17,17,17,17,
-         5,10,17,17, 5, 9,15,17, 7, 9,17,17,13,13,17,17,
-         7,11,17,17, 6,10,15,17, 7, 9,15,17,12,11,17,17,
-        12,15,17,17,11,14,17,17,11,10,15,17,17,16,17,17,
-};
-
-static const static_codebook _huff_book_line_128x7_class1 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_128x7_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_0sub1[] = {
-         0, 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book_line_128x7_0sub1 = {
-        1, 9,
-        (long *)_huff_lengthlist_line_128x7_0sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_0sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 4, 4, 4,
-         5, 4, 5, 4, 5, 4, 6, 4, 6,
-};
-
-static const static_codebook _huff_book_line_128x7_0sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_128x7_0sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_0sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 3, 5, 3, 5, 4,
-         5, 4, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
-         7, 8, 9,11,13,13,13,13,13,13,13,13,13,13,13,13,
-};
-
-static const static_codebook _huff_book_line_128x7_0sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x7_0sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_1sub1[] = {
-         0, 3, 3, 2, 3, 3, 4, 3, 4,
-};
-
-static const static_codebook _huff_book_line_128x7_1sub1 = {
-        1, 9,
-        (long *)_huff_lengthlist_line_128x7_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_1sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 6, 3, 6, 3,
-         6, 3, 7, 3, 8, 4, 9, 4, 9,
-};
-
-static const static_codebook _huff_book_line_128x7_1sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_128x7_1sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x7_1sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 2, 7, 3, 8, 4,
-         9, 5, 9, 8,10,11,11,12,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,13,13,13,13,
-};
-
-static const static_codebook _huff_book_line_128x7_1sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x7_1sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_class1[] = {
-         1, 6, 3, 7, 2, 4, 5, 7,
-};
-
-static const static_codebook _huff_book_line_128x11_class1 = {
-        1, 8,
-        (long *)_huff_lengthlist_line_128x11_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_class2[] = {
-         1, 6,12,16, 4,12,15,16, 9,15,16,16,16,16,16,16,
-         2, 5,11,16, 5,11,13,16, 9,13,16,16,16,16,16,16,
-         4, 8,12,16, 5, 9,12,16, 9,13,15,16,16,16,16,16,
-        15,16,16,16,11,14,13,16,12,15,16,16,16,16,16,15,
-};
-
-static const static_codebook _huff_book_line_128x11_class2 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x11_class2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_class3[] = {
-         7, 6, 9,17, 7, 6, 8,17,12, 9,11,16,16,16,16,16,
-         5, 4, 7,16, 5, 3, 6,14, 9, 6, 8,15,16,16,16,16,
-         5, 4, 6,13, 3, 2, 4,11, 7, 4, 6,13,16,11,10,14,
-        12,12,12,16, 9, 7,10,15,12, 9,11,16,16,15,15,16,
-};
-
-static const static_codebook _huff_book_line_128x11_class3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x11_class3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_0sub0[] = {
-         5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
-         6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 6, 6, 7, 6,
-         7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6, 8, 7,
-         8, 7, 8, 7, 8, 7, 9, 7, 9, 8, 9, 8, 9, 8,10, 8,
-        10, 9,10, 9,10, 9,11, 9,11, 9,10,10,11,10,11,10,
-        11,11,11,11,11,11,12,13,14,14,14,15,15,16,16,16,
-        17,15,16,15,16,16,17,17,16,17,17,17,17,17,17,17,
-        17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-};
-
-static const static_codebook _huff_book_line_128x11_0sub0 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x11_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_1sub0[] = {
-         2, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5,
-         6, 5, 6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6,
-};
-
-static const static_codebook _huff_book_line_128x11_1sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_128x11_1sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_1sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         5, 3, 5, 3, 6, 4, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4,
-         8, 4, 9, 5, 9, 5, 9, 5, 9, 6,10, 6,10, 6,11, 7,
-        10, 7,10, 8,11, 9,11, 9,11,10,11,11,12,11,11,12,
-        15,15,12,14,11,14,12,14,11,14,13,14,12,14,11,14,
-        11,14,12,14,11,14,11,14,13,13,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-};
-
-static const static_codebook _huff_book_line_128x11_1sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x11_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_2sub1[] = {
-         0, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4,
-         5, 5,
-};
-
-static const static_codebook _huff_book_line_128x11_2sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_128x11_2sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_2sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 3, 3, 4, 4, 4, 4, 5, 4, 5, 4, 6, 5, 7,
-         5, 7, 6, 8, 6, 8, 6, 9, 7, 9, 7,10, 7, 9, 8,11,
-         8,11,
-};
-
-static const static_codebook _huff_book_line_128x11_2sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_128x11_2sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_2sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 8, 3, 8, 4, 8, 4, 8, 6, 8, 5, 8, 4, 8,
-         4, 8, 6, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _huff_book_line_128x11_2sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x11_2sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_3sub1[] = {
-         0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4,
-         5, 4,
-};
-
-static const static_codebook _huff_book_line_128x11_3sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_128x11_3sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_3sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 3, 5, 4, 6, 4, 6, 4, 7, 4, 7, 4, 8, 4,
-         8, 4, 9, 4, 9, 4,10, 4,10, 5,10, 5,11, 5,12, 6,
-        12, 6,
-};
-
-static const static_codebook _huff_book_line_128x11_3sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_128x11_3sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x11_3sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 7, 1, 6, 3, 7, 3, 8, 4, 8, 5, 8, 8, 8, 9,
-         7, 8, 8, 7, 7, 7, 8, 9,10, 9, 9,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
-};
-
-static const static_codebook _huff_book_line_128x11_3sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x11_3sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_class1[] = {
-         1, 3, 4, 7, 2, 5, 6, 7,
-};
-
-static const static_codebook _huff_book_line_128x17_class1 = {
-        1, 8,
-        (long *)_huff_lengthlist_line_128x17_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_class2[] = {
-         1, 4,10,19, 3, 8,13,19, 7,12,19,19,19,19,19,19,
-         2, 6,11,19, 8,13,19,19, 9,11,19,19,19,19,19,19,
-         6, 7,13,19, 9,13,19,19,10,13,18,18,18,18,18,18,
-        18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-};
-
-static const static_codebook _huff_book_line_128x17_class2 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x17_class2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_class3[] = {
-         3, 6,10,17, 4, 8,11,20, 8,10,11,20,20,20,20,20,
-         2, 4, 8,18, 4, 6, 8,17, 7, 8,10,20,20,17,20,20,
-         3, 5, 8,17, 3, 4, 6,17, 8, 8,10,17,17,12,16,20,
-        13,13,15,20,10,10,12,20,15,14,15,20,20,20,19,19,
-};
-
-static const static_codebook _huff_book_line_128x17_class3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_128x17_class3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_0sub0[] = {
-         5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
-         7, 5, 7, 5, 7, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 5,
-         8, 5, 8, 5, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, 9, 6,
-         9, 6, 9, 7, 9, 7, 9, 7, 9, 7,10, 7,10, 8,10, 8,
-        10, 8,10, 8,10, 8,11, 8,11, 8,11, 8,11, 8,11, 9,
-        12, 9,12, 9,12, 9,12, 9,12,10,12,10,13,11,13,11,
-        14,12,14,13,15,14,16,14,17,15,18,16,20,20,20,20,
-        20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
-};
-
-static const static_codebook _huff_book_line_128x17_0sub0 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x17_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_1sub0[] = {
-         2, 5, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
-         6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 9, 7, 9, 7,
-};
-
-static const static_codebook _huff_book_line_128x17_1sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_128x17_1sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_1sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         4, 3, 5, 3, 5, 3, 6, 3, 6, 4, 6, 4, 7, 4, 7, 5,
-         8, 5, 8, 6, 9, 7, 9, 7, 9, 8,10, 9,10, 9,11,10,
-        11,11,11,11,11,11,12,12,12,13,12,13,12,14,12,15,
-        12,14,12,16,13,17,13,17,14,17,14,16,13,17,14,17,
-        14,17,15,17,15,15,16,17,17,17,17,17,17,17,17,17,
-        17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_128x17_1sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x17_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_2sub1[] = {
-         0, 4, 5, 4, 6, 4, 8, 3, 9, 3, 9, 2, 9, 3, 8, 4,
-         9, 4,
-};
-
-static const static_codebook _huff_book_line_128x17_2sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_128x17_2sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_2sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 1, 5, 3, 5, 3, 5, 4, 7, 5,10, 7,10, 7,
-        12,10,14,10,14, 9,14,11,14,14,14,13,13,13,13,13,
-        13,13,
-};
-
-static const static_codebook _huff_book_line_128x17_2sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_128x17_2sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_2sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
-         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const static_codebook _huff_book_line_128x17_2sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x17_2sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_3sub1[] = {
-         0, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3, 5, 4, 6, 4,
-         6, 4,
-};
-
-static const static_codebook _huff_book_line_128x17_3sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_128x17_3sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_3sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 5, 3, 6, 3, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4,
-         8, 4, 8, 4, 8, 4, 9, 4, 9, 5,10, 5,10, 7,10, 8,
-        10, 8,
-};
-
-static const static_codebook _huff_book_line_128x17_3sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_128x17_3sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_128x17_3sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 2, 4, 3, 4, 4, 4, 5, 4, 7, 5, 8, 5,11,
-         6,10, 6,12, 7,12, 7,12, 8,12, 8,12,10,12,12,12,
-        12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _huff_book_line_128x17_3sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_128x17_3sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_class1[] = {
-         2,10, 8,14, 7,12,11,14, 1, 5, 3, 7, 4, 9, 7,13,
-};
-
-static const static_codebook _huff_book_line_1024x27_class1 = {
-        1, 16,
-        (long *)_huff_lengthlist_line_1024x27_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_class2[] = {
-         1, 4, 2, 6, 3, 7, 5, 7,
-};
-
-static const static_codebook _huff_book_line_1024x27_class2 = {
-        1, 8,
-        (long *)_huff_lengthlist_line_1024x27_class2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_class3[] = {
-         1, 5, 7,21, 5, 8, 9,21,10, 9,12,20,20,16,20,20,
-         4, 8, 9,20, 6, 8, 9,20,11,11,13,20,20,15,17,20,
-         9,11,14,20, 8,10,15,20,11,13,15,20,20,20,20,20,
-        20,20,20,20,13,20,20,20,18,18,20,20,20,20,20,20,
-         3, 6, 8,20, 6, 7, 9,20,10, 9,12,20,20,20,20,20,
-         5, 7, 9,20, 6, 6, 9,20,10, 9,12,20,20,20,20,20,
-         8,10,13,20, 8, 9,12,20,11,10,12,20,20,20,20,20,
-        18,20,20,20,15,17,18,20,18,17,18,20,20,20,20,20,
-         7,10,12,20, 8, 9,11,20,14,13,14,20,20,20,20,20,
-         6, 9,12,20, 7, 8,11,20,12,11,13,20,20,20,20,20,
-         9,11,15,20, 8,10,14,20,12,11,14,20,20,20,20,20,
-        20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
-        11,16,18,20,15,15,17,20,20,17,20,20,20,20,20,20,
-         9,14,16,20,12,12,15,20,17,15,18,20,20,20,20,20,
-        16,19,18,20,15,16,20,20,17,17,20,20,20,20,20,20,
-        20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
-};
-
-static const static_codebook _huff_book_line_1024x27_class3 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_1024x27_class3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_class4[] = {
-         2, 3, 7,13, 4, 4, 7,15, 8, 6, 9,17,21,16,15,21,
-         2, 5, 7,11, 5, 5, 7,14, 9, 7,10,16,17,15,16,21,
-         4, 7,10,17, 7, 7, 9,15,11, 9,11,16,21,18,15,21,
-        18,21,21,21,15,17,17,19,21,19,18,20,21,21,21,20,
-};
-
-static const static_codebook _huff_book_line_1024x27_class4 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_1024x27_class4,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_0sub0[] = {
-         5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
-         6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5, 7, 5,
-         8, 6, 8, 6, 8, 6, 9, 6, 9, 6,10, 6,10, 6,11, 6,
-        11, 7,11, 7,12, 7,12, 7,12, 7,12, 7,12, 7,12, 7,
-        12, 7,12, 8,13, 8,12, 8,12, 8,13, 8,13, 9,13, 9,
-        13, 9,13, 9,12,10,12,10,13,10,14,11,14,12,14,13,
-        14,13,14,14,15,16,15,15,15,14,15,17,21,22,22,21,
-        22,22,22,22,22,22,21,21,21,21,21,21,21,21,21,21,
-};
-
-static const static_codebook _huff_book_line_1024x27_0sub0 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_1024x27_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_1sub0[] = {
-         2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 5, 6, 5, 6, 5,
-         6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6,
-};
-
-static const static_codebook _huff_book_line_1024x27_1sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_1024x27_1sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_1sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         8, 5, 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4,
-         9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 9, 5, 9, 5, 9, 5,
-         9, 5, 9, 6,10, 6,10, 7,10, 8,11, 9,11,11,12,13,
-        12,14,13,15,13,15,14,16,14,17,15,17,15,15,16,16,
-        15,16,16,16,15,18,16,15,17,17,19,19,19,19,19,19,
-        19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
-};
-
-static const static_codebook _huff_book_line_1024x27_1sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_1024x27_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_2sub0[] = {
-         1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5,
-         6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 9, 8,10, 9,10, 9,
-};
-
-static const static_codebook _huff_book_line_1024x27_2sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_1024x27_2sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_2sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 5, 6, 5, 6, 5,
-         7, 5, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 9, 8, 9, 9,
-         9, 9,10,10,10,11, 9,12, 9,12, 9,15,10,14, 9,13,
-        10,13,10,12,10,12,10,13,10,12,11,13,11,14,12,13,
-        13,14,14,13,14,15,14,16,13,13,14,16,16,16,16,16,
-        16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,15,
-};
-
-static const static_codebook _huff_book_line_1024x27_2sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_1024x27_2sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_3sub1[] = {
-         0, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 4, 5,
-         5, 5,
-};
-
-static const static_codebook _huff_book_line_1024x27_3sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_1024x27_3sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_3sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6,
-         5, 7, 5, 8, 6, 8, 6, 9, 7,10, 7,10, 8,10, 8,11,
-         9,11,
-};
-
-static const static_codebook _huff_book_line_1024x27_3sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_1024x27_3sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_3sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 7, 3, 8, 3,10, 3, 8, 3, 9, 3, 8, 4, 9,
-         4, 9, 5, 9, 6,10, 6, 9, 7,11, 7,12, 9,13,10,13,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_1024x27_3sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_1024x27_3sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_4sub1[] = {
-         0, 4, 5, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4,
-         5, 4,
-};
-
-static const static_codebook _huff_book_line_1024x27_4sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_1024x27_4sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_4sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 7, 7, 8,
-         7, 8, 7, 8, 7, 9, 8, 9, 8, 9, 8,10, 8,11, 9,12,
-         9,12,
-};
-
-static const static_codebook _huff_book_line_1024x27_4sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_1024x27_4sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_1024x27_4sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 2, 5, 2, 6, 3, 6, 4, 7, 4, 7, 5, 9, 5,11,
-         6,11, 6,11, 7,11, 6,11, 6,11, 9,11, 8,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,
-};
-
-static const static_codebook _huff_book_line_1024x27_4sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_1024x27_4sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_class1[] = {
-         2, 6, 8, 9, 7,11,13,13, 1, 3, 5, 5, 6, 6,12,10,
-};
-
-static const static_codebook _huff_book_line_2048x27_class1 = {
-        1, 16,
-        (long *)_huff_lengthlist_line_2048x27_class1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_class2[] = {
-         1, 2, 3, 6, 4, 7, 5, 7,
-};
-
-static const static_codebook _huff_book_line_2048x27_class2 = {
-        1, 8,
-        (long *)_huff_lengthlist_line_2048x27_class2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_class3[] = {
-         3, 3, 6,16, 5, 5, 7,16, 9, 8,11,16,16,16,16,16,
-         5, 5, 8,16, 5, 5, 7,16, 8, 7, 9,16,16,16,16,16,
-         9, 9,12,16, 6, 8,11,16, 9,10,11,16,16,16,16,16,
-        16,16,16,16,13,16,16,16,15,16,16,16,16,16,16,16,
-         5, 4, 7,16, 6, 5, 8,16, 9, 8,10,16,16,16,16,16,
-         5, 5, 7,15, 5, 4, 6,15, 7, 6, 8,16,16,16,16,16,
-         9, 9,11,15, 7, 7, 9,16, 8, 8, 9,16,16,16,16,16,
-        16,16,16,16,15,15,15,16,15,15,14,16,16,16,16,16,
-         8, 8,11,16, 8, 9,10,16,11,10,14,16,16,16,16,16,
-         6, 8,10,16, 6, 7,10,16, 8, 8,11,16,14,16,16,16,
-        10,11,14,16, 9, 9,11,16,10,10,11,16,16,16,16,16,
-        16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-        16,16,16,16,15,16,16,16,16,16,16,16,16,16,16,16,
-        12,16,15,16,12,14,16,16,16,16,16,16,16,16,16,16,
-        16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-        16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_2048x27_class3 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_2048x27_class3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_class4[] = {
-         2, 4, 7,13, 4, 5, 7,15, 8, 7,10,16,16,14,16,16,
-         2, 4, 7,16, 3, 4, 7,14, 8, 8,10,16,16,16,15,16,
-         6, 8,11,16, 7, 7, 9,16,11, 9,13,16,16,16,15,16,
-        16,16,16,16,14,16,16,16,16,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_2048x27_class4 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_2048x27_class4,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_0sub0[] = {
-         5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
-         6, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 5, 8, 5, 9, 5,
-         9, 6,10, 6,10, 6,11, 6,11, 6,11, 6,11, 6,11, 6,
-        11, 6,11, 6,12, 7,11, 7,11, 7,11, 7,11, 7,10, 7,
-        11, 7,11, 7,12, 7,11, 8,11, 8,11, 8,11, 8,13, 8,
-        12, 9,11, 9,11, 9,11,10,12,10,12, 9,12,10,12,11,
-        14,12,16,12,12,11,14,16,17,17,17,17,17,17,17,17,
-        17,17,17,17,17,17,17,17,17,17,17,17,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_2048x27_0sub0 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_2048x27_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_1sub0[] = {
-         4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
-         5, 5, 6, 6, 6, 6, 6, 6, 7, 6, 7, 6, 7, 6, 7, 6,
-};
-
-static const static_codebook _huff_book_line_2048x27_1sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_2048x27_1sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_1sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         6, 5, 7, 5, 7, 4, 7, 4, 8, 4, 8, 4, 8, 4, 8, 3,
-         8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 5, 9, 5, 9, 6,
-         9, 7, 9, 8, 9, 9, 9,10, 9,11, 9,14, 9,15,10,15,
-        10,15,10,15,10,15,11,15,10,14,12,14,11,14,13,14,
-        13,15,15,15,12,15,15,15,13,15,13,15,13,15,15,15,
-        15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,14,
-};
-
-static const static_codebook _huff_book_line_2048x27_1sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_2048x27_1sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_2sub0[] = {
-         2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
-         6, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _huff_book_line_2048x27_2sub0 = {
-        1, 32,
-        (long *)_huff_lengthlist_line_2048x27_2sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_2sub1[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         3, 4, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 6, 6, 6, 7,
-         6, 8, 6, 8, 6, 9, 7,10, 7,10, 7,10, 7,12, 7,12,
-         7,12, 9,12,11,12,10,12,10,12,11,12,12,12,10,12,
-        10,12,10,12, 9,12,11,12,12,12,12,12,11,12,11,12,
-        12,12,12,12,12,12,12,12,10,10,12,12,12,12,12,10,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_2048x27_2sub1 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_2048x27_2sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_3sub1[] = {
-         0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-         5, 5,
-};
-
-static const static_codebook _huff_book_line_2048x27_3sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_2048x27_3sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_3sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6,
-         6, 7, 6, 7, 6, 8, 6, 9, 7, 9, 7, 9, 9,11, 9,12,
-        10,12,
-};
-
-static const static_codebook _huff_book_line_2048x27_3sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_2048x27_3sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_3sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 6, 3, 7, 3, 7, 5, 7, 7, 7, 7, 7, 6, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _huff_book_line_2048x27_3sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_2048x27_3sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_4sub1[] = {
-         0, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4,
-         4, 5,
-};
-
-static const static_codebook _huff_book_line_2048x27_4sub1 = {
-        1, 18,
-        (long *)_huff_lengthlist_line_2048x27_4sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_4sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 2, 4, 3, 4, 4, 4, 5, 5, 6, 5, 6, 5, 7,
-         6, 6, 6, 7, 7, 7, 8, 9, 9, 9,12,10,11,10,10,12,
-        10,10,
-};
-
-static const static_codebook _huff_book_line_2048x27_4sub2 = {
-        1, 50,
-        (long *)_huff_lengthlist_line_2048x27_4sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_2048x27_4sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 3, 6, 5, 7, 5, 7, 7, 7, 7, 7, 5, 7, 5, 7,
-         5, 7, 5, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const static_codebook _huff_book_line_2048x27_4sub3 = {
-        1, 128,
-        (long *)_huff_lengthlist_line_2048x27_4sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4low_class0[] = {
-         4, 5, 6,11, 5, 5, 6,10, 7, 7, 6, 6,14,13, 9, 9,
-         6, 6, 6,10, 6, 6, 6, 9, 8, 7, 7, 9,14,12, 8,11,
-         8, 7, 7,11, 8, 8, 7,11, 9, 9, 7, 9,13,11, 9,13,
-        19,19,18,19,15,16,16,19,11,11,10,13,10,10, 9,15,
-         5, 5, 6,13, 6, 6, 6,11, 8, 7, 6, 7,14,11,10,11,
-         6, 6, 6,12, 7, 6, 6,11, 8, 7, 7,11,13,11, 9,11,
-         9, 7, 6,12, 8, 7, 6,12, 9, 8, 8,11,13,10, 7,13,
-        19,19,17,19,17,14,14,19,12,10, 8,12,13,10, 9,16,
-         7, 8, 7,12, 7, 7, 7,11, 8, 7, 7, 8,12,12,11,11,
-         8, 8, 7,12, 8, 7, 6,11, 8, 7, 7,10,10,11,10,11,
-         9, 8, 8,13, 9, 8, 7,12,10, 9, 7,11, 9, 8, 7,11,
-        18,18,15,18,18,16,17,18,15,11,10,18,11, 9, 9,18,
-        16,16,13,16,12,11,10,16,12,11, 9, 6,15,12,11,13,
-        16,16,14,14,13,11,12,16,12, 9, 9,13,13,10,10,12,
-        17,18,17,17,14,15,14,16,14,12,14,15,12,10,11,12,
-        18,18,18,18,18,18,18,18,18,12,13,18,16,11, 9,18,
-};
-
-static const static_codebook _huff_book_line_256x4low_class0 = {
-        1, 256,
-        (long *)_huff_lengthlist_line_256x4low_class0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4low_0sub0[] = {
-         1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub0 = {
-        1, 4,
-        (long *)_huff_lengthlist_line_256x4low_0sub0,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4low_0sub1[] = {
-         0, 0, 0, 0, 2, 3, 2, 3, 3, 3,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub1 = {
-        1, 10,
-        (long *)_huff_lengthlist_line_256x4low_0sub1,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4low_0sub2[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 3, 4,
-         4, 4, 4, 4, 5, 5, 5, 6, 6,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub2 = {
-        1, 25,
-        (long *)_huff_lengthlist_line_256x4low_0sub2,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist_line_256x4low_0sub3[] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-         0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 2, 4, 3, 5, 4,
-         5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 6, 9,
-         7,12,11,16,13,16,12,15,13,15,12,14,12,15,15,15,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub3 = {
-        1, 64,
-        (long *)_huff_lengthlist_line_256x4low_0sub3,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h
deleted file mode 100644
index 7d7d7bb..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/uncoupled/res_books_uncoupled.h
+++ /dev/null
@@ -1,7757 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: static codebooks autogenerated by huff/huffbuld
- last modified: $Id: res_books_uncoupled.h 17022 2010-03-25 03:45:42Z xiphmont $
-
- ********************************************************************/
-
-#include "../../codebook.h"
-
-static const long _vq_quantlist__16u0__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16u0__p1_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 8, 5, 8, 8, 8,10,10, 8,
-        10,11, 5, 8, 8, 8,10,10, 8,10,10, 4, 9, 9, 9,12,
-        11, 8,11,11, 8,12,11,10,12,14,10,13,13, 7,11,11,
-        10,14,12,11,14,14, 4, 9, 9, 8,11,11, 9,11,12, 7,
-        11,11,10,13,14,10,12,14, 8,11,12,10,14,14,10,13,
-        12,
-};
-
-static const static_codebook _16u0__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16u0__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__16u0__p1_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16u0__p2_0[] = {
-         2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 9, 7,
-         8, 9, 5, 7, 7, 7, 9, 8, 7, 9, 7, 4, 7, 7, 7, 9,
-         9, 7, 8, 8, 6, 9, 8, 7, 8,11, 9,11,10, 6, 8, 9,
-         8,11, 8, 9,10,11, 4, 7, 7, 7, 8, 8, 7, 9, 9, 6,
-         9, 8, 9,11,10, 8, 8,11, 6, 8, 9, 9,10,11, 8,11,
-         8,
-};
-
-static const static_codebook _16u0__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16u0__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__16u0__p2_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16u0__p3_0[] = {
-         1, 5, 5, 7, 7, 6, 7, 7, 8, 8, 6, 7, 8, 8, 8, 8,
-         9, 9,11,11, 8, 9, 9,11,11, 6, 9, 8,10,10, 8,10,
-        10,11,11, 8,10,10,11,11,10,11,10,13,12, 9,11,10,
-        13,13, 6, 8, 9,10,10, 8,10,10,11,11, 8,10,10,11,
-        11, 9,10,11,13,12,10,10,11,12,12, 8,11,11,14,13,
-        10,12,11,15,13, 9,12,11,15,14,12,14,13,16,14,12,
-        13,13,17,14, 8,11,11,13,14, 9,11,12,14,15,10,11,
-        12,13,15,11,13,13,14,16,12,13,14,14,16, 5, 9, 9,
-        11,11, 9,11,11,12,12, 8,11,11,12,12,11,12,12,15,
-        14,10,12,12,15,15, 8,11,11,13,12,10,12,12,13,13,
-        10,12,12,14,13,12,12,13,14,15,11,13,13,17,16, 7,
-        11,11,13,13,10,12,12,14,13,10,12,12,13,14,12,13,
-        12,15,14,11,13,13,15,14, 9,12,12,16,15,11,13,13,
-        17,16,10,13,13,16,16,13,14,15,15,16,13,15,14,19,
-        17, 9,12,12,14,16,11,13,13,15,16,10,13,13,17,16,
-        13,14,13,17,15,12,15,15,16,17, 5, 9, 9,11,11, 8,
-        11,11,13,12, 9,11,11,12,12,10,12,12,14,15,11,12,
-        12,14,14, 7,11,10,13,12,10,12,12,14,13,10,11,12,
-        13,13,11,13,13,15,16,12,12,13,15,15, 7,11,11,13,
-        13,10,13,13,14,14,10,12,12,13,13,11,13,13,16,15,
-        12,13,13,15,14, 9,12,12,15,15,10,13,13,17,16,11,
-        12,13,15,15,12,15,14,18,18,13,14,14,16,17, 9,12,
-        12,15,16,10,13,13,15,16,11,13,13,15,16,13,15,15,
-        17,17,13,15,14,16,15, 7,11,11,15,16,10,13,12,16,
-        17,10,12,13,15,17,15,16,16,18,17,13,15,15,17,18,
-         8,12,12,16,16,11,13,14,17,18,11,13,13,18,16,15,
-        17,16,17,19,14,15,15,17,16, 8,12,12,16,15,11,14,
-        13,18,17,11,13,14,18,17,15,16,16,18,17,13,16,16,
-        18,18,11,15,14,18,17,13,14,15,18, 0,12,15,15, 0,
-        17,17,16,17,17,18,14,16,18,18, 0,11,14,14,17, 0,
-        12,15,14,17,19,12,15,14,18, 0,15,18,16, 0,17,14,
-        18,16,18, 0, 7,11,11,16,15,10,12,12,18,16,10,13,
-        13,16,15,13,15,14,17,17,14,16,16,19,18, 8,12,12,
-        16,16,11,13,13,18,16,11,13,14,17,16,14,15,15,19,
-        18,15,16,16, 0,19, 8,12,12,16,17,11,13,13,17,17,
-        11,14,13,17,17,13,15,15,17,19,15,17,17,19, 0,11,
-        14,15,19,17,12,15,16,18,18,12,14,15,19,17,14,16,
-        17, 0,18,16,16,19,17, 0,11,14,14,18,19,12,15,14,
-        17,17,13,16,14,17,16,14,17,16,18,18,15,18,15, 0,
-        18,
-};
-
-static const static_codebook _16u0__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__16u0__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16u0__p3_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16u0__p4_0[] = {
-         3, 5, 5, 8, 8, 6, 6, 6, 9, 9, 6, 6, 6, 9, 9, 9,
-        10, 9,11,11, 9, 9, 9,11,11, 6, 7, 7,10,10, 7, 7,
-         8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10,
-        11,12, 6, 7, 7,10,10, 7, 8, 7,10,10, 7, 8, 7,10,
-        10,10,11,10,12,11,10,10,10,13,10, 9,10,10,12,12,
-        10,11,10,14,12, 9,11,11,13,13,11,12,13,13,13,11,
-        12,12,15,13, 9,10,10,12,13, 9,11,10,12,13,10,10,
-        11,12,13,11,12,12,12,13,11,12,12,13,13, 5, 7, 7,
-        10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,12,
-        13,10,10,11,12,12, 6, 8, 8,11,10, 7, 8, 9,10,12,
-         8, 9, 9,11,11,11,10,11,11,12,10,11,11,13,12, 7,
-         8, 8,10,11, 8, 9, 8,11,10, 8, 9, 9,11,11,10,12,
-        10,13,11,10,11,11,13,13,10,11,10,14,13,10,10,11,
-        13,13,10,12,11,14,13,12,11,13,12,13,13,12,13,14,
-        14,10,11,11,13,13,10,11,10,12,13,10,12,12,12,14,
-        12,12,12,14,12,12,13,12,17,15, 5, 7, 7,10,10, 7,
-         8, 8,10,10, 7, 8, 8,11,10,10,10,11,12,12,10,11,
-        11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,11,11,11,12,12,10,10,11,12,13, 6, 8, 8,10,
-        11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,12,12,13,13,
-        11,11,10,13,11, 9,11,10,14,13,11,11,11,15,13,10,
-        10,11,13,13,12,13,13,14,14,12,11,12,12,13,10,11,
-        11,12,13,10,11,12,13,13,10,11,10,13,12,12,12,13,
-        14, 0,12,13,11,13,11, 8,10,10,13,13,10,11,11,14,
-        13,10,11,11,13,12,13,14,14,14,15,12,12,12,15,14,
-         9,11,10,13,12,10,10,11,13,14,11,11,11,15,12,13,
-        12,14,15,16,13,13,13,14,13, 9,11,11,12,12,10,12,
-        11,13,13,10,11,11,13,14,13,13,13,15,15,13,13,14,
-        17,15,11,12,12,14,14,10,11,12,13,15,12,13,13, 0,
-        15,13,11,14,12,16,14,16,14, 0,15,11,12,12,14,16,
-        11,13,12,16,15,12,13,13,14,15,12,14,12,15,13,15,
-        14,14,16,16, 8,10,10,13,13,10,11,10,13,14,10,11,
-        11,13,13,13,13,12,14,14,14,13,13,16,17, 9,10,10,
-        12,14,10,12,11,14,13,10,11,12,13,14,12,12,12,15,
-        15,13,13,13,14,14, 9,10,10,13,13,10,11,12,12,14,
-        10,11,10,13,13,13,13,13,14,16,13,13,13,14,14,11,
-        12,13,15,13,12,14,13,14,16,12,12,13,13,14,13,14,
-        14,17,15,13,12,17,13,16,11,12,13,14,15,12,13,14,
-        14,17,11,12,11,14,14,13,16,14,16, 0,14,15,11,15,
-        11,
-};
-
-static const static_codebook _16u0__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__16u0__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16u0__p4_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16u0__p5_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
-         9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
-         9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 7, 8, 8,
-         9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
-         9, 9,10,10,11,11,12,12, 9, 9, 9,10,10,11,11,12,
-        12,
-};
-
-static const static_codebook _16u0__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16u0__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16u0__p5_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__16u0__p6_0[] = {
-         1, 4, 4, 7, 7,10,10,12,12,13,13,18,17, 3, 6, 6,
-         9, 9,11,11,13,13,14,14,18,17, 3, 6, 6, 9, 9,11,
-        11,13,13,14,14,17,18, 7, 9, 9,11,11,13,13,14,14,
-        15,15, 0, 0, 7, 9, 9,11,11,13,13,14,14,15,16,19,
-        18,10,11,11,13,13,14,14,16,15,17,18, 0, 0,10,11,
-        11,13,13,14,14,15,15,16,18, 0, 0,11,13,13,14,14,
-        15,15,17,17, 0,19, 0, 0,11,13,13,14,14,14,15,16,
-        18, 0,19, 0, 0,13,14,14,15,15,18,17,18,18, 0,19,
-         0, 0,13,14,14,15,16,16,16,18,18,19, 0, 0, 0,16,
-        17,17, 0,17,19,19, 0,19, 0, 0, 0, 0,16,19,16,17,
-        18, 0,19, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _16u0__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__16u0__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__16u0__p6_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16u0__p6_1[] = {
-         1, 4, 5, 6, 6, 4, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6,
-         6, 6, 7, 7, 6, 6, 6, 7, 7,
-};
-
-static const static_codebook _16u0__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__16u0__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16u0__p6_1,
-        0
-};
-
-static const long _vq_quantlist__16u0__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16u0__p7_0[] = {
-         1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _16u0__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16u0__p7_0,
-        1, -518803456, 1628680192, 2, 0,
-        (long *)_vq_quantlist__16u0__p7_0,
-        0
-};
-
-static const long _vq_quantlist__16u0__p7_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__16u0__p7_1[] = {
-         1, 5, 5, 6, 5, 9,10,11,11,10,10,10,10,10,10, 5,
-         8, 8, 8,10,10,10,10,10,10,10,10,10,10,10, 5, 8,
-         9, 9, 9,10,10,10,10,10,10,10,10,10,10, 5,10, 8,
-        10,10,10,10,10,10,10,10,10,10,10,10, 4, 8, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _16u0__p7_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__16u0__p7_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__16u0__p7_1,
-        0
-};
-
-static const long _vq_quantlist__16u0__p7_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__16u0__p7_2[] = {
-         1, 6, 6, 7, 8, 7, 7,10, 9,10, 9,11,10, 9,11,10,
-         9, 9, 9, 9,10, 6, 8, 7, 9, 9, 8, 8,10,10, 9,11,
-        11,12,12,10, 9,11, 9,12,10, 9, 6, 9, 8, 9,12, 8,
-         8,11, 9,11,11,12,11,12,12,10,11,11,10,10,11, 7,
-        10, 9, 9, 9, 9, 9,10, 9,10, 9,10,10,12,10,10,10,
-        11,12,10,10, 7, 9, 9, 9,10, 9, 9,10,10, 9, 9, 9,
-        11,11,10,10,10,10, 9, 9,12, 7, 9,10, 9,11, 9,10,
-         9,10,11,11,11,10,11,12, 9,12,11,10,10,10, 7, 9,
-         9, 9, 9,10,12,10, 9,11,12,10,11,12,12,11, 9,10,
-        11,10,11, 7, 9,10,10,11,10, 9,10,11,11,11,10,12,
-        12,12,11,11,10,11,11,12, 8, 9,10,12,11,10,10,12,
-        12,12,12,12,10,11,11, 9,11,10,12,11,11, 8, 9,10,
-        10,11,12,11,11,10,10,10,12,12,12, 9,10,12,12,12,
-        12,12, 8,10,11,10,10,12, 9,11,12,12,11,12,12,12,
-        12,10,12,10,10,10,10, 8,12,11,11,11,10,10,11,12,
-        12,12,12,11,12,12,12,11,11,11,12,10, 9,10,10,12,
-        10,12,10,12,12,10,10,10,11,12,12,12,11,12,12,12,
-        11,10,11,12,12,12,11,12,12,11,12,12,11,12,12,12,
-        12,11,12,12,10,10,10,10,11,11,12,11,12,12,12,12,
-        12,12,12,11,12,11,10,11,11,12,11,11, 9,10,10,10,
-        12,10,10,11, 9,11,12,11,12,11,12,12,10,11,10,12,
-         9, 9, 9,12,11,10,11,10,12,10,12,10,12,12,12,11,
-        11,11,11,11,10, 9,10,10,11,10,11,11,12,11,10,11,
-        12,12,12,11,11, 9,12,10,12, 9,10,12,10,10,11,10,
-        11,11,12,11,10,11,10,11,11,11,11,12,11,11,10, 9,
-        10,10,10, 9,11,11,10, 9,12,10,11,12,11,12,12,11,
-        12,11,12,11,10,11,10,12,11,12,11,12,11,12,10,11,
-        10,10,12,11,10,11,11,11,10,
-};
-
-static const static_codebook _16u0__p7_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__16u0__p7_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__16u0__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__16u0__single[] = {
-         3, 5, 8, 7,14, 8, 9,19, 5, 2, 5, 5, 9, 6, 9,19,
-         8, 4, 5, 7, 8, 9,13,19, 7, 4, 6, 5, 9, 6, 9,19,
-        12, 8, 7, 9,10,11,13,19, 8, 5, 8, 6, 9, 6, 7,19,
-         8, 8,10, 7, 7, 4, 5,19,12,17,19,15,18,13,11,18,
-};
-
-static const static_codebook _huff_book__16u0__single = {
-        2, 64,
-        (long *)_huff_lengthlist__16u0__single,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__16u1__long[] = {
-         3, 6,10, 8,12, 8,14, 8,14,19, 5, 3, 5, 5, 7, 6,
-        11, 7,16,19, 7, 5, 6, 7, 7, 9,11,12,19,19, 6, 4,
-         7, 5, 7, 6,10, 7,18,18, 8, 6, 7, 7, 7, 7, 8, 9,
-        18,18, 7, 5, 8, 5, 7, 5, 8, 6,18,18,12, 9,10, 9,
-         9, 9, 8, 9,18,18, 8, 7,10, 6, 8, 5, 6, 4,11,18,
-        11,15,16,12,11, 8, 8, 6, 9,18,14,18,18,18,16,16,
-        16,13,16,18,
-};
-
-static const static_codebook _huff_book__16u1__long = {
-        2, 100,
-        (long *)_huff_lengthlist__16u1__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__16u1__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16u1__p1_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 7, 7,10,10, 7,
-         9,10, 5, 7, 8, 7,10, 9, 7,10,10, 5, 8, 8, 8,10,
-        10, 8,10,10, 7,10,10,10,11,12,10,12,13, 7,10,10,
-         9,13,11,10,12,13, 5, 8, 8, 8,10,10, 8,10,10, 7,
-        10,10,10,12,12, 9,11,12, 7,10,11,10,12,12,10,13,
-        11,
-};
-
-static const static_codebook _16u1__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16u1__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__16u1__p1_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16u1__p2_0[] = {
-         3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 7, 8, 6,
-         7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 6, 8,
-         8, 6, 8, 8, 6, 8, 8, 7, 7,10, 8, 9, 9, 6, 8, 8,
-         7, 9, 8, 8, 9,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
-         8, 8, 8,10, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 7,10,
-         8,
-};
-
-static const static_codebook _16u1__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16u1__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__16u1__p2_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16u1__p3_0[] = {
-         1, 5, 5, 8, 8, 6, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9,
-        10, 9,11,11, 9, 9,10,11,11, 6, 8, 8,10,10, 8, 9,
-        10,11,11, 8, 9,10,11,11,10,11,11,12,13,10,11,11,
-        13,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11,
-        11,10,11,11,13,13,10,11,11,13,12, 9,11,11,14,13,
-        10,12,12,15,14,10,12,11,14,13,12,13,13,15,15,12,
-        13,13,16,14, 9,11,11,13,14,10,11,12,14,14,10,12,
-        12,14,15,12,13,13,14,15,12,13,14,15,16, 5, 8, 8,
-        11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
-        14,11,12,12,14,14, 8,10,10,12,12, 9,11,12,12,13,
-        10,12,12,13,13,12,12,13,14,15,11,13,13,15,15, 7,
-        10,10,12,12, 9,12,11,13,12,10,11,12,13,13,12,13,
-        12,15,14,11,12,13,15,15,10,12,12,15,14,11,13,13,
-        16,15,11,13,13,16,15,14,13,14,15,16,13,15,15,17,
-        17,10,12,12,14,15,11,12,12,15,15,11,13,13,15,16,
-        13,15,13,16,15,13,15,15,16,17, 5, 8, 8,11,11, 8,
-        10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
-        12,14,14, 7,10,10,12,12,10,12,12,14,13, 9,11,12,
-        12,13,12,13,13,15,15,12,12,13,13,15, 7,10,10,12,
-        13,10,11,12,13,13,10,12,11,13,13,11,13,13,15,15,
-        12,13,12,15,14, 9,12,12,15,14,11,13,13,15,15,11,
-        12,13,15,15,13,14,14,17,19,13,13,14,16,16,10,12,
-        12,14,15,11,13,13,15,16,11,13,12,16,15,13,15,15,
-        17,18,14,15,13,16,15, 8,11,11,15,14,10,12,12,16,
-        15,10,12,12,16,16,14,15,15,18,17,13,14,15,16,18,
-         9,12,12,15,15,11,12,14,16,17,11,13,13,16,15,15,
-        15,15,17,18,14,15,16,17,17, 9,12,12,15,15,11,14,
-        13,16,16,11,13,13,16,16,15,16,15,17,18,14,16,15,
-        17,16,12,14,14,17,16,12,14,15,18,17,13,15,15,17,
-        17,15,15,18,16,20,15,16,17,18,18,11,14,14,16,17,
-        13,15,14,18,17,13,15,15,17,17,15,17,15,18,17,15,
-        17,16,19,18, 8,11,11,14,15,10,12,12,15,15,10,12,
-        12,16,16,13,14,14,17,16,14,15,15,17,17, 9,12,12,
-        15,16,11,13,13,16,16,11,12,13,16,16,14,16,15,20,
-        17,14,16,16,17,17, 9,12,12,15,16,11,13,13,16,17,
-        11,13,13,17,16,14,15,15,17,18,15,15,15,18,18,11,
-        14,14,17,16,13,15,15,17,17,13,14,14,18,17,15,16,
-        16,18,19,15,15,17,17,19,11,14,14,16,17,13,15,14,
-        17,19,13,15,14,18,17,15,17,16,18,18,15,17,15,18,
-        16,
-};
-
-static const static_codebook _16u1__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__16u1__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16u1__p3_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__16u1__p4_0[] = {
-         4, 5, 5, 8, 8, 6, 6, 7, 9, 9, 6, 6, 6, 9, 9, 9,
-        10, 9,11,11, 9, 9,10,11,11, 6, 7, 7,10, 9, 7, 7,
-         8, 9,10, 7, 7, 8,10,10,10,10,10,10,12, 9, 9,10,
-        11,12, 6, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 7,10,
-        10, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11,
-        10,10,10,12,12, 9,10,10,12,12,12,11,12,13,13,11,
-        11,12,12,13, 9,10,10,11,12, 9,10,10,12,12,10,10,
-        10,12,12,11,12,11,14,13,11,12,12,14,13, 5, 7, 7,
-        10,10, 7, 8, 8,10,10, 7, 8, 7,10,10,10,10,10,12,
-        12,10,10,10,12,12, 6, 8, 7,10,10, 7, 7, 9,10,11,
-         8, 9, 9,11,10,10,10,11,11,13,10,10,11,12,13, 6,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,10,11,10,11,
-        10,13,11,10,11,10,12,12,10,11,10,12,11,10,10,10,
-        12,13,10,11,11,13,12,11,11,13,11,14,12,12,13,14,
-        14, 9,10,10,12,13,10,11,10,13,12,10,11,11,12,13,
-        11,12,11,14,12,12,13,13,15,14, 5, 7, 7,10,10, 7,
-         7, 8,10,10, 7, 8, 8,10,10,10,10,10,11,12,10,10,
-        10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9,
-        10,11,10,11,11,12,12,10,10,11,11,13, 7, 7, 8,10,
-        10, 8, 8, 9,10,11, 7, 9, 7,11,10,10,11,11,13,12,
-        11,11,10,13,11, 9,10,10,12,12,10,11,11,13,12,10,
-        10,11,12,12,12,13,13,14,14,11,11,12,12,14,10,10,
-        11,12,12,10,11,11,12,13,10,10,10,13,12,12,13,13,
-        15,14,12,13,10,14,11, 8,10,10,12,12,10,11,10,13,
-        13, 9,10,10,12,12,12,13,13,15,14,11,12,12,13,13,
-         9,10,10,13,12,10,10,11,13,13,10,11,10,13,12,12,
-        12,13,14,15,12,13,12,15,13, 9,10,10,12,13,10,11,
-        10,13,12,10,10,11,12,13,12,14,12,15,13,12,12,13,
-        14,15,11,12,11,14,13,11,11,12,14,15,12,13,12,15,
-        14,13,11,15,11,16,13,14,14,16,15,11,12,12,14,14,
-        11,12,11,14,13,12,12,13,14,15,13,14,12,16,12,14,
-        14,14,15,15, 8,10,10,12,12, 9,10,10,12,12,10,10,
-        11,13,13,11,12,12,13,13,12,13,13,14,15, 9,10,10,
-        13,12,10,11,11,13,12,10,10,11,13,13,12,13,12,15,
-        14,12,12,13,13,16, 9, 9,10,12,13,10,10,11,12,13,
-        10,11,10,13,13,12,12,13,13,15,13,13,12,15,13,11,
-        12,12,14,14,12,13,12,15,14,11,11,12,13,14,14,14,
-        14,16,15,13,12,15,12,16,11,11,12,13,14,12,13,13,
-        14,15,10,12,11,14,13,14,15,14,16,16,13,14,11,15,
-        11,
-};
-
-static const static_codebook _16u1__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__16u1__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__16u1__p4_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16u1__p5_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
-        10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
-         9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8,
-        10, 9,11,11,12,11, 7, 8, 8, 9, 9,11,11,12,12, 9,
-        10,10,11,11,12,12,13,12, 9,10,10,11,11,12,12,12,
-        13,
-};
-
-static const static_codebook _16u1__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16u1__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16u1__p5_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p6_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__16u1__p6_0[] = {
-         3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 4, 6, 6, 8, 8,
-         9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
-         8, 8,10, 9, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 8, 7,
-         8, 8, 9, 9,10,10, 7, 8, 8, 8, 8, 9, 9,10,10, 9,
-         9, 9,10,10,10,10,11,11, 9, 9, 9,10,10,10,10,11,
-        11,
-};
-
-static const static_codebook _16u1__p6_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__16u1__p6_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16u1__p6_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__16u1__p7_0[] = {
-         1, 4, 4, 4, 8, 8, 4, 8, 8, 5,11, 9, 8,12,11, 8,
-        12,11, 5,10,11, 8,11,12, 8,11,12, 4,11,11,11,14,
-        13,10,13,13, 8,14,13,12,14,16,12,16,15, 8,14,14,
-        13,16,14,12,15,16, 4,11,11,10,14,13,11,14,14, 8,
-        15,14,12,15,15,12,14,16, 8,14,14,11,16,15,12,15,
-        13,
-};
-
-static const static_codebook _16u1__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__16u1__p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__16u1__p7_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__16u1__p7_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 5, 7, 7,
-         8, 8, 8, 8, 8, 8, 4, 5, 6, 7, 7, 8, 8, 8, 8, 8,
-         8, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 9, 9,10,
-         9,10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, 9, 8, 8, 8,
-         9, 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9,10,
-        10,10,10, 8, 8, 8, 9, 9, 9,10,10,10,10,10, 8, 8,
-         8, 9, 9,10,10,10,10,10,10,
-};
-
-static const static_codebook _16u1__p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__16u1__p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16u1__p7_1,
-        0
-};
-
-static const long _vq_quantlist__16u1__p8_0[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__16u1__p8_0[] = {
-         1, 4, 4, 5, 5, 8, 8,10,10,12,12, 4, 7, 7, 8, 8,
-         9, 9,12,11,14,13, 4, 7, 7, 7, 8, 9,10,11,11,13,
-        12, 5, 8, 8, 9, 9,11,11,12,13,15,14, 5, 7, 8, 9,
-         9,11,11,13,13,17,15, 8, 9,10,11,11,12,13,17,14,
-        17,16, 8,10, 9,11,11,12,12,13,15,15,17,10,11,11,
-        12,13,14,15,15,16,16,17, 9,11,11,12,12,14,15,17,
-        15,15,16,11,14,12,14,15,16,15,16,16,16,15,11,13,
-        13,14,14,15,15,16,16,15,16,
-};
-
-static const static_codebook _16u1__p8_0 = {
-        2, 121,
-        (long *)_vq_lengthlist__16u1__p8_0,
-        1, -524582912, 1618345984, 4, 0,
-        (long *)_vq_quantlist__16u1__p8_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p8_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__16u1__p8_1[] = {
-         2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7,
-         8, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8,
-         8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 6, 7, 7, 7,
-         7, 8, 8, 8, 8, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
-         8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 8,
-         8, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _16u1__p8_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__16u1__p8_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__16u1__p8_1,
-        0
-};
-
-static const long _vq_quantlist__16u1__p9_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__16u1__p9_0[] = {
-         1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8,
-};
-
-static const static_codebook _16u1__p9_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__16u1__p9_0,
-        1, -514071552, 1627381760, 4, 0,
-        (long *)_vq_quantlist__16u1__p9_0,
-        0
-};
-
-static const long _vq_quantlist__16u1__p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__16u1__p9_1[] = {
-         1, 6, 5, 9, 9,10,10, 6, 7, 9, 9,10,10,10,10, 5,
-        10, 8,10, 8,10,10, 8, 8,10, 9,10,10,10,10, 5, 8,
-         9,10,10,10,10, 8,10,10,10,10,10,10,10, 9,10,10,
-        10,10,10,10, 9, 9,10,10,10,10,10,10, 9, 9, 8, 9,
-        10,10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10, 8,10,10,10,10,
-        10,10,10,10,10,10,10,10,10, 6, 8, 8,10,10,10, 8,
-        10,10,10,10,10,10,10,10, 5, 8, 8,10,10,10, 9, 9,
-        10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _16u1__p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__16u1__p9_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__16u1__p9_1,
-        0
-};
-
-static const long _vq_quantlist__16u1__p9_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__16u1__p9_2[] = {
-         1, 6, 6, 7, 8, 8,11,10, 9, 9,11, 9,10, 9,11,11,
-         9, 6, 7, 6,11, 8,11, 9,10,10,11, 9,11,10,10,10,
-        11, 9, 5, 7, 7, 8, 8,10,11, 8, 8,11, 9, 9,10,11,
-         9,10,11, 8, 9, 6, 8, 8, 9, 9,10,10,11,11,11, 9,
-        11,10, 9,11, 8, 8, 8, 9, 8, 9,10,11, 9, 9,11,11,
-        10, 9, 9,11,10, 8,11, 8, 9, 8,11, 9,10, 9,10,11,
-        11,10,10, 9,10,10, 8, 8, 9,10,10,10, 9,11, 9,10,
-        11,11,11,11,10, 9,11, 9, 9,11,11,10, 8,11,11,11,
-         9,10,10,11,10,11,11, 9,11,10, 9,11,10,10,10,10,
-         9,11,10,11,10, 9, 9,10,11, 9, 8,10,11,11,10,10,
-        11, 9,11,10,11,11,10,11, 9, 9, 8,10, 8, 9,11, 9,
-         8,10,10, 9,11,10,11,10,11, 9,11, 8,10,11,11,11,
-        11,10,10,11,11,11,11,10,11,11,10, 9, 8,10,10, 9,
-        11,10,11,11,11, 9, 9, 9,11,11,11,10,10, 9, 9,10,
-         9,11,11,11,11, 8,10,11,10,11,11,10,11,11, 9, 9,
-         9,10, 9,11, 9,11,11,11,11,11,10,11,11,10,11,10,
-        11,11, 9,11,10,11,10, 9,10, 9,10,10,11,11,11,11,
-         9,10, 9,10,11,11,10,11,11,11,11,11,11,10,11,11,
-        10,
-};
-
-static const static_codebook _16u1__p9_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__16u1__p9_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__16u1__p9_2,
-        0
-};
-
-static const long _huff_lengthlist__16u1__short[] = {
-         5, 7,10, 9,11,10,15,11,13,16, 6, 4, 6, 6, 7, 7,
-        10, 9,12,16,10, 6, 5, 6, 6, 7,10,11,16,16, 9, 6,
-         7, 6, 7, 7,10, 8,14,16,11, 6, 5, 4, 5, 6, 8, 9,
-        15,16, 9, 6, 6, 5, 6, 6, 9, 8,14,16,12, 7, 6, 6,
-         5, 6, 6, 7,13,16, 8, 6, 7, 6, 5, 5, 4, 4,11,16,
-         9, 8, 9, 9, 7, 7, 6, 5,13,16,14,14,16,15,16,15,
-        16,16,16,16,
-};
-
-static const static_codebook _huff_book__16u1__short = {
-        2, 100,
-        (long *)_huff_lengthlist__16u1__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__16u2__long[] = {
-	 5, 8,10,10,10,11,11,12,14,18, 7, 5, 5, 6, 8, 9,
-	10,12,14,17, 9, 5, 4, 5, 6, 8,10,11,13,19, 9, 5,
-	 4, 4, 5, 6, 9,10,12,17, 8, 6, 5, 4, 4, 5, 7,10,
-	11,15, 8, 7, 7, 6, 5, 5, 6, 9,11,14, 8, 9, 8, 7,
-	 6, 5, 6, 7,11,14, 9,11,11, 9, 7, 6, 6, 6, 9,14,
-	11,14,15,13, 9, 8, 7, 7, 9,14,13,15,19,17,12,11,
-	10, 9,10,14,
-};
-
-static const static_codebook _huff_book__16u2__long = {
-	2, 100,
-	(long *)_huff_lengthlist__16u2__long,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__16u2_p1_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__16u2_p1_0[] = {
-	 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7,
-	 9, 9, 5, 7, 7, 7, 9, 9, 8, 9, 9, 5, 7, 7, 8, 9,
-	 9, 7, 9, 9, 7, 9, 9, 9,10,11, 9,10,10, 7, 9, 9,
-	 9,10, 9, 9,10,11, 5, 8, 7, 7, 9, 9, 8, 9, 9, 7,
-	 9, 9, 9,11,10, 9, 9,10, 7, 9, 9, 9,10,10, 9,11,
-	10,
-};
-
-static const static_codebook _16u2_p1_0 = {
-	4, 81,
-	(long *)_vq_lengthlist__16u2_p1_0,
-	1, -535822336, 1611661312, 2, 0,
-	(long *)_vq_quantlist__16u2_p1_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p2_0[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__16u2_p2_0[] = {
-	 3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9,
-	10, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
-	 8,10,10, 7, 8, 8,10,10,10,10,10,12,12, 9,10,10,
-	11,12, 5, 7, 7, 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,
-	10, 9,10,10,12,11,10,10,10,12,12, 9,10,10,12,12,
-	10,10,10,12,12, 9,10,10,12,12,12,12,12,14,14,11,
-	12,12,13,14, 9,10,10,12,12, 9,10,10,12,12,10,10,
-	10,12,12,11,12,12,14,13,12,12,12,14,13, 5, 7, 7,
-	 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
-	12,10,10,10,12,12, 7, 8, 8,11,10, 8, 9, 9,11,11,
-	 8, 9, 9,11,11,10,11,11,12,13,10,11,11,12,13, 7,
-	 8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-	10,13,12,10,11,11,13,13,10,11,10,13,12,10,11,11,
-	13,13,10,11,11,13,13,12,12,13,13,14,12,13,13,14,
-	14, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13,
-	12,13,12,14,13,12,13,13,14,15, 5, 7, 7, 9,10, 7,
-	 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10,
-	11,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9,
-	10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10,
-	10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,12,
-	10,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10,
-	10,11,12,13,12,13,13,15,14,12,12,13,12,14, 9,10,
-	11,12,13,10,11,11,13,13,10,11,11,13,13,12,13,13,
-	14,14,12,13,12,14,13, 8,10,10,12,12, 9,11,10,13,
-	12, 9,10,10,12,13,12,13,13,14,14,12,12,12,14,14,
-	 9,10,10,13,13,10,11,11,13,13,10,11,11,13,13,13,
-	13,13,14,15,12,13,13,14,15, 9,10,10,12,13,10,11,
-	10,13,13,10,11,11,12,13,12,13,12,15,14,12,13,13,
-	14,15,11,12,12,15,14,12,12,13,14,15,12,13,13,15,
-	14,13,13,15,14,16,14,14,14,16,15,11,12,12,14,14,
-	11,12,12,14,14,12,13,13,14,15,13,14,13,15,13,14,
-	14,14,15,16, 8, 9,10,12,12, 9,10,10,13,12, 9,10,
-	11,12,13,12,12,12,14,14,12,13,13,14,14, 9,10,10,
-	13,12,10,11,11,13,13,10,10,11,13,13,12,13,13,15,
-	14,12,12,13,14,15, 9,10,10,13,13,10,11,11,13,13,
-	10,11,11,13,13,12,13,13,14,14,13,13,13,15,15,11,
-	12,12,14,13,12,13,13,15,14,11,12,12,14,14,14,14,
-	14,16,15,13,13,14,13,16,11,12,12,14,14,12,13,13,
-	14,15,12,13,12,14,14,14,14,14,16,16,14,15,13,16,
-	14,
-};
-
-static const static_codebook _16u2_p2_0 = {
-	4, 625,
-	(long *)_vq_lengthlist__16u2_p2_0,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__16u2_p2_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p3_0[] = {
-	4,
-	3,
-	5,
-	2,
-	6,
-	1,
-	7,
-	0,
-	8,
-};
-
-static const long _vq_lengthlist__16u2_p3_0[] = {
-	 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 5, 6, 6, 8, 7,
-	 9, 9, 4, 5, 5, 6, 6, 7, 8, 9, 9, 6, 6, 6, 7, 7,
-	 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7,
-	 8, 8, 9, 9,11,10, 7, 7, 8, 8, 8, 9, 9,10,11, 9,
-	 9, 9,10,10,11,10,11,11, 9, 9, 9,10,10,10,11,11,
-	11,
-};
-
-static const static_codebook _16u2_p3_0 = {
-	2, 81,
-	(long *)_vq_lengthlist__16u2_p3_0,
-	1, -531628032, 1611661312, 4, 0,
-	(long *)_vq_quantlist__16u2_p3_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p4_0[] = {
-	8,
-	7,
-	9,
-	6,
-	10,
-	5,
-	11,
-	4,
-	12,
-	3,
-	13,
-	2,
-	14,
-	1,
-	15,
-	0,
-	16,
-};
-
-static const long _vq_lengthlist__16u2_p4_0[] = {
-	 2, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,11,
-	11, 5, 5, 5, 7, 6, 8, 7, 9, 9, 9, 9,10,10,11,11,
-	12,12, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 9,10,10,11,
-	11,12,12, 6, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-	11,11,12,12, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,
-	10,11,11,12,12, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,
-	11,11,11,11,12,12, 7, 7, 8, 8, 8, 9, 9, 9, 9,10,
-	10,11,11,11,11,12,12, 8, 9, 9, 9, 9, 9, 9,10,10,
-	10,10,11,11,12,12,12,12, 8, 9, 9, 9, 9, 9, 9,10,
-	10,10,10,11,11,12,12,12,12, 9, 9, 9, 9, 9,10,10,
-	10,10,10,11,11,11,12,12,13,13, 9, 9, 9, 9, 9,10,
-	10,10,10,11,10,11,11,12,12,13,13,10,10,10,10,10,
-	11,11,11,11,11,11,11,12,12,12,13,13,10,10,10,10,
-	10,11,11,11,11,11,11,12,11,12,12,13,13,11,11,11,
-	11,11,11,11,12,12,12,12,12,12,13,13,13,13,11,11,
-	11,11,11,11,11,12,12,12,12,13,12,13,13,13,13,11,
-	12,12,12,12,12,12,12,12,13,13,13,13,13,13,14,14,
-	11,12,12,12,12,12,12,12,13,13,13,13,13,13,13,14,
-	14,
-};
-
-static const static_codebook _16u2_p4_0 = {
-	2, 289,
-	(long *)_vq_lengthlist__16u2_p4_0,
-	1, -529530880, 1611661312, 5, 0,
-	(long *)_vq_quantlist__16u2_p4_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p5_0[] = {
-	1,
-	0,
-	2,
-};
-
-static const long _vq_lengthlist__16u2_p5_0[] = {
-	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 7, 9, 9, 7,
-	 9,10, 5, 8, 8, 7,10, 9, 7,10, 9, 5, 8, 8, 8,11,
-	10, 8,10,10, 7,10,10, 9, 9,12,10,12,12, 7,10,10,
-	 9,12,10,10,11,12, 5, 8, 8, 8,10,10, 8,11,11, 7,
-	11,10,10,12,11, 9,10,12, 7,10,11,10,12,12, 9,12,
-	 9,
-};
-
-static const static_codebook _16u2_p5_0 = {
-	4, 81,
-	(long *)_vq_lengthlist__16u2_p5_0,
-	1, -529137664, 1618345984, 2, 0,
-	(long *)_vq_quantlist__16u2_p5_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p5_1[] = {
-	5,
-	4,
-	6,
-	3,
-	7,
-	2,
-	8,
-	1,
-	9,
-	0,
-	10,
-};
-
-static const long _vq_lengthlist__16u2_p5_1[] = {
-	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7,
-	 7, 7, 8, 8, 8, 8, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8,
-	 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
-	 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
-	 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8,
-	 8, 8, 8, 8, 8, 9, 9, 9, 9,
-};
-
-static const static_codebook _16u2_p5_1 = {
-	2, 121,
-	(long *)_vq_lengthlist__16u2_p5_1,
-	1, -531365888, 1611661312, 4, 0,
-	(long *)_vq_quantlist__16u2_p5_1,
-	0
-};
-
-static const long _vq_quantlist__16u2_p6_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__16u2_p6_0[] = {
-	 1, 5, 4, 7, 7, 8, 8, 8, 8,10,10,11,11, 4, 6, 6,
-	 7, 7, 9, 9, 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9,
-	 9, 9, 9,10,10,11,11, 7, 8, 8, 9, 9, 9, 9,10,10,
-	11,11,12,12, 7, 7, 7, 9, 8,10, 9,10,10,11,11,12,
-	12, 8, 9, 9, 9,10,10,10,11,11,12,12,13,13, 8, 9,
-	 9,10, 9,10,10,11,11,12,12,13,13, 8, 9, 9,10,10,
-	11,11,11,11,12,12,13,13, 8, 9, 9,10,10,11,11,12,
-	11,12,12,13,13,10,10,10,11,11,12,12,12,12,13,13,
-	14,14,10,10,10,11,11,12,12,12,12,13,13,14,14,11,
-	11,11,12,12,13,13,13,13,14,14,14,14,11,11,11,12,
-	12,13,13,13,13,14,14,14,14,
-};
-
-static const static_codebook _16u2_p6_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__16u2_p6_0,
-	1, -526516224, 1616117760, 4, 0,
-	(long *)_vq_quantlist__16u2_p6_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p6_1[] = {
-	2,
-	1,
-	3,
-	0,
-	4,
-};
-
-static const long _vq_lengthlist__16u2_p6_1[] = {
-	 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-	 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _16u2_p6_1 = {
-	2, 25,
-	(long *)_vq_lengthlist__16u2_p6_1,
-	1, -533725184, 1611661312, 3, 0,
-	(long *)_vq_quantlist__16u2_p6_1,
-	0
-};
-
-static const long _vq_quantlist__16u2_p7_0[] = {
-	6,
-	5,
-	7,
-	4,
-	8,
-	3,
-	9,
-	2,
-	10,
-	1,
-	11,
-	0,
-	12,
-};
-
-static const long _vq_lengthlist__16u2_p7_0[] = {
-	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6,
-	 8, 8, 9, 9, 9, 9,10,10,11,10, 4, 6, 6, 8, 8, 9,
-	 9, 9, 9,10,10,11,11, 7, 8, 8,10, 9,10,10,10,10,
-	11,11,12,12, 7, 8, 8,10,10,10,10,10,10,11,11,12,
-	12, 8, 9, 9,10,10,11,11,11,11,12,12,13,13, 8, 9,
-	 9,10,10,11,11,11,11,12,12,13,13, 8, 9, 9,11,10,
-	11,11,12,12,13,13,14,13, 8, 9, 9,10,10,11,11,12,
-	12,13,13,13,13, 9,10,10,11,11,12,12,13,13,13,13,
-	14,14, 9,10,10,11,11,12,12,13,13,13,13,14,14,10,
-	11,11,12,12,13,13,14,13,14,14,15,14,10,11,11,12,
-	12,13,13,14,13,14,14,15,14,
-};
-
-static const static_codebook _16u2_p7_0 = {
-	2, 169,
-	(long *)_vq_lengthlist__16u2_p7_0,
-	1, -523206656, 1618345984, 4, 0,
-	(long *)_vq_quantlist__16u2_p7_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p7_1[] = {
-	5,
-	4,
-	6,
-	3,
-	7,
-	2,
-	8,
-	1,
-	9,
-	0,
-	10,
-};
-
-static const long _vq_lengthlist__16u2_p7_1[] = {
-	 2, 5, 5, 7, 7, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 7,
-	 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8,
-	 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7,
-	 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
-	 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-	 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _16u2_p7_1 = {
-	2, 121,
-	(long *)_vq_lengthlist__16u2_p7_1,
-	1, -531365888, 1611661312, 4, 0,
-	(long *)_vq_quantlist__16u2_p7_1,
-	0
-};
-
-static const long _vq_quantlist__16u2_p8_0[] = {
-	7,
-	6,
-	8,
-	5,
-	9,
-	4,
-	10,
-	3,
-	11,
-	2,
-	12,
-	1,
-	13,
-	0,
-	14,
-};
-
-static const long _vq_lengthlist__16u2_p8_0[] = {
-	 1, 4, 4, 7, 7, 8, 8, 7, 7, 9, 8,10, 9,11,11, 4,
-	 7, 6, 9, 8, 9, 9, 9, 9,10, 9,11, 9,12, 9, 4, 6,
-	 7, 8, 8, 9, 9, 9, 9,10,10,10,11,11,12, 7, 9, 8,
-	10,10,11,11,10,10,11,11,12,12,13,12, 7, 8, 8,10,
-	10,10,11,10,10,11,11,11,12,12,13, 8, 9, 9,11,11,
-	11,11,11,11,12,12,13,13,13,13, 8, 9, 9,11,11,11,
-	11,11,11,12,12,13,13,13,14, 8, 9, 9,10,10,11,11,
-	12,11,13,13,14,13,14,14, 8, 9, 9,10,10,11,11,12,
-	12,12,12,13,13,14,14, 9,10,10,11,11,12,12,13,12,
-	13,13,14,14,15,15, 9,10,10,11,11,12,12,12,13,13,
-	13,14,14,14,15,10,11,11,12,12,13,13,14,13,14,14,
-	15,14,15,15,10,11,11,12,12,13,12,13,14,14,14,14,
-	14,15,15,11,12,12,13,13,13,13,14,14,15,14,15,15,
-	16,16,11,12,12,13,13,13,13,14,14,14,15,15,15,16,
-	16,
-};
-
-static const static_codebook _16u2_p8_0 = {
-	2, 225,
-	(long *)_vq_lengthlist__16u2_p8_0,
-	1, -520986624, 1620377600, 4, 0,
-	(long *)_vq_quantlist__16u2_p8_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p8_1[] = {
-	10,
-	9,
-	11,
-	8,
-	12,
-	7,
-	13,
-	6,
-	14,
-	5,
-	15,
-	4,
-	16,
-	3,
-	17,
-	2,
-	18,
-	1,
-	19,
-	0,
-	20,
-};
-
-static const long _vq_lengthlist__16u2_p8_1[] = {
-	 3, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9,10,10,10,10, 5, 6, 6, 7, 7, 8,
-	 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
-	 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,
-	10,10,10,10, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-	 9,10, 9,10,10,10, 9,10, 9, 8, 8, 8, 9, 8, 9, 9,
-	 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10, 8, 8,
-	 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,
-	10,10,10, 8, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
-	10,10,10,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9, 9,
-	10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-	 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
-	 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10, 9, 9, 9,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10, 9, 9,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10, 9,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10, 9,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _16u2_p8_1 = {
-	2, 441,
-	(long *)_vq_lengthlist__16u2_p8_1,
-	1, -529268736, 1611661312, 5, 0,
-	(long *)_vq_quantlist__16u2_p8_1,
-	0
-};
-
-static const long _vq_quantlist__16u2_p9_0[] = {
-	7,
-	6,
-	8,
-	5,
-	9,
-	4,
-	10,
-	3,
-	11,
-	2,
-	12,
-	1,
-	13,
-	0,
-	14,
-};
-
-static const long _vq_lengthlist__16u2_p9_0[] = {
-	 1, 5, 3, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5,
-	 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 7,
-	 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-	 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-	10,
-};
-
-static const static_codebook _16u2_p9_0 = {
-	2, 225,
-	(long *)_vq_lengthlist__16u2_p9_0,
-	1, -510036736, 1631393792, 4, 0,
-	(long *)_vq_quantlist__16u2_p9_0,
-	0
-};
-
-static const long _vq_quantlist__16u2_p9_1[] = {
-	9,
-	8,
-	10,
-	7,
-	11,
-	6,
-	12,
-	5,
-	13,
-	4,
-	14,
-	3,
-	15,
-	2,
-	16,
-	1,
-	17,
-	0,
-	18,
-};
-
-static const long _vq_lengthlist__16u2_p9_1[] = {
-	 1, 4, 4, 7, 7, 7, 7, 7, 6, 9, 7,10, 8,12,12,13,
-	13,14,14, 4, 7, 7, 9, 9, 9, 8, 9, 8,10, 9,11, 9,
-	14, 9,14,10,13,11, 4, 7, 7, 9, 9, 9, 9, 8, 9,10,
-	10,11,11,12,13,12,13,14,15, 7, 9, 9,10,11,10,10,
-	10,10,11,12,13,13,13,14,17,14,15,16, 7, 9, 9,10,
-	10,10,10,10,10,11,12,13,13,14,14,15,15,18,18, 8,
-	 9, 9,11,10,11,11,11,12,13,12,14,14,16,15,15,17,
-	18,15, 8, 9, 9,10,10,11,11,11,11,13,13,14,14,15,
-	15,15,16,16,18, 7, 9, 8,10,10,11,11,12,12,14,14,
-	15,15,16,16,15,17,16,18, 8, 9, 9,10,10,11,12,12,
-	12,13,13,16,15,17,16,17,18,17,18, 9,10,10,12,11,
-	13,13,14,13,14,14,15,17,16,18,17,18,17,18, 9,10,
-	10,12,11,12,13,13,14,15,16,14,15,16,18,18,18,18,
-	17,11,11,11,13,13,14,14,16,15,15,15,16,15,15,18,
-	18,18,17,16,11,11,12,13,13,15,14,15,16,16,16,17,
-	16,15,18,17,18,16,18,12,13,13,15,15,15,16,18,16,
-	17,16,17,16,17,17,17,18,18,17,13,13,13,15,13,16,
-	15,17,16,16,16,18,18,18,18,16,17,17,18,13,15,14,
-	15,15,18,17,18,18,18,16,18,17,18,17,18,16,17,17,
-	14,14,14,15,16,17,16,18,18,18,17,18,17,18,18,18,
-	16,16,16,14,17,16,17,15,16,18,18,17,18,17,18,17,
-	18,18,18,17,18,17,15,16,15,18,15,18,17,16,18,18,
-	18,18,18,18,17,18,16,18,17,
-};
-
-static const static_codebook _16u2_p9_1 = {
-	2, 361,
-	(long *)_vq_lengthlist__16u2_p9_1,
-	1, -518287360, 1622704128, 5, 0,
-	(long *)_vq_quantlist__16u2_p9_1,
-	0
-};
-
-static const long _vq_quantlist__16u2_p9_2[] = {
-	24,
-	23,
-	25,
-	22,
-	26,
-	21,
-	27,
-	20,
-	28,
-	19,
-	29,
-	18,
-	30,
-	17,
-	31,
-	16,
-	32,
-	15,
-	33,
-	14,
-	34,
-	13,
-	35,
-	12,
-	36,
-	11,
-	37,
-	10,
-	38,
-	9,
-	39,
-	8,
-	40,
-	7,
-	41,
-	6,
-	42,
-	5,
-	43,
-	4,
-	44,
-	3,
-	45,
-	2,
-	46,
-	1,
-	47,
-	0,
-	48,
-};
-
-static const long _vq_lengthlist__16u2_p9_2[] = {
-	 2, 3, 4, 4, 4, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 7,
-	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-	 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 7, 8, 8, 8, 8, 8,
-	 8,
-};
-
-static const static_codebook _16u2_p9_2 = {
-	1, 49,
-	(long *)_vq_lengthlist__16u2_p9_2,
-	1, -526909440, 1611661312, 6, 0,
-	(long *)_vq_quantlist__16u2_p9_2,
-	0
-};
-
-static const long _huff_lengthlist__16u2__short[] = {
-	 8,11,13,13,15,16,19,19,19,19,11, 8, 8, 9, 9,11,
-	13,15,19,20,14, 8, 7, 7, 8, 9,12,13,15,20,15, 9,
-	 6, 5, 5, 7,10,12,14,18,14, 9, 7, 5, 3, 4, 7,10,
-	12,16,13,10, 8, 6, 3, 3, 5, 8,11,14,11,10, 9, 7,
-	 5, 4, 4, 6,11,14,10,10,10, 8, 6, 5, 5, 6,10,14,
-	10,10,10, 9, 8, 7, 7, 7,10,14,11,12,12,12,11,10,
-	10,10,12,16,
-};
-
-static const static_codebook _huff_book__16u2__short = {
-	2, 100,
-	(long *)_huff_lengthlist__16u2__short,
-	0, 0, 0, 0, 0,
-	NULL,
-	0
-};
-
-static const long _vq_quantlist__8u0__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8u0__p1_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
-        10,10, 5, 8, 8, 7,10,10, 8,10,10, 4, 9, 8, 8,11,
-        11, 8,11,11, 7,11,11,10,11,13,10,13,13, 7,11,11,
-        10,13,12,10,13,13, 5, 9, 8, 8,11,11, 8,11,11, 7,
-        11,11, 9,13,13,10,12,13, 7,11,11,10,13,13,10,13,
-        11,
-};
-
-static const static_codebook _8u0__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8u0__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__8u0__p1_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8u0__p2_0[] = {
-         2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 6, 7, 8, 6,
-         7, 8, 5, 7, 7, 6, 8, 8, 7, 9, 7, 5, 7, 7, 7, 9,
-         9, 7, 8, 8, 6, 9, 8, 7, 7,10, 8,10,10, 6, 8, 8,
-         8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6,
-         8, 8, 8,10,10, 8, 8,10, 6, 8, 9, 8,10,10, 7,10,
-         8,
-};
-
-static const static_codebook _8u0__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8u0__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__8u0__p2_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8u0__p3_0[] = {
-         1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
-        10, 9,11,11, 8, 9, 9,11,11, 6, 8, 8,10,10, 8,10,
-        10,11,11, 8,10,10,11,11,10,11,11,12,12,10,11,11,
-        12,13, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
-        11, 9,10,11,12,12,10,11,11,12,12, 8,11,11,14,13,
-        10,12,11,15,13,10,12,11,14,14,12,13,12,16,14,12,
-        14,12,16,15, 8,11,11,13,14,10,11,12,13,15,10,11,
-        12,13,15,11,12,13,14,15,12,12,14,14,16, 5, 8, 8,
-        11,11, 9,11,11,12,12, 8,10,11,12,12,11,12,12,15,
-        14,11,12,12,14,14, 7,11,10,13,12,10,11,12,13,14,
-        10,12,12,14,13,12,13,13,14,15,12,13,13,15,15, 7,
-        10,11,12,13,10,12,11,14,13,10,12,13,13,15,12,13,
-        12,14,14,11,13,13,15,16, 9,12,12,15,14,11,13,13,
-        15,16,11,13,13,16,16,13,14,15,15,15,12,14,15,17,
-        16, 9,12,12,14,15,11,13,13,15,16,11,13,13,16,18,
-        13,14,14,17,16,13,15,15,17,18, 5, 8, 9,11,11, 8,
-        11,11,12,12, 8,10,11,12,12,11,12,12,14,14,11,12,
-        12,14,15, 7,11,10,12,13,10,12,12,14,13,10,11,12,
-        13,14,11,13,13,15,14,12,13,13,14,15, 7,10,11,13,
-        13,10,12,12,13,14,10,12,12,13,13,11,13,13,16,16,
-        12,13,13,15,14, 9,12,12,16,15,10,13,13,15,15,11,
-        13,13,17,15,12,15,15,18,17,13,14,14,15,16, 9,12,
-        12,15,15,11,13,13,15,16,11,13,13,15,15,12,15,15,
-        16,16,13,15,14,17,15, 7,11,11,15,15,10,13,13,16,
-        15,10,13,13,15,16,14,15,15,17,19,13,15,14,15,18,
-         9,12,12,16,16,11,13,14,17,16,11,13,13,17,16,15,
-        15,16,17,19,13,15,16, 0,18, 9,12,12,16,15,11,14,
-        13,17,17,11,13,14,16,16,15,16,16,19,18,13,15,15,
-        17,19,11,14,14,19,16,12,14,15, 0,18,12,16,15,18,
-        17,15,15,18,16,19,14,15,17,19,19,11,14,14,18,19,
-        13,15,14,19,19,12,16,15,18,17,15,17,15, 0,16,14,
-        17,16,19, 0, 7,11,11,14,14,10,12,12,15,15,10,13,
-        13,16,15,13,15,15,17, 0,14,15,15,16,19, 9,12,12,
-        16,16,11,14,14,16,16,11,13,13,16,16,14,17,16,19,
-         0,14,18,17,17,19, 9,12,12,15,16,11,13,13,15,17,
-        12,14,13,19,16,13,15,15,17,19,15,17,16,17,19,11,
-        14,14,19,16,12,15,15,19,17,13,14,15,17,19,14,16,
-        17,19,19,16,15,16,17,19,11,15,14,16,16,12,15,15,
-        19, 0,12,14,15,19,19,14,16,16, 0,18,15,19,14,18,
-        16,
-};
-
-static const static_codebook _8u0__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__8u0__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8u0__p3_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8u0__p4_0[] = {
-         3, 5, 5, 8, 8, 5, 6, 7, 9, 9, 6, 7, 6, 9, 9, 9,
-         9, 9,10,11, 9, 9, 9,11,10, 6, 7, 7,10,10, 7, 7,
-         8,10,10, 7, 8, 8,10,10,10,10,10,10,11, 9,10,10,
-        11,12, 6, 7, 7,10,10, 7, 8, 8,10,10, 7, 8, 7,10,
-        10, 9,10,10,12,11,10,10,10,11,10, 9,10,10,12,11,
-        10,10,10,13,11, 9,10,10,12,12,11,11,12,12,13,11,
-        11,11,12,13, 9,10,10,12,12,10,10,11,12,12,10,10,
-        11,12,12,11,11,11,13,13,11,12,12,13,13, 5, 7, 7,
-        10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,11,12,
-        12,10,11,10,12,12, 7, 8, 8,11,11, 7, 8, 9,10,11,
-         8, 9, 9,11,11,11,10,11,10,12,10,11,11,12,13, 7,
-         8, 8,10,11, 8, 9, 8,12,10, 8, 9, 9,11,12,10,11,
-        10,13,11,10,11,11,13,12, 9,11,10,13,12,10,10,11,
-        12,12,10,11,11,13,13,12,10,13,11,14,11,12,12,15,
-        13, 9,11,11,13,13,10,11,11,13,12,10,11,11,12,14,
-        12,13,11,14,12,12,12,12,14,14, 5, 7, 7,10,10, 7,
-         8, 8,10,10, 7, 8, 8,11,10,10,11,11,12,12,10,11,
-        10,12,12, 7, 8, 8,10,11, 8, 9, 9,12,11, 8, 8, 9,
-        10,11,10,11,11,12,13,11,10,11,11,13, 6, 8, 8,10,
-        11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,11,11,12,12,
-        10,11,10,13,10, 9,11,10,13,12,10,12,11,13,13,10,
-        10,11,12,13,11,12,13,15,14,11,11,13,12,13, 9,10,
-        11,12,13,10,11,11,12,13,10,11,10,13,12,12,13,13,
-        13,14,12,12,11,14,11, 8,10,10,12,13,10,11,11,13,
-        13,10,11,10,13,13,12,13,14,15,14,12,12,12,14,13,
-         9,10,10,13,12,10,10,12,13,13,10,11,11,15,12,12,
-        12,13,15,14,12,13,13,15,13, 9,10,11,12,13,10,12,
-        10,13,12,10,11,11,12,13,12,14,12,15,13,12,12,12,
-        15,14,11,12,11,14,13,11,11,12,14,14,12,13,13,14,
-        13,13,11,15,11,15,14,14,14,16,15,11,12,12,13,14,
-        11,13,11,14,14,12,12,13,14,15,12,14,12,15,12,13,
-        15,14,16,15, 8,10,10,12,12,10,10,10,12,13,10,11,
-        11,13,13,12,12,12,13,14,13,13,13,15,15, 9,10,10,
-        12,12,10,11,11,13,12,10,10,11,13,13,12,12,12,14,
-        14,12,12,13,15,14, 9,10,10,13,12,10,10,12,12,13,
-        10,11,10,13,13,12,13,13,14,14,12,13,12,14,13,11,
-        12,12,14,13,12,13,12,14,14,10,12,12,14,14,14,14,
-        14,16,14,13,12,14,12,15,10,12,12,14,15,12,13,13,
-        14,16,11,12,11,15,14,13,14,14,14,15,13,14,11,14,
-        12,
-};
-
-static const static_codebook _8u0__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__8u0__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8u0__p4_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8u0__p5_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 7, 8, 8,
-        10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 6, 8, 8, 9, 9,
-         9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8,
-         9, 9,10,10,12,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
-        10,10,11,11,11,12,12,12, 9,10,10,11,11,12,12,12,
-        12,
-};
-
-static const static_codebook _8u0__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8u0__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8u0__p5_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__8u0__p6_0[] = {
-         1, 4, 4, 7, 7, 9, 9,11,11,12,12,16,16, 3, 6, 6,
-         9, 9,11,11,12,12,13,14,18,16, 3, 6, 7, 9, 9,11,
-        11,13,12,14,14,17,16, 7, 9, 9,11,11,12,12,14,14,
-        14,14,17,16, 7, 9, 9,11,11,13,12,13,13,14,14,17,
-         0, 9,11,11,12,13,14,14,14,13,15,14,17,17, 9,11,
-        11,12,12,14,14,13,14,14,15, 0, 0,11,12,12,15,14,
-        15,14,15,14,15,16,17, 0,11,12,13,13,13,14,14,15,
-        14,15,15, 0, 0,12,14,14,15,15,14,16,15,15,17,16,
-         0,18,13,14,14,15,14,15,14,15,16,17,16, 0, 0,17,
-        17,18, 0,16,18,16, 0, 0, 0,17, 0, 0,16, 0, 0,16,
-        16, 0,15, 0,17, 0, 0, 0, 0,
-};
-
-static const static_codebook _8u0__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__8u0__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__8u0__p6_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8u0__p6_1[] = {
-         1, 4, 4, 6, 6, 4, 6, 5, 7, 7, 4, 5, 6, 7, 7, 6,
-         7, 7, 7, 7, 6, 7, 7, 7, 7,
-};
-
-static const static_codebook _8u0__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__8u0__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8u0__p6_1,
-        0
-};
-
-static const long _vq_quantlist__8u0__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8u0__p7_0[] = {
-         1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _8u0__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8u0__p7_0,
-        1, -518803456, 1628680192, 2, 0,
-        (long *)_vq_quantlist__8u0__p7_0,
-        0
-};
-
-static const long _vq_quantlist__8u0__p7_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__8u0__p7_1[] = {
-         1, 5, 5, 5, 5,10,10,11,11,11,11,11,11,11,11, 5,
-         7, 6, 8, 8, 9,10,11,11,11,11,11,11,11,11, 6, 6,
-         7, 9, 7,11,10,11,11,11,11,11,11,11,11, 5, 6, 6,
-        11, 8,11,11,11,11,11,11,11,11,11,11, 5, 6, 6, 9,
-        10,11,10,11,11,11,11,11,11,11,11, 7,10,10,11,11,
-        11,11,11,11,11,11,11,11,11,11, 7,11, 8,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _8u0__p7_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__8u0__p7_1,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__8u0__p7_1,
-        0
-};
-
-static const long _vq_quantlist__8u0__p7_2[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__8u0__p7_2[] = {
-         1, 6, 5, 7, 7, 9, 9, 9, 9,10,12,12,10,11,11,10,
-        11,11,11,10,11, 6, 8, 8, 9, 9,10,10, 9,10,11,11,
-        10,11,11,11,11,10,11,11,11,11, 6, 7, 8, 9, 9, 9,
-        10,11,10,11,12,11,10,11,11,11,11,11,11,12,10, 8,
-         9, 9,10, 9,10,10, 9,10,10,10,10,10, 9,10,10,10,
-        10, 9,10,10, 9, 9, 9, 9,10,10, 9, 9,10,10,11,10,
-         9,12,10,11,10, 9,10,10,10, 8, 9, 9,10, 9,10, 9,
-         9,10,10, 9,10, 9,11,10,10,10,10,10, 9,10, 8, 8,
-         9, 9,10, 9,11, 9, 8, 9, 9,10,11,10,10,10,11,12,
-         9, 9,11, 8, 9, 8,11,10,11,10,10, 9,11,10,10,10,
-        10,10,10,10,11,11,11,11, 8, 9, 9, 9,10,10,10,11,
-        11,12,11,12,11,10,10,10,12,11,11,11,10, 8,10, 9,
-        11,10,10,11,12,10,11,12,11,11,12,11,12,12,10,11,
-        11,10, 9, 9,10,11,12,10,10,10,11,10,11,11,10,12,
-        12,10,11,10,11,12,10, 9,10,10,11,10,11,11,11,11,
-        11,12,11,11,11, 9,11,10,11,10,11,10, 9, 9,10,11,
-        11,11,10,10,11,12,12,11,12,11,11,11,12,12,12,12,
-        11, 9,11,11,12,10,11,11,11,11,11,11,12,11,11,12,
-        11,11,11,10,11,11, 9,11,10,11,11,11,10,10,10,11,
-        11,11,12,10,11,10,11,11,11,11,12, 9,11,10,11,11,
-        10,10,11,11, 9,11,11,12,10,10,10,10,10,11,11,10,
-         9,10,11,11,12,11,10,10,12,11,11,12,11,12,11,11,
-        10,10,11,11,10,12,11,10,11,10,11,10,10,10,11,11,
-        10,10,11,11,11,11,10,10,10,12,11,11,11,11,10, 9,
-        10,11,11,11,12,11,11,11,12,10,11,11,11, 9,10,11,
-        11,11,11,11,11,10,10,11,11,12,11,10,11,12,11,10,
-        10,11, 9,10,11,11,11,11,11,10,11,11,10,12,11,11,
-        11,12,11,11,11,10,10,11,11,
-};
-
-static const static_codebook _8u0__p7_2 = {
-        2, 441,
-        (long *)_vq_lengthlist__8u0__p7_2,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__8u0__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__8u0__single[] = {
-         4, 7,11, 9,12, 8, 7,10, 6, 4, 5, 5, 7, 5, 6,16,
-         9, 5, 5, 6, 7, 7, 9,16, 7, 4, 6, 5, 7, 5, 7,17,
-        10, 7, 7, 8, 7, 7, 8,18, 7, 5, 6, 4, 5, 4, 5,15,
-         7, 6, 7, 5, 6, 4, 5,15,12,13,18,12,17,11, 9,17,
-};
-
-static const static_codebook _huff_book__8u0__single = {
-        2, 64,
-        (long *)_huff_lengthlist__8u0__single,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__8u1__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8u1__p1_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 7, 9,10, 7,
-         9, 9, 5, 8, 8, 7,10, 9, 7, 9, 9, 5, 8, 8, 8,10,
-        10, 8,10,10, 7,10,10, 9,10,12,10,12,12, 7,10,10,
-         9,12,11,10,12,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
-        10,10,10,12,12, 9,11,12, 7,10,10,10,12,12, 9,12,
-        10,
-};
-
-static const static_codebook _8u1__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8u1__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__8u1__p1_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8u1__p2_0[] = {
-         3, 4, 5, 5, 6, 6, 5, 6, 6, 5, 7, 6, 6, 7, 8, 6,
-         7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 7, 8,
-         8, 6, 7, 7, 6, 8, 7, 7, 7, 9, 8, 9, 9, 6, 7, 8,
-         7, 9, 7, 8, 9, 9, 5, 6, 6, 6, 7, 7, 7, 8, 8, 6,
-         8, 7, 8, 9, 9, 7, 7, 9, 6, 7, 8, 8, 9, 9, 7, 9,
-         7,
-};
-
-static const static_codebook _8u1__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8u1__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__8u1__p2_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8u1__p3_0[] = {
-         1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
-        10, 9,11,11, 9, 9, 9,11,11, 6, 8, 8,10,10, 8,10,
-        10,11,11, 8, 9,10,11,11,10,11,11,12,12,10,11,11,
-        12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11,
-        11,10,11,11,12,12,10,11,11,12,12, 9,11,11,14,13,
-        10,12,11,14,14,10,12,11,14,13,12,13,13,15,14,12,
-        13,13,15,14, 8,11,11,13,14,10,11,12,13,15,10,11,
-        12,14,14,12,13,13,14,15,12,13,13,14,15, 5, 8, 8,
-        11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
-        13,11,12,12,13,14, 8,10,10,12,12, 9,11,12,13,14,
-        10,12,12,13,13,12,12,13,14,14,11,13,13,15,15, 7,
-        10,10,12,12, 9,12,11,14,12,10,11,12,13,14,12,13,
-        12,14,14,12,13,13,15,16,10,12,12,15,14,11,12,13,
-        15,15,11,13,13,15,16,14,14,15,15,16,13,14,15,17,
-        15, 9,12,12,14,15,11,13,12,15,15,11,13,13,15,15,
-        13,14,13,15,14,13,14,14,17, 0, 5, 8, 8,11,11, 8,
-        10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
-        12,14,14, 7,10,10,12,12,10,12,12,13,13, 9,11,12,
-        12,13,11,12,13,15,15,11,12,13,14,15, 8,10,10,12,
-        12,10,12,11,13,13,10,12,11,13,13,11,13,13,15,14,
-        12,13,12,15,13, 9,12,12,14,14,11,13,13,16,15,11,
-        12,13,16,15,13,14,15,16,16,13,13,15,15,16,10,12,
-        12,15,14,11,13,13,14,16,11,13,13,15,16,13,15,15,
-        16,17,13,15,14,16,15, 8,11,11,14,15,10,12,12,15,
-        15,10,12,12,15,16,14,15,15,16,17,13,14,14,16,16,
-         9,12,12,15,15,11,13,14,15,17,11,13,13,15,16,14,
-        15,16,19,17,13,15,15, 0,17, 9,12,12,15,15,11,14,
-        13,16,15,11,13,13,15,16,15,15,15,18,17,13,15,15,
-        17,17,11,15,14,18,16,12,14,15,17,17,12,15,15,18,
-        18,15,15,16,15,19,14,16,16, 0, 0,11,14,14,16,17,
-        12,15,14,18,17,12,15,15,18,18,15,17,15,18,16,14,
-        16,16,18,18, 7,11,11,14,14,10,12,12,15,15,10,12,
-        13,15,15,13,14,15,16,16,14,15,15,18,18, 9,12,12,
-        15,15,11,13,13,16,15,11,12,13,16,16,14,15,15,17,
-        16,15,16,16,17,17, 9,12,12,15,15,11,13,13,15,17,
-        11,14,13,16,15,13,15,15,17,17,15,15,15,18,17,11,
-        14,14,17,15,12,14,15,17,18,13,13,15,17,17,14,16,
-        16,19,18,16,15,17,17, 0,11,14,14,17,17,12,15,15,
-        18, 0,12,15,14,18,16,14,17,17,19, 0,16,18,15, 0,
-        16,
-};
-
-static const static_codebook _8u1__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__8u1__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8u1__p3_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__8u1__p4_0[] = {
-         4, 5, 5, 9, 9, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 9,
-         9, 9,11,11, 9, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 7,
-         8, 9,10, 7, 7, 8, 9,10, 9, 9,10,10,11, 9, 9,10,
-        10,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 7,10,
-         9, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11,
-         9,10,10,12,11, 9,10,10,12,12,11,11,12,12,13,11,
-        11,12,12,13, 9, 9,10,12,11, 9,10,10,12,12,10,10,
-        10,12,12,11,12,11,13,12,11,12,11,13,12, 6, 7, 7,
-         9, 9, 7, 8, 8,10,10, 7, 8, 7,10, 9,10,10,10,12,
-        12,10,10,10,12,11, 7, 8, 7,10,10, 7, 7, 9,10,11,
-         8, 9, 9,11,10,10,10,11,10,12,10,10,11,12,12, 7,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 8, 9,11,11,10,11,
-        10,12,11,10,11,11,12,12, 9,10,10,12,12, 9,10,10,
-        12,12,10,11,11,13,12,11,10,12,10,14,12,12,12,13,
-        14, 9,10,10,12,12, 9,11,10,12,12,10,11,11,12,12,
-        11,12,11,14,12,12,12,12,14,14, 5, 7, 7, 9, 9, 7,
-         7, 7, 9,10, 7, 8, 8,10,10,10,10,10,11,11,10,10,
-        10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9,
-        10,11,10,10,10,11,12,10,10,11,11,13, 6, 7, 8,10,
-        10, 8, 9, 9,10,10, 7, 9, 7,11,10,10,11,10,12,12,
-        10,11,10,12,10, 9,10,10,12,12,10,11,11,13,12, 9,
-        10,10,12,12,12,12,12,14,13,11,11,12,11,14, 9,10,
-        10,11,12,10,11,11,12,13, 9,10,10,12,12,12,12,12,
-        14,13,11,12,10,14,11, 9, 9,10,11,12, 9,10,10,12,
-        12, 9,10,10,12,12,12,12,12,14,14,11,12,12,13,12,
-         9,10, 9,12,12, 9,10,11,12,13,10,11,10,13,11,12,
-        12,13,13,14,12,12,12,13,13, 9,10,10,12,12,10,11,
-        10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,12,
-        13,14,11,12,11,14,13,10,10,11,13,13,12,12,12,14,
-        13,12,10,14,10,15,13,14,14,14,14,11,11,12,13,14,
-        10,12,11,13,13,12,12,12,13,15,12,13,11,15,12,13,
-        13,14,14,14, 9,10, 9,12,12, 9,10,10,12,12,10,10,
-        10,12,12,11,11,12,12,13,12,12,12,14,14, 9,10,10,
-        12,12,10,11,10,13,12,10,10,11,12,13,12,12,12,14,
-        13,12,12,13,13,14, 9,10,10,12,13,10,10,11,11,12,
-         9,11,10,13,12,12,12,12,13,14,12,13,12,14,13,11,
-        12,11,13,13,12,13,12,14,13,10,11,12,13,13,13,13,
-        13,14,15,12,11,14,12,14,11,11,12,12,13,12,12,12,
-        13,14,10,12,10,14,13,13,13,13,14,15,12,14,11,15,
-        10,
-};
-
-static const static_codebook _8u1__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__8u1__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__8u1__p4_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8u1__p5_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 5, 8, 7, 8, 8,
-        10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
-         9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
-         9, 9,10,10,12,11, 8, 8, 8, 9, 9,10,10,11,11, 9,
-        10,10,11,11,11,11,13,12, 9,10,10,11,11,12,12,12,
-        13,
-};
-
-static const static_codebook _8u1__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8u1__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8u1__p5_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p6_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__8u1__p6_0[] = {
-         3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 5, 6, 6, 7, 7,
-         9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
-         8, 8, 9, 9, 6, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7,
-         8, 8, 8, 9,10,10, 7, 7, 7, 8, 8, 9, 8,10,10, 9,
-         9, 9, 9, 9,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,
-        10,
-};
-
-static const static_codebook _8u1__p6_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__8u1__p6_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8u1__p6_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__8u1__p7_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,10,10, 8,
-        10,10, 5, 9, 9, 7,10,10, 8,10,10, 4,10,10, 9,12,
-        12, 9,11,11, 7,12,11,10,11,13,10,13,13, 7,12,12,
-        10,13,12,10,13,13, 4,10,10, 9,12,12, 9,12,12, 7,
-        12,12,10,13,13,10,12,13, 7,11,12,10,13,13,10,13,
-        11,
-};
-
-static const static_codebook _8u1__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__8u1__p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__8u1__p7_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__8u1__p7_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7,
-         8, 8, 9, 9, 9, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 9,
-         9, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9,
-         9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
-        10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9,
-         9, 9, 9, 9, 9,10,10,10,10,
-};
-
-static const static_codebook _8u1__p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__8u1__p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8u1__p7_1,
-        0
-};
-
-static const long _vq_quantlist__8u1__p8_0[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__8u1__p8_0[] = {
-         1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7,
-         9, 9,11,11,13,12, 4, 6, 6, 7, 7, 9, 9,11,11,12,
-        12, 6, 7, 7, 9, 9,11,11,12,12,13,13, 6, 7, 7, 9,
-         9,11,11,12,12,13,13, 8, 9, 9,11,11,12,12,13,13,
-        14,14, 8, 9, 9,11,11,12,12,13,13,14,14, 9,11,11,
-        12,12,13,13,14,14,15,15, 9,11,11,12,12,13,13,14,
-        14,15,14,11,12,12,13,13,14,14,15,15,16,16,11,12,
-        12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _8u1__p8_0 = {
-        2, 121,
-        (long *)_vq_lengthlist__8u1__p8_0,
-        1, -524582912, 1618345984, 4, 0,
-        (long *)_vq_quantlist__8u1__p8_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p8_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__8u1__p8_1[] = {
-         2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 7,
-         7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8,
-         8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
-         7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
-         8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9,
-         8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8,
-         8, 8, 8, 8, 8, 9, 9, 9, 9,
-};
-
-static const static_codebook _8u1__p8_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__8u1__p8_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__8u1__p8_1,
-        0
-};
-
-static const long _vq_quantlist__8u1__p9_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__8u1__p9_0[] = {
-         1, 4, 4,11,11,11,11,11,11,11,11,11,11,11,11, 3,
-        11, 8,11,11,11,11,11,11,11,11,11,11,11,11, 3, 9,
-         9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _8u1__p9_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__8u1__p9_0,
-        1, -514071552, 1627381760, 4, 0,
-        (long *)_vq_quantlist__8u1__p9_0,
-        0
-};
-
-static const long _vq_quantlist__8u1__p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__8u1__p9_1[] = {
-         1, 4, 4, 7, 7, 9, 9, 7, 7, 8, 8,10,10,11,11, 4,
-         7, 7, 9, 9,10,10, 8, 8,10,10,10,11,10,11, 4, 7,
-         7, 9, 9,10,10, 8, 8,10, 9,11,11,11,11, 7, 9, 9,
-        12,12,11,12,10,10,11,10,12,11,11,11, 7, 9, 9,11,
-        11,13,12, 9, 9,11,10,11,11,12,11, 9,10,10,12,12,
-        14,14,10,10,11,12,12,11,11,11, 9,10,11,11,13,14,
-        13,10,11,11,11,12,11,12,12, 7, 8, 8,10, 9,11,10,
-        11,12,12,11,12,14,12,13, 7, 8, 8, 9,10,10,11,12,
-        12,12,11,12,12,12,13, 9, 9, 9,11,11,13,12,12,12,
-        12,11,12,12,13,12, 8,10,10,11,10,11,12,12,12,12,
-        12,12,14,12,12, 9,11,11,11,12,12,12,12,13,13,12,
-        12,13,13,12,10,11,11,12,11,12,12,12,11,12,13,12,
-        12,12,13,11,11,12,12,12,13,12,12,11,12,13,13,12,
-        12,13,12,11,12,12,13,13,12,13,12,13,13,13,13,14,
-        13,
-};
-
-static const static_codebook _8u1__p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__8u1__p9_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__8u1__p9_1,
-        0
-};
-
-static const long _vq_quantlist__8u1__p9_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__8u1__p9_2[] = {
-         2, 5, 4, 6, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-         9,10,10, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10, 8, 8, 8, 9, 9, 9, 9,10,10,10, 9,
-        10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,
-        10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
-         9,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10,
-         9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9,
-        10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-         9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _8u1__p9_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__8u1__p9_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__8u1__p9_2,
-        0
-};
-
-static const long _huff_lengthlist__8u1__single[] = {
-         4, 7,13, 9,15, 9,16, 8,10,13, 7, 5, 8, 6, 9, 7,
-        10, 7,10,11,11, 6, 7, 8, 8, 9, 9, 9,12,16, 8, 5,
-         8, 6, 8, 6, 9, 7,10,12,11, 7, 7, 7, 6, 7, 7, 7,
-        11,15, 7, 5, 8, 6, 7, 5, 7, 6, 9,13,13, 9, 9, 8,
-         6, 6, 5, 5, 9,14, 8, 6, 8, 6, 6, 4, 5, 3, 5,13,
-         9, 9,11, 8,10, 7, 8, 4, 5,12,11,16,17,15,17,12,
-        13, 8, 8,15,
-};
-
-static const static_codebook _huff_book__8u1__single = {
-        2, 100,
-        (long *)_huff_lengthlist__8u1__single,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u0__long[] = {
-         5, 8,13,10,17,11,11,15, 7, 2, 4, 5, 8, 7, 9,16,
-        13, 4, 3, 5, 6, 8,11,20,10, 4, 5, 5, 7, 6, 8,18,
-        15, 7, 6, 7, 8,10,14,20,10, 6, 7, 6, 9, 7, 8,17,
-         9, 8,10, 8,10, 5, 4,11,12,17,19,14,16,10, 7,12,
-};
-
-static const static_codebook _huff_book__44u0__long = {
-        2, 64,
-        (long *)_huff_lengthlist__44u0__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u0__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u0__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
-        10,10, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
-        11, 8,11,11, 8,12,11,11,13,13,11,13,14, 7,11,11,
-        10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,12, 8,
-        11,11,11,13,13,10,12,13, 8,11,11,11,14,13,11,14,
-        13,
-};
-
-static const static_codebook _44u0__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u0__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u0__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u0__p2_0[] = {
-         2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6,
-         8, 8, 5, 7, 7, 6, 8, 8, 7, 8, 8, 4, 7, 7, 7, 8,
-         8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
-         8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6,
-         8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
-         9,
-};
-
-static const static_codebook _44u0__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u0__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u0__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u0__p3_0[] = {
-         1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9,
-        10, 9,12,12, 9, 9,10,12,12, 6, 8, 8,11,10, 8,10,
-        10,11,11, 8, 9,10,11,11,10,11,11,14,13,10,11,11,
-        13,13, 5, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
-        11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14,
-        10,12,12,15,14,10,12,11,15,14,13,14,14,16,16,12,
-        14,13,17,15, 9,11,11,14,15,10,11,12,14,16,10,11,
-        12,14,16,12,13,14,16,16,13,13,15,15,18, 5, 8, 8,
-        11,11, 8,10,10,12,12, 8,10,10,12,13,11,12,12,14,
-        14,11,12,12,15,15, 8,10,10,13,13,10,12,12,13,13,
-        10,12,12,14,14,12,13,13,15,15,12,13,13,16,16, 7,
-        10,10,12,12,10,12,11,13,13,10,12,12,13,14,12,13,
-        12,15,14,12,13,13,16,16,10,12,12,17,16,12,13,13,
-        16,15,11,13,13,17,17,15,15,15,16,17,14,15,15,19,
-        19,10,12,12,15,16,11,13,12,15,18,11,13,13,16,16,
-        14,15,15,17,17,14,15,15,17,19, 5, 8, 8,11,11, 8,
-        10,10,12,12, 8,10,10,12,12,11,12,12,16,15,11,12,
-        12,14,15, 7,10,10,13,13,10,12,12,14,13,10,11,12,
-        13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,13,
-        13,10,12,12,14,14,10,12,12,13,13,12,13,13,16,16,
-        12,13,13,15,15,10,12,12,16,15,11,13,13,17,16,11,
-        12,13,16,15,13,15,15,19,17,14,15,14,17,16,10,12,
-        12,16,16,11,13,13,16,17,12,13,13,15,17,14,15,15,
-        17,19,14,15,15,17,17, 8,11,11,16,16,10,13,12,17,
-        17,10,12,13,16,16,15,17,16,20,19,14,15,17,18,19,
-         9,12,12,16,17,11,13,14,17,18,11,13,13,19,18,16,
-        17,18,19,19,15,16,16,19,19, 9,12,12,16,17,11,14,
-        13,18,17,11,13,13,17,17,16,17,16,20,19,14,16,16,
-        18,18,12,15,15,19,17,14,15,16, 0,20,13,15,16,20,
-        17,18,16,20, 0, 0,15,16,19,20, 0,12,15,14,18,19,
-        13,16,15,20,19,13,16,15,20,18,17,18,17, 0,20,16,
-        17,16, 0, 0, 8,11,11,16,15,10,12,12,17,17,10,13,
-        13,17,16,14,16,15,18,20,15,16,16,19,19, 9,12,12,
-        16,16,11,13,13,17,16,11,13,14,17,18,15,15,16,20,
-        20,16,16,17,19,19, 9,13,12,16,17,11,14,13,17,17,
-        11,14,14,18,17,14,16,15,18,19,16,17,18,18,19,12,
-        14,15,19,18,13,15,16,18, 0,13,14,15, 0, 0,16,16,
-        17,20, 0,17,17,20,20, 0,12,15,15,19,20,13,15,15,
-         0, 0,14,16,15, 0, 0,15,18,16, 0, 0,17,18,16, 0,
-        19,
-};
-
-static const static_codebook _44u0__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u0__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u0__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u0__p4_0[] = {
-         4, 5, 5, 9, 9, 5, 6, 6, 9, 9, 5, 6, 6, 9, 9, 9,
-        10, 9,12,12, 9, 9,10,12,12, 5, 7, 7,10,10, 7, 7,
-         8,10,10, 6, 7, 8,10,10,10,10,10,11,13,10, 9,10,
-        12,13, 5, 7, 7,10,10, 6, 8, 7,10,10, 7, 8, 7,10,
-        10, 9,10,10,12,12,10,10,10,13,11, 9,10,10,13,13,
-        10,11,10,13,13,10,10,10,13,13,12,12,13,14,14,12,
-        12,13,14,14, 9,10,10,13,13,10,10,10,13,13,10,10,
-        10,13,13,12,13,12,15,14,12,13,12,15,15, 5, 7, 6,
-        10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,13,
-        13,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11,
-         8, 9, 9,11,11,11,10,11,11,14,11,11,11,13,13, 6,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,14,11,10,11,11,13,13,10,11,11,14,13,10,10,11,
-        14,13,10,11,11,14,14,12,11,13,12,16,13,14,14,15,
-        15,10,10,11,13,14,10,11,10,14,13,10,11,11,14,14,
-        12,13,12,15,13,13,13,14,15,16, 5, 7, 7,10,10, 7,
-         8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,13,10,10,
-        11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,10,11,11,13,13,10,10,11,11,13, 6, 8, 8,10,
-        11, 8, 9, 9,11,11, 8, 9, 8,12,10,10,11,11,13,13,
-        10,11,10,14,11,10,10,10,14,13,10,11,11,14,13,10,
-        10,11,13,13,12,14,14,16,16,12,12,13,13,15,10,11,
-        11,13,14,10,11,11,14,15,10,11,10,13,13,13,14,13,
-        16,16,12,13,11,15,12, 9,10,10,13,13,10,11,11,14,
-        13,10,10,11,13,14,13,14,13,16,16,13,13,13,15,16,
-         9,10,10,13,13,10,10,11,13,14,10,11,11,15,13,13,
-        13,14,14,18,13,13,14,16,15, 9,10,10,13,14,10,11,
-        10,14,13,10,11,11,13,14,13,14,13,16,15,13,13,14,
-        15,16,12,13,12,16,14,11,11,13,15,15,13,14,13,16,
-        15,15,12,16,12,17,14,15,15,17,17,12,13,13,14,16,
-        11,13,11,16,15,12,13,14,15,16,14,15,13, 0,14,14,
-        16,16, 0, 0, 9,10,10,13,13,10,11,10,14,14,10,11,
-        11,13,13,12,13,13,14,16,13,14,14,16,16, 9,10,10,
-        14,14,11,11,11,14,13,10,10,11,14,14,13,13,13,16,
-        16,13,13,14,14,17, 9,10,10,13,14,10,11,11,13,15,
-        10,11,10,14,14,13,13,13,14,17,13,14,13,17,14,12,
-        13,13,16,14,13,14,13,16,15,12,12,13,15,16,15,15,
-        16,18,16,15,13,15,14, 0,12,12,13,14,16,13,13,14,
-        15,16,11,12,11,16,14,15,16,16,17,17,14,15,12,17,
-        12,
-};
-
-static const static_codebook _44u0__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u0__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u0__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u0__p5_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
-         9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
-         9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 8, 8,
-         9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
-         9, 9,10,10,11,11,12,12, 9, 9, 9,10,11,11,11,12,
-        12,
-};
-
-static const static_codebook _44u0__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u0__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u0__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u0__p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8,10, 9,11,10,14,13, 4, 6, 5,
-         8, 8, 9, 9,11,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
-         9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
-        12,12,16,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15,
-        15, 9,10,10,10,10,11,11,12,12,12,12,15,15, 9,10,
-         9,10,11,11,11,12,12,12,13,15,15,10,10,11,11,11,
-        12,12,13,12,13,13,16,15,10,11,11,11,11,12,12,13,
-        12,13,13,16,17,11,11,12,12,12,13,13,13,14,14,15,
-        17,17,11,11,12,12,12,13,13,13,14,14,14,16,18,14,
-        15,15,15,15,16,16,16,16,17,18, 0, 0,14,15,15,15,
-        15,17,16,17,18,17,17,18, 0,
-};
-
-static const static_codebook _44u0__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u0__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u0__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u0__p6_1[] = {
-         2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
-         6, 6, 6, 6, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44u0__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u0__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u0__p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u0__p7_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u0__p7_0[] = {
-         1, 4, 4,11,11, 9,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11, 9,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _44u0__p7_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u0__p7_0,
-        1, -518709248, 1626677248, 3, 0,
-        (long *)_vq_quantlist__44u0__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u0__p7_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u0__p7_1[] = {
-         1, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 5, 7, 7,
-         8, 7, 7, 7, 9, 8,10, 9,10,11, 5, 7, 7, 8, 8, 7,
-         7, 8, 9,10,10,11,11, 6, 8, 8, 9, 9, 9, 9,11,10,
-        12,12,15,12, 6, 8, 8, 9, 9, 9, 9,11,11,12,11,14,
-        12, 7, 8, 8,10,10,12,12,13,13,13,15,13,13, 7, 8,
-         8,10,10,11,11,13,12,14,15,15,15, 9,10,10,11,12,
-        13,13,14,15,14,15,14,15, 8,10,10,12,12,14,14,15,
-        14,14,15,15,14,10,12,12,14,14,15,14,15,15,15,14,
-        15,15,10,12,12,13,14,15,14,15,15,14,15,15,15,12,
-        15,13,15,14,15,15,15,15,15,15,15,15,13,13,15,15,
-        15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _44u0__p7_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u0__p7_1,
-        1, -523010048, 1618608128, 4, 0,
-        (long *)_vq_quantlist__44u0__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u0__p7_2[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u0__p7_2[] = {
-         2, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 5, 5, 6,
-         7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 6, 5, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, 8, 8, 8, 9, 8,
-         9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8,
-         8, 9, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,
-         9, 9, 9,10, 9, 9,10,10, 9,
-};
-
-static const static_codebook _44u0__p7_2 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u0__p7_2,
-        1, -531103744, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u0__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__44u0__short[] = {
-        12,13,14,13,17,12,15,17, 5, 5, 6,10,10,11,15,16,
-         4, 3, 3, 7, 5, 7,10,16, 7, 7, 7,10, 9,11,12,16,
-         6, 5, 5, 9, 5, 6,10,16, 8, 7, 7, 9, 6, 7, 9,16,
-        11, 7, 3, 6, 4, 5, 8,16,12, 9, 4, 8, 5, 7, 9,16,
-};
-
-static const static_codebook _huff_book__44u0__short = {
-        2, 64,
-        (long *)_huff_lengthlist__44u0__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u1__long[] = {
-         5, 8,13,10,17,11,11,15, 7, 2, 4, 5, 8, 7, 9,16,
-        13, 4, 3, 5, 6, 8,11,20,10, 4, 5, 5, 7, 6, 8,18,
-        15, 7, 6, 7, 8,10,14,20,10, 6, 7, 6, 9, 7, 8,17,
-         9, 8,10, 8,10, 5, 4,11,12,17,19,14,16,10, 7,12,
-};
-
-static const static_codebook _huff_book__44u1__long = {
-        2, 64,
-        (long *)_huff_lengthlist__44u1__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u1__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u1__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
-        10,10, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
-        11, 8,11,11, 8,12,11,11,13,13,11,13,14, 7,11,11,
-        10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,12, 8,
-        11,11,11,13,13,10,12,13, 8,11,11,11,14,13,11,14,
-        13,
-};
-
-static const static_codebook _44u1__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u1__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u1__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u1__p2_0[] = {
-         2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6,
-         8, 8, 5, 7, 7, 6, 8, 8, 7, 8, 8, 4, 7, 7, 7, 8,
-         8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
-         8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6,
-         8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
-         9,
-};
-
-static const static_codebook _44u1__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u1__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u1__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u1__p3_0[] = {
-         1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9,
-        10, 9,12,12, 9, 9,10,12,12, 6, 8, 8,11,10, 8,10,
-        10,11,11, 8, 9,10,11,11,10,11,11,14,13,10,11,11,
-        13,13, 5, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
-        11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14,
-        10,12,12,15,14,10,12,11,15,14,13,14,14,16,16,12,
-        14,13,17,15, 9,11,11,14,15,10,11,12,14,16,10,11,
-        12,14,16,12,13,14,16,16,13,13,15,15,18, 5, 8, 8,
-        11,11, 8,10,10,12,12, 8,10,10,12,13,11,12,12,14,
-        14,11,12,12,15,15, 8,10,10,13,13,10,12,12,13,13,
-        10,12,12,14,14,12,13,13,15,15,12,13,13,16,16, 7,
-        10,10,12,12,10,12,11,13,13,10,12,12,13,14,12,13,
-        12,15,14,12,13,13,16,16,10,12,12,17,16,12,13,13,
-        16,15,11,13,13,17,17,15,15,15,16,17,14,15,15,19,
-        19,10,12,12,15,16,11,13,12,15,18,11,13,13,16,16,
-        14,15,15,17,17,14,15,15,17,19, 5, 8, 8,11,11, 8,
-        10,10,12,12, 8,10,10,12,12,11,12,12,16,15,11,12,
-        12,14,15, 7,10,10,13,13,10,12,12,14,13,10,11,12,
-        13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,13,
-        13,10,12,12,14,14,10,12,12,13,13,12,13,13,16,16,
-        12,13,13,15,15,10,12,12,16,15,11,13,13,17,16,11,
-        12,13,16,15,13,15,15,19,17,14,15,14,17,16,10,12,
-        12,16,16,11,13,13,16,17,12,13,13,15,17,14,15,15,
-        17,19,14,15,15,17,17, 8,11,11,16,16,10,13,12,17,
-        17,10,12,13,16,16,15,17,16,20,19,14,15,17,18,19,
-         9,12,12,16,17,11,13,14,17,18,11,13,13,19,18,16,
-        17,18,19,19,15,16,16,19,19, 9,12,12,16,17,11,14,
-        13,18,17,11,13,13,17,17,16,17,16,20,19,14,16,16,
-        18,18,12,15,15,19,17,14,15,16, 0,20,13,15,16,20,
-        17,18,16,20, 0, 0,15,16,19,20, 0,12,15,14,18,19,
-        13,16,15,20,19,13,16,15,20,18,17,18,17, 0,20,16,
-        17,16, 0, 0, 8,11,11,16,15,10,12,12,17,17,10,13,
-        13,17,16,14,16,15,18,20,15,16,16,19,19, 9,12,12,
-        16,16,11,13,13,17,16,11,13,14,17,18,15,15,16,20,
-        20,16,16,17,19,19, 9,13,12,16,17,11,14,13,17,17,
-        11,14,14,18,17,14,16,15,18,19,16,17,18,18,19,12,
-        14,15,19,18,13,15,16,18, 0,13,14,15, 0, 0,16,16,
-        17,20, 0,17,17,20,20, 0,12,15,15,19,20,13,15,15,
-         0, 0,14,16,15, 0, 0,15,18,16, 0, 0,17,18,16, 0,
-        19,
-};
-
-static const static_codebook _44u1__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u1__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u1__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u1__p4_0[] = {
-         4, 5, 5, 9, 9, 5, 6, 6, 9, 9, 5, 6, 6, 9, 9, 9,
-        10, 9,12,12, 9, 9,10,12,12, 5, 7, 7,10,10, 7, 7,
-         8,10,10, 6, 7, 8,10,10,10,10,10,11,13,10, 9,10,
-        12,13, 5, 7, 7,10,10, 6, 8, 7,10,10, 7, 8, 7,10,
-        10, 9,10,10,12,12,10,10,10,13,11, 9,10,10,13,13,
-        10,11,10,13,13,10,10,10,13,13,12,12,13,14,14,12,
-        12,13,14,14, 9,10,10,13,13,10,10,10,13,13,10,10,
-        10,13,13,12,13,12,15,14,12,13,12,15,15, 5, 7, 6,
-        10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,13,
-        13,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11,
-         8, 9, 9,11,11,11,10,11,11,14,11,11,11,13,13, 6,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,14,11,10,11,11,13,13,10,11,11,14,13,10,10,11,
-        14,13,10,11,11,14,14,12,11,13,12,16,13,14,14,15,
-        15,10,10,11,13,14,10,11,10,14,13,10,11,11,14,14,
-        12,13,12,15,13,13,13,14,15,16, 5, 7, 7,10,10, 7,
-         8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,13,10,10,
-        11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,10,11,11,13,13,10,10,11,11,13, 6, 8, 8,10,
-        11, 8, 9, 9,11,11, 8, 9, 8,12,10,10,11,11,13,13,
-        10,11,10,14,11,10,10,10,14,13,10,11,11,14,13,10,
-        10,11,13,13,12,14,14,16,16,12,12,13,13,15,10,11,
-        11,13,14,10,11,11,14,15,10,11,10,13,13,13,14,13,
-        16,16,12,13,11,15,12, 9,10,10,13,13,10,11,11,14,
-        13,10,10,11,13,14,13,14,13,16,16,13,13,13,15,16,
-         9,10,10,13,13,10,10,11,13,14,10,11,11,15,13,13,
-        13,14,14,18,13,13,14,16,15, 9,10,10,13,14,10,11,
-        10,14,13,10,11,11,13,14,13,14,13,16,15,13,13,14,
-        15,16,12,13,12,16,14,11,11,13,15,15,13,14,13,16,
-        15,15,12,16,12,17,14,15,15,17,17,12,13,13,14,16,
-        11,13,11,16,15,12,13,14,15,16,14,15,13, 0,14,14,
-        16,16, 0, 0, 9,10,10,13,13,10,11,10,14,14,10,11,
-        11,13,13,12,13,13,14,16,13,14,14,16,16, 9,10,10,
-        14,14,11,11,11,14,13,10,10,11,14,14,13,13,13,16,
-        16,13,13,14,14,17, 9,10,10,13,14,10,11,11,13,15,
-        10,11,10,14,14,13,13,13,14,17,13,14,13,17,14,12,
-        13,13,16,14,13,14,13,16,15,12,12,13,15,16,15,15,
-        16,18,16,15,13,15,14, 0,12,12,13,14,16,13,13,14,
-        15,16,11,12,11,16,14,15,16,16,17,17,14,15,12,17,
-        12,
-};
-
-static const static_codebook _44u1__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u1__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u1__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u1__p5_0[] = {
-         1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
-         9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
-         9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 8, 8,
-         9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
-         9, 9,10,10,11,11,12,12, 9, 9, 9,10,11,11,11,12,
-        12,
-};
-
-static const static_codebook _44u1__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u1__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u1__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u1__p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8,10, 9,11,10,14,13, 4, 6, 5,
-         8, 8, 9, 9,11,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
-         9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
-        12,12,16,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15,
-        15, 9,10,10,10,10,11,11,12,12,12,12,15,15, 9,10,
-         9,10,11,11,11,12,12,12,13,15,15,10,10,11,11,11,
-        12,12,13,12,13,13,16,15,10,11,11,11,11,12,12,13,
-        12,13,13,16,17,11,11,12,12,12,13,13,13,14,14,15,
-        17,17,11,11,12,12,12,13,13,13,14,14,14,16,18,14,
-        15,15,15,15,16,16,16,16,17,18, 0, 0,14,15,15,15,
-        15,17,16,17,18,17,17,18, 0,
-};
-
-static const static_codebook _44u1__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u1__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u1__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u1__p6_1[] = {
-         2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
-         6, 6, 6, 6, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44u1__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u1__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u1__p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u1__p7_0[] = {
-        3,
-        2,
-        4,
-        1,
-        5,
-        0,
-        6,
-};
-
-static const long _vq_lengthlist__44u1__p7_0[] = {
-         1, 3, 2, 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8,
-};
-
-static const static_codebook _44u1__p7_0 = {
-        2, 49,
-        (long *)_vq_lengthlist__44u1__p7_0,
-        1, -518017024, 1626677248, 3, 0,
-        (long *)_vq_quantlist__44u1__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u1__p7_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u1__p7_1[] = {
-         1, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 5, 7, 7,
-         8, 7, 7, 7, 9, 8,10, 9,10,11, 5, 7, 7, 8, 8, 7,
-         7, 8, 9,10,10,11,11, 6, 8, 8, 9, 9, 9, 9,11,10,
-        12,12,15,12, 6, 8, 8, 9, 9, 9, 9,11,11,12,11,14,
-        12, 7, 8, 8,10,10,12,12,13,13,13,15,13,13, 7, 8,
-         8,10,10,11,11,13,12,14,15,15,15, 9,10,10,11,12,
-        13,13,14,15,14,15,14,15, 8,10,10,12,12,14,14,15,
-        14,14,15,15,14,10,12,12,14,14,15,14,15,15,15,14,
-        15,15,10,12,12,13,14,15,14,15,15,14,15,15,15,12,
-        15,13,15,14,15,15,15,15,15,15,15,15,13,13,15,15,
-        15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _44u1__p7_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u1__p7_1,
-        1, -523010048, 1618608128, 4, 0,
-        (long *)_vq_quantlist__44u1__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u1__p7_2[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u1__p7_2[] = {
-         2, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 5, 5, 6,
-         7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 6, 5, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, 8, 8, 8, 9, 8,
-         9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8,
-         8, 9, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,
-         9, 9, 9,10, 9, 9,10,10, 9,
-};
-
-static const static_codebook _44u1__p7_2 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u1__p7_2,
-        1, -531103744, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u1__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__44u1__short[] = {
-        12,13,14,13,17,12,15,17, 5, 5, 6,10,10,11,15,16,
-         4, 3, 3, 7, 5, 7,10,16, 7, 7, 7,10, 9,11,12,16,
-         6, 5, 5, 9, 5, 6,10,16, 8, 7, 7, 9, 6, 7, 9,16,
-        11, 7, 3, 6, 4, 5, 8,16,12, 9, 4, 8, 5, 7, 9,16,
-};
-
-static const static_codebook _huff_book__44u1__short = {
-        2, 64,
-        (long *)_huff_lengthlist__44u1__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u2__long[] = {
-         5, 9,14,12,15,13,10,13, 7, 4, 5, 6, 8, 7, 8,12,
-        13, 4, 3, 5, 5, 6, 9,15,12, 6, 5, 6, 6, 6, 7,14,
-        14, 7, 4, 6, 4, 6, 8,15,12, 6, 6, 5, 5, 5, 6,14,
-         9, 7, 8, 6, 7, 5, 4,10,10,13,14,14,15,10, 6, 8,
-};
-
-static const static_codebook _huff_book__44u2__long = {
-        2, 64,
-        (long *)_huff_lengthlist__44u2__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u2__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u2__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
-        10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
-        11, 8,11,11, 8,11,11,11,13,14,11,13,13, 7,11,11,
-        10,13,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 8,
-        11,11,11,14,13,10,12,13, 8,11,11,11,13,13,11,13,
-        13,
-};
-
-static const static_codebook _44u2__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u2__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u2__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u2__p2_0[] = {
-         2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
-         8, 8, 5, 6, 6, 6, 8, 7, 7, 8, 8, 5, 6, 6, 7, 8,
-         8, 6, 8, 8, 6, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
-         7,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
-         8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
-         9,
-};
-
-static const static_codebook _44u2__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u2__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u2__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u2__p3_0[] = {
-         2, 4, 4, 7, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
-         9, 9,12,11, 8, 9, 9,11,12, 5, 7, 7,10,10, 7, 9,
-         9,11,11, 7, 9, 9,10,11,10,11,11,13,13, 9,10,11,
-        12,13, 5, 7, 7,10,10, 7, 9, 9,11,10, 7, 9, 9,11,
-        11, 9,11,10,13,13,10,11,11,13,13, 8,10,10,14,13,
-        10,11,11,15,14, 9,11,11,15,14,13,14,13,16,14,12,
-        13,13,15,16, 8,10,10,13,14, 9,11,11,14,15,10,11,
-        11,14,15,12,13,13,15,15,12,13,14,15,16, 5, 7, 7,
-        10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14,
-        13,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
-         9,11,11,13,13,12,13,12,14,14,11,12,13,15,15, 7,
-         9, 9,12,12, 8,11,10,13,12, 9,11,11,13,13,11,13,
-        12,15,13,11,13,13,15,16, 9,12,11,15,15,11,12,12,
-        16,15,11,12,13,16,16,13,14,15,16,15,13,15,15,17,
-        17, 9,11,11,14,15,10,12,12,15,15,11,13,12,15,16,
-        13,15,14,16,16,13,15,15,17,19, 5, 7, 7,10,10, 7,
-         9, 9,12,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
-        11,13,14, 7, 9, 9,12,12, 9,11,11,13,13, 9,10,11,
-        12,13,11,13,12,16,15,11,12,12,14,15, 7, 9, 9,12,
-        12, 9,11,11,13,13, 9,11,11,13,12,11,13,12,15,16,
-        12,13,13,15,14, 9,11,11,15,14,11,13,12,16,15,10,
-        11,12,15,15,13,14,14,18,17,13,14,14,15,17,10,11,
-        11,14,15,11,13,12,15,17,11,13,12,15,16,13,15,14,
-        18,17,14,15,15,16,18, 7,10,10,14,14,10,12,12,15,
-        15,10,12,12,15,15,14,15,15,18,17,13,15,15,16,16,
-         9,11,11,16,15,11,13,13,16,18,11,13,13,16,16,15,
-        16,16, 0, 0,14,15,16,18,17, 9,11,11,15,15,10,13,
-        12,17,16,11,12,13,16,17,14,15,16,19,19,14,15,15,
-         0,20,12,14,14, 0, 0,13,14,16,19,18,13,15,16,20,
-        17,16,18, 0, 0, 0,15,16,17,18,19,11,14,14, 0,19,
-        12,15,14,17,17,13,15,15, 0, 0,16,17,15,20,19,15,
-        17,16,19, 0, 8,10,10,14,15,10,12,11,15,15,10,11,
-        12,16,15,13,14,14,19,17,14,15,15, 0, 0, 9,11,11,
-        16,15,11,13,13,17,16,10,12,13,16,17,14,15,15,18,
-        18,14,15,16,20,19, 9,12,12, 0,15,11,13,13,16,17,
-        11,13,13,19,17,14,16,16,18,17,15,16,16,17,19,11,
-        14,14,18,18,13,14,15, 0, 0,12,14,15,19,18,15,16,
-        19, 0,19,15,16,19,19,17,12,14,14,16,19,13,15,15,
-         0,17,13,15,14,18,18,15,16,15, 0,18,16,17,17, 0,
-         0,
-};
-
-static const static_codebook _44u2__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u2__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u2__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u2__p4_0[] = {
-         4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
-         9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
-         8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10,
-        11,12, 5, 7, 7, 9, 9, 6, 8, 7,10,10, 7, 8, 8,10,
-        10, 9,10,10,12,11, 9,10,10,12,11, 9,10,10,12,12,
-        10,10,10,13,12, 9,10,10,12,13,12,12,12,14,14,11,
-        12,12,13,14, 9,10,10,12,12, 9,10,10,12,13,10,10,
-        10,12,13,11,12,12,14,13,12,12,12,14,13, 5, 7, 7,
-        10, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
-        12,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11,
-         8, 9, 9,11,11,10,11,11,12,13,10,11,11,13,13, 6,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,13,11,10,11,11,13,13, 9,10,10,13,13,10,11,11,
-        13,13,10,11,11,14,13,12,11,13,12,15,12,13,13,15,
-        15, 9,10,10,12,13,10,11,10,13,13,10,11,11,13,13,
-        12,13,11,15,13,12,13,13,15,15, 5, 7, 7, 9,10, 7,
-         8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10,
-        11,12,12, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10,
-        11, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,11,13,13,
-        10,11,11,13,12, 9,10,10,13,12,10,11,11,14,13,10,
-        10,11,13,13,12,13,13,15,15,12,11,13,12,14, 9,10,
-        10,12,13,10,11,11,13,14,10,11,11,13,13,12,13,13,
-        15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13,
-        13, 9,10,10,13,13,12,13,13,15,15,12,12,12,14,14,
-         9,10,10,13,13,10,11,11,13,14,10,11,11,14,12,13,
-        13,14,14,16,12,13,13,15,14, 9,10,10,13,13,10,11,
-        10,14,13,10,11,11,13,14,12,14,13,16,14,13,13,13,
-        14,15,11,13,12,15,14,11,12,13,14,15,12,13,13,16,
-        15,14,12,15,12,16,14,15,15,17,16,11,12,12,14,15,
-        11,13,11,15,14,12,13,13,15,16,13,15,12,17,13,14,
-        15,15,16,16, 8, 9, 9,12,12, 9,10,10,13,13, 9,10,
-        10,13,13,12,13,12,14,14,12,13,13,15,15, 9,10,10,
-        13,13,10,11,11,14,13,10,10,11,13,14,12,13,13,15,
-        14,12,12,14,14,16, 9,10,10,13,13,10,11,11,13,14,
-        10,11,11,14,13,13,13,13,15,15,13,14,13,16,14,11,
-        12,12,14,14,12,13,13,16,15,11,12,13,14,15,14,15,
-        15,16,16,14,13,15,13,17,11,12,12,14,15,12,13,13,
-        15,16,11,13,12,15,15,14,15,14,16,16,14,15,12,17,
-        13,
-};
-
-static const static_codebook _44u2__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u2__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u2__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u2__p5_0[] = {
-         1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 8, 8, 8,
-        10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
-         9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
-         9, 9,10,11,12,12, 8, 8, 8, 9, 9,10,10,12,12,10,
-        10,10,11,11,12,12,13,13,10,10,10,11,11,12,12,13,
-        13,
-};
-
-static const static_codebook _44u2__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u2__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u2__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u2__p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8,10,10,11,11,14,13, 4, 6, 5,
-         8, 8, 9, 9,11,10,12,11,15,14, 4, 5, 6, 8, 8, 9,
-         9,11,11,11,11,14,14, 6, 8, 8,10, 9,11,11,11,11,
-        12,12,15,15, 6, 8, 8, 9, 9,11,11,11,12,12,12,15,
-        15, 8,10,10,11,11,11,11,12,12,13,13,15,16, 8,10,
-        10,11,11,11,11,12,12,13,13,16,16,10,11,11,12,12,
-        12,12,13,13,13,13,17,16,10,11,11,12,12,12,12,13,
-        13,13,14,16,17,11,12,12,13,13,13,13,14,14,15,14,
-        18,17,11,12,12,13,13,13,13,14,14,14,15,19,18,14,
-        15,15,15,15,16,16,18,19,18,18, 0, 0,14,15,15,16,
-        15,17,17,16,18,17,18, 0, 0,
-};
-
-static const static_codebook _44u2__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u2__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u2__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u2__p6_1[] = {
-         2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
-         6, 5, 6, 6, 5, 5, 6, 6, 6,
-};
-
-static const static_codebook _44u2__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u2__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u2__p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u2__p7_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u2__p7_0[] = {
-         1, 3, 2,12,12,12,12,12,12, 4,12,12,12,12,12,12,
-        12,12, 5,12,12,12,12,12,12,12,12,12,12,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,
-};
-
-static const static_codebook _44u2__p7_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u2__p7_0,
-        1, -516612096, 1626677248, 4, 0,
-        (long *)_vq_quantlist__44u2__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u2__p7_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u2__p7_1[] = {
-         1, 4, 4, 7, 6, 7, 6, 8, 7, 9, 7, 9, 8, 4, 7, 6,
-         8, 8, 9, 8,10, 9,10,10,11,11, 4, 7, 7, 8, 8, 8,
-         8, 9,10,11,11,11,11, 6, 8, 8,10,10,10,10,11,11,
-        12,12,12,12, 7, 8, 8,10,10,10,10,11,11,12,12,13,
-        13, 7, 9, 9,11,10,12,12,13,13,14,13,14,14, 7, 9,
-         9,10,11,11,12,13,13,13,13,16,14, 9,10,10,12,12,
-        13,13,14,14,15,16,15,16, 9,10,10,12,12,12,13,14,
-        14,14,15,16,15,10,12,12,13,13,15,13,16,16,15,17,
-        17,17,10,11,11,12,14,14,14,15,15,17,17,15,17,11,
-        12,12,14,14,14,15,15,15,17,16,17,17,10,12,12,13,
-        14,14,14,17,15,17,17,17,17,
-};
-
-static const static_codebook _44u2__p7_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u2__p7_1,
-        1, -523010048, 1618608128, 4, 0,
-        (long *)_vq_quantlist__44u2__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u2__p7_2[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u2__p7_2[] = {
-         2, 5, 5, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 5, 6, 6,
-         7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 6, 7, 7, 8,
-         7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, 8, 8, 8, 8, 8,
-         9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 7, 8,
-         8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44u2__p7_2 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u2__p7_2,
-        1, -531103744, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u2__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__44u2__short[] = {
-        13,15,17,17,15,15,12,17,11, 9, 7,10,10, 9,12,17,
-        10, 6, 3, 6, 5, 7,10,17,15,10, 6, 9, 8, 9,11,17,
-        15, 8, 4, 7, 3, 5, 9,16,16,10, 5, 8, 4, 5, 8,16,
-        13,11, 5, 8, 3, 3, 5,14,13,12, 7,10, 5, 5, 7,14,
-};
-
-static const static_codebook _huff_book__44u2__short = {
-        2, 64,
-        (long *)_huff_lengthlist__44u2__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u3__long[] = {
-         6, 9,13,12,14,11,10,13, 8, 4, 5, 7, 8, 7, 8,12,
-        11, 4, 3, 5, 5, 7, 9,14,11, 6, 5, 6, 6, 6, 7,13,
-        13, 7, 5, 6, 4, 5, 7,14,11, 7, 6, 6, 5, 5, 6,13,
-         9, 7, 8, 6, 7, 5, 3, 9, 9,12,13,12,14,10, 6, 7,
-};
-
-static const static_codebook _huff_book__44u3__long = {
-        2, 64,
-        (long *)_huff_lengthlist__44u3__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u3__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u3__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8,
-        10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
-        11, 8,11,11, 8,11,11,11,13,14,11,14,14, 8,11,11,
-        10,14,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 7,
-        11,11,11,14,14,10,12,14, 8,11,11,11,14,14,11,14,
-        13,
-};
-
-static const static_codebook _44u3__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u3__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u3__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u3__p2_0[] = {
-         2, 5, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
-         8, 8, 5, 6, 6, 6, 8, 8, 7, 8, 8, 5, 7, 6, 7, 8,
-         8, 6, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
-         8,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
-         8, 8, 8,10,10, 8, 8,10, 7, 8, 8, 8,10,10, 8,10,
-         9,
-};
-
-static const static_codebook _44u3__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u3__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u3__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u3__p3_0[] = {
-         2, 4, 4, 7, 7, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
-         9, 9,12,12, 8, 9, 9,11,12, 5, 7, 7,10,10, 7, 9,
-         9,11,11, 7, 9, 9,10,11,10,11,11,13,13, 9,10,11,
-        13,13, 5, 7, 7,10,10, 7, 9, 9,11,10, 7, 9, 9,11,
-        11, 9,11,10,13,13,10,11,11,14,13, 8,10,10,14,13,
-        10,11,11,15,14, 9,11,11,14,14,13,14,13,16,16,12,
-        13,13,15,15, 8,10,10,13,14, 9,11,11,14,14,10,11,
-        11,14,15,12,13,13,15,15,13,14,14,15,16, 5, 7, 7,
-        10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14,
-        14,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
-         9,11,11,13,13,12,12,13,15,15,11,12,13,15,16, 7,
-         9, 9,11,11, 8,11,10,13,12, 9,11,11,13,13,11,13,
-        12,15,13,11,13,13,15,16, 9,12,11,15,14,11,12,13,
-        16,15,11,13,13,15,16,14,14,15,17,16,13,15,16, 0,
-        17, 9,11,11,15,15,10,13,12,15,15,11,13,13,15,16,
-        13,15,13,16,15,14,16,15, 0,19, 5, 7, 7,10,10, 7,
-         9, 9,11,11, 7, 9, 9,11,11,10,12,11,14,14,10,11,
-        12,14,14, 7, 9, 9,12,12, 9,11,11,14,13, 9,10,11,
-        12,13,11,13,13,16,16,11,12,13,13,16, 7, 9, 9,12,
-        12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,15,15,
-        12,13,12,15,14, 9,11,11,15,14,11,13,12,16,16,10,
-        12,12,15,15,13,15,15,17,19,13,14,15,16,17,10,12,
-        12,15,15,11,13,13,16,16,11,13,13,15,16,13,15,15,
-         0, 0,14,15,15,16,16, 8,10,10,14,14,10,12,12,15,
-        15,10,12,11,15,16,14,15,15,19,20,13,14,14,18,16,
-         9,11,11,15,15,11,13,13,17,16,11,13,13,16,16,15,
-        17,17,20,20,14,15,16,17,20, 9,11,11,15,15,10,13,
-        12,16,15,11,13,13,15,17,14,16,15,18, 0,14,16,15,
-        18,20,12,14,14, 0, 0,14,14,16, 0, 0,13,16,15, 0,
-         0,17,17,18, 0, 0,16,17,19,19, 0,12,14,14,18, 0,
-        12,16,14, 0,17,13,15,15,18, 0,16,18,17, 0,17,16,
-        18,17, 0, 0, 7,10,10,14,14,10,12,11,15,15,10,12,
-        12,16,15,13,15,15,18, 0,14,15,15,17, 0, 9,11,11,
-        15,15,11,13,13,16,16,11,12,13,16,16,14,15,16,17,
-        17,14,16,16,16,18, 9,11,12,16,16,11,13,13,17,17,
-        11,14,13,20,17,15,16,16,19, 0,15,16,17, 0,19,11,
-        13,14,17,16,14,15,15,20,18,13,14,15,17,19,16,18,
-        18, 0,20,16,16,19,17, 0,12,15,14,17, 0,14,15,15,
-        18,19,13,16,15,19,20,15,18,18, 0,20,17, 0,16, 0,
-         0,
-};
-
-static const static_codebook _44u3__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u3__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u3__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u3__p4_0[] = {
-         4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
-         9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
-         8,10,10, 7, 7, 8,10,10, 9,10,10,11,12, 9,10,10,
-        11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10,
-        10, 9,10, 9,12,11, 9,10,10,12,11, 9,10, 9,12,12,
-         9,10,10,13,12, 9,10,10,12,13,12,12,12,14,14,11,
-        12,12,13,14, 9, 9,10,12,12, 9,10,10,12,12, 9,10,
-        10,12,13,11,12,11,14,13,12,12,12,14,13, 5, 7, 7,
-         9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
-        12, 9,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11,
-         8, 9, 9,11,11,11,11,11,12,13,10,11,11,13,13, 6,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,13,11,10,11,11,13,13, 9,11,10,13,12,10,11,11,
-        13,13,10,11,11,13,13,12,12,13,12,15,12,13,13,15,
-        15, 9,10,10,12,13,10,11,10,13,12,10,11,11,13,14,
-        12,13,11,15,13,12,13,13,15,15, 5, 7, 7, 9, 9, 7,
-         8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12,10,10,
-        11,12,12, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10,
-        10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,13,
-        11,11,11,13,12, 9,10,10,13,12,10,11,11,14,13,10,
-        10,11,12,13,12,13,13,15,15,12,11,13,13,14, 9,10,
-        11,12,13,10,11,11,13,13,10,11,11,13,13,12,13,13,
-        15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13,
-        13, 9,10,10,13,13,12,13,13,15,14,12,12,12,14,13,
-         9,10,10,13,12,10,11,11,13,13,10,11,11,14,12,13,
-        13,14,14,16,12,13,13,15,15, 9,10,10,13,13,10,11,
-        10,14,13,10,11,11,13,14,12,14,13,15,14,13,13,13,
-        15,15,11,13,12,15,14,11,12,13,14,15,12,13,13,16,
-        14,14,12,15,12,16,14,15,15,17,15,11,12,12,14,14,
-        11,13,11,15,14,12,13,13,15,15,13,15,12,17,13,14,
-        15,15,16,16, 8, 9, 9,12,12, 9,10,10,12,13, 9,10,
-        10,13,13,12,12,12,14,14,12,13,13,15,15, 9,10,10,
-        13,12,10,11,11,14,13,10,10,11,13,14,12,13,13,15,
-        15,12,12,13,14,16, 9,10,10,13,13,10,11,11,13,14,
-        10,11,11,14,13,12,13,13,14,15,13,14,13,16,14,11,
-        12,12,14,14,12,13,13,15,14,11,12,13,14,15,14,15,
-        15,16,16,13,13,15,13,16,11,12,12,14,15,12,13,13,
-        14,15,11,13,12,15,14,14,15,15,16,16,14,15,12,16,
-        13,
-};
-
-static const static_codebook _44u3__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u3__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u3__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u3__p5_0[] = {
-         2, 3, 3, 6, 6, 7, 7, 9, 9, 4, 5, 5, 7, 7, 8, 8,
-        10,10, 4, 5, 5, 7, 7, 8, 8,10,10, 6, 7, 7, 8, 8,
-         9, 9,11,10, 6, 7, 7, 8, 8, 9, 9,10,10, 7, 8, 8,
-         9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
-        10,10,11,10,11,11,12,12, 9,10,10,10,10,11,11,12,
-        12,
-};
-
-static const static_codebook _44u3__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u3__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u3__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u3__p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 9, 9,10,11,13,14, 4, 6, 5,
-         8, 8, 9, 9,10,10,11,11,14,14, 4, 6, 6, 8, 8, 9,
-         9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
-        12,12,15,15, 6, 8, 8, 9, 9,10,11,11,11,12,12,15,
-        15, 8, 9, 9,11,10,11,11,12,12,13,13,15,16, 8, 9,
-         9,10,11,11,11,12,12,13,13,16,16,10,10,11,11,11,
-        12,12,13,13,13,14,17,16, 9,10,11,12,11,12,12,13,
-        13,13,13,16,18,11,12,11,12,12,13,13,13,14,15,14,
-        17,17,11,11,12,12,12,13,13,13,14,14,15,18,17,14,
-        15,15,15,15,16,16,17,17,19,18, 0,20,14,15,14,15,
-        15,16,16,16,17,18,16,20,18,
-};
-
-static const static_codebook _44u3__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u3__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u3__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u3__p6_1[] = {
-         2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
-         6, 5, 6, 6, 5, 5, 6, 6, 6,
-};
-
-static const static_codebook _44u3__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u3__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u3__p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u3__p7_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u3__p7_0[] = {
-         1, 3, 3,10,10,10,10,10,10, 4,10,10,10,10,10,10,
-        10,10, 4,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9,
-};
-
-static const static_codebook _44u3__p7_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u3__p7_0,
-        1, -515907584, 1627381760, 4, 0,
-        (long *)_vq_quantlist__44u3__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u3__p7_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u3__p7_1[] = {
-         1, 4, 4, 6, 6, 7, 6, 8, 7, 9, 8,10, 9,11,11, 4,
-         7, 7, 8, 7, 9, 9,10,10,11,11,11,11,12,12, 4, 7,
-         7, 7, 7, 9, 9,10,10,11,11,12,12,12,11, 6, 8, 8,
-         9, 9,10,10,11,11,12,12,13,12,13,13, 6, 8, 8, 9,
-         9,10,11,11,11,12,12,13,14,13,13, 8, 9, 9,11,11,
-        12,12,12,13,14,13,14,14,14,15, 8, 9, 9,11,11,11,
-        12,13,14,13,14,15,17,14,15, 9,10,10,12,12,13,13,
-        13,14,15,15,15,16,16,16, 9,11,11,12,12,13,13,14,
-        14,14,15,16,16,16,16,10,12,12,13,13,14,14,15,15,
-        15,16,17,17,17,17,10,12,11,13,13,15,14,15,14,16,
-        17,16,16,16,16,11,13,12,14,14,14,14,15,16,17,16,
-        17,17,17,17,11,13,12,14,14,14,15,17,16,17,17,17,
-        17,17,17,12,13,13,15,16,15,16,17,17,16,16,17,17,
-        17,17,12,13,13,15,15,15,16,17,17,17,16,17,16,17,
-        17,
-};
-
-static const static_codebook _44u3__p7_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u3__p7_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44u3__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u3__p7_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44u3__p7_2[] = {
-         2, 5, 5, 7, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-        10,10, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
-         9,10, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-        10,10,10,10, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,
-         9,10,10,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10, 7, 8, 8, 9, 8, 9, 9, 9, 9,10,
-         9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9,10,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9,10,
-         9,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,
-         9,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
-         9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,11, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,11, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-         9,10,10,10,10,10,10,10,10,10,10,10,11,11,11,10,
-        11,
-};
-
-static const static_codebook _44u3__p7_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44u3__p7_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u3__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__44u3__short[] = {
-        14,14,14,15,13,15,12,16,10, 8, 7, 9, 9, 8,12,16,
-        10, 5, 4, 6, 5, 6, 9,16,14, 8, 6, 8, 7, 8,10,16,
-        14, 7, 4, 6, 3, 5, 8,16,15, 9, 5, 7, 4, 4, 7,16,
-        13,10, 6, 7, 4, 3, 4,13,13,12, 7, 9, 5, 5, 6,12,
-};
-
-static const static_codebook _huff_book__44u3__short = {
-        2, 64,
-        (long *)_huff_lengthlist__44u3__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u4__long[] = {
-         3, 8,12,12,13,12,11,13, 5, 4, 6, 7, 8, 8, 9,13,
-         9, 5, 4, 5, 5, 7, 9,13, 9, 6, 5, 6, 6, 7, 8,12,
-        12, 7, 5, 6, 4, 5, 8,13,11, 7, 6, 6, 5, 5, 6,12,
-        10, 8, 8, 7, 7, 5, 3, 8,10,12,13,12,12, 9, 6, 7,
-};
-
-static const static_codebook _huff_book__44u4__long = {
-        2, 64,
-        (long *)_huff_lengthlist__44u4__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u4__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u4__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8,
-        10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
-        11, 8,11,11, 8,11,11,11,13,14,11,15,14, 8,11,11,
-        10,13,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 7,
-        11,11,11,15,14,10,12,14, 8,11,11,11,14,14,11,14,
-        13,
-};
-
-static const static_codebook _44u4__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u4__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u4__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u4__p2_0[] = {
-         2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
-         8, 8, 5, 6, 6, 6, 8, 8, 7, 8, 8, 5, 7, 6, 6, 8,
-         8, 6, 8, 8, 6, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
-         8,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 6, 8, 8, 6,
-         8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
-         9,
-};
-
-static const static_codebook _44u4__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u4__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u4__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u4__p3_0[] = {
-         2, 4, 4, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
-        10, 9,12,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9,
-         9,11,11, 7, 9, 9,11,11,10,12,11,14,14, 9,10,11,
-        13,14, 5, 7, 7,10,10, 7, 9, 9,11,11, 7, 9, 9,11,
-        11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,14,13,
-        10,12,12,15,14, 9,11,11,15,14,13,14,14,17,17,12,
-        14,14,16,16, 8,10,10,14,14, 9,11,11,14,15,10,12,
-        12,14,15,12,14,13,16,16,13,14,15,15,18, 4, 7, 7,
-        10,10, 7, 9, 9,12,11, 7, 9, 9,11,12,10,12,11,15,
-        14,10,11,12,14,15, 7, 9, 9,12,12, 9,11,12,13,13,
-         9,11,12,13,13,12,13,13,15,16,11,13,13,15,16, 7,
-         9, 9,12,12, 9,11,10,13,12, 9,11,12,13,14,11,13,
-        12,16,14,12,13,13,15,16,10,12,12,16,15,11,13,13,
-        17,16,11,13,13,17,16,14,15,15,17,17,14,16,16,18,
-        20, 9,11,11,15,16,11,13,12,16,16,11,13,13,16,17,
-        14,15,14,18,16,14,16,16,17,20, 5, 7, 7,10,10, 7,
-         9, 9,12,11, 7, 9,10,11,12,10,12,11,15,15,10,12,
-        12,14,14, 7, 9, 9,12,12, 9,12,11,14,13, 9,10,11,
-        12,13,12,13,14,16,16,11,12,13,14,16, 7, 9, 9,12,
-        12, 9,12,11,13,13, 9,12,11,13,13,11,13,13,16,16,
-        12,13,13,16,15, 9,11,11,16,14,11,13,13,16,16,11,
-        12,13,16,16,14,16,16,17,17,13,14,15,16,17,10,12,
-        12,15,15,11,13,13,16,17,11,13,13,16,16,14,16,15,
-        19,19,14,15,15,17,18, 8,10,10,14,14,10,12,12,15,
-        15,10,12,12,16,16,14,16,15,20,19,13,15,15,17,16,
-         9,12,12,16,16,11,13,13,16,18,11,14,13,16,17,16,
-        17,16,20, 0,15,16,18,18,20, 9,11,11,15,15,11,14,
-        12,17,16,11,13,13,17,17,15,17,15,20,20,14,16,16,
-        17, 0,13,15,14,18,16,14,15,16, 0,18,14,16,16, 0,
-         0,18,16, 0, 0,20,16,18,18, 0, 0,12,14,14,17,18,
-        13,15,14,20,18,14,16,15,19,19,16,20,16, 0,18,16,
-        19,17,19, 0, 8,10,10,14,14,10,12,12,16,15,10,12,
-        12,16,16,13,15,15,18,17,14,16,16,19, 0, 9,11,11,
-        16,15,11,14,13,18,17,11,12,13,17,18,14,17,16,18,
-        18,15,16,17,18,18, 9,12,12,16,16,11,13,13,16,18,
-        11,14,13,17,17,15,16,16,18,20,16,17,17,20,20,12,
-        14,14,18,17,14,16,16, 0,19,13,14,15,18, 0,16, 0,
-         0, 0, 0,16,16, 0,19,20,13,15,14, 0, 0,14,16,16,
-        18,19,14,16,15, 0,20,16,20,18, 0,20,17,20,17, 0,
-         0,
-};
-
-static const static_codebook _44u4__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u4__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u4__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u4__p4_0[] = {
-         4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
-         9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
-         8,10,10, 7, 7, 8,10,10, 9,10,10,11,12, 9,10,10,
-        11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10,
-        10, 9,10,10,12,11, 9,10,10,12,11, 9,10, 9,12,12,
-         9,10,10,13,12, 9,10,10,12,12,12,12,12,14,14,11,
-        12,12,13,14, 9, 9,10,12,12, 9,10,10,13,13, 9,10,
-        10,12,13,11,12,12,14,13,11,12,12,14,14, 5, 7, 7,
-         9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
-        12, 9,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11,
-         8, 9, 9,11,11,11,11,11,12,13,10,11,11,13,13, 6,
-         8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,13,11,10,11,11,13,13, 9,11,10,13,12,10,11,11,
-        13,14,10,11,11,14,13,12,12,13,12,15,12,13,13,15,
-        15, 9,10,10,12,13,10,11,10,13,12,10,11,11,13,14,
-        12,13,11,15,13,13,13,13,15,15, 5, 7, 7, 9, 9, 7,
-         8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12,10,10,
-        11,12,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10,
-        11, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,11,13,13,
-        11,12,11,13,12, 9,10,10,13,12,10,11,11,14,13,10,
-        10,11,12,13,12,13,13,15,15,12,11,13,13,14, 9,10,
-        11,12,13,10,11,11,13,14,10,11,11,13,13,12,13,13,
-        15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13,
-        13, 9,10,10,13,13,12,13,13,15,15,12,12,12,14,14,
-         9,10,10,13,13,10,11,11,13,14,10,11,11,14,13,13,
-        13,14,14,16,13,13,13,15,15, 9,10,10,13,13,10,11,
-        10,14,13,10,11,11,13,14,12,14,13,16,14,12,13,13,
-        14,15,11,12,12,15,14,11,12,13,14,15,12,13,13,16,
-        15,14,12,15,12,16,14,15,15,16,16,11,12,12,14,14,
-        11,13,12,15,14,12,13,13,15,16,13,15,13,17,13,14,
-        15,15,16,17, 8, 9, 9,12,12, 9,10,10,12,13, 9,10,
-        10,13,13,12,12,12,14,14,12,13,13,15,15, 9,10,10,
-        13,12,10,11,11,14,13,10,10,11,13,14,13,13,13,15,
-        15,12,13,14,14,16, 9,10,10,13,13,10,11,11,13,14,
-        10,11,11,14,14,13,13,13,15,15,13,14,13,16,14,11,
-        12,12,15,14,12,13,13,16,15,11,12,13,14,15,14,15,
-        15,17,16,13,13,15,13,16,11,12,13,14,15,13,13,13,
-        15,16,11,13,12,15,14,14,15,15,16,16,14,15,12,17,
-        13,
-};
-
-static const static_codebook _44u4__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u4__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u4__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u4__p5_0[] = {
-         2, 3, 3, 6, 6, 7, 7, 9, 9, 4, 5, 5, 7, 7, 8, 8,
-        10, 9, 4, 5, 5, 7, 7, 8, 8,10,10, 6, 7, 7, 8, 8,
-         9, 9,11,10, 6, 7, 7, 8, 8, 9, 9,10,11, 7, 8, 8,
-         9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
-        10,10,11,10,11,11,12,12, 9,10,10,10,11,11,11,12,
-        12,
-};
-
-static const static_codebook _44u4__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u4__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u4__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u4__p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 9, 9,11,10,13,13, 4, 6, 5,
-         8, 8, 9, 9,10,10,11,11,14,14, 4, 6, 6, 8, 8, 9,
-         9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
-        12,12,15,15, 6, 8, 8, 9, 9,10,11,11,11,12,12,15,
-        15, 8, 9, 9,11,10,11,11,12,12,13,13,16,16, 8, 9,
-         9,10,10,11,11,12,12,13,13,16,16,10,10,10,12,11,
-        12,12,13,13,14,14,16,16,10,10,10,11,12,12,12,13,
-        13,13,14,16,17,11,12,11,12,12,13,13,14,14,15,14,
-        18,17,11,11,12,12,12,13,13,14,14,14,15,19,18,14,
-        15,14,15,15,17,16,17,17,17,17,21, 0,14,15,15,16,
-        16,16,16,17,17,18,17,20,21,
-};
-
-static const static_codebook _44u4__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u4__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u4__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u4__p6_1[] = {
-         2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
-         6, 5, 6, 6, 5, 5, 6, 6, 6,
-};
-
-static const static_codebook _44u4__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u4__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u4__p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u4__p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u4__p7_0[] = {
-         1, 3, 3,12,12,12,12,12,12,12,12,12,12, 3,12,11,
-        12,12,12,12,12,12,12,12,12,12, 4,11,10,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44u4__p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u4__p7_0,
-        1, -514332672, 1627381760, 4, 0,
-        (long *)_vq_quantlist__44u4__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u4__p7_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u4__p7_1[] = {
-         1, 4, 4, 6, 6, 7, 7, 9, 8,10, 8,10, 9,11,11, 4,
-         7, 6, 8, 7, 9, 9,10,10,11,10,11,10,12,10, 4, 6,
-         7, 8, 8, 9, 9,10,10,11,11,11,11,12,12, 6, 8, 8,
-        10, 9,11,10,12,11,12,12,12,12,13,13, 6, 8, 8,10,
-        10,10,11,11,11,12,12,13,12,13,13, 8, 9, 9,11,11,
-        12,11,12,12,13,13,13,13,13,13, 8, 9, 9,11,11,11,
-        12,12,12,13,13,13,13,13,13, 9,10,10,12,11,13,13,
-        13,13,14,13,13,14,14,14, 9,10,11,11,12,12,13,13,
-        13,13,13,14,15,14,14,10,11,11,12,12,13,13,14,14,
-        14,14,14,15,16,16,10,11,11,12,13,13,13,13,15,14,
-        14,15,16,15,16,10,12,12,13,13,14,14,14,15,15,15,
-        15,15,15,16,11,12,12,13,13,14,14,14,15,15,15,16,
-        15,17,16,11,12,12,13,13,13,15,15,14,16,16,16,16,
-        16,17,11,12,12,13,13,14,14,15,14,15,15,17,17,16,
-        16,
-};
-
-static const static_codebook _44u4__p7_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u4__p7_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44u4__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u4__p7_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44u4__p7_2[] = {
-         2, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-        10,10,10,10, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,
-         9,10, 9,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,
-        10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,11,10,10,10, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
-         9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
-        10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-         9,10, 9,10,10,10,10,10,10,10,10,10,10,11,10,10,
-        10,
-};
-
-static const static_codebook _44u4__p7_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44u4__p7_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u4__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__44u4__short[] = {
-        14,17,15,17,16,14,13,16,10, 7, 7,10,13,10,15,16,
-         9, 4, 4, 6, 5, 7, 9,16,12, 8, 7, 8, 8, 8,11,16,
-        14, 7, 4, 6, 3, 5, 8,15,13, 8, 5, 7, 4, 5, 7,16,
-        12, 9, 6, 8, 3, 3, 5,16,14,13, 7,10, 5, 5, 7,15,
-};
-
-static const static_codebook _huff_book__44u4__short = {
-        2, 64,
-        (long *)_huff_lengthlist__44u4__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u5__long[] = {
-         3, 8,13,12,14,12,16,11,13,14, 5, 4, 5, 6, 7, 8,
-        10, 9,12,15,10, 5, 5, 5, 6, 8, 9, 9,13,15,10, 5,
-         5, 6, 6, 7, 8, 8,11,13,12, 7, 5, 6, 4, 6, 7, 7,
-        11,14,11, 7, 7, 6, 6, 6, 7, 6,10,14,14, 9, 8, 8,
-         6, 7, 7, 7,11,16,11, 8, 8, 7, 6, 6, 7, 4, 7,12,
-        10,10,12,10,10, 9,10, 5, 6, 9,10,12,15,13,14,14,
-        14, 8, 7, 8,
-};
-
-static const static_codebook _huff_book__44u5__long = {
-        2, 100,
-        (long *)_huff_lengthlist__44u5__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u5__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u5__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
-         9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,10,
-        10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10,
-        10,13,11,10,13,13, 4, 8, 8, 8,11,10, 8,10,10, 7,
-        10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13,
-        12,
-};
-
-static const static_codebook _44u5__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u5__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u5__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u5__p2_0[] = {
-         3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
-         7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
-         8, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 7,
-         7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
-         8, 7, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
-         9,
-};
-
-static const static_codebook _44u5__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u5__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u5__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u5__p3_0[] = {
-         2, 4, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
-        10, 9,13,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9,
-         9,11,11, 6, 8, 9,11,11,10,11,11,14,14, 9,10,11,
-        13,14, 5, 7, 7, 9,10, 7, 9, 8,11,11, 7, 9, 9,11,
-        11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,13,13,
-        10,11,11,15,14, 9,11,11,14,14,13,14,14,17,16,12,
-        13,13,15,16, 8,10,10,13,13, 9,11,11,14,15,10,11,
-        11,14,15,12,14,13,16,16,13,15,14,15,17, 5, 7, 7,
-        10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,
-        14,10,11,12,14,14, 7, 9, 9,12,11, 9,11,11,13,13,
-         9,11,11,13,13,12,13,13,15,16,11,12,13,15,16, 6,
-         9, 9,11,11, 8,11,10,13,12, 9,11,11,13,14,11,13,
-        12,16,14,11,13,13,16,17,10,12,11,15,15,11,13,13,
-        16,16,11,13,13,17,16,14,15,15,17,17,14,16,16,17,
-        18, 9,11,11,14,15,10,12,12,15,15,11,13,13,16,17,
-        13,15,13,17,15,14,15,16,18, 0, 5, 7, 7,10,10, 7,
-         9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
-        12,14,15, 6, 9, 9,12,11, 9,11,11,13,13, 8,10,11,
-        12,13,11,13,13,16,15,11,12,13,14,15, 7, 9, 9,11,
-        12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,15,16,
-        11,13,13,15,14, 9,11,11,15,14,11,13,13,17,15,10,
-        12,12,15,15,14,16,16,17,17,13,13,15,15,17,10,11,
-        12,15,15,11,13,13,16,16,11,13,13,15,15,14,15,15,
-        18,18,14,15,15,17,17, 8,10,10,13,13,10,12,11,15,
-        15,10,11,12,15,15,14,15,15,18,18,13,14,14,18,18,
-         9,11,11,15,16,11,13,13,17,17,11,13,13,16,16,15,
-        15,16,17, 0,14,15,17, 0, 0, 9,11,11,15,15,10,13,
-        12,18,16,11,13,13,15,16,14,16,15,20,20,14,15,16,
-        17, 0,13,14,14,20,16,14,15,16,19,18,14,15,15,19,
-         0,18,16, 0,20,20,16,18,18, 0, 0,12,14,14,18,18,
-        13,15,14,18,16,14,15,16,18,20,16,19,16, 0,17,17,
-        18,18,19, 0, 8,10,10,14,14,10,11,11,14,15,10,11,
-        12,15,15,13,15,14,19,17,13,15,15,17, 0, 9,11,11,
-        16,15,11,13,13,16,16,10,12,13,15,17,14,16,16,18,
-        18,14,15,15,18, 0, 9,11,11,15,15,11,13,13,16,17,
-        11,13,13,18,17,14,18,16,18,18,15,17,17,18, 0,12,
-        14,14,18,18,14,15,15,20, 0,13,14,15,17, 0,16,18,
-        17, 0, 0,16,16, 0,17,20,12,14,14,18,18,14,16,15,
-         0,18,14,16,15,18, 0,16,19,17, 0, 0,17,18,16, 0,
-         0,
-};
-
-static const static_codebook _44u5__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u5__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u5__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u5__p4_0[] = {
-         4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
-         9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
-         8,10,10, 6, 7, 8, 9,10, 9,10,10,11,12, 9, 9,10,
-        11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10,
-        10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,12,11,
-         9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,
-        11,12,13,14, 8, 9, 9,11,12, 9,10,10,12,12, 9,10,
-        10,12,12,11,12,11,14,13,11,12,12,13,13, 5, 7, 7,
-         9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
-        12, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,10,11,
-         8, 9, 9,11,11,10,10,11,11,13,10,11,11,12,13, 6,
-         7, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11,
-        12,13,10,11,11,13,13,12,11,13,12,15,12,13,13,14,
-        15, 9,10,10,12,12, 9,11,10,13,12,10,11,11,13,13,
-        11,13,11,14,12,12,13,13,14,15, 5, 7, 7, 9, 9, 7,
-         8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,
-        10,12,12, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 8, 9,
-        10,11,10,11,11,12,12,10,10,11,11,13, 7, 8, 8,10,
-        10, 8, 9, 9,11,11, 8, 9, 8,11,10,10,11,11,13,12,
-        10,11,10,13,11, 9,10,10,12,12,10,11,11,13,12, 9,
-        10,10,12,13,12,13,13,14,15,11,11,13,12,14, 9,10,
-        10,12,12,10,11,11,13,13,10,11,10,13,12,12,13,13,
-        14,14,12,13,11,14,12, 8, 9, 9,12,12, 9,10,10,12,
-        12, 9,10,10,12,12,12,12,12,14,14,11,12,12,14,13,
-         9,10,10,12,12,10,11,11,13,13,10,11,11,13,12,12,
-        12,13,14,15,12,13,13,15,14, 9,10,10,12,12,10,11,
-        10,13,12,10,11,11,12,13,12,13,12,15,13,12,13,13,
-        14,15,11,12,12,14,13,11,12,12,14,15,12,13,13,15,
-        14,13,12,14,12,16,13,14,14,15,15,11,11,12,14,14,
-        11,12,11,14,13,12,13,13,14,15,13,14,12,16,12,14,
-        14,15,16,16, 8, 9, 9,11,12, 9,10,10,12,12, 9,10,
-        10,12,13,11,12,12,13,13,12,12,13,14,14, 9,10,10,
-        12,12,10,11,10,13,12,10,10,11,12,13,12,13,13,15,
-        14,12,12,13,13,15, 9,10,10,12,13,10,11,11,12,13,
-        10,11,11,13,13,12,13,13,14,15,12,13,12,15,14,11,
-        12,11,14,13,12,13,13,15,14,11,11,12,13,14,14,15,
-        14,16,15,13,12,14,13,16,11,12,12,13,14,12,13,13,
-        14,15,11,12,11,14,14,14,14,14,15,16,13,15,12,16,
-        12,
-};
-
-static const static_codebook _44u5__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u5__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u5__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u5__p5_0[] = {
-         2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
-        11,10, 3, 5, 5, 7, 8, 8, 8,10,11, 6, 8, 7,10, 9,
-        10,10,11,11, 6, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8,
-        10,10,11,11,13,12, 8, 8, 9, 9,10,11,11,12,13,10,
-        11,10,12,11,13,12,14,14,10,10,11,11,12,12,13,14,
-        14,
-};
-
-static const static_codebook _44u5__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u5__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u5__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p6_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u5__p6_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
-         9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
-         8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7,
-         8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
-         9, 9,10,10,11,10,11,11, 9, 9, 9,10,10,11,10,11,
-        11,
-};
-
-static const static_codebook _44u5__p6_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u5__p6_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u5__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u5__p7_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,11,10, 7,
-        11,10, 5, 9, 9, 7,10,10, 8,10,11, 4, 9, 9, 9,12,
-        12, 9,12,12, 8,12,12,11,12,12,10,12,13, 7,12,12,
-        11,12,12,10,12,13, 4, 9, 9, 9,12,12, 9,12,12, 7,
-        12,11,10,13,13,11,12,12, 7,12,12,10,13,13,11,12,
-        12,
-};
-
-static const static_codebook _44u5__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u5__p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44u5__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u5__p7_1[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7,
-         8, 8, 9, 8, 8, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 8,
-         9, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 6, 7, 7, 8,
-         8, 9, 9, 9, 9, 9, 9, 7, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9,
-         9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
-        10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9,
-         9, 9, 9, 9, 9,10,10,10,10,
-};
-
-static const static_codebook _44u5__p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u5__p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u5__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u5__p8_0[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u5__p8_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
-         9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
-        11, 6, 8, 7, 9, 9,10,10,11,11,13,12, 6, 8, 8, 9,
-         9,10,10,11,11,12,13, 8, 9, 9,10,10,12,12,13,12,
-        14,13, 8, 9, 9,10,10,12,12,13,13,14,14, 9,11,11,
-        12,12,13,13,14,14,15,14, 9,11,11,12,12,13,13,14,
-        14,15,14,11,12,12,13,13,14,14,15,14,15,14,11,11,
-        12,13,13,14,14,14,14,15,15,
-};
-
-static const static_codebook _44u5__p8_0 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u5__p8_0,
-        1, -524582912, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44u5__p8_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p8_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u5__p8_1[] = {
-         3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 5, 7, 6,
-         7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8,
-         8, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 6, 6, 7, 7,
-         7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
-         8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u5__p8_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u5__p8_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u5__p8_1,
-        0
-};
-
-static const long _vq_quantlist__44u5__p9_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u5__p9_0[] = {
-         1, 3, 2,12,10,13,13,13,13,13,13,13,13, 4, 9, 9,
-        13,13,13,13,13,13,13,13,13,13, 5,10, 9,13,13,13,
-        13,13,13,13,13,13,13,12,13,13,13,13,13,13,13,13,
-        13,13,13,13,11,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
-        13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,
-        12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-        12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _44u5__p9_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u5__p9_0,
-        1, -514332672, 1627381760, 4, 0,
-        (long *)_vq_quantlist__44u5__p9_0,
-        0
-};
-
-static const long _vq_quantlist__44u5__p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u5__p9_1[] = {
-         1, 4, 4, 7, 7, 8, 8, 8, 7, 8, 7, 9, 8, 9, 9, 4,
-         7, 6, 9, 8,10,10, 9, 8, 9, 9, 9, 9, 9, 8, 5, 6,
-         6, 8, 9,10,10, 9, 9, 9,10,10,10,10,11, 7, 8, 8,
-        10,10,11,11,10,10,11,11,11,12,11,11, 7, 8, 8,10,
-        10,11,11,10,10,11,11,12,11,11,11, 8, 9, 9,11,11,
-        12,12,11,11,12,11,12,12,12,12, 8, 9,10,11,11,12,
-        12,11,11,12,12,12,12,12,12, 8, 9, 9,10,10,12,11,
-        12,12,12,12,12,12,12,13, 8, 9, 9,11,11,11,11,12,
-        12,12,12,13,12,13,13, 9,10,10,11,11,12,12,12,13,
-        12,13,13,13,14,13, 9,10,10,11,11,12,12,12,13,13,
-        12,13,13,14,13, 9,11,10,12,11,13,12,12,13,13,13,
-        13,13,13,14, 9,10,10,12,12,12,12,12,13,13,13,13,
-        13,14,14,10,11,11,12,12,12,13,13,13,14,14,13,14,
-        14,14,10,11,11,12,12,12,12,13,12,13,14,13,14,14,
-        14,
-};
-
-static const static_codebook _44u5__p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u5__p9_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44u5__p9_1,
-        0
-};
-
-static const long _vq_quantlist__44u5__p9_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44u5__p9_2[] = {
-         2, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-         9,10, 9,10,10,10, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9,
-         9, 9,10, 9,10, 9,10, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-         9,10, 9,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
-         9,10, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, 9,
-        10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
-         9,10, 9,10, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
-         9, 9,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-         9,10,10, 9,10,10,10,10,10,10,10,10,10,10, 9, 9,
-         9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9,
-         9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-         9, 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _44u5__p9_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44u5__p9_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u5__p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44u5__short[] = {
-         4,10,17,13,17,13,17,17,17,17, 3, 6, 8, 9,11, 9,
-        15,12,16,17, 6, 5, 5, 7, 7, 8,10,11,17,17, 7, 8,
-         7, 9, 9,10,13,13,17,17, 8, 6, 5, 7, 4, 7, 5, 8,
-        14,17, 9, 9, 8, 9, 7, 9, 8,10,16,17,12,10, 7, 8,
-         4, 7, 4, 7,16,17,12,11, 9,10, 6, 9, 5, 7,14,17,
-        14,13,10,15, 4, 8, 3, 5,14,17,17,14,11,15, 6,10,
-         6, 8,15,17,
-};
-
-static const static_codebook _huff_book__44u5__short = {
-        2, 100,
-        (long *)_huff_lengthlist__44u5__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u6__long[] = {
-         3, 9,14,13,14,13,16,12,13,14, 5, 4, 6, 6, 8, 9,
-        11,10,12,15,10, 5, 5, 6, 6, 8,10,10,13,16,10, 6,
-         6, 6, 6, 8, 9, 9,12,14,13, 7, 6, 6, 4, 6, 6, 7,
-        11,14,10, 7, 7, 7, 6, 6, 6, 7,10,13,15,10, 9, 8,
-         5, 6, 5, 6,10,14,10, 9, 8, 8, 6, 6, 5, 4, 6,11,
-        11,11,12,11,10, 9, 9, 5, 5, 9,10,12,15,13,13,13,
-        13, 8, 7, 7,
-};
-
-static const static_codebook _huff_book__44u6__long = {
-        2, 100,
-        (long *)_huff_lengthlist__44u6__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u6__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u6__p1_0[] = {
-         1, 4, 4, 4, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
-         9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,10,
-        10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10,
-        10,13,11,10,13,13, 5, 8, 8, 8,11,10, 8,10,10, 7,
-        10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13,
-        12,
-};
-
-static const static_codebook _44u6__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u6__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u6__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u6__p2_0[] = {
-         3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
-         7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
-         8, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 7, 7,
-         7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
-         8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
-         9,
-};
-
-static const static_codebook _44u6__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u6__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u6__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u6__p3_0[] = {
-         2, 5, 4, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
-         9, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9,
-         9,11,11, 7, 8, 9,11,11,10,11,11,14,14, 9,10,11,
-        13,14, 5, 7, 7, 9,10, 6, 9, 8,11,11, 7, 9, 9,11,
-        11, 9,11,10,14,13,10,11,11,14,13, 8,10,10,13,13,
-        10,11,11,15,15, 9,11,11,14,14,13,14,14,17,16,12,
-        13,14,16,16, 8,10,10,13,14, 9,11,11,14,15,10,11,
-        12,14,15,12,14,13,16,15,13,14,14,15,17, 5, 7, 7,
-        10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,12,11,14,
-        14,10,11,11,14,14, 7, 9, 9,12,11, 9,11,11,13,13,
-         9,11,11,13,13,11,13,13,14,15,11,12,13,15,16, 6,
-         9, 9,11,12, 8,11,10,13,12, 9,11,11,13,14,11,13,
-        12,16,14,11,13,13,15,16,10,12,11,14,15,11,13,13,
-        15,17,11,13,13,17,16,15,15,16,17,16,14,15,16,18,
-         0, 9,11,11,14,15,10,12,12,16,15,11,13,13,16,16,
-        13,15,14,18,15,14,16,16, 0, 0, 5, 7, 7,10,10, 7,
-         9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
-        12,14,14, 6, 9, 9,11,11, 9,11,11,13,13, 8,10,11,
-        12,13,11,13,13,16,15,11,12,13,14,16, 7, 9, 9,11,
-        12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,16,15,
-        11,13,12,15,15, 9,11,11,15,14,11,13,13,17,16,10,
-        12,13,15,16,14,16,16, 0,18,14,14,15,15,17,10,11,
-        12,15,15,11,13,13,16,16,11,13,13,16,16,14,16,16,
-        19,17,14,15,15,17,17, 8,10,10,14,14,10,12,11,15,
-        15,10,11,12,16,15,14,15,15,18,20,13,14,16,17,18,
-         9,11,11,15,16,11,13,13,17,17,11,13,13,17,16,15,
-        16,16, 0, 0,15,16,16, 0, 0, 9,11,11,15,15,10,13,
-        12,17,15,11,13,13,17,16,15,17,15,20,19,15,16,16,
-        19, 0,13,15,14, 0,17,14,15,16, 0,20,15,16,16, 0,
-        19,17,18, 0, 0, 0,16,17,18, 0, 0,12,14,14,19,18,
-        13,15,14, 0,17,14,15,16,19,19,16,18,16, 0,19,19,
-        20,17,20, 0, 8,10,10,13,14,10,11,11,15,15,10,12,
-        12,15,16,14,15,14,19,16,14,15,15, 0,18, 9,11,11,
-        16,15,11,13,13, 0,16,11,12,13,16,17,14,16,17, 0,
-        19,15,16,16,18, 0, 9,11,11,15,16,11,13,13,16,16,
-        11,14,13,18,17,15,16,16,18,20,15,17,19, 0, 0,12,
-        14,14,17,17,14,16,15, 0, 0,13,14,15,19, 0,16,18,
-        20, 0, 0,16,16,18,18, 0,12,14,14,17,20,14,16,16,
-        19, 0,14,16,14, 0,20,16,20,17, 0, 0,17, 0,15, 0,
-        19,
-};
-
-static const static_codebook _44u6__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u6__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u6__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u6__p4_0[] = {
-         4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
-         9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
-         8,10,10, 7, 7, 8, 9,10, 9,10,10,11,11, 9, 9,10,
-        11,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10,
-        10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11,
-         9,10,10,12,12, 9,10,10,12,12,11,12,12,14,13,11,
-        11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
-        10,12,12,11,12,11,13,12,11,12,12,13,13, 5, 7, 7,
-         9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,
-        11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 8, 9,11,11,
-         8, 9, 9,11,11,10,10,11,12,13,10,10,11,12,12, 6,
-         7, 7,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11,
-        10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11,
-        13,13,10,11,11,12,13,12,12,12,13,14,12,12,13,14,
-        14, 9,10,10,12,12, 9,10,10,13,12,10,11,11,13,13,
-        11,12,11,14,12,12,13,13,14,14, 6, 7, 7, 9, 9, 7,
-         8, 7,10,10, 7, 8, 8,10,10, 9,10,10,12,11, 9,10,
-        10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 9,
-        10,11,10,11,11,12,12,10,10,11,11,13, 7, 8, 8,10,
-        10, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,10,13,12,
-        10,11,11,13,12, 9,10,10,12,12,10,11,11,13,12, 9,
-        10,10,12,13,12,13,12,14,14,11,11,12,12,14, 9,10,
-        10,12,12,10,11,11,13,13,10,11,10,13,12,12,12,12,
-        14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12,
-        12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,14,
-         9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
-        12,13,14,15,12,12,13,14,14, 9,10,10,12,12, 9,11,
-        10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,13,
-        14,15,11,12,12,14,13,11,12,12,14,14,12,13,13,14,
-        14,13,13,14,14,16,13,14,14,15,15,11,12,11,13,13,
-        11,12,11,14,13,12,12,13,14,15,12,14,12,15,12,13,
-        14,15,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
-        10,12,12,11,12,12,14,13,11,12,12,13,13, 9,10,10,
-        12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14,
-        14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13,
-        10,11,11,13,13,12,13,12,14,14,12,13,13,14,14,11,
-        11,11,13,13,12,13,12,14,14,11,11,12,13,14,14,14,
-        14,16,15,12,12,14,12,15,11,12,12,13,14,12,13,13,
-        14,15,11,12,12,14,14,13,14,14,16,16,13,14,13,16,
-        13,
-};
-
-static const static_codebook _44u6__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u6__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u6__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u6__p5_0[] = {
-         2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
-        11,11, 3, 5, 5, 7, 8, 8, 8,11,11, 6, 8, 7, 9, 9,
-        10, 9,12,11, 6, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8,
-        10, 9,12,11,13,13, 8, 8, 9, 9,10,11,12,13,13,10,
-        11,11,12,12,13,13,14,14,10,10,11,11,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44u6__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u6__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u6__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p6_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u6__p6_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
-         9, 9, 4, 4, 5, 6, 6, 7, 8, 9, 9, 5, 6, 6, 7, 7,
-         8, 8,10,10, 5, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7,
-         8, 8,10, 9,11,11, 7, 7, 8, 8, 8, 9,10,10,11, 9,
-         9, 9,10,10,11,11,12,11, 9, 9, 9,10,10,11,11,11,
-        12,
-};
-
-static const static_codebook _44u6__p6_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u6__p6_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u6__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u6__p7_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 7,10,10, 8,
-        10,10, 5, 8, 9, 7,10,10, 7,10, 9, 4, 8, 8, 9,11,
-        11, 8,11,11, 7,11,11,10,10,13,10,13,13, 7,11,11,
-        10,13,12,10,13,13, 5, 9, 8, 8,11,11, 9,11,11, 7,
-        11,11,10,13,13,10,12,13, 7,11,11,10,13,13, 9,13,
-        10,
-};
-
-static const static_codebook _44u6__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u6__p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44u6__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u6__p7_1[] = {
-         3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 6,
-         8, 8, 8, 8, 8, 8, 4, 5, 5, 6, 7, 8, 8, 8, 8, 8,
-         8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
-         7, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 9, 9,
-         9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
-         8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44u6__p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u6__p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u6__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u6__p8_0[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u6__p8_0[] = {
-         1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
-         9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
-        11, 6, 8, 8, 9, 9,10,10,11,11,12,12, 6, 8, 8, 9,
-         9,10,10,11,11,12,12, 8, 9, 9,10,10,11,11,12,12,
-        13,13, 8, 9, 9,10,10,11,11,12,12,13,13,10,10,10,
-        11,11,13,13,13,13,15,14, 9,10,10,12,11,12,13,13,
-        13,14,15,11,12,12,13,13,13,13,15,14,15,15,11,11,
-        12,13,13,14,14,14,15,15,15,
-};
-
-static const static_codebook _44u6__p8_0 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u6__p8_0,
-        1, -524582912, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44u6__p8_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p8_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u6__p8_1[] = {
-         3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 5, 7, 7,
-         7, 7, 8, 7, 8, 8, 5, 5, 6, 6, 7, 7, 7, 7, 7, 8,
-         8, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 6, 6, 7, 7,
-         7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
-         8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
-         8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u6__p8_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u6__p8_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u6__p8_1,
-        0
-};
-
-static const long _vq_quantlist__44u6__p9_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u6__p9_0[] = {
-         1, 3, 2, 9, 8,15,15,15,15,15,15,15,15,15,15, 4,
-         8, 9,13,14,14,14,14,14,14,14,14,14,14,14, 5, 8,
-         9,14,14,14,14,14,14,14,14,14,14,14,14,11,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,11,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-        14,
-};
-
-static const static_codebook _44u6__p9_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u6__p9_0,
-        1, -514071552, 1627381760, 4, 0,
-        (long *)_vq_quantlist__44u6__p9_0,
-        0
-};
-
-static const long _vq_quantlist__44u6__p9_1[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u6__p9_1[] = {
-         1, 4, 4, 7, 7, 8, 9, 8, 8, 9, 8, 9, 8, 9, 9, 4,
-         7, 6, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 7,
-         6, 9, 9,10,10, 9, 9,10,10,10,10,11,11, 7, 9, 8,
-        10,10,11,11,10,10,11,11,11,11,11,11, 7, 8, 9,10,
-        10,11,11,10,10,11,11,11,11,11,12, 8,10,10,11,11,
-        12,12,11,11,12,12,12,12,13,12, 8,10,10,11,11,12,
-        11,11,11,11,12,12,12,12,13, 8, 9, 9,11,10,11,11,
-        12,12,12,12,13,12,13,12, 8, 9, 9,11,11,11,11,12,
-        12,12,12,12,13,13,13, 9,10,10,11,12,12,12,12,12,
-        13,13,13,13,13,13, 9,10,10,11,11,12,12,12,12,13,
-        13,13,13,14,13,10,10,10,12,11,12,12,13,13,13,13,
-        13,13,13,13,10,10,11,11,11,12,12,13,13,13,13,13,
-        13,13,13,10,11,11,12,12,13,12,12,13,13,13,13,13,
-        13,14,10,11,11,12,12,13,12,13,13,13,14,13,13,14,
-        13,
-};
-
-static const static_codebook _44u6__p9_1 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u6__p9_1,
-        1, -522338304, 1620115456, 4, 0,
-        (long *)_vq_quantlist__44u6__p9_1,
-        0
-};
-
-static const long _vq_quantlist__44u6__p9_2[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44u6__p9_2[] = {
-         3, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 9,
-         9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
-         9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
-         9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10, 9, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9,10, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,10, 9,10,10,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10, 9, 9,
-        10,
-};
-
-static const static_codebook _44u6__p9_2 = {
-        2, 289,
-        (long *)_vq_lengthlist__44u6__p9_2,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u6__p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44u6__short[] = {
-         4,11,16,13,17,13,17,16,17,17, 4, 7, 9, 9,13,10,
-        16,12,16,17, 7, 6, 5, 7, 8, 9,12,12,16,17, 6, 9,
-         7, 9,10,10,15,15,17,17, 6, 7, 5, 7, 5, 7, 7,10,
-        16,17, 7, 9, 8, 9, 8,10,11,11,15,17, 7, 7, 7, 8,
-         5, 8, 8, 9,15,17, 8, 7, 9, 9, 7, 8, 7, 2, 7,15,
-        14,13,13,15, 5,10, 4, 3, 6,17,17,15,13,17, 7,11,
-         7, 6, 9,16,
-};
-
-static const static_codebook _huff_book__44u6__short = {
-        2, 100,
-        (long *)_huff_lengthlist__44u6__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u7__long[] = {
-         3, 9,14,13,15,14,16,13,13,14, 5, 5, 7, 7, 8, 9,
-        11,10,12,15,10, 6, 5, 6, 6, 9,10,10,13,16,10, 6,
-         6, 6, 6, 8, 9, 9,12,15,14, 7, 6, 6, 5, 6, 6, 8,
-        12,15,10, 8, 7, 7, 6, 7, 7, 7,11,13,14,10, 9, 8,
-         5, 6, 4, 5, 9,12,10, 9, 9, 8, 6, 6, 5, 3, 6,11,
-        12,11,12,12,10, 9, 8, 5, 5, 8,10,11,15,13,13,13,
-        12, 8, 6, 7,
-};
-
-static const static_codebook _huff_book__44u7__long = {
-        2, 100,
-        (long *)_huff_lengthlist__44u7__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u7__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u7__p1_0[] = {
-         1, 4, 4, 4, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
-        10,10, 5, 8, 8, 7,10,10, 8,10,10, 5, 8, 8, 8,11,
-        10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10,
-        10,13,12,10,13,13, 5, 8, 8, 8,11,10, 8,10,11, 7,
-        10,10,10,13,13,10,12,13, 8,11,11,10,13,13,10,13,
-        12,
-};
-
-static const static_codebook _44u7__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u7__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u7__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u7__p2_0[] = {
-         3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
-         7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
-         7, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 7,
-         7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
-         8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
-         9,
-};
-
-static const static_codebook _44u7__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u7__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u7__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u7__p3_0[] = {
-         2, 5, 4, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
-         9, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9,
-         9,11,11, 6, 8, 9,11,11,10,11,11,14,14, 9,10,11,
-        13,14, 5, 7, 7, 9, 9, 7, 9, 8,11,11, 7, 9, 9,11,
-        11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,14,13,
-        10,11,12,15,14, 9,11,11,15,14,13,14,14,16,16,12,
-        13,14,17,16, 8,10,10,13,13, 9,11,11,14,15,10,11,
-        12,14,15,12,14,13,16,16,13,14,15,15,17, 5, 7, 7,
-        10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,12,11,15,
-        14,10,11,12,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
-         9,11,11,13,13,11,13,13,14,17,11,13,13,15,16, 6,
-         9, 9,11,11, 8,11,10,13,12, 9,11,11,13,13,11,13,
-        12,16,14,11,13,13,16,16,10,12,12,15,15,11,13,13,
-        16,16,11,13,13,16,15,14,16,17,17,19,14,16,16,18,
-         0, 9,11,11,14,15,10,13,12,16,15,11,13,13,16,16,
-        14,15,14, 0,16,14,16,16,18, 0, 5, 7, 7,10,10, 7,
-         9, 9,12,11, 7, 9, 9,11,12,10,11,11,15,14,10,11,
-        12,14,14, 6, 9, 9,11,11, 9,11,11,13,13, 8,10,11,
-        12,13,11,13,13,17,15,11,12,13,14,15, 7, 9, 9,11,
-        12, 9,11,11,13,13, 9,11,11,13,13,11,13,12,16,16,
-        11,13,13,15,14, 9,11,11,14,15,11,13,13,16,15,10,
-        12,13,16,16,15,16,16, 0, 0,14,13,15,16,18,10,11,
-        11,15,15,11,13,14,16,18,11,13,13,16,15,15,16,16,
-        19, 0,14,15,15,16,16, 8,10,10,13,13,10,12,11,16,
-        15,10,11,11,16,15,13,15,16,18, 0,13,14,15,17,17,
-         9,11,11,15,15,11,13,13,16,18,11,13,13,16,17,15,
-        16,16, 0, 0,15,18,16, 0,17, 9,11,11,15,15,11,13,
-        12,17,15,11,13,14,16,17,15,18,15, 0,17,15,16,16,
-        18,19,13,15,14, 0,18,14,16,16,19,18,14,16,15,19,
-        19,16,18,19, 0, 0,16,17, 0, 0, 0,12,14,14,17,17,
-        13,16,14, 0,18,14,16,15,18, 0,16,18,16,19,17,18,
-        19,17, 0, 0, 8,10,10,14,14, 9,12,11,15,15,10,11,
-        12,15,17,13,15,15,18,16,14,16,15,18,17, 9,11,11,
-        16,15,11,13,13, 0,16,11,12,13,16,15,15,16,16, 0,
-        17,15,15,16,18,17, 9,12,11,15,17,11,13,13,16,16,
-        11,14,13,16,16,15,15,16,18,19,16,18,16, 0, 0,12,
-        14,14, 0,16,14,16,16, 0,18,13,14,15,16, 0,17,16,
-        18, 0, 0,16,16,17,19, 0,13,14,14,17, 0,14,17,16,
-         0,19,14,15,15,18,19,17,16,18, 0, 0,15,19,16, 0,
-         0,
-};
-
-static const static_codebook _44u7__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u7__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u7__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u7__p4_0[] = {
-         4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
-         9, 9,11,11, 8, 9, 9,10,11, 6, 7, 7, 9, 9, 7, 8,
-         8,10,10, 6, 7, 8, 9,10, 9,10,10,12,12, 9, 9,10,
-        11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10,
-        10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11,
-         9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,
-        11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,11, 9,10,
-        10,12,12,11,12,11,13,13,11,12,12,13,13, 6, 7, 7,
-         9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,
-        11, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,11,11,
-         8, 9, 9,11,11,10,11,11,12,12,10,10,11,12,13, 6,
-         7, 7,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11,
-        10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11,
-        13,13,10,11,11,13,12,12,12,13,13,14,12,12,13,14,
-        14, 9,10,10,12,12, 9,10,10,12,12,10,11,11,13,13,
-        11,12,11,14,12,12,13,13,14,14, 6, 7, 7, 9, 9, 7,
-         8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,11, 9,10,
-        10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 9,
-        10,11,10,11,11,13,12,10,10,11,11,13, 7, 8, 8,10,
-        10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,10,13,12,
-        10,11,11,12,12, 9,10,10,12,12,10,11,11,13,12, 9,
-        10,10,12,13,12,13,12,14,14,11,11,12,12,14, 9,10,
-        10,12,12,10,11,11,13,13,10,11,11,13,13,12,13,12,
-        14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12,
-        12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,13,
-         9,10,10,12,12,10,11,11,13,13,10,11,11,13,12,12,
-        13,13,14,14,12,12,13,14,14, 9,10,10,12,12, 9,11,
-        10,13,12,10,10,11,12,13,11,13,12,14,13,12,12,13,
-        14,14,11,12,12,13,13,11,12,13,14,14,12,13,13,14,
-        14,13,13,14,14,16,13,14,14,16,16,11,11,11,13,13,
-        11,12,11,14,13,12,12,13,14,15,13,14,12,16,13,14,
-        14,14,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
-        10,12,12,11,12,12,14,13,11,12,12,13,14, 9,10,10,
-        12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14,
-        14,12,12,13,13,14, 9,10,10,12,12,10,11,11,12,13,
-        10,11,11,13,13,12,13,12,14,14,12,13,13,14,14,11,
-        12,12,13,13,12,13,12,14,14,11,11,12,13,14,13,15,
-        14,16,15,13,12,14,13,16,11,12,12,13,13,12,13,13,
-        14,14,12,12,12,14,14,13,14,14,15,15,13,14,13,16,
-        14,
-};
-
-static const static_codebook _44u7__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u7__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u7__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u7__p5_0[] = {
-         2, 3, 3, 6, 6, 7, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
-        11,11, 3, 5, 5, 7, 7, 8, 9,11,11, 6, 8, 7, 9, 9,
-        10,10,12,12, 6, 7, 8, 9,10,10,10,12,12, 8, 8, 8,
-        10,10,12,11,13,13, 8, 8, 9,10,10,11,11,13,13,10,
-        11,11,12,12,13,13,14,14,10,11,11,12,12,13,13,14,
-        14,
-};
-
-static const static_codebook _44u7__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u7__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u7__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p6_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u7__p6_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 8, 7,
-         9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
-         8, 8,10,10, 5, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7,
-         8, 8,10, 9,11,11, 7, 7, 8, 8, 8, 9,10,11,11, 9,
-         9, 9,10,10,11,10,12,11, 9, 9, 9,10,10,11,11,11,
-        12,
-};
-
-static const static_codebook _44u7__p6_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u7__p6_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u7__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p7_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u7__p7_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 8, 9, 9, 7,
-        10,10, 5, 8, 9, 7, 9,10, 8, 9, 9, 4, 9, 9, 9,11,
-        10, 8,10,10, 7,11,10,10,10,12,10,12,12, 7,10,10,
-        10,12,11,10,12,12, 5, 9, 9, 8,10,10, 9,11,11, 7,
-        11,10,10,12,12,10,11,12, 7,10,11,10,12,12,10,12,
-        10,
-};
-
-static const static_codebook _44u7__p7_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u7__p7_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44u7__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u7__p7_1[] = {
-         3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6,
-         8, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8,
-         8, 6, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 6, 6, 7, 7,
-         7, 8, 8, 9, 9, 9, 9, 7, 8, 7, 8, 8, 9, 9, 9, 9,
-         9, 9, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8,
-         9, 9, 9, 9,10, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9,10, 8, 8, 8, 9, 9, 9, 9,10, 9,10,10, 8, 8,
-         8, 9, 9, 9, 9, 9,10,10,10,
-};
-
-static const static_codebook _44u7__p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u7__p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u7__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u7__p8_0[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u7__p8_0[] = {
-         1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7,
-         9, 9,11,10,12,12, 5, 6, 5, 7, 7, 9, 9,10,11,12,
-        12, 6, 7, 7, 8, 8,10,10,11,11,13,13, 6, 7, 7, 8,
-         8,10,10,11,12,13,13, 8, 9, 9,10,10,11,11,12,12,
-        14,14, 8, 9, 9,10,10,11,11,12,12,14,14,10,10,10,
-        11,11,13,12,14,14,15,15,10,10,10,12,12,13,13,14,
-        14,15,15,11,12,12,13,13,14,14,15,14,16,15,11,12,
-        12,13,13,14,14,15,15,15,16,
-};
-
-static const static_codebook _44u7__p8_0 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u7__p8_0,
-        1, -524582912, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44u7__p8_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p8_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u7__p8_1[] = {
-         4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7,
-         7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7,
-         7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7,
-         7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 8, 7, 8, 8,
-         8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
-         7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
-         8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
-         7, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u7__p8_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u7__p8_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u7__p8_1,
-        0
-};
-
-static const long _vq_quantlist__44u7__p9_0[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u7__p9_0[] = {
-         1, 3, 3,10,10,10,10,10,10,10,10, 4,10,10,10,10,
-        10,10,10,10,10,10, 4,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44u7__p9_0 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u7__p9_0,
-        1, -512171520, 1630791680, 4, 0,
-        (long *)_vq_quantlist__44u7__p9_0,
-        0
-};
-
-static const long _vq_quantlist__44u7__p9_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u7__p9_1[] = {
-         1, 4, 4, 6, 5, 8, 6, 9, 8,10, 9,11,10, 4, 6, 6,
-         8, 8, 9, 9,11,10,11,11,11,11, 4, 6, 6, 8, 8,10,
-         9,11,11,11,11,11,12, 6, 8, 8,10,10,11,11,12,12,
-        13,12,13,13, 6, 8, 8,10,10,11,11,12,12,12,13,14,
-        13, 8,10,10,11,11,12,13,14,14,14,14,15,15, 8,10,
-        10,11,12,12,13,13,14,14,14,14,15, 9,11,11,13,13,
-        14,14,15,14,16,15,17,15, 9,11,11,12,13,14,14,15,
-        14,15,15,15,16,10,12,12,13,14,15,15,15,15,16,17,
-        16,17,10,13,12,13,14,14,16,16,16,16,15,16,17,11,
-        13,13,14,15,14,17,15,16,17,17,17,17,11,13,13,14,
-        15,15,15,15,17,17,16,17,16,
-};
-
-static const static_codebook _44u7__p9_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u7__p9_1,
-        1, -518889472, 1622704128, 4, 0,
-        (long *)_vq_quantlist__44u7__p9_1,
-        0
-};
-
-static const long _vq_quantlist__44u7__p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44u7__p9_2[] = {
-         2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
-         8,
-};
-
-static const static_codebook _44u7__p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44u7__p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44u7__p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44u7__short[] = {
-         5,12,17,16,16,17,17,17,17,17, 4, 7,11,11,12, 9,
-        17,10,17,17, 7, 7, 8, 9, 7, 9,11,10,15,17, 7, 9,
-        10,11,10,12,14,12,16,17, 7, 8, 5, 7, 4, 7, 7, 8,
-        16,16, 6,10, 9,10, 7,10,11,11,16,17, 6, 8, 8, 9,
-         5, 7, 5, 8,16,17, 5, 5, 8, 7, 6, 7, 7, 6, 6,14,
-        12,10,12,11, 7,11, 4, 4, 2, 7,17,15,15,15, 8,15,
-         6, 8, 5, 9,
-};
-
-static const static_codebook _huff_book__44u7__short = {
-        2, 100,
-        (long *)_huff_lengthlist__44u7__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u8__long[] = {
-         3, 9,13,14,14,15,14,14,15,15, 5, 4, 6, 8,10,12,
-        12,14,15,15, 9, 5, 4, 5, 8,10,11,13,16,16,10, 7,
-         4, 3, 5, 7, 9,11,13,13,10, 9, 7, 4, 4, 6, 8,10,
-        12,14,13,11, 9, 6, 5, 5, 6, 8,12,14,13,11,10, 8,
-         7, 6, 6, 7,10,14,13,11,12,10, 8, 7, 6, 6, 9,13,
-        12,11,14,12,11, 9, 8, 7, 9,11,11,12,14,13,14,11,
-        10, 8, 8, 9,
-};
-
-static const static_codebook _huff_book__44u8__long = {
-        2, 100,
-        (long *)_huff_lengthlist__44u8__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u8__short[] = {
-         6,14,18,18,17,17,17,17,17,17, 4, 7, 9, 9,10,13,
-        15,17,17,17, 6, 7, 5, 6, 8,11,16,17,16,17, 5, 7,
-         5, 4, 6,10,14,17,17,17, 6, 6, 6, 5, 7,10,13,16,
-        17,17, 7, 6, 7, 7, 7, 8, 7,10,15,16,12, 9, 9, 6,
-         6, 5, 3, 5,11,15,14,14,13, 5, 5, 7, 3, 4, 8,15,
-        17,17,13, 7, 7,10, 6, 6,10,15,17,17,16,10,11,14,
-        10,10,15,17,
-};
-
-static const static_codebook _huff_book__44u8__short = {
-        2, 100,
-        (long *)_huff_lengthlist__44u8__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u8_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u8_p1_0[] = {
-         1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 8, 9, 9, 7,
-         9, 9, 5, 7, 7, 7, 9, 9, 8, 9, 9, 5, 7, 7, 7, 9,
-         9, 7, 9, 9, 7, 9, 9, 9,10,11, 9,11,10, 7, 9, 9,
-         9,11,10, 9,10,11, 5, 7, 7, 7, 9, 9, 7, 9, 9, 7,
-         9, 9, 9,11,10, 9,10,10, 8, 9, 9, 9,11,11, 9,11,
-        10,
-};
-
-static const static_codebook _44u8_p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u8_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u8_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u8_p2_0[] = {
-         4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
-         9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
-         8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,10,
-        11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10,
-        10, 9,10, 9,12,11, 9,10,10,12,12, 8, 9, 9,12,11,
-         9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,11,
-        11,12,13,14, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
-        10,12,12,11,12,11,13,13,11,12,12,14,14, 5, 7, 7,
-         9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
-        12, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11,
-         8, 9, 9,11,11,10,11,11,12,13,10,11,11,12,13, 6,
-         8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11,
-        10,13,12,10,11,11,13,13, 9,10,10,12,12,10,11,11,
-        13,13,10,11,11,13,13,12,12,13,13,14,12,13,13,14,
-        14, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13,
-        11,13,12,14,13,12,13,13,14,14, 5, 7, 7, 9, 9, 7,
-         8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,
-        10,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9,
-        10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10,
-        10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,13,
-        10,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10,
-        10,11,12,13,12,13,13,14,14,12,12,13,13,14, 9,10,
-        10,12,12,10,11,11,13,13,10,11,11,13,13,12,13,13,
-        15,14,12,13,13,14,13, 8, 9, 9,11,11, 9,10,10,12,
-        12, 9,10,10,12,12,12,12,12,14,13,11,12,12,14,14,
-         9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
-        13,13,14,15,12,13,13,14,15, 9,10,10,12,12,10,11,
-        10,13,12,10,11,11,13,13,12,13,12,15,14,12,13,13,
-        14,15,11,12,12,14,14,12,13,13,14,14,12,13,13,15,
-        14,14,14,14,14,16,14,14,15,16,16,11,12,12,14,14,
-        11,12,12,14,14,12,13,13,14,15,13,14,13,16,14,14,
-        14,14,16,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
-        10,12,12,11,12,12,14,13,11,12,12,14,14, 9,10,10,
-        12,12,10,11,11,13,13,10,10,11,12,13,12,13,13,15,
-        14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13,
-        10,11,11,13,13,12,13,13,14,14,12,13,13,15,14,11,
-        12,12,14,13,12,13,13,15,14,11,12,12,13,14,14,15,
-        14,16,15,13,13,14,13,16,11,12,12,14,14,12,13,13,
-        14,15,12,13,12,15,14,14,14,14,16,15,14,15,13,16,
-        14,
-};
-
-static const static_codebook _44u8_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u8_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u8_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u8_p3_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
-         9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
-         8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7,
-         8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
-         9, 9,10,10,11,10,12,11, 9, 9, 9, 9,10,11,11,11,
-        12,
-};
-
-static const static_codebook _44u8_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u8_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u8_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p4_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44u8_p4_0[] = {
-         4, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,11,11,11,
-        11, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,
-        12,12, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
-        11,12,12, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
-        11,11,12,12, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,
-        10,11,11,12,12, 7, 7, 7, 8, 8, 9, 8,10, 9,10, 9,
-        11,10,12,11,13,12, 7, 7, 7, 8, 8, 8, 9, 9,10, 9,
-        10,10,11,11,12,12,13, 8, 8, 8, 9, 9, 9, 9,10,10,
-        11,10,11,11,12,12,13,13, 8, 8, 8, 9, 9, 9,10,10,
-        10,10,11,11,11,12,12,12,13, 8, 9, 9, 9, 9,10, 9,
-        11,10,11,11,12,11,13,12,13,13, 8, 9, 9, 9, 9, 9,
-        10,10,11,11,11,11,12,12,13,13,13,10,10,10,10,10,
-        11,10,11,11,12,11,13,12,13,13,14,13,10,10,10,10,
-        10,10,11,11,11,11,12,12,13,13,13,13,14,11,11,11,
-        11,11,12,11,12,12,13,12,13,13,14,13,14,14,11,11,
-        11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,11,
-        12,12,12,12,13,12,13,12,13,13,14,13,14,14,14,14,
-        11,12,12,12,12,12,12,13,13,13,13,13,14,14,14,14,
-        14,
-};
-
-static const static_codebook _44u8_p4_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44u8_p4_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u8_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p5_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u8_p5_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8, 9, 9, 7,
-         9, 9, 5, 8, 8, 7, 9, 9, 8, 9, 9, 5, 8, 8, 8,10,
-        10, 8,10,10, 7,10,10, 9,10,12, 9,12,11, 7,10,10,
-         9,11,10, 9,11,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
-        10,10, 9,11,11, 9,10,11, 7,10,10, 9,11,11,10,12,
-        10,
-};
-
-static const static_codebook _44u8_p5_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u8_p5_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44u8_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p5_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u8_p5_1[] = {
-         4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 5, 5, 6, 6,
-         7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8,
-         8, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 7,
-         7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-         8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 8, 7,
-         8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8,
-         8, 8, 8, 8, 8, 8, 8, 9, 9,
-};
-
-static const static_codebook _44u8_p5_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u8_p5_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u8_p5_1,
-        0
-};
-
-static const long _vq_quantlist__44u8_p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u8_p6_0[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7, 8,
-         8, 8, 8, 9, 9,10,10, 6, 7, 7, 7, 8, 8, 8, 8, 9,
-         9,10,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 8,10, 9,11,
-        10, 7, 8, 8, 8, 8, 8, 9, 9, 9,10,10,11,11, 7, 8,
-         8, 8, 8, 9, 8, 9, 9,10,10,11,11, 8, 8, 8, 9, 9,
-         9, 9, 9,10,10,10,11,11, 8, 8, 8, 9, 9, 9, 9,10,
-         9,10,10,11,11, 9, 9, 9, 9,10,10,10,10,10,10,11,
-        11,12, 9, 9, 9,10, 9,10,10,10,10,11,10,12,11,10,
-        10,10,10,10,11,11,11,11,11,12,12,12,10,10,10,10,
-        11,11,11,11,11,12,11,12,12,
-};
-
-static const static_codebook _44u8_p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u8_p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u8_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u8_p6_1[] = {
-         3, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
-         5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44u8_p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u8_p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u8_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u8_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u8_p7_0[] = {
-         1, 4, 5, 6, 6, 7, 7, 8, 8,10,10,11,11, 5, 6, 6,
-         7, 7, 8, 8, 9, 9,11,10,12,11, 5, 6, 6, 7, 7, 8,
-         8, 9, 9,10,11,11,12, 6, 7, 7, 8, 8, 9, 9,10,10,
-        11,11,12,12, 6, 7, 7, 8, 8, 9, 9,10,10,11,12,13,
-        12, 7, 8, 8, 9, 9,10,10,11,11,12,12,13,13, 8, 8,
-         8, 9, 9,10,10,11,11,12,12,13,13, 9, 9, 9,10,10,
-        11,11,12,12,13,13,14,14, 9, 9, 9,10,10,11,11,12,
-        12,13,13,14,14,10,11,11,12,11,13,12,13,13,14,14,
-        15,15,10,11,11,11,12,12,13,13,14,14,14,15,15,11,
-        12,12,13,13,14,13,15,14,15,15,16,15,11,11,12,13,
-        13,13,14,14,14,15,15,15,16,
-};
-
-static const static_codebook _44u8_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u8_p7_0,
-        1, -523206656, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44u8_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u8_p7_1[] = {
-         4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7,
-         7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7,
-         7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8,
-         8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7,
-         8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
-         8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
-         7, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u8_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u8_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u8_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u8_p8_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u8_p8_0[] = {
-         1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8,10, 9,11,10, 4,
-         6, 6, 8, 8,10, 9, 9, 9,10,10,11,10,12,10, 4, 6,
-         6, 8, 8,10,10, 9, 9,10,10,11,11,11,12, 7, 8, 8,
-        10,10,11,11,11,10,12,11,12,12,13,11, 7, 8, 8,10,
-        10,11,11,10,10,11,11,12,12,13,13, 8,10,10,11,11,
-        12,11,12,11,13,12,13,12,14,13, 8,10, 9,11,11,12,
-        12,12,12,12,12,13,13,14,13, 8, 9, 9,11,10,12,11,
-        13,12,13,13,14,13,14,13, 8, 9, 9,10,11,12,12,12,
-        12,13,13,14,15,14,14, 9,10,10,12,11,13,12,13,13,
-        14,13,14,14,14,14, 9,10,10,12,12,12,12,13,13,14,
-        14,14,15,14,14,10,11,11,13,12,13,12,14,14,14,14,
-        14,14,15,15,10,11,11,12,12,13,13,14,14,14,15,15,
-        14,16,15,11,12,12,13,12,14,14,14,13,15,14,15,15,
-        15,17,11,12,12,13,13,14,14,14,15,15,14,15,15,14,
-        17,
-};
-
-static const static_codebook _44u8_p8_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u8_p8_0,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44u8_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p8_1[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44u8_p8_1[] = {
-         4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 6, 6, 7, 7, 8,
-         8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
-         7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10, 8, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,
-        10, 9,10, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,
-        10,10,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10,10, 9,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10,
-        10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,
-        10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
-        10, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,
-         9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-         9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10, 9, 9, 9,10, 9,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
-         9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
-         9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10, 9, 9, 9,10, 9,10, 9,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44u8_p8_1 = {
-        2, 441,
-        (long *)_vq_lengthlist__44u8_p8_1,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u8_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44u8_p9_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u8_p9_0[] = {
-         1, 3, 3, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9,
-         9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
-         8,
-};
-
-static const static_codebook _44u8_p9_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u8_p9_0,
-        1, -511895552, 1631393792, 4, 0,
-        (long *)_vq_quantlist__44u8_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44u8_p9_1[] = {
-        9,
-        8,
-        10,
-        7,
-        11,
-        6,
-        12,
-        5,
-        13,
-        4,
-        14,
-        3,
-        15,
-        2,
-        16,
-        1,
-        17,
-        0,
-        18,
-};
-
-static const long _vq_lengthlist__44u8_p9_1[] = {
-         1, 4, 4, 7, 7, 8, 7, 8, 6, 9, 7,10, 8,11,10,11,
-        11,11,11, 4, 7, 6, 9, 9,10, 9, 9, 9,10,10,11,10,
-        11,10,11,11,13,11, 4, 7, 7, 9, 9, 9, 9, 9, 9,10,
-        10,11,10,11,11,11,12,11,12, 7, 9, 8,11,11,11,11,
-        10,10,11,11,12,12,12,12,12,12,14,13, 7, 8, 9,10,
-        11,11,11,10,10,11,11,11,11,12,12,14,12,13,14, 8,
-         9, 9,11,11,11,11,11,11,12,12,14,12,15,14,14,14,
-        15,14, 8, 9, 9,11,11,11,11,12,11,12,12,13,13,13,
-        13,13,13,14,14, 8, 9, 9,11,10,12,11,12,12,13,13,
-        13,13,15,14,14,14,16,16, 8, 9, 9,10,11,11,12,12,
-        12,13,13,13,14,14,14,15,16,15,15, 9,10,10,11,12,
-        12,13,13,13,14,14,16,14,14,16,16,16,16,15, 9,10,
-        10,11,11,12,13,13,14,15,14,16,14,15,16,16,16,16,
-        15,10,11,11,12,13,13,14,15,15,15,15,15,16,15,16,
-        15,16,15,15,10,11,11,13,13,14,13,13,15,14,15,15,
-        16,15,15,15,16,15,16,10,12,12,14,14,14,14,14,16,
-        16,15,15,15,16,16,16,16,16,16,11,12,12,14,14,14,
-        14,15,15,16,15,16,15,16,15,16,16,16,16,12,12,13,
-        14,14,15,16,16,16,16,16,16,15,16,16,16,16,16,16,
-        12,13,13,14,14,14,14,15,16,15,16,16,16,16,16,16,
-        16,16,16,12,13,14,14,14,16,15,16,15,16,16,16,16,
-        16,16,16,16,16,16,12,14,13,14,15,15,15,16,15,16,
-        16,15,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _44u8_p9_1 = {
-        2, 361,
-        (long *)_vq_lengthlist__44u8_p9_1,
-        1, -518287360, 1622704128, 5, 0,
-        (long *)_vq_quantlist__44u8_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44u8_p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44u8_p9_2[] = {
-         2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _44u8_p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44u8_p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44u8_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44u9__long[] = {
-         3, 9,13,13,14,15,14,14,15,15, 5, 5, 9,10,12,12,
-        13,14,16,15,10, 6, 6, 6, 8,11,12,13,16,15,11, 7,
-         5, 3, 5, 8,10,12,15,15,10,10, 7, 4, 3, 5, 8,10,
-        12,12,12,12, 9, 7, 5, 4, 6, 8,10,13,13,12,11, 9,
-         7, 5, 5, 6, 9,12,14,12,12,10, 8, 6, 6, 6, 7,11,
-        13,12,14,13,10, 8, 7, 7, 7,10,11,11,12,13,12,11,
-        10, 8, 8, 9,
-};
-
-static const static_codebook _huff_book__44u9__long = {
-        2, 100,
-        (long *)_huff_lengthlist__44u9__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _huff_lengthlist__44u9__short[] = {
-         9,16,18,18,17,17,17,17,17,17, 5, 8,11,12,11,12,
-        17,17,16,16, 6, 6, 8, 8, 9,10,14,15,16,16, 6, 7,
-         7, 4, 6, 9,13,16,16,16, 6, 6, 7, 4, 5, 8,11,15,
-        17,16, 7, 6, 7, 6, 6, 8, 9,10,14,16,11, 8, 8, 7,
-         6, 6, 3, 4,10,15,14,12,12,10, 5, 6, 3, 3, 8,13,
-        15,17,15,11, 6, 8, 6, 6, 9,14,17,15,15,12, 8,10,
-         9, 9,12,15,
-};
-
-static const static_codebook _huff_book__44u9__short = {
-        2, 100,
-        (long *)_huff_lengthlist__44u9__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44u9_p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u9_p1_0[] = {
-         1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7,
-         9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 9, 5, 7, 7, 7, 9,
-         9, 7, 9, 9, 8, 9, 9, 9,10,11, 9,11,11, 7, 9, 9,
-         9,11,10, 9,11,11, 5, 7, 7, 7, 9, 9, 8, 9,10, 7,
-         9, 9, 9,11,11, 9,10,11, 7, 9,10, 9,11,11, 9,11,
-        10,
-};
-
-static const static_codebook _44u9_p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u9_p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44u9_p1_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p2_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u9_p2_0[] = {
-         3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
-         9, 9,11,10, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
-         8,10,10, 7, 8, 8, 9,10, 9,10,10,11,11, 9, 9,10,
-        11,11, 6, 7, 7, 9, 9, 7, 8, 8,10, 9, 7, 8, 8,10,
-        10, 9,10, 9,11,11, 9,10,10,11,11, 8, 9, 9,11,11,
-         9,10,10,12,11, 9,10,10,11,12,11,11,11,13,13,11,
-        11,11,12,13, 8, 9, 9,11,11, 9,10,10,11,11, 9,10,
-        10,12,11,11,12,11,13,12,11,11,12,13,13, 6, 7, 7,
-         9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
-        11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11,
-         8, 9, 9,10,10,10,11,11,12,12,10,10,11,12,12, 7,
-         8, 8,10,10, 8, 9, 8,10,10, 8, 9, 9,10,10,10,11,
-        10,12,11,10,10,11,12,12, 9,10,10,11,12,10,11,11,
-        12,12,10,11,10,12,12,12,12,12,13,13,11,12,12,13,
-        13, 9,10,10,11,11, 9,10,10,12,12,10,11,11,12,13,
-        11,12,11,13,12,12,12,12,13,14, 6, 7, 7, 9, 9, 7,
-         8, 8,10,10, 7, 8, 8,10,10, 9,10,10,11,11, 9,10,
-        10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,10, 8, 8, 9,
-        10,10,10,11,10,12,12,10,10,11,11,12, 7, 8, 8,10,
-        10, 8, 9, 9,10,10, 8, 9, 9,10,10,10,11,10,12,12,
-        10,11,10,12,12, 9,10,10,12,11,10,11,11,12,12, 9,
-        10,10,12,12,12,12,12,13,13,11,11,12,12,14, 9,10,
-        10,11,12,10,11,11,12,12,10,11,11,12,12,11,12,12,
-        14,14,12,12,12,13,13, 8, 9, 9,11,11, 9,10,10,12,
-        11, 9,10,10,12,12,11,12,11,13,13,11,11,12,13,13,
-         9,10,10,12,12,10,11,11,12,12,10,11,11,12,12,12,
-        12,12,14,14,12,12,12,13,13, 9,10,10,12,11,10,11,
-        10,12,12,10,11,11,12,12,11,12,12,14,13,12,12,12,
-        13,14,11,12,11,13,13,11,12,12,13,13,12,12,12,14,
-        14,13,13,13,13,15,13,13,14,15,15,11,11,11,13,13,
-        11,12,11,13,13,11,12,12,13,13,12,13,12,15,13,13,
-        13,14,14,15, 8, 9, 9,11,11, 9,10,10,11,12, 9,10,
-        10,11,12,11,12,11,13,13,11,12,12,13,13, 9,10,10,
-        11,12,10,11,10,12,12,10,10,11,12,13,12,12,12,14,
-        13,11,12,12,13,14, 9,10,10,12,12,10,11,11,12,12,
-        10,11,11,12,12,12,12,12,14,13,12,12,12,14,13,11,
-        11,11,13,13,11,12,12,14,13,11,11,12,13,13,13,13,
-        13,15,14,12,12,13,13,15,11,12,12,13,13,12,12,12,
-        13,14,11,12,12,13,13,13,13,14,14,15,13,13,13,14,
-        14,
-};
-
-static const static_codebook _44u9_p2_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44u9_p2_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u9_p2_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p3_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44u9_p3_0[] = {
-         3, 4, 4, 5, 5, 7, 7, 8, 8, 4, 5, 5, 6, 6, 7, 7,
-         9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
-         8, 8, 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7,
-         8, 8, 9, 9,10,10, 7, 7, 7, 8, 8, 9, 9,10,10, 8,
-         9, 9,10, 9,10,10,11,11, 8, 9, 9, 9,10,10,10,11,
-        11,
-};
-
-static const static_codebook _44u9_p3_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44u9_p3_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u9_p3_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p4_0[] = {
-        8,
-        7,
-        9,
-        6,
-        10,
-        5,
-        11,
-        4,
-        12,
-        3,
-        13,
-        2,
-        14,
-        1,
-        15,
-        0,
-        16,
-};
-
-static const long _vq_lengthlist__44u9_p4_0[] = {
-         4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
-        11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
-        11,11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
-        10,11,11, 6, 6, 6, 7, 6, 7, 7, 8, 8, 9, 9,10,10,
-        11,11,12,11, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9,10,
-        10,11,11,11,12, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,
-        10,10,11,11,12,12, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
-         9,10,10,11,11,12,12, 8, 8, 8, 8, 8, 9, 8,10, 9,
-        10,10,11,10,12,11,13,12, 8, 8, 8, 8, 8, 9, 9, 9,
-        10,10,10,10,11,11,12,12,12, 8, 8, 8, 9, 9, 9, 9,
-        10,10,11,10,12,11,12,12,13,12, 8, 8, 8, 9, 9, 9,
-         9,10,10,10,11,11,11,12,12,12,13, 9, 9, 9,10,10,
-        10,10,11,10,11,11,12,11,13,12,13,13, 9, 9,10,10,
-        10,10,10,10,11,11,11,11,12,12,13,13,13,10,11,10,
-        11,11,11,11,12,11,12,12,13,12,13,13,14,13,10,10,
-        10,11,11,11,11,11,12,12,12,12,13,13,13,13,14,11,
-        11,11,12,11,12,12,12,12,13,13,13,13,14,13,14,14,
-        11,11,11,11,12,12,12,12,12,12,13,13,13,13,14,14,
-        14,
-};
-
-static const static_codebook _44u9_p4_0 = {
-        2, 289,
-        (long *)_vq_lengthlist__44u9_p4_0,
-        1, -529530880, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u9_p4_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p5_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44u9_p5_0[] = {
-         1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8, 9, 9, 7,
-         9, 9, 5, 8, 8, 7, 9, 9, 8, 9, 9, 5, 8, 8, 8,10,
-        10, 8,10,10, 7,10,10, 9,10,12, 9,11,11, 7,10,10,
-         9,11,10, 9,11,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
-        10,10, 9,12,11, 9,10,11, 7,10,10, 9,11,11,10,12,
-        10,
-};
-
-static const static_codebook _44u9_p5_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44u9_p5_0,
-        1, -529137664, 1618345984, 2, 0,
-        (long *)_vq_quantlist__44u9_p5_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p5_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u9_p5_1[] = {
-         5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 6,
-         7, 7, 7, 7, 8, 7, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7,
-         7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 6, 6, 6, 7,
-         7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 8, 7, 8, 8,
-         8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
-         8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8,
-         8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8,
-         8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u9_p5_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u9_p5_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u9_p5_1,
-        0
-};
-
-static const long _vq_quantlist__44u9_p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u9_p6_0[] = {
-         2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 5,
-         7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 5, 6, 7, 7, 8,
-         8, 8, 8, 9, 9,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-        10,10,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10,
-        10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11, 7, 8,
-         8, 8, 8, 9, 9, 9, 9,10,10,11,11, 8, 8, 8, 9, 9,
-         9, 9, 9,10,10,10,11,11, 8, 8, 8, 9, 9, 9, 9,10,
-         9,10,10,11,11, 9, 9, 9,10,10,10,10,10,11,11,11,
-        11,12, 9, 9, 9,10,10,10,10,10,10,11,10,12,11,10,
-        10,10,10,10,11,11,11,11,11,12,12,12,10,10,10,10,
-        10,11,11,11,11,12,11,12,12,
-};
-
-static const static_codebook _44u9_p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u9_p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44u9_p6_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44u9_p6_1[] = {
-         4, 4, 4, 5, 5, 4, 5, 4, 5, 5, 4, 4, 5, 5, 5, 5,
-         5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44u9_p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44u9_p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44u9_p6_1,
-        0
-};
-
-static const long _vq_quantlist__44u9_p7_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44u9_p7_0[] = {
-         1, 4, 5, 6, 6, 7, 7, 8, 9,10,10,11,11, 5, 6, 6,
-         7, 7, 8, 8, 9, 9,10,10,11,11, 5, 6, 6, 7, 7, 8,
-         8, 9, 9,10,10,11,11, 6, 7, 7, 8, 8, 9, 9,10,10,
-        11,11,12,12, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
-        12, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13, 8, 8,
-         8, 9, 9,10,10,11,11,12,12,13,13, 9, 9, 9,10,10,
-        11,11,12,12,13,13,13,13, 9, 9, 9,10,10,11,11,12,
-        12,13,13,14,14,10,10,10,11,11,12,12,13,13,14,13,
-        15,14,10,10,10,11,11,12,12,13,13,14,14,14,14,11,
-        11,12,12,12,13,13,14,14,14,14,15,15,11,11,12,12,
-        12,13,13,14,14,14,15,15,15,
-};
-
-static const static_codebook _44u9_p7_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44u9_p7_0,
-        1, -523206656, 1618345984, 4, 0,
-        (long *)_vq_quantlist__44u9_p7_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p7_1[] = {
-        5,
-        4,
-        6,
-        3,
-        7,
-        2,
-        8,
-        1,
-        9,
-        0,
-        10,
-};
-
-static const long _vq_lengthlist__44u9_p7_1[] = {
-         5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7,
-         7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7, 7,
-         7, 7, 7, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u9_p7_1 = {
-        2, 121,
-        (long *)_vq_lengthlist__44u9_p7_1,
-        1, -531365888, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44u9_p7_1,
-        0
-};
-
-static const long _vq_quantlist__44u9_p8_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u9_p8_0[] = {
-         1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10, 9,11,10, 4,
-         6, 6, 8, 8, 9, 9, 9, 9,10,10,11,10,12,10, 4, 6,
-         6, 8, 8, 9,10, 9, 9,10,10,11,11,12,12, 7, 8, 8,
-        10,10,11,11,10,10,11,11,12,12,13,12, 7, 8, 8,10,
-        10,11,11,10,10,11,11,12,12,12,13, 8,10, 9,11,11,
-        12,12,11,11,12,12,13,13,14,13, 8, 9, 9,11,11,12,
-        12,11,12,12,12,13,13,14,13, 8, 9, 9,10,10,12,11,
-        13,12,13,13,14,13,15,14, 8, 9, 9,10,10,11,12,12,
-        12,13,13,13,14,14,14, 9,10,10,12,11,13,12,13,13,
-        14,13,14,14,14,15, 9,10,10,11,12,12,12,13,13,14,
-        14,14,15,15,15,10,11,11,12,12,13,13,14,14,14,14,
-        15,14,16,15,10,11,11,12,12,13,13,13,14,14,14,14,
-        14,15,16,11,12,12,13,13,14,13,14,14,15,14,15,16,
-        16,16,11,12,12,13,13,14,13,14,14,15,15,15,16,15,
-        15,
-};
-
-static const static_codebook _44u9_p8_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u9_p8_0,
-        1, -520986624, 1620377600, 4, 0,
-        (long *)_vq_quantlist__44u9_p8_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p8_1[] = {
-        10,
-        9,
-        11,
-        8,
-        12,
-        7,
-        13,
-        6,
-        14,
-        5,
-        15,
-        4,
-        16,
-        3,
-        17,
-        2,
-        18,
-        1,
-        19,
-        0,
-        20,
-};
-
-static const long _vq_lengthlist__44u9_p8_1[] = {
-         4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
-         7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10, 8, 8,
-         8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-        10, 9,10, 9,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
-         9, 9, 9, 9, 9,10,10, 9,10,10,10,10,10, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10,
-        10,10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
-        10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
-         9, 9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
-         9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
-        10, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10,
-        10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
-        10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-         9, 9, 9, 9,10, 9, 9,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10, 9, 9, 9,10, 9,10, 9,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, 9,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
-         9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10, 9, 9, 9,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44u9_p8_1 = {
-        2, 441,
-        (long *)_vq_lengthlist__44u9_p8_1,
-        1, -529268736, 1611661312, 5, 0,
-        (long *)_vq_quantlist__44u9_p8_1,
-        0
-};
-
-static const long _vq_quantlist__44u9_p9_0[] = {
-        7,
-        6,
-        8,
-        5,
-        9,
-        4,
-        10,
-        3,
-        11,
-        2,
-        12,
-        1,
-        13,
-        0,
-        14,
-};
-
-static const long _vq_lengthlist__44u9_p9_0[] = {
-         1, 3, 3,11,11,11,11,11,11,11,11,11,11,11,11, 4,
-        10,11,11,11,11,11,11,11,11,11,11,11,11,11, 4,10,
-        10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _44u9_p9_0 = {
-        2, 225,
-        (long *)_vq_lengthlist__44u9_p9_0,
-        1, -510036736, 1631393792, 4, 0,
-        (long *)_vq_quantlist__44u9_p9_0,
-        0
-};
-
-static const long _vq_quantlist__44u9_p9_1[] = {
-        9,
-        8,
-        10,
-        7,
-        11,
-        6,
-        12,
-        5,
-        13,
-        4,
-        14,
-        3,
-        15,
-        2,
-        16,
-        1,
-        17,
-        0,
-        18,
-};
-
-static const long _vq_lengthlist__44u9_p9_1[] = {
-         1, 4, 4, 7, 7, 8, 7, 8, 7, 9, 8,10, 9,10,10,11,
-        11,12,12, 4, 7, 6, 9, 9,10, 9, 9, 8,10,10,11,10,
-        12,10,13,12,13,12, 4, 6, 6, 9, 9, 9, 9, 9, 9,10,
-        10,11,11,11,12,12,12,12,12, 7, 9, 8,11,10,10,10,
-        11,10,11,11,12,12,13,12,13,13,13,13, 7, 8, 9,10,
-        10,11,11,10,10,11,11,11,12,13,13,13,13,14,14, 8,
-         9, 9,11,11,12,11,12,12,13,12,12,13,13,14,15,14,
-        14,14, 8, 9, 9,10,11,11,11,12,12,13,12,13,13,14,
-        14,14,15,14,16, 8, 9, 9,11,10,12,12,12,12,15,13,
-        13,13,17,14,15,15,15,14, 8, 9, 9,10,11,11,12,13,
-        12,13,13,13,14,15,14,14,14,16,15, 9,11,10,12,12,
-        13,13,13,13,14,14,16,15,14,14,14,15,15,17, 9,10,
-        10,11,11,13,13,13,14,14,13,15,14,15,14,15,16,15,
-        16,10,11,11,12,12,13,14,15,14,15,14,14,15,17,16,
-        15,15,17,17,10,12,11,13,12,14,14,13,14,15,15,15,
-        15,16,17,17,15,17,16,11,12,12,14,13,15,14,15,16,
-        17,15,17,15,17,15,15,16,17,15,11,11,12,14,14,14,
-        14,14,15,15,16,15,17,17,17,16,17,16,15,12,12,13,
-        14,14,14,15,14,15,15,16,16,17,16,17,15,17,17,16,
-        12,14,12,14,14,15,15,15,14,14,16,16,16,15,16,16,
-        15,17,15,12,13,13,14,15,14,15,17,15,17,16,17,17,
-        17,16,17,16,17,17,12,13,13,14,16,15,15,15,16,15,
-        17,17,15,17,15,17,16,16,17,
-};
-
-static const static_codebook _44u9_p9_1 = {
-        2, 361,
-        (long *)_vq_lengthlist__44u9_p9_1,
-        1, -518287360, 1622704128, 5, 0,
-        (long *)_vq_quantlist__44u9_p9_1,
-        0
-};
-
-static const long _vq_quantlist__44u9_p9_2[] = {
-        24,
-        23,
-        25,
-        22,
-        26,
-        21,
-        27,
-        20,
-        28,
-        19,
-        29,
-        18,
-        30,
-        17,
-        31,
-        16,
-        32,
-        15,
-        33,
-        14,
-        34,
-        13,
-        35,
-        12,
-        36,
-        11,
-        37,
-        10,
-        38,
-        9,
-        39,
-        8,
-        40,
-        7,
-        41,
-        6,
-        42,
-        5,
-        43,
-        4,
-        44,
-        3,
-        45,
-        2,
-        46,
-        1,
-        47,
-        0,
-        48,
-};
-
-static const long _vq_lengthlist__44u9_p9_2[] = {
-         2, 4, 4, 5, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
-         6, 6, 6, 7, 6, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-         7,
-};
-
-static const static_codebook _44u9_p9_2 = {
-        1, 49,
-        (long *)_vq_lengthlist__44u9_p9_2,
-        1, -526909440, 1611661312, 6, 0,
-        (long *)_vq_quantlist__44u9_p9_2,
-        0
-};
-
-static const long _huff_lengthlist__44un1__long[] = {
-         5, 6,12, 9,14, 9, 9,19, 6, 1, 5, 5, 8, 7, 9,19,
-        12, 4, 4, 7, 7, 9,11,18, 9, 5, 6, 6, 8, 7, 8,17,
-        14, 8, 7, 8, 8,10,12,18, 9, 6, 8, 6, 8, 6, 8,18,
-         9, 8,11, 8,11, 7, 5,15,16,18,18,18,17,15,11,18,
-};
-
-static const static_codebook _huff_book__44un1__long = {
-        2, 64,
-        (long *)_huff_lengthlist__44un1__long,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
-
-static const long _vq_quantlist__44un1__p1_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44un1__p1_0[] = {
-         1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8,
-        10,11, 5, 8, 8, 8,11,10, 8,11,10, 4, 9, 9, 8,11,
-        11, 8,11,11, 8,12,11,10,12,14,11,13,13, 7,11,11,
-        10,13,11,11,13,14, 4, 8, 9, 8,11,11, 8,11,12, 7,
-        11,11,11,14,13,10,11,13, 8,11,12,11,13,13,10,14,
-        12,
-};
-
-static const static_codebook _44un1__p1_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44un1__p1_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44un1__p1_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p2_0[] = {
-        1,
-        0,
-        2,
-};
-
-static const long _vq_lengthlist__44un1__p2_0[] = {
-         2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6,
-         7, 9, 5, 7, 7, 6, 8, 7, 7, 9, 8, 4, 7, 7, 7, 9,
-         8, 7, 8, 8, 7, 9, 8, 8, 8,10, 9,10,10, 6, 8, 8,
-         7,10, 8, 9,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6,
-         8, 8, 9,10,10, 7, 8,10, 6, 8, 9, 9,10,10, 8,10,
-         8,
-};
-
-static const static_codebook _44un1__p2_0 = {
-        4, 81,
-        (long *)_vq_lengthlist__44un1__p2_0,
-        1, -535822336, 1611661312, 2, 0,
-        (long *)_vq_quantlist__44un1__p2_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p3_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44un1__p3_0[] = {
-         1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9,
-        10, 9,12,12, 9, 9,10,11,12, 6, 8, 8,10,10, 8,10,
-        10,11,11, 8, 9,10,11,11,10,11,11,13,13,10,11,11,
-        12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10,10,11,
-        11,10,11,11,13,12,10,11,11,13,12, 9,11,11,15,13,
-        10,12,11,15,13,10,11,11,15,14,12,14,13,16,15,12,
-        13,13,17,16, 9,11,11,13,15,10,11,12,14,15,10,11,
-        12,14,15,12,13,13,15,16,12,13,13,16,16, 5, 8, 8,
-        11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
-        14,11,12,12,14,14, 8,11,10,13,12,10,11,12,12,13,
-        10,12,12,13,13,12,12,13,13,15,11,12,13,15,14, 7,
-        10,10,12,12, 9,12,11,13,12,10,12,12,13,14,12,13,
-        12,15,13,11,13,12,14,15,10,12,12,16,14,11,12,12,
-        16,15,11,13,12,17,16,13,13,15,15,17,13,15,15,20,
-        17,10,12,12,14,16,11,12,12,15,15,11,13,13,15,18,
-        13,14,13,15,15,13,15,14,16,16, 5, 8, 8,11,11, 8,
-        10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
-        12,14,15, 7,10,10,13,12,10,12,12,14,13, 9,10,12,
-        12,13,11,13,13,15,15,11,12,13,13,15, 8,10,10,12,
-        13,10,12,12,13,13,10,12,11,13,13,11,13,12,15,15,
-        12,13,12,15,13,10,12,12,16,14,11,12,12,16,15,10,
-        12,12,16,14,14,15,14,18,16,13,13,14,15,16,10,12,
-        12,14,16,11,13,13,16,16,11,13,12,14,16,13,15,15,
-        18,18,13,15,13,16,14, 8,11,11,16,16,10,13,13,17,
-        16,10,12,12,16,15,14,16,15,20,17,13,14,14,17,17,
-         9,12,12,16,16,11,13,14,16,17,11,13,13,16,16,15,
-        15,19,18, 0,14,15,15,18,18, 9,12,12,17,16,11,13,
-        12,17,16,11,12,13,15,17,15,16,15, 0,19,14,15,14,
-        19,18,12,14,14, 0,16,13,14,14,19,18,13,15,16,17,
-        16,15,15,17,18, 0,14,16,16,19, 0,12,14,14,16,18,
-        13,15,13,17,18,13,15,14,17,18,15,18,14,18,18,16,
-        17,16, 0,17, 8,11,11,15,15,10,12,12,16,16,10,13,
-        13,16,16,13,15,14,17,17,14,15,17,17,18, 9,12,12,
-        16,15,11,13,13,16,16,11,12,13,17,17,14,14,15,17,
-        17,14,15,16, 0,18, 9,12,12,16,17,11,13,13,16,17,
-        11,14,13,18,17,14,16,14,17,17,15,17,17,18,18,12,
-        14,14, 0,16,13,15,15,19, 0,12,13,15, 0, 0,14,17,
-        16,19, 0,16,15,18,18, 0,12,14,14,17, 0,13,14,14,
-        17, 0,13,15,14, 0,18,15,16,16, 0,18,15,18,15, 0,
-        17,
-};
-
-static const static_codebook _44un1__p3_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44un1__p3_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44un1__p3_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p4_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44un1__p4_0[] = {
-         3, 5, 5, 9, 9, 5, 6, 6,10, 9, 5, 6, 6, 9,10,10,
-        10,10,12,11, 9,10,10,12,12, 5, 7, 7,10,10, 7, 7,
-         8,10,11, 7, 7, 8,10,11,10,10,11,11,13,10,10,11,
-        11,13, 6, 7, 7,10,10, 7, 8, 7,11,10, 7, 8, 7,10,
-        10,10,11, 9,13,11,10,11,10,13,11,10,10,10,14,13,
-        10,11,11,14,13,10,10,11,13,14,12,12,13,15,15,12,
-        12,13,13,14,10,10,10,12,13,10,11,10,13,13,10,11,
-        11,13,13,12,13,12,14,13,12,13,13,14,13, 5, 7, 7,
-        10,10, 7, 8, 8,11,10, 7, 8, 8,10,10,11,11,11,13,
-        13,10,11,11,12,12, 7, 8, 8,11,11, 7, 8, 9,10,12,
-         8, 9, 9,11,11,11,10,12,11,14,11,11,12,13,13, 6,
-         8, 8,10,11, 7, 9, 7,12,10, 8, 9,10,11,12,10,12,
-        10,14,11,11,12,11,13,13,10,11,11,14,14,10,10,11,
-        13,14,11,12,12,15,13,12,11,14,12,16,12,13,14,15,
-        16,10,10,11,13,14,10,11,10,14,12,11,12,12,13,14,
-        12,13,11,15,12,14,14,14,15,15, 5, 7, 7,10,10, 7,
-         8, 8,10,10, 7, 8, 8,10,11,10,11,10,12,12,10,11,
-        11,12,13, 6, 8, 8,11,11, 8, 9, 9,12,11, 7, 7, 9,
-        10,12,11,11,11,12,13,11,10,12,11,15, 7, 8, 8,11,
-        11, 8, 9, 9,11,11, 7, 9, 8,12,10,11,12,11,13,12,
-        11,12,10,15,11,10,11,10,14,12,11,12,11,14,13,10,
-        10,11,13,14,13,13,13,17,15,12,11,14,12,15,10,10,
-        11,13,14,11,12,12,14,14,10,11,10,14,13,13,14,13,
-        16,17,12,14,11,16,12, 9,10,10,14,13,10,11,10,14,
-        14,10,11,11,13,13,13,14,14,16,15,12,13,13,14,14,
-         9,11,10,14,13,10,10,12,13,14,11,12,11,14,13,13,
-        14,14,14,15,13,14,14,15,15, 9,10,11,13,14,10,11,
-        10,15,13,11,11,12,12,15,13,14,12,15,14,13,13,14,
-        14,15,12,13,12,16,14,11,11,12,15,14,13,15,13,16,
-        14,13,12,15,12,17,15,16,15,16,16,12,12,13,13,15,
-        11,13,11,15,14,13,13,14,15,17,13,14,12, 0,13,14,
-        15,14,15, 0, 9,10,10,13,13,10,11,11,13,13,10,11,
-        11,13,13,12,13,12,14,14,13,14,14,15,17, 9,10,10,
-        13,13,11,12,11,15,12,10,10,11,13,16,13,14,13,15,
-        14,13,13,14,15,16,10,10,11,13,14,11,11,12,13,14,
-        10,12,11,14,14,13,13,13,14,15,13,15,13,16,15,12,
-        13,12,15,13,12,15,13,15,15,11,11,13,14,15,15,15,
-        15,15,17,13,12,14,13,17,12,12,14,14,15,13,13,14,
-        14,16,11,13,11,16,15,14,16,16,17, 0,14,13,11,16,
-        12,
-};
-
-static const static_codebook _44un1__p4_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44un1__p4_0,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44un1__p4_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p5_0[] = {
-        4,
-        3,
-        5,
-        2,
-        6,
-        1,
-        7,
-        0,
-        8,
-};
-
-static const long _vq_lengthlist__44un1__p5_0[] = {
-         1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 7, 8, 8,
-        10, 9, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 7, 9, 9,
-         9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 8, 8, 8,
-         9, 9,10,10,11,11, 8, 8, 8, 9, 9,10,10,11,11, 9,
-        10,10,11,10,11,11,12,12, 9,10,10,10,11,11,11,12,
-        12,
-};
-
-static const static_codebook _44un1__p5_0 = {
-        2, 81,
-        (long *)_vq_lengthlist__44un1__p5_0,
-        1, -531628032, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44un1__p5_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p6_0[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44un1__p6_0[] = {
-         1, 4, 4, 6, 6, 8, 8,10,10,11,11,15,15, 4, 5, 5,
-         8, 8, 9, 9,11,11,12,12,16,16, 4, 5, 6, 8, 8, 9,
-         9,11,11,12,12,14,14, 7, 8, 8, 9, 9,10,10,11,12,
-        13,13,16,17, 7, 8, 8, 9, 9,10,10,12,12,12,13,15,
-        15, 9,10,10,10,10,11,11,12,12,13,13,15,16, 9, 9,
-         9,10,10,11,11,13,12,13,13,17,17,10,11,11,11,12,
-        12,12,13,13,14,15, 0,18,10,11,11,12,12,12,13,14,
-        13,14,14,17,16,11,12,12,13,13,14,14,14,14,15,16,
-        17,16,11,12,12,13,13,14,14,14,14,15,15,17,17,14,
-        15,15,16,16,16,17,17,16, 0,17, 0,18,14,15,15,16,
-        16, 0,15,18,18, 0,16, 0, 0,
-};
-
-static const static_codebook _44un1__p6_0 = {
-        2, 169,
-        (long *)_vq_lengthlist__44un1__p6_0,
-        1, -526516224, 1616117760, 4, 0,
-        (long *)_vq_quantlist__44un1__p6_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p6_1[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44un1__p6_1[] = {
-         2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 6, 5, 5,
-         6, 5, 6, 6, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44un1__p6_1 = {
-        2, 25,
-        (long *)_vq_lengthlist__44un1__p6_1,
-        1, -533725184, 1611661312, 3, 0,
-        (long *)_vq_quantlist__44un1__p6_1,
-        0
-};
-
-static const long _vq_quantlist__44un1__p7_0[] = {
-        2,
-        1,
-        3,
-        0,
-        4,
-};
-
-static const long _vq_lengthlist__44un1__p7_0[] = {
-         1, 5, 3,11,11,11,11,11,11,11, 8,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11, 8,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11, 7,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-        10,
-};
-
-static const static_codebook _44un1__p7_0 = {
-        4, 625,
-        (long *)_vq_lengthlist__44un1__p7_0,
-        1, -518709248, 1626677248, 3, 0,
-        (long *)_vq_quantlist__44un1__p7_0,
-        0
-};
-
-static const long _vq_quantlist__44un1__p7_1[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44un1__p7_1[] = {
-         1, 4, 4, 6, 6, 6, 6, 9, 8, 9, 8, 8, 8, 5, 7, 7,
-         7, 7, 8, 8, 8,10, 8,10, 8, 9, 5, 7, 7, 8, 7, 7,
-         8,10,10,11,10,12,11, 7, 8, 8, 9, 9, 9,10,11,11,
-        11,11,11,11, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,
-        12, 7, 8, 8, 9, 9,10,11,11,12,11,12,11,11, 7, 8,
-         8, 9, 9,10,10,11,11,11,12,12,11, 8,10,10,10,10,
-        11,11,14,11,12,12,12,13, 9,10,10,10,10,12,11,14,
-        11,14,11,12,13,10,11,11,11,11,13,11,14,14,13,13,
-        13,14,11,11,11,12,11,12,12,12,13,14,14,13,14,12,
-        11,12,12,12,12,13,13,13,14,13,14,14,11,12,12,14,
-        12,13,13,12,13,13,14,14,14,
-};
-
-static const static_codebook _44un1__p7_1 = {
-        2, 169,
-        (long *)_vq_lengthlist__44un1__p7_1,
-        1, -523010048, 1618608128, 4, 0,
-        (long *)_vq_quantlist__44un1__p7_1,
-        0
-};
-
-static const long _vq_quantlist__44un1__p7_2[] = {
-        6,
-        5,
-        7,
-        4,
-        8,
-        3,
-        9,
-        2,
-        10,
-        1,
-        11,
-        0,
-        12,
-};
-
-static const long _vq_lengthlist__44un1__p7_2[] = {
-         3, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 9, 8, 4, 5, 5,
-         6, 6, 8, 8, 9, 8, 9, 9, 9, 9, 4, 5, 5, 7, 6, 8,
-         8, 8, 8, 9, 8, 9, 8, 6, 7, 7, 7, 8, 8, 8, 9, 9,
-         9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
-         9, 7, 8, 8, 8, 8, 9, 8, 9, 9,10, 9, 9,10, 7, 8,
-         8, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 8, 9, 9, 9, 9,
-         9, 9, 9, 9,10,10, 9,10, 8, 9, 9, 9, 9, 9, 9, 9,
-         9, 9, 9,10,10, 9, 9, 9,10, 9, 9,10, 9, 9,10,10,
-        10,10, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10, 9,
-         9, 9,10, 9, 9,10,10, 9,10,10,10,10, 9, 9, 9,10,
-         9, 9, 9,10,10,10,10,10,10,
-};
-
-static const static_codebook _44un1__p7_2 = {
-        2, 169,
-        (long *)_vq_lengthlist__44un1__p7_2,
-        1, -531103744, 1611661312, 4, 0,
-        (long *)_vq_quantlist__44un1__p7_2,
-        0
-};
-
-static const long _huff_lengthlist__44un1__short[] = {
-        12,12,14,12,14,14,14,14,12, 6, 6, 8, 9, 9,11,14,
-        12, 4, 2, 6, 6, 7,11,14,13, 6, 5, 7, 8, 9,11,14,
-        13, 8, 5, 8, 6, 8,12,14,12, 7, 7, 8, 8, 8,10,14,
-        12, 6, 3, 4, 4, 4, 7,14,11, 7, 4, 6, 6, 6, 8,14,
-};
-
-static const static_codebook _huff_book__44un1__short = {
-        2, 64,
-        (long *)_huff_lengthlist__44un1__short,
-        0, 0, 0, 0, 0,
-        NULL,
-        0
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c
deleted file mode 100644
index 4876970..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: basic codebook pack/unpack/code/decode operations
- last mod: $Id: codebook.c 17553 2010-10-21 17:54:26Z tterribe $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codebook.h"
-#include "scales.h"
-#include "misc.h"
-#include "os.h"
-
-/* packs the given codebook into the bitstream **************************/
-
-int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *opb){
-  long i,j;
-  int ordered=0;
-
-  /* first the basic parameters */
-  oggpack_write(opb,0x564342,24);
-  oggpack_write(opb,c->dim,16);
-  oggpack_write(opb,c->entries,24);
-
-  /* pack the codewords.  There are two packings; length ordered and
-     length random.  Decide between the two now. */
-
-  for(i=1;i<c->entries;i++)
-    if(c->lengthlist[i-1]==0 || c->lengthlist[i]<c->lengthlist[i-1])break;
-  if(i==c->entries)ordered=1;
-
-  if(ordered){
-    /* length ordered.  We only need to say how many codewords of
-       each length.  The actual codewords are generated
-       deterministically */
-
-    long count=0;
-    oggpack_write(opb,1,1);  /* ordered */
-    oggpack_write(opb,c->lengthlist[0]-1,5); /* 1 to 32 */
-
-    for(i=1;i<c->entries;i++){
-      long thisx=c->lengthlist[i];
-      long last=c->lengthlist[i-1];
-      if(thisx>last){
-	for(j=last;j<thisx;j++){
-          oggpack_write(opb,i-count,_ilog(c->entries-count));
-          count=i;
-        }
-      }
-    }
-    oggpack_write(opb,i-count,_ilog(c->entries-count));
-
-  }else{
-    /* length random.  Again, we don't code the codeword itself, just
-       the length.  This time, though, we have to encode each length */
-    oggpack_write(opb,0,1);   /* unordered */
-
-    /* algortihmic mapping has use for 'unused entries', which we tag
-       here.  The algorithmic mapping happens as usual, but the unused
-       entry has no codeword. */
-    for(i=0;i<c->entries;i++)
-      if(c->lengthlist[i]==0)break;
-
-    if(i==c->entries){
-      oggpack_write(opb,0,1); /* no unused entries */
-      for(i=0;i<c->entries;i++)
-        oggpack_write(opb,c->lengthlist[i]-1,5);
-    }else{
-      oggpack_write(opb,1,1); /* we have unused entries; thus we tag */
-      for(i=0;i<c->entries;i++){
-        if(c->lengthlist[i]==0){
-          oggpack_write(opb,0,1);
-        }else{
-          oggpack_write(opb,1,1);
-          oggpack_write(opb,c->lengthlist[i]-1,5);
-        }
-      }
-    }
-  }
-
-  /* is the entry number the desired return value, or do we have a
-     mapping? If we have a mapping, what type? */
-  oggpack_write(opb,c->maptype,4);
-  switch(c->maptype){
-  case 0:
-    /* no mapping */
-    break;
-  case 1:case 2:
-    /* implicitly populated value mapping */
-    /* explicitly populated value mapping */
-
-    if(!c->quantlist){
-      /* no quantlist?  error */
-      return(-1);
-    }
-
-    /* values that define the dequantization */
-    oggpack_write(opb,c->q_min,32);
-    oggpack_write(opb,c->q_delta,32);
-    oggpack_write(opb,c->q_quant-1,4);
-    oggpack_write(opb,c->q_sequencep,1);
-
-    {
-      int quantvals;
-      switch(c->maptype){
-      case 1:
-        /* a single column of (c->entries/c->dim) quantized values for
-           building a full value list algorithmically (square lattice) */
-        quantvals=_book_maptype1_quantvals(c);
-        break;
-      case 2:
-        /* every value (c->entries*c->dim total) specified explicitly */
-        quantvals=c->entries*c->dim;
-        break;
-      default: /* NOT_REACHABLE */
-        quantvals=-1;
-      }
-
-      /* quantized values */
-      for(i=0;i<quantvals;i++)
-        oggpack_write(opb,labs(c->quantlist[i]),c->q_quant);
-
-    }
-    break;
-  default:
-    /* error case; we don't have any other map types now */
-    return(-1);
-  }
-
-  return(0);
-}
-
-/* unpacks a codebook from the packet buffer into the codebook struct,
-   readies the codebook auxiliary structures for decode *************/
-static_codebook *vorbis_staticbook_unpack(oggpack_buffer *opb){
-  long i,j;
-  static_codebook *s=(static_codebook*)_ogg_calloc(1,sizeof(*s));
-  s->allocedp=1;
-
-  /* make sure alignment is correct */
-  if(oggpack_read(opb,24)!=0x564342)goto _eofout;
-
-  /* first the basic parameters */
-  s->dim=oggpack_read(opb,16);
-  s->entries=oggpack_read(opb,24);
-  if(s->entries==-1)goto _eofout;
-
-  if(_ilog(s->dim)+_ilog(s->entries)>24)goto _eofout;
-
-  /* codeword ordering.... length ordered or unordered? */
-  switch((int)oggpack_read(opb,1)){
-  case 0:{
-    long unused;
-    /* allocated but unused entries? */
-    unused=oggpack_read(opb,1);
-    if((s->entries*(unused?1:5)+7)>>3>opb->storage-oggpack_bytes(opb))
-      goto _eofout;
-    /* unordered */
-    s->lengthlist=(long*)_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
-
-    /* allocated but unused entries? */
-    if(unused){
-      /* yes, unused entries */
-
-      for(i=0;i<s->entries;i++){
-        if(oggpack_read(opb,1)){
-          long num=oggpack_read(opb,5);
-          if(num==-1)goto _eofout;
-          s->lengthlist[i]=num+1;
-        }else
-          s->lengthlist[i]=0;
-      }
-    }else{
-      /* all entries used; no tagging */
-      for(i=0;i<s->entries;i++){
-        long num=oggpack_read(opb,5);
-        if(num==-1)goto _eofout;
-        s->lengthlist[i]=num+1;
-      }
-    }
-
-    break;
-  }
-  case 1:
-    /* ordered */
-    {
-      long length=oggpack_read(opb,5)+1;
-      if(length==0)goto _eofout;
-      s->lengthlist=(long*)_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
-
-      for(i=0;i<s->entries;){
-        long num=oggpack_read(opb,_ilog(s->entries-i));
-        if(num==-1)goto _eofout;
-        if(length>32 || num>s->entries-i ||
-           (num>0 && (num-1)>>(length-1)>1)){
-          goto _errout;
-        }
-        if(length>32)goto _errout;
-        for(j=0;j<num;j++,i++)
-          s->lengthlist[i]=length;
-        length++;
-      }
-    }
-    break;
-  default:
-    /* EOF */
-    goto _eofout;
-  }
-
-  /* Do we have a mapping to unpack? */
-  switch((s->maptype=oggpack_read(opb,4))){
-  case 0:
-    /* no mapping */
-    break;
-  case 1: case 2:
-    /* implicitly populated value mapping */
-    /* explicitly populated value mapping */
-
-    s->q_min=oggpack_read(opb,32);
-    s->q_delta=oggpack_read(opb,32);
-    s->q_quant=oggpack_read(opb,4)+1;
-    s->q_sequencep=oggpack_read(opb,1);
-    if(s->q_sequencep==-1)goto _eofout;
-
-    {
-      int quantvals=0;
-      switch(s->maptype){
-      case 1:
-        quantvals=(s->dim==0?0:_book_maptype1_quantvals(s));
-        break;
-      case 2:
-        quantvals=s->entries*s->dim;
-        break;
-      }
-
-      /* quantized values */
-      if(((quantvals * s->q_quant + 7) >> 3) > opb->storage-oggpack_bytes(opb))
-        goto _eofout;
-      s->quantlist=(long*)_ogg_malloc(sizeof(*s->quantlist)*quantvals);
-      for(i=0;i<quantvals;i++)
-        s->quantlist[i]=oggpack_read(opb,s->q_quant);
-
-      if(quantvals&&s->quantlist[quantvals-1]==-1)goto _eofout;
-    }
-    break;
-  default:
-    goto _errout;
-  }
-
-  /* all set */
-  return(s);
-
- _errout:
- _eofout:
-  vorbis_staticbook_destroy(s);
-  return(NULL);
-}
-
-/* returns the number of bits ************************************************/
-int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){
-  if(a<0 || a>=book->c->entries)return(0);
-  oggpack_write(b,book->codelist[a],book->c->lengthlist[a]);
-  return(book->c->lengthlist[a]);
-}
-
-/* the 'eliminate the decode tree' optimization actually requires the
-   codewords to be MSb first, not LSb.  This is an annoying inelegancy
-   (and one of the first places where carefully thought out design
-   turned out to be wrong; Vorbis II and future Ogg codecs should go
-   to an MSb bitpacker), but not actually the huge hit it appears to
-   be.  The first-stage decode table catches most words so that
-   bitreverse is not in the main execution path. */
-
-static ogg_uint32_t bitreverse(ogg_uint32_t x){
-  x=    ((x>>16)&0x0000ffff) | ((x<<16)&0xffff0000);
-  x=    ((x>> 8)&0x00ff00ff) | ((x<< 8)&0xff00ff00);
-  x=    ((x>> 4)&0x0f0f0f0f) | ((x<< 4)&0xf0f0f0f0);
-  x=    ((x>> 2)&0x33333333) | ((x<< 2)&0xcccccccc);
-  return((x>> 1)&0x55555555) | ((x<< 1)&0xaaaaaaaa);
-}
-
-STIN long decode_packed_entry_number(codebook *book, oggpack_buffer *b){
-  int  read=book->dec_maxlength;
-  long lo,hi;
-  long lok = oggpack_look(b,book->dec_firsttablen);
-
-  if (lok >= 0) {
-    long entry = book->dec_firsttable[lok];
-    if(entry&0x80000000UL){
-      lo=(entry>>15)&0x7fff;
-      hi=book->used_entries-(entry&0x7fff);
-    }else{
-      oggpack_adv(b, book->dec_codelengths[entry-1]);
-      return(entry-1);
-    }
-  }else{
-    lo=0;
-    hi=book->used_entries;
-  }
-
-  lok = oggpack_look(b, read);
-
-  while(lok<0 && read>1)
-    lok = oggpack_look(b, --read);
-  if(lok<0)return -1;
-
-  /* bisect search for the codeword in the ordered list */
-  {
-    ogg_uint32_t testword=bitreverse((ogg_uint32_t)lok);
-
-    while(hi-lo>1){
-      long p=(hi-lo)>>1;
-      long test=book->codelist[lo+p]>testword;
-      lo+=p&(test-1);
-      hi-=p&(-test);
-      }
-
-    if(book->dec_codelengths[lo]<=read){
-      oggpack_adv(b, book->dec_codelengths[lo]);
-      return(lo);
-    }
-  }
-
-  oggpack_adv(b, read);
-
-  return(-1);
-}
-
-/* Decode side is specced and easier, because we don't need to find
-   matches using different criteria; we simply read and map.  There are
-   two things we need to do 'depending':
-
-   We may need to support interleave.  We don't really, but it's
-   convenient to do it here rather than rebuild the vector later.
-
-   Cascades may be additive or multiplicitive; this is not inherent in
-   the codebook, but set in the code using the codebook.  Like
-   interleaving, it's easiest to do it here.
-   addmul==0 -> declarative (set the value)
-   addmul==1 -> additive
-   addmul==2 -> multiplicitive */
-
-/* returns the [original, not compacted] entry number or -1 on eof *********/
-long vorbis_book_decode(codebook *book, oggpack_buffer *b){
-  if(book->used_entries>0){
-    long packed_entry=decode_packed_entry_number(book,b);
-    if(packed_entry>=0)
-      return(book->dec_index[packed_entry]);
-  }
-
-  /* if there's no dec_index, the codebook unpacking isn't collapsed */
-  return(-1);
-}
-
-/* returns 0 on OK or -1 on eof *************************************/
-long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){
-  if(book->used_entries>0){
-    int step=n/book->dim;
-    long *entry = (long*)alloca(sizeof(*entry)*step);
-    float **t = (float**)alloca(sizeof(*t)*step);
-    int i,j,o;
-
-    for (i = 0; i < step; i++) {
-      entry[i]=decode_packed_entry_number(book,b);
-      if(entry[i]==-1)return(-1);
-      t[i] = book->valuelist+entry[i]*book->dim;
-    }
-    for(i=0,o=0;i<book->dim;i++,o+=step)
-      for (j=0;j<step;j++)
-        a[o+j]+=t[j][i];
-  }
-  return(0);
-}
-
-long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,int n){
-  if(book->used_entries>0){
-    int i,j,entry;
-    float *t;
-
-    if(book->dim>8){
-      for(i=0;i<n;){
-        entry = decode_packed_entry_number(book,b);
-        if(entry==-1)return(-1);
-        t     = book->valuelist+entry*book->dim;
-        for (j=0;j<book->dim;)
-          a[i++]+=t[j++];
-      }
-    }else{
-      for(i=0;i<n;){
-        entry = decode_packed_entry_number(book,b);
-        if(entry==-1)return(-1);
-        t     = book->valuelist+entry*book->dim;
-        j=0;
-        switch((int)book->dim){
-        case 8:
-          a[i++]+=t[j++];
-        case 7:
-          a[i++]+=t[j++];
-        case 6:
-          a[i++]+=t[j++];
-        case 5:
-          a[i++]+=t[j++];
-        case 4:
-          a[i++]+=t[j++];
-        case 3:
-          a[i++]+=t[j++];
-        case 2:
-          a[i++]+=t[j++];
-        case 1:
-          a[i++]+=t[j++];
-        case 0:
-          break;
-        }
-      }
-    }
-  }
-  return(0);
-}
-
-long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){
-  if(book->used_entries>0){
-    int i,j,entry;
-    float *t;
-
-    for(i=0;i<n;){
-      entry = decode_packed_entry_number(book,b);
-      if(entry==-1)return(-1);
-      t     = book->valuelist+entry*book->dim;
-      for (j=0;j<book->dim;)
-        a[i++]=t[j++];
-    }
-  }else{
-    int i,j;
-
-    for(i=0;i<n;){
-      for (j=0;j<book->dim;)
-        a[i++]=0.f;
-    }
-  }
-  return(0);
-}
-
-long vorbis_book_decodevv_add(codebook *book,float **a,long offset,int ch,
-                              oggpack_buffer *b,int n){
-
-  long i,j,entry;
-  int chptr=0;
-  if(book->used_entries>0){
-    for(i=offset/ch;i<(offset+n)/ch;){
-      entry = decode_packed_entry_number(book,b);
-      if(entry==-1)return(-1);
-      {
-        const float *t = book->valuelist+entry*book->dim;
-        for (j=0;j<book->dim;j++){
-          a[chptr++][i]+=t[j];
-          if(chptr==ch){
-            chptr=0;
-            i++;
-          }
-        }
-      }
-    }
-  }
-  return(0);
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h
deleted file mode 100644
index 3476527..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: basic shared codebook operations
- last mod: $Id: codebook.h 17030 2010-03-25 06:52:55Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_CODEBOOK_H_
-#define _V_CODEBOOK_H_
-
-#include "../../ogg.h"
-
-/* This structure encapsulates huffman and VQ style encoding books; it
-   doesn't do anything specific to either.
-
-   valuelist/quantlist are nonNULL (and q_* significant) only if
-   there's entry->value mapping to be done.
-
-   If encode-side mapping must be done (and thus the entry needs to be
-   hunted), the auxiliary encode pointer will point to a decision
-   tree.  This is true of both VQ and huffman, but is mostly useful
-   with VQ.
-
-*/
-
-typedef struct static_codebook{
-  long   dim;            /* codebook dimensions (elements per vector) */
-  long   entries;        /* codebook entries */
-  long  *lengthlist;     /* codeword lengths in bits */
-
-  /* mapping ***************************************************************/
-  int    maptype;        /* 0=none
-                            1=implicitly populated values from map column
-                            2=listed arbitrary values */
-
-  /* The below does a linear, single monotonic sequence mapping. */
-  long     q_min;       /* packed 32 bit float; quant value 0 maps to minval */
-  long     q_delta;     /* packed 32 bit float; val 1 - val 0 == delta */
-  int      q_quant;     /* bits: 0 < quant <= 16 */
-  int      q_sequencep; /* bitflag */
-
-  long     *quantlist;  /* map == 1: (int)(entries^(1/dim)) element column map
-                           map == 2: list of dim*entries quantized entry vals
-                        */
-  int allocedp;
-} static_codebook;
-
-typedef struct codebook{
-  long dim;           /* codebook dimensions (elements per vector) */
-  long entries;       /* codebook entries */
-  long used_entries;  /* populated codebook entries */
-  const static_codebook *c;
-
-  /* for encode, the below are entry-ordered, fully populated */
-  /* for decode, the below are ordered by bitreversed codeword and only
-     used entries are populated */
-  float        *valuelist;  /* list of dim*entries actual entry values */
-  ogg_uint32_t *codelist;   /* list of bitstream codewords for each entry */
-
-  int          *dec_index;  /* only used if sparseness collapsed */
-  char         *dec_codelengths;
-  ogg_uint32_t *dec_firsttable;
-  int           dec_firsttablen;
-  int           dec_maxlength;
-
-  /* The current encoder uses only centered, integer-only lattice books. */
-  int           quantvals;
-  int           minval;
-  int           delta;
-} codebook;
-
-extern void vorbis_staticbook_destroy(static_codebook *b);
-extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source);
-extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
-extern void vorbis_book_clear(codebook *b);
-
-extern float *_book_unquantize(const static_codebook *b,int n,int *map);
-extern float *_book_logdist(const static_codebook *b,float *vals);
-extern float _float32_unpack(long val);
-extern long   _float32_pack(float val);
-extern int  _best(codebook *book, float *a, int step);
-extern int _ilog(unsigned int v);
-extern long _book_maptype1_quantvals(const static_codebook *b);
-
-extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);
-extern long vorbis_book_codeword(codebook *book,int entry);
-extern long vorbis_book_codelen(codebook *book,int entry);
-
-
-
-extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b);
-extern static_codebook *vorbis_staticbook_unpack(oggpack_buffer *b);
-
-extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b);
-
-extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
-extern long vorbis_book_decodevs_add(codebook *book, float *a,
-                                     oggpack_buffer *b,int n);
-extern long vorbis_book_decodev_set(codebook *book, float *a,
-                                    oggpack_buffer *b,int n);
-extern long vorbis_book_decodev_add(codebook *book, float *a,
-                                    oggpack_buffer *b,int n);
-extern long vorbis_book_decodevv_add(codebook *book, float **a,
-                                     long off,int ch,
-                                    oggpack_buffer *b,int n);
-
-
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h
deleted file mode 100644
index e466486..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codec_internal.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: libvorbis codec headers
- last mod: $Id: codec_internal.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_CODECI_H_
-#define _V_CODECI_H_
-
-#include "envelope.h"
-#include "codebook.h"
-
-#define BLOCKTYPE_IMPULSE    0
-#define BLOCKTYPE_PADDING    1
-#define BLOCKTYPE_TRANSITION 0
-#define BLOCKTYPE_LONG       1
-
-#define PACKETBLOBS 15
-
-typedef struct vorbis_block_internal{
-  float  **pcmdelay;  /* this is a pointer into local storage */
-  float  ampmax;
-  int    blocktype;
-
-  oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
-                                              blob [PACKETBLOBS/2] points to
-                                              the oggpack_buffer in the
-                                              main vorbis_block */
-} vorbis_block_internal;
-
-typedef void vorbis_look_floor;
-typedef void vorbis_look_residue;
-typedef void vorbis_look_transform;
-
-/* mode ************************************************************/
-typedef struct {
-  int blockflag;
-  int windowtype;
-  int transformtype;
-  int mapping;
-} vorbis_info_mode;
-
-typedef void vorbis_info_floor;
-typedef void vorbis_info_residue;
-typedef void vorbis_info_mapping;
-
-#include "psy.h"
-#include "bitrate.h"
-
-static int ilog(unsigned int v){
-  int ret=0;
-  while(v){
-    ret++;
-    v>>=1;
-  }
-  return(ret);
-}
-
-static int ilog2(unsigned int v){
-  int ret=0;
-  if(v)--v;
-  while(v){
-    ret++;
-    v>>=1;
-  }
-  return(ret);
-}
-
-
-typedef struct private_state {
-  /* local lookup storage */
-  envelope_lookup        *ve; /* envelope lookup */
-  int                     window[2];
-  vorbis_look_transform **transform[2];    /* block, type */
-  drft_lookup             fft_look[2];
-
-  int                     modebits;
-  vorbis_look_floor     **flr;
-  vorbis_look_residue   **residue;
-  vorbis_look_psy        *psy;
-  vorbis_look_psy_global *psy_g_look;
-
-  /* local storage, only used on the encoding side.  This way the
-     application does not need to worry about freeing some packets'
-     memory and not others'; packet storage is always tracked.
-     Cleared next call to a _dsp_ function */
-  unsigned char *header;
-  unsigned char *header1;
-  unsigned char *header2;
-
-  bitrate_manager_state bms;
-
-  ogg_int64_t sample_count;
-} private_state;
-
-/* codec_setup_info contains all the setup information specific to the
-   specific compression/decompression mode in progress (eg,
-   psychoacoustic settings, channel setup, options, codebook
-   etc).
-*********************************************************************/
-
-#include "highlevel.h"
-typedef struct codec_setup_info {
-
-  /* Vorbis supports only short and long blocks, but allows the
-     encoder to choose the sizes */
-
-  long blocksizes[2];
-
-  /* modes are the primary means of supporting on-the-fly different
-     blocksizes, different channel mappings (LR or M/A),
-     different residue backends, etc.  Each mode consists of a
-     blocksize flag and a mapping (along with the mapping setup */
-
-  int        modes;
-  int        maps;
-  int        floors;
-  int        residues;
-  int        books;
-  int        psys;     /* encode only */
-
-  vorbis_info_mode       *mode_param[64];
-  int                     map_type[64];
-  vorbis_info_mapping    *map_param[64];
-  int                     floor_type[64];
-  vorbis_info_floor      *floor_param[64];
-  int                     residue_type[64];
-  vorbis_info_residue    *residue_param[64];
-  static_codebook        *book_param[256];
-  codebook               *fullbooks;
-
-  vorbis_info_psy        *psy_param[4]; /* encode only */
-  vorbis_info_psy_global psy_g_param;
-
-  bitrate_manager_info   bi;
-  highlevel_encode_setup hi; /* used only by vorbisenc.c.  It's a
-                                highly redundant structure, but
-                                improves clarity of program flow. */
-  int         halfrate_flag; /* painless downsample for decode */
-} codec_setup_info;
-
-extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
-extern void _vp_global_free(vorbis_look_psy_global *look);
-
-
-
-typedef struct {
-  int sorted_index[VIF_POSIT+2];
-  int forward_index[VIF_POSIT+2];
-  int reverse_index[VIF_POSIT+2];
-
-  int hineighbor[VIF_POSIT];
-  int loneighbor[VIF_POSIT];
-  int posts;
-
-  int n;
-  int quant_q;
-  vorbis_info_floor1 *vi;
-
-  long phrasebits;
-  long postbits;
-  long frames;
-} vorbis_look_floor1;
-
-
-
-extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
-                          const float *logmdct,   /* in */
-                          const float *logmask);
-extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
-                          int *A,int *B,
-                          int del);
-extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
-                  vorbis_look_floor1 *look,
-                  int *post,int *ilogmask);
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c
deleted file mode 100644
index 72c4db6..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: PCM data envelope analysis
- last mod: $Id: envelope.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-
-#include "os.h"
-#include "scales.h"
-#include "envelope.h"
-#include "mdct.h"
-#include "misc.h"
-
-void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy_global *gi=&ci->psy_g_param;
-  int ch=vi->channels;
-  int i,j;
-  int n=e->winlength=128;
-  e->searchstep=64; /* not random */
-
-  e->minenergy=gi->preecho_minenergy;
-  e->ch=ch;
-  e->storage=128;
-  e->cursor=ci->blocksizes[1]/2;
-  e->mdct_win=(float*)_ogg_calloc(n,sizeof(*e->mdct_win));
-  mdct_init(&e->mdct,n);
-
-  for(i=0;i<n;i++){
-    e->mdct_win[i]=sin(i/(n-1.)*M_PI);
-    e->mdct_win[i]*=e->mdct_win[i];
-  }
-
-  /* magic follows */
-  e->band[0].begin=2;  e->band[0].end=4;
-  e->band[1].begin=4;  e->band[1].end=5;
-  e->band[2].begin=6;  e->band[2].end=6;
-  e->band[3].begin=9;  e->band[3].end=8;
-  e->band[4].begin=13;  e->band[4].end=8;
-  e->band[5].begin=17;  e->band[5].end=8;
-  e->band[6].begin=22;  e->band[6].end=8;
-
-  for(j=0;j<VE_BANDS;j++){
-    n=e->band[j].end;
-    e->band[j].window=(float*)_ogg_malloc(n*sizeof(*e->band[0].window));
-    for(i=0;i<n;i++){
-      e->band[j].window[i]=sin((i+.5)/n*M_PI);
-      e->band[j].total+=e->band[j].window[i];
-    }
-    e->band[j].total=1./e->band[j].total;
-  }
-
-  e->filter=(envelope_filter_state*)_ogg_calloc(VE_BANDS*ch,sizeof(*e->filter));
-  e->mark=(int*)_ogg_calloc(e->storage,sizeof(*e->mark));
-
-}
-
-void _ve_envelope_clear(envelope_lookup *e){
-  int i;
-  mdct_clear(&e->mdct);
-  for(i=0;i<VE_BANDS;i++)
-    _ogg_free(e->band[i].window);
-  _ogg_free(e->mdct_win);
-  _ogg_free(e->filter);
-  _ogg_free(e->mark);
-  memset(e,0,sizeof(*e));
-}
-
-/* fairly straight threshhold-by-band based until we find something
-   that works better and isn't patented. */
-
-static int _ve_amp(envelope_lookup *ve,
-                   vorbis_info_psy_global *gi,
-                   float *data,
-                   envelope_band *bands,
-                   envelope_filter_state *filters){
-  long n=ve->winlength;
-  int ret=0;
-  long i,j;
-  float decay;
-
-  /* we want to have a 'minimum bar' for energy, else we're just
-     basing blocks on quantization noise that outweighs the signal
-     itself (for low power signals) */
-
-  float minV=ve->minenergy;
-  float *vec=(float*) alloca(n*sizeof(*vec));
-
-  /* stretch is used to gradually lengthen the number of windows
-     considered prevoius-to-potential-trigger */
-  int stretch=max(VE_MINSTRETCH,ve->stretch/2);
-  float penalty=gi->stretch_penalty-(ve->stretch/2-VE_MINSTRETCH);
-  if(penalty<0.f)penalty=0.f;
-  if(penalty>gi->stretch_penalty)penalty=gi->stretch_penalty;
-
-  /*_analysis_output_always("lpcm",seq2,data,n,0,0,
-    totalshift+pos*ve->searchstep);*/
-
- /* window and transform */
-  for(i=0;i<n;i++)
-    vec[i]=data[i]*ve->mdct_win[i];
-  mdct_forward(&ve->mdct,vec,vec);
-
-  /*_analysis_output_always("mdct",seq2,vec,n/2,0,1,0); */
-
-  /* near-DC spreading function; this has nothing to do with
-     psychoacoustics, just sidelobe leakage and window size */
-  {
-    float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2];
-    int ptr=filters->nearptr;
-
-    /* the accumulation is regularly refreshed from scratch to avoid
-       floating point creep */
-    if(ptr==0){
-      decay=filters->nearDC_acc=filters->nearDC_partialacc+temp;
-      filters->nearDC_partialacc=temp;
-    }else{
-      decay=filters->nearDC_acc+=temp;
-      filters->nearDC_partialacc+=temp;
-    }
-    filters->nearDC_acc-=filters->nearDC[ptr];
-    filters->nearDC[ptr]=temp;
-
-    decay*=(1./(VE_NEARDC+1));
-    filters->nearptr++;
-    if(filters->nearptr>=VE_NEARDC)filters->nearptr=0;
-    decay=todB(&decay)*.5-15.f;
-  }
-
-  /* perform spreading and limiting, also smooth the spectrum.  yes,
-     the MDCT results in all real coefficients, but it still *behaves*
-     like real/imaginary pairs */
-  for(i=0;i<n/2;i+=2){
-    float val=vec[i]*vec[i]+vec[i+1]*vec[i+1];
-    val=todB(&val)*.5f;
-    if(val<decay)val=decay;
-    if(val<minV)val=minV;
-    vec[i>>1]=val;
-    decay-=8.;
-  }
-
-  /*_analysis_output_always("spread",seq2++,vec,n/4,0,0,0);*/
-
-  /* perform preecho/postecho triggering by band */
-  for(j=0;j<VE_BANDS;j++){
-    float acc=0.;
-    float valmax,valmin;
-
-    /* accumulate amplitude */
-    for(i=0;i<bands[j].end;i++)
-      acc+=vec[i+bands[j].begin]*bands[j].window[i];
-
-    acc*=bands[j].total;
-
-    /* convert amplitude to delta */
-    {
-      int p,thisx=filters[j].ampptr;
-      float postmax,postmin,premax=-99999.f,premin=99999.f;
-
-      p=thisx;
-      p--;
-      if(p<0)p+=VE_AMP;
-      postmax=max(acc,filters[j].ampbuf[p]);
-      postmin=min(acc,filters[j].ampbuf[p]);
-
-      for(i=0;i<stretch;i++){
-        p--;
-        if(p<0)p+=VE_AMP;
-        premax=max(premax,filters[j].ampbuf[p]);
-        premin=min(premin,filters[j].ampbuf[p]);
-      }
-
-      valmin=postmin-premin;
-      valmax=postmax-premax;
-
-      /*filters[j].markers[pos]=valmax;*/
-      filters[j].ampbuf[thisx]=acc;
-      filters[j].ampptr++;
-      if(filters[j].ampptr>=VE_AMP)filters[j].ampptr=0;
-    }
-
-    /* look at min/max, decide trigger */
-    if(valmax>gi->preecho_thresh[j]+penalty){
-      ret|=1;
-      ret|=4;
-    }
-    if(valmin<gi->postecho_thresh[j]-penalty)ret|=2;
-  }
-
-  return(ret);
-}
-
-#if 0
-static int seq=0;
-static ogg_int64_t totalshift=-1024;
-#endif
-
-long _ve_envelope_search(vorbis_dsp_state *v){
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info *)vi->codec_setup;
-  vorbis_info_psy_global *gi=&ci->psy_g_param;
-  envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
-  long i,j;
-
-  int first=ve->current/ve->searchstep;
-  int last=v->pcm_current/ve->searchstep-VE_WIN;
-  if(first<0)first=0;
-
-  /* make sure we have enough storage to match the PCM */
-  if(last+VE_WIN+VE_POST>ve->storage){
-    ve->storage=last+VE_WIN+VE_POST; /* be sure */
-    ve->mark=(int*)_ogg_realloc(ve->mark,ve->storage*sizeof(*ve->mark));
-  }
-
-  for(j=first;j<last;j++){
-    int ret=0;
-
-    ve->stretch++;
-    if(ve->stretch>VE_MAXSTRETCH*2)
-      ve->stretch=VE_MAXSTRETCH*2;
-
-    for(i=0;i<ve->ch;i++){
-      float *pcm=v->pcm[i]+ve->searchstep*(j);
-      ret|=_ve_amp(ve,gi,pcm,ve->band,ve->filter+i*VE_BANDS);
-    }
-
-    ve->mark[j+VE_POST]=0;
-    if(ret&1){
-      ve->mark[j]=1;
-      ve->mark[j+1]=1;
-    }
-
-    if(ret&2){
-      ve->mark[j]=1;
-      if(j>0)ve->mark[j-1]=1;
-    }
-
-    if(ret&4)ve->stretch=-1;
-  }
-
-  ve->current=last*ve->searchstep;
-
-  {
-    long centerW=v->centerW;
-    long testW=
-      centerW+
-      ci->blocksizes[v->W]/4+
-      ci->blocksizes[1]/2+
-      ci->blocksizes[0]/4;
-
-    j=ve->cursor;
-
-    while(j<ve->current-(ve->searchstep)){/* account for postecho
-                                             working back one window */
-      if(j>=testW)return(1);
-
-      ve->cursor=j;
-
-      if(ve->mark[j/ve->searchstep]){
-        if(j>centerW){
-
-#if 0
-          if(j>ve->curmark){
-            float *marker=(float*)alloca(v->pcm_current*sizeof(*marker));
-            int l,m;
-            memset(marker,0,sizeof(*marker)*v->pcm_current);
-            fprintf(stderr,"mark! seq=%d, cursor:%fs time:%fs\n",
-                    seq,
-                    (totalshift+ve->cursor)/44100.,
-                    (totalshift+j)/44100.);
-            _analysis_output_always("pcmL",seq,v->pcm[0],v->pcm_current,0,0,totalshift);
-            _analysis_output_always("pcmR",seq,v->pcm[1],v->pcm_current,0,0,totalshift);
-
-            _analysis_output_always("markL",seq,v->pcm[0],j,0,0,totalshift);
-            _analysis_output_always("markR",seq,v->pcm[1],j,0,0,totalshift);
-
-            for(m=0;m<VE_BANDS;m++){
-              char buf[80];
-              sprintf(buf,"delL%d",m);
-              for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m].markers[l]*.1;
-              _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
-            }
-
-            for(m=0;m<VE_BANDS;m++){
-              char buf[80];
-              sprintf(buf,"delR%d",m);
-              for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m+VE_BANDS].markers[l]*.1;
-              _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
-            }
-
-            for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->mark[l]*.4;
-            _analysis_output_always("mark",seq,marker,v->pcm_current,0,0,totalshift);
-
-
-            seq++;
-
-          }
-#endif
-
-          ve->curmark=j;
-          if(j>=testW)return(1);
-          return(0);
-        }
-      }
-      j+=ve->searchstep;
-    }
-  }
-
-  return(-1);
-}
-
-int _ve_envelope_mark(vorbis_dsp_state *v){
-  envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
-  vorbis_info *vi=v->vi;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  long centerW=v->centerW;
-  long beginW=centerW-ci->blocksizes[v->W]/4;
-  long endW=centerW+ci->blocksizes[v->W]/4;
-  if(v->W){
-    beginW-=ci->blocksizes[v->lW]/4;
-    endW+=ci->blocksizes[v->nW]/4;
-  }else{
-    beginW-=ci->blocksizes[0]/4;
-    endW+=ci->blocksizes[0]/4;
-  }
-
-  if(ve->curmark>=beginW && ve->curmark<endW)return(1);
-  {
-    long first=beginW/ve->searchstep;
-    long last=endW/ve->searchstep;
-    long i;
-    for(i=first;i<last;i++)
-      if(ve->mark[i])return(1);
-  }
-  return(0);
-}
-
-void _ve_envelope_shift(envelope_lookup *e,long shift){
-  int smallsize=e->current/e->searchstep+VE_POST; /* adjust for placing marks
-                                                     ahead of ve->current */
-  int smallshift=shift/e->searchstep;
-
-  memmove(e->mark,e->mark+smallshift,(smallsize-smallshift)*sizeof(*e->mark));
-
-#if 0
-  for(i=0;i<VE_BANDS*e->ch;i++)
-    memmove(e->filter[i].markers,
-            e->filter[i].markers+smallshift,
-            (1024-smallshift)*sizeof(*(*e->filter).markers));
-  totalshift+=shift;
-#endif
-
-  e->current-=shift;
-  if(e->curmark>=0)
-    e->curmark-=shift;
-  e->cursor-=shift;
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h
deleted file mode 100644
index 8237b90..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: PCM data envelope analysis and manipulation
- last mod: $Id: envelope.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_ENVELOPE_
-#define _V_ENVELOPE_
-
-#include "mdct.h"
-
-#define VE_PRE    16
-#define VE_WIN    4
-#define VE_POST   2
-#define VE_AMP    (VE_PRE+VE_POST-1)
-
-#define VE_BANDS  7
-#define VE_NEARDC 15
-
-#define VE_MINSTRETCH 2   /* a bit less than short block */
-#define VE_MAXSTRETCH 12  /* one-third full block */
-
-typedef struct {
-  float ampbuf[VE_AMP];
-  int   ampptr;
-
-  float nearDC[VE_NEARDC];
-  float nearDC_acc;
-  float nearDC_partialacc;
-  int   nearptr;
-
-} envelope_filter_state;
-
-typedef struct {
-  int begin;
-  int end;
-  float *window;
-  float total;
-} envelope_band;
-
-typedef struct {
-  int ch;
-  int winlength;
-  int searchstep;
-  float minenergy;
-
-  mdct_lookup  mdct;
-  float       *mdct_win;
-
-  envelope_band          band[VE_BANDS];
-  envelope_filter_state *filter;
-  int   stretch;
-
-  int                   *mark;
-
-  long storage;
-  long current;
-  long curmark;
-  long cursor;
-} envelope_lookup;
-
-extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi);
-extern void _ve_envelope_clear(envelope_lookup *e);
-extern long _ve_envelope_search(vorbis_dsp_state *v);
-extern void _ve_envelope_shift(envelope_lookup *e,long shift);
-extern int  _ve_envelope_mark(vorbis_dsp_state *v);
-
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c
deleted file mode 100644
index 4eac09c..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: floor backend 0 implementation
- last mod: $Id: floor0.c 17558 2010-10-22 00:24:41Z tterribe $
-
- ********************************************************************/
-
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "lpc.h"
-#include "lsp.h"
-#include "codebook.h"
-#include "scales.h"
-#include "misc.h"
-#include "os.h"
-
-#include "misc.h"
-#include <stdio.h>
-
-typedef struct {
-  int ln;
-  int  m;
-  int **linearmap;
-  int  n[2];
-
-  vorbis_info_floor0 *vi;
-
-  long bits;
-  long frames;
-} vorbis_look_floor0;
-
-
-/***********************************************/
-
-static void floor0_free_info(vorbis_info_floor *i){
-  vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
-  if(info){
-    memset(info,0,sizeof(*info));
-    _ogg_free(info);
-  }
-}
-
-static void floor0_free_look(vorbis_look_floor *i){
-  vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
-  if(look){
-
-    if(look->linearmap){
-
-      if(look->linearmap[0])_ogg_free(look->linearmap[0]);
-      if(look->linearmap[1])_ogg_free(look->linearmap[1]);
-
-      _ogg_free(look->linearmap);
-    }
-    memset(look,0,sizeof(*look));
-    _ogg_free(look);
-  }
-}
-
-static vorbis_info_floor *floor0_unpack (vorbis_info *vi,oggpack_buffer *opb){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  int j;
-
-  vorbis_info_floor0 *info=(vorbis_info_floor0*)_ogg_malloc(sizeof(*info));
-  info->order=oggpack_read(opb,8);
-  info->rate=oggpack_read(opb,16);
-  info->barkmap=oggpack_read(opb,16);
-  info->ampbits=oggpack_read(opb,6);
-  info->ampdB=oggpack_read(opb,8);
-  info->numbooks=oggpack_read(opb,4)+1;
-
-  if(info->order<1)goto err_out;
-  if(info->rate<1)goto err_out;
-  if(info->barkmap<1)goto err_out;
-  if(info->numbooks<1)goto err_out;
-
-  for(j=0;j<info->numbooks;j++){
-    info->books[j]=oggpack_read(opb,8);
-    if(info->books[j]<0 || info->books[j]>=ci->books)goto err_out;
-    if(ci->book_param[info->books[j]]->maptype==0)goto err_out;
-    if(ci->book_param[info->books[j]]->dim<1)goto err_out;
-  }
-  return(info);
-
- err_out:
-  floor0_free_info(info);
-  return(NULL);
-}
-
-/* initialize Bark scale and normalization lookups.  We could do this
-   with static tables, but Vorbis allows a number of possible
-   combinations, so it's best to do it computationally.
-
-   The below is authoritative in terms of defining scale mapping.
-   Note that the scale depends on the sampling rate as well as the
-   linear block and mapping sizes */
-
-static void floor0_map_lazy_init(vorbis_block      *vb,
-                                 vorbis_info_floor *infoX,
-                                 vorbis_look_floor0 *look){
-  if(!look->linearmap[vb->W]){
-    vorbis_dsp_state   *vd=vb->vd;
-    vorbis_info        *vi=vd->vi;
-    codec_setup_info   *ci=(codec_setup_info*)vi->codec_setup;
-    vorbis_info_floor0 *info=(vorbis_info_floor0 *)infoX;
-    int W=vb->W;
-    int n=ci->blocksizes[W]/2,j;
-
-    /* we choose a scaling constant so that:
-       floor(bark(rate/2-1)*C)=mapped-1
-     floor(bark(rate/2)*C)=mapped */
-    float scale=look->ln/toBARK(info->rate/2.f);
-
-    /* the mapping from a linear scale to a smaller bark scale is
-       straightforward.  We do *not* make sure that the linear mapping
-       does not skip bark-scale bins; the decoder simply skips them and
-       the encoder may do what it wishes in filling them.  They're
-       necessary in some mapping combinations to keep the scale spacing
-       accurate */
-    look->linearmap[W]=(int*)_ogg_malloc((n+1)*sizeof(**look->linearmap));
-    for(j=0;j<n;j++){
-      int val=floor( toBARK((info->rate/2.f)/n*j)
-                     *scale); /* bark numbers represent band edges */
-      if(val>=look->ln)val=look->ln-1; /* guard against the approximation */
-      look->linearmap[W][j]=val;
-    }
-    look->linearmap[W][j]=-1;
-    look->n[W]=n;
-  }
-}
-
-static vorbis_look_floor *floor0_look(vorbis_dsp_state* /* vd */,
-                                      vorbis_info_floor *i){
-  vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
-  vorbis_look_floor0 *look=(vorbis_look_floor0*)_ogg_calloc(1,sizeof(*look));
-  look->m=info->order;
-  look->ln=info->barkmap;
-  look->vi=info;
-
-  look->linearmap=(int**)_ogg_calloc(2,sizeof(*look->linearmap));
-
-  return look;
-}
-
-static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){
-  vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
-  vorbis_info_floor0 *info=look->vi;
-  int j,k;
-
-  int ampraw=oggpack_read(&vb->opb,info->ampbits);
-  if(ampraw>0){ /* also handles the -1 out of data case */
-    long maxval=(1<<info->ampbits)-1;
-    float amp=(float)ampraw/maxval*info->ampdB;
-    int booknum=oggpack_read(&vb->opb,_ilog(info->numbooks));
-
-    if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
-      codec_setup_info  *ci=(codec_setup_info *)vb->vd->vi->codec_setup;
-      codebook *b=ci->fullbooks+info->books[booknum];
-      float last=0.f;
-
-      /* the additional b->dim is a guard against any possible stack
-         smash; b->dim is provably more than we can overflow the
-         vector */
-      float *lsp=(float*)_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+b->dim+1));
-
-      for(j=0;j<look->m;j+=b->dim)
-        if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim)==-1)goto eop;
-      for(j=0;j<look->m;){
-        for(k=0;k<b->dim;k++,j++)lsp[j]+=last;
-        last=lsp[j-1];
-      }
-
-      lsp[look->m]=amp;
-      return(lsp);
-    }
-  }
- eop:
-  return(NULL);
-}
-
-static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i,
-                           void *memo,float *out){
-  vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
-  vorbis_info_floor0 *info=look->vi;
-
-  floor0_map_lazy_init(vb,info,look);
-
-  if(memo){
-    float *lsp=(float *)memo;
-    float amp=lsp[look->m];
-
-    /* take the coefficients back to a spectral envelope curve */
-    vorbis_lsp_to_curve(out,
-                        look->linearmap[vb->W],
-                        look->n[vb->W],
-                        look->ln,
-                        lsp,look->m,amp,(float)info->ampdB);
-    return(1);
-  }
-  memset(out,0,sizeof(*out)*look->n[vb->W]);
-  return(0);
-}
-
-/* export hooks */
-const vorbis_func_floor floor0_exportbundle={
-  NULL,&floor0_unpack,&floor0_look,&floor0_free_info,
-  &floor0_free_look,&floor0_inverse1,&floor0_inverse2
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c
deleted file mode 100644
index 68967f4..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor1.c
+++ /dev/null
@@ -1,1084 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: floor backend 1 implementation
- last mod: $Id: floor1.c 17555 2010-10-21 18:14:51Z tterribe $
-
- ********************************************************************/
-
-#ifdef JUCE_MSVC
- #pragma warning (disable: 4456 4457 4459)
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "codebook.h"
-#include "misc.h"
-#include "scales.h"
-
-#include <stdio.h>
-
-#define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */
-
-typedef struct lsfit_acc{
-  int x0;
-  int x1;
-
-  int xa;
-  int ya;
-  int x2a;
-  int y2a;
-  int xya;
-  int an;
-
-  int xb;
-  int yb;
-  int x2b;
-  int y2b;
-  int xyb;
-  int bn;
-} lsfit_acc;
-
-/***********************************************/
-
-static void floor1_free_info(vorbis_info_floor *i){
-  vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
-  if(info){
-    memset(info,0,sizeof(*info));
-    _ogg_free(info);
-  }
-}
-
-static void floor1_free_look(vorbis_look_floor *i){
-  vorbis_look_floor1 *look=(vorbis_look_floor1 *)i;
-  if(look){
-    /*fprintf(stderr,"floor 1 bit usage %f:%f (%f total)\n",
-            (float)look->phrasebits/look->frames,
-            (float)look->postbits/look->frames,
-            (float)(look->postbits+look->phrasebits)/look->frames);*/
-
-    memset(look,0,sizeof(*look));
-    _ogg_free(look);
-  }
-}
-
-static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){
-  vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
-  int j,k;
-  int count=0;
-  int rangebits;
-  int maxposit=info->postlist[1];
-  int maxclass=-1;
-
-  /* save out partitions */
-  oggpack_write(opb,info->partitions,5); /* only 0 to 31 legal */
-  for(j=0;j<info->partitions;j++){
-    oggpack_write(opb,info->partitionclass[j],4); /* only 0 to 15 legal */
-    if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
-  }
-
-  /* save out partition classes */
-  for(j=0;j<maxclass+1;j++){
-    oggpack_write(opb,info->class_dim[j]-1,3); /* 1 to 8 */
-    oggpack_write(opb,info->class_subs[j],2); /* 0 to 3 */
-    if(info->class_subs[j])oggpack_write(opb,info->class_book[j],8);
-    for(k=0;k<(1<<info->class_subs[j]);k++)
-      oggpack_write(opb,info->class_subbook[j][k]+1,8);
-  }
-
-  /* save out the post list */
-  oggpack_write(opb,info->mult-1,2);     /* only 1,2,3,4 legal now */
-  oggpack_write(opb,ilog2(maxposit),4);
-  rangebits=ilog2(maxposit);
-
-  for(j=0,k=0;j<info->partitions;j++){
-    count+=info->class_dim[info->partitionclass[j]];
-    for(;k<count;k++)
-      oggpack_write(opb,info->postlist[k+2],rangebits);
-  }
-}
-
-static int icomp(const void *a,const void *b){
-  return(**(int **)a-**(int **)b);
-}
-
-static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  int j,k,count=0,maxclass=-1,rangebits;
-
-  vorbis_info_floor1 *info=(vorbis_info_floor1*)_ogg_calloc(1,sizeof(*info));
-  /* read partitions */
-  info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */
-  for(j=0;j<info->partitions;j++){
-    info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */
-    if(info->partitionclass[j]<0)goto err_out;
-    if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
-  }
-
-  /* read partition classes */
-  for(j=0;j<maxclass+1;j++){
-    info->class_dim[j]=oggpack_read(opb,3)+1; /* 1 to 8 */
-    info->class_subs[j]=oggpack_read(opb,2); /* 0,1,2,3 bits */
-    if(info->class_subs[j]<0)
-      goto err_out;
-    if(info->class_subs[j])info->class_book[j]=oggpack_read(opb,8);
-    if(info->class_book[j]<0 || info->class_book[j]>=ci->books)
-      goto err_out;
-    for(k=0;k<(1<<info->class_subs[j]);k++){
-      info->class_subbook[j][k]=oggpack_read(opb,8)-1;
-      if(info->class_subbook[j][k]<-1 || info->class_subbook[j][k]>=ci->books)
-        goto err_out;
-    }
-  }
-
-  /* read the post list */
-  info->mult=oggpack_read(opb,2)+1;     /* only 1,2,3,4 legal now */
-  rangebits=oggpack_read(opb,4);
-  if(rangebits<0)goto err_out;
-
-  for(j=0,k=0;j<info->partitions;j++){
-    count+=info->class_dim[info->partitionclass[j]];
-    for(;k<count;k++){
-      int t=info->postlist[k+2]=oggpack_read(opb,rangebits);
-      if(t<0 || t>=(1<<rangebits))
-        goto err_out;
-    }
-  }
-  info->postlist[0]=0;
-  info->postlist[1]=1<<rangebits;
-
-  /* don't allow repeated values in post list as they'd result in
-     zero-length segments */
-  {
-    int *sortpointer[VIF_POSIT+2];
-    for(j=0;j<count+2;j++)sortpointer[j]=info->postlist+j;
-    qsort(sortpointer,count+2,sizeof(*sortpointer),icomp);
-
-    for(j=1;j<count+2;j++)
-      if(*sortpointer[j-1]==*sortpointer[j])goto err_out;
-  }
-
-  return(info);
-
- err_out:
-  floor1_free_info(info);
-  return(NULL);
-}
-
-static vorbis_look_floor *floor1_look(vorbis_dsp_state* /* vd */,
-                                      vorbis_info_floor *in){
-
-  int *sortpointer[VIF_POSIT+2];
-  vorbis_info_floor1 *info=(vorbis_info_floor1 *)in;
-  vorbis_look_floor1 *look=(vorbis_look_floor1*)_ogg_calloc(1,sizeof(*look));
-  int i,j,n=0;
-
-  look->vi=info;
-  look->n=info->postlist[1];
-
-  /* we drop each position value in-between already decoded values,
-     and use linear interpolation to predict each new value past the
-     edges.  The positions are read in the order of the position
-     list... we precompute the bounding positions in the lookup.  Of
-     course, the neighbors can change (if a position is declined), but
-     this is an initial mapping */
-
-  for(i=0;i<info->partitions;i++)n+=info->class_dim[info->partitionclass[i]];
-  n+=2;
-  look->posts=n;
-
-  /* also store a sorted position index */
-  for(i=0;i<n;i++)sortpointer[i]=info->postlist+i;
-  qsort(sortpointer,n,sizeof(*sortpointer),icomp);
-
-  /* points from sort order back to range number */
-  for(i=0;i<n;i++)look->forward_index[i]=sortpointer[i]-info->postlist;
-  /* points from range order to sorted position */
-  for(i=0;i<n;i++)look->reverse_index[look->forward_index[i]]=i;
-  /* we actually need the post values too */
-  for(i=0;i<n;i++)look->sorted_index[i]=info->postlist[look->forward_index[i]];
-
-  /* quantize values to multiplier spec */
-  switch(info->mult){
-  case 1: /* 1024 -> 256 */
-    look->quant_q=256;
-    break;
-  case 2: /* 1024 -> 128 */
-    look->quant_q=128;
-    break;
-  case 3: /* 1024 -> 86 */
-    look->quant_q=86;
-    break;
-  case 4: /* 1024 -> 64 */
-    look->quant_q=64;
-    break;
-  }
-
-  /* discover our neighbors for decode where we don't use fit flags
-     (that would push the neighbors outward) */
-  for(i=0;i<n-2;i++){
-    int lo=0;
-    int hi=1;
-    int lx=0;
-    int hx=look->n;
-    int currentx=info->postlist[i+2];
-    for(j=0;j<i+2;j++){
-      int x=info->postlist[j];
-      if(x>lx && x<currentx){
-        lo=j;
-        lx=x;
-      }
-      if(x<hx && x>currentx){
-        hi=j;
-        hx=x;
-      }
-    }
-    look->loneighbor[i]=lo;
-    look->hineighbor[i]=hi;
-  }
-
-  return(look);
-}
-
-static int render_point(int x0,int x1,int y0,int y1,int x){
-  y0&=0x7fff; /* mask off flag */
-  y1&=0x7fff;
-
-  {
-    int dy=y1-y0;
-    int adx=x1-x0;
-    int ady=abs(dy);
-    int err=ady*(x-x0);
-
-    int off=err/adx;
-    if(dy<0)return(y0-off);
-    return(y0+off);
-  }
-}
-
-static int vorbis_dBquant(const float *x){
-  int i= *x*7.3142857f+1023.5f;
-  if(i>1023)return(1023);
-  if(i<0)return(0);
-  return i;
-}
-
-static const float FLOOR1_fromdB_LOOKUP[256]={
-  1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F,
-  1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F,
-  1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F,
-  2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F,
-  2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F,
-  3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F,
-  4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F,
-  6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F,
-  7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F,
-  1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F,
-  1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F,
-  1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F,
-  2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F,
-  2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F,
-  3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F,
-  4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F,
-  5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F,
-  7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F,
-  9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F,
-  1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F,
-  1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F,
-  2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F,
-  2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F,
-  3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F,
-  4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F,
-  5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F,
-  7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F,
-  9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F,
-  0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F,
-  0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F,
-  0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F,
-  0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F,
-  0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F,
-  0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F,
-  0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F,
-  0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F,
-  0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F,
-  0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F,
-  0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F,
-  0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F,
-  0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F,
-  0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F,
-  0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F,
-  0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F,
-  0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F,
-  0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F,
-  0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F,
-  0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F,
-  0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F,
-  0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F,
-  0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F,
-  0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F,
-  0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F,
-  0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F,
-  0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F,
-  0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F,
-  0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F,
-  0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F,
-  0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F,
-  0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F,
-  0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F,
-  0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F,
-  0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F,
-  0.82788260F, 0.88168307F, 0.9389798F, 1.F,
-};
-
-static void render_line(int n, int x0,int x1,int y0,int y1,float *d){
-  int dy=y1-y0;
-  int adx=x1-x0;
-  int ady=abs(dy);
-  int base=dy/adx;
-  int sy=(dy<0?base-1:base+1);
-  int x=x0;
-  int y=y0;
-  int err=0;
-
-  ady-=abs(base*adx);
-
-  if(n>x1)n=x1;
-
-  if(x<n)
-    d[x]*=FLOOR1_fromdB_LOOKUP[y];
-
-  while(++x<n){
-    err=err+ady;
-    if(err>=adx){
-      err-=adx;
-      y+=sy;
-    }else{
-      y+=base;
-    }
-    d[x]*=FLOOR1_fromdB_LOOKUP[y];
-  }
-}
-
-static void render_line0(int n, int x0,int x1,int y0,int y1,int *d){
-  int dy=y1-y0;
-  int adx=x1-x0;
-  int ady=abs(dy);
-  int base=dy/adx;
-  int sy=(dy<0?base-1:base+1);
-  int x=x0;
-  int y=y0;
-  int err=0;
-
-  ady-=abs(base*adx);
-
-  if(n>x1)n=x1;
-
-  if(x<n)
-    d[x]=y;
-
-  while(++x<n){
-    err=err+ady;
-    if(err>=adx){
-      err-=adx;
-      y+=sy;
-    }else{
-      y+=base;
-    }
-    d[x]=y;
-  }
-}
-
-/* the floor has already been filtered to only include relevant sections */
-static int accumulate_fit(const float *flr,const float *mdct,
-                          int x0, int x1,lsfit_acc *a,
-                          int n,vorbis_info_floor1 *info){
-  long i;
-
-  int xa=0,ya=0,x2a=0,y2a=0,xya=0,na=0, xb=0,yb=0,x2b=0,y2b=0,xyb=0,nb=0;
-
-  memset(a,0,sizeof(*a));
-  a->x0=x0;
-  a->x1=x1;
-  if(x1>=n)x1=n-1;
-
-  for(i=x0;i<=x1;i++){
-    int quantized=vorbis_dBquant(flr+i);
-    if(quantized){
-      if(mdct[i]+info->twofitatten>=flr[i]){
-        xa  += i;
-        ya  += quantized;
-        x2a += i*i;
-        y2a += quantized*quantized;
-        xya += i*quantized;
-        na++;
-      }else{
-        xb  += i;
-        yb  += quantized;
-        x2b += i*i;
-        y2b += quantized*quantized;
-        xyb += i*quantized;
-        nb++;
-      }
-    }
-  }
-
-  a->xa=xa;
-  a->ya=ya;
-  a->x2a=x2a;
-  a->y2a=y2a;
-  a->xya=xya;
-  a->an=na;
-
-  a->xb=xb;
-  a->yb=yb;
-  a->x2b=x2b;
-  a->y2b=y2b;
-  a->xyb=xyb;
-  a->bn=nb;
-
-  return(na);
-}
-
-static int fit_line(lsfit_acc *a,int fits,int *y0,int *y1,
-                    vorbis_info_floor1 *info){
-  double xb=0,yb=0,x2b=0,y2b=0,xyb=0,bn=0;
-  int i;
-  int x0=a[0].x0;
-  int x1=a[fits-1].x1;
-
-  for(i=0;i<fits;i++){
-    double weight = (a[i].bn+a[i].an)*info->twofitweight/(a[i].an+1)+1.;
-
-    xb+=a[i].xb + a[i].xa * weight;
-    yb+=a[i].yb + a[i].ya * weight;
-    x2b+=a[i].x2b + a[i].x2a * weight;
-    y2b+=a[i].y2b + a[i].y2a * weight;
-    xyb+=a[i].xyb + a[i].xya * weight;
-    bn+=a[i].bn + a[i].an * weight;
-  }
-
-  if(*y0>=0){
-    xb+=   x0;
-    yb+=  *y0;
-    x2b+=  x0 *  x0;
-    //y2b+= *y0 * *y0;
-    xyb+= *y0 *  x0;
-    bn++;
-  }
-
-  if(*y1>=0){
-    xb+=   x1;
-    yb+=  *y1;
-    x2b+=  x1 *  x1;
-    //y2b+= *y1 * *y1;
-    xyb+= *y1 *  x1;
-    bn++;
-  }
-
-  {
-    double denom=(bn*x2b-xb*xb);
-
-    if(denom>0.){
-      double a=(yb*x2b-xyb*xb)/denom;
-      double b=(bn*xyb-xb*yb)/denom;
-      *y0=rint(a+b*x0);
-      *y1=rint(a+b*x1);
-
-      /* limit to our range! */
-      if(*y0>1023)*y0=1023;
-      if(*y1>1023)*y1=1023;
-      if(*y0<0)*y0=0;
-      if(*y1<0)*y1=0;
-
-      return 0;
-    }else{
-      *y0=0;
-      *y1=0;
-      return 1;
-    }
-  }
-}
-
-static int inspect_error(int x0,int x1,int y0,int y1,const float *mask,
-                         const float *mdct,
-                         vorbis_info_floor1 *info){
-  int dy=y1-y0;
-  int adx=x1-x0;
-  int ady=abs(dy);
-  int base=dy/adx;
-  int sy=(dy<0?base-1:base+1);
-  int x=x0;
-  int y=y0;
-  int err=0;
-  int val=vorbis_dBquant(mask+x);
-  int mse=0;
-  int n=0;
-
-  ady-=abs(base*adx);
-
-  mse=(y-val);
-  mse*=mse;
-  n++;
-  if(mdct[x]+info->twofitatten>=mask[x]){
-    if(y+info->maxover<val)return(1);
-    if(y-info->maxunder>val)return(1);
-  }
-
-  while(++x<x1){
-    err=err+ady;
-    if(err>=adx){
-      err-=adx;
-      y+=sy;
-    }else{
-      y+=base;
-    }
-
-    val=vorbis_dBquant(mask+x);
-    mse+=((y-val)*(y-val));
-    n++;
-    if(mdct[x]+info->twofitatten>=mask[x]){
-      if(val){
-        if(y+info->maxover<val)return(1);
-        if(y-info->maxunder>val)return(1);
-      }
-    }
-  }
-
-  if(info->maxover*info->maxover/n>info->maxerr)return(0);
-  if(info->maxunder*info->maxunder/n>info->maxerr)return(0);
-  if(mse/n>info->maxerr)return(1);
-  return(0);
-}
-
-static int post_Y(int *A,int *B,int pos){
-  if(A[pos]<0)
-    return B[pos];
-  if(B[pos]<0)
-    return A[pos];
-
-  return (A[pos]+B[pos])>>1;
-}
-
-int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
-                          const float *logmdct,   /* in */
-                          const float *logmask){
-  long i,j;
-  vorbis_info_floor1 *info=look->vi;
-  long n=look->n;
-  long posts=look->posts;
-  long nonzero=0;
-  lsfit_acc fits[VIF_POSIT+1];
-  int fit_valueA[VIF_POSIT+2]; /* index by range list position */
-  int fit_valueB[VIF_POSIT+2]; /* index by range list position */
-
-  int loneighbor[VIF_POSIT+2]; /* sorted index of range list position (+2) */
-  int hineighbor[VIF_POSIT+2];
-  int *output=NULL;
-  int memo[VIF_POSIT+2];
-
-  for(i=0;i<posts;i++)fit_valueA[i]=-200; /* mark all unused */
-  for(i=0;i<posts;i++)fit_valueB[i]=-200; /* mark all unused */
-  for(i=0;i<posts;i++)loneighbor[i]=0; /* 0 for the implicit 0 post */
-  for(i=0;i<posts;i++)hineighbor[i]=1; /* 1 for the implicit post at n */
-  for(i=0;i<posts;i++)memo[i]=-1;      /* no neighbor yet */
-
-  /* quantize the relevant floor points and collect them into line fit
-     structures (one per minimal division) at the same time */
-  if(posts==0){
-    nonzero+=accumulate_fit(logmask,logmdct,0,n,fits,n,info);
-  }else{
-    for(i=0;i<posts-1;i++)
-      nonzero+=accumulate_fit(logmask,logmdct,look->sorted_index[i],
-                              look->sorted_index[i+1],fits+i,
-                              n,info);
-  }
-
-  if(nonzero){
-    /* start by fitting the implicit base case.... */
-    int y0=-200;
-    int y1=-200;
-    fit_line(fits,posts-1,&y0,&y1,info);
-
-    fit_valueA[0]=y0;
-    fit_valueB[0]=y0;
-    fit_valueB[1]=y1;
-    fit_valueA[1]=y1;
-
-    /* Non degenerate case */
-    /* start progressive splitting.  This is a greedy, non-optimal
-       algorithm, but simple and close enough to the best
-       answer. */
-    for(i=2;i<posts;i++){
-      int sortpos=look->reverse_index[i];
-      int ln=loneighbor[sortpos];
-      int hn=hineighbor[sortpos];
-
-      /* eliminate repeat searches of a particular range with a memo */
-      if(memo[ln]!=hn){
-        /* haven't performed this error search yet */
-        int lsortpos=look->reverse_index[ln];
-        int hsortpos=look->reverse_index[hn];
-        memo[ln]=hn;
-
-        {
-          /* A note: we want to bound/minimize *local*, not global, error */
-          int lx=info->postlist[ln];
-          int hx=info->postlist[hn];
-          int ly=post_Y(fit_valueA,fit_valueB,ln);
-          int hy=post_Y(fit_valueA,fit_valueB,hn);
-
-          if(ly==-1 || hy==-1){
-            exit(1);
-          }
-
-          if(inspect_error(lx,hx,ly,hy,logmask,logmdct,info)){
-            /* outside error bounds/begin search area.  Split it. */
-            int ly0=-200;
-            int ly1=-200;
-            int hy0=-200;
-            int hy1=-200;
-            int ret0=fit_line(fits+lsortpos,sortpos-lsortpos,&ly0,&ly1,info);
-            int ret1=fit_line(fits+sortpos,hsortpos-sortpos,&hy0,&hy1,info);
-
-            if(ret0){
-              ly0=ly;
-              ly1=hy0;
-            }
-            if(ret1){
-              hy0=ly1;
-              hy1=hy;
-            }
-
-            if(ret0 && ret1){
-              fit_valueA[i]=-200;
-              fit_valueB[i]=-200;
-            }else{
-              /* store new edge values */
-              fit_valueB[ln]=ly0;
-              if(ln==0)fit_valueA[ln]=ly0;
-              fit_valueA[i]=ly1;
-              fit_valueB[i]=hy0;
-              fit_valueA[hn]=hy1;
-              if(hn==1)fit_valueB[hn]=hy1;
-
-              if(ly1>=0 || hy0>=0){
-                /* store new neighbor values */
-                for(j=sortpos-1;j>=0;j--)
-                  if(hineighbor[j]==hn)
-                    hineighbor[j]=i;
-                  else
-                    break;
-                for(j=sortpos+1;j<posts;j++)
-                  if(loneighbor[j]==ln)
-                    loneighbor[j]=i;
-                  else
-                    break;
-              }
-            }
-          }else{
-            fit_valueA[i]=-200;
-            fit_valueB[i]=-200;
-          }
-        }
-      }
-    }
-
-    output=(int*)_vorbis_block_alloc(vb,sizeof(*output)*posts);
-
-    output[0]=post_Y(fit_valueA,fit_valueB,0);
-    output[1]=post_Y(fit_valueA,fit_valueB,1);
-
-    /* fill in posts marked as not using a fit; we will zero
-       back out to 'unused' when encoding them so long as curve
-       interpolation doesn't force them into use */
-    for(i=2;i<posts;i++){
-      int ln=look->loneighbor[i-2];
-      int hn=look->hineighbor[i-2];
-      int x0=info->postlist[ln];
-      int x1=info->postlist[hn];
-      int y0=output[ln];
-      int y1=output[hn];
-
-      int predicted=render_point(x0,x1,y0,y1,info->postlist[i]);
-      int vx=post_Y(fit_valueA,fit_valueB,i);
-
-      if(vx>=0 && predicted!=vx){
-        output[i]=vx;
-      }else{
-        output[i]= predicted|0x8000;
-      }
-    }
-  }
-
-  return(output);
-
-}
-
-int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
-                          int *A,int *B,
-                          int del){
-
-  long i;
-  long posts=look->posts;
-  int *output=NULL;
-
-  if(A && B){
-    output=(int*)_vorbis_block_alloc(vb,sizeof(*output)*posts);
-
-    /* overly simpleminded--- look again post 1.2 */
-    for(i=0;i<posts;i++){
-      output[i]=((65536-del)*(A[i]&0x7fff)+del*(B[i]&0x7fff)+32768)>>16;
-      if(A[i]&0x8000 && B[i]&0x8000)output[i]|=0x8000;
-    }
-  }
-
-  return(output);
-}
-
-
-int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
-                  vorbis_look_floor1 *look,
-                  int *post,int *ilogmask){
-
-  long i,j;
-  vorbis_info_floor1 *info=look->vi;
-  long posts=look->posts;
-  codec_setup_info *ci=(codec_setup_info*)vb->vd->vi->codec_setup;
-  int out[VIF_POSIT+2];
-  static_codebook **sbooks=ci->book_param;
-  codebook *books=ci->fullbooks;
-
-  /* quantize values to multiplier spec */
-  if(post){
-    for(i=0;i<posts;i++){
-      int val=post[i]&0x7fff;
-      switch(info->mult){
-      case 1: /* 1024 -> 256 */
-        val>>=2;
-        break;
-      case 2: /* 1024 -> 128 */
-        val>>=3;
-        break;
-      case 3: /* 1024 -> 86 */
-        val/=12;
-        break;
-      case 4: /* 1024 -> 64 */
-        val>>=4;
-        break;
-      }
-      post[i]=val | (post[i]&0x8000);
-    }
-
-    out[0]=post[0];
-    out[1]=post[1];
-
-    /* find prediction values for each post and subtract them */
-    for(i=2;i<posts;i++){
-      int ln=look->loneighbor[i-2];
-      int hn=look->hineighbor[i-2];
-      int x0=info->postlist[ln];
-      int x1=info->postlist[hn];
-      int y0=post[ln];
-      int y1=post[hn];
-
-      int predicted=render_point(x0,x1,y0,y1,info->postlist[i]);
-
-      if((post[i]&0x8000) || (predicted==post[i])){
-        post[i]=predicted|0x8000; /* in case there was roundoff jitter
-                                     in interpolation */
-        out[i]=0;
-      }else{
-        int headroom=(look->quant_q-predicted<predicted?
-                      look->quant_q-predicted:predicted);
-
-        int val=post[i]-predicted;
-
-        /* at this point the 'deviation' value is in the range +/- max
-           range, but the real, unique range can always be mapped to
-           only [0-maxrange).  So we want to wrap the deviation into
-           this limited range, but do it in the way that least screws
-           an essentially gaussian probability distribution. */
-
-        if(val<0)
-          if(val<-headroom)
-            val=headroom-val-1;
-          else
-            val=-1-(val<<1);
-        else
-          if(val>=headroom)
-            val= val+headroom;
-          else
-            val<<=1;
-
-        out[i]=val;
-        post[ln]&=0x7fff;
-        post[hn]&=0x7fff;
-      }
-    }
-
-    /* we have everything we need. pack it out */
-    /* mark nontrivial floor */
-    oggpack_write(opb,1,1);
-
-    /* beginning/end post */
-    look->frames++;
-    look->postbits+=ilog(look->quant_q-1)*2;
-    oggpack_write(opb,out[0],ilog(look->quant_q-1));
-    oggpack_write(opb,out[1],ilog(look->quant_q-1));
-
-
-    /* partition by partition */
-    for(i=0,j=2;i<info->partitions;i++){
-      int classx=info->partitionclass[i];
-      int cdim=info->class_dim[classx];
-      int csubbits=info->class_subs[classx];
-      int csub=1<<csubbits;
-      int bookas[8]={0,0,0,0,0,0,0,0};
-      int cval=0;
-      int cshift=0;
-      int k,l;
-
-      /* generate the partition's first stage cascade value */
-      if(csubbits){
-        int maxval[8] = { 0 };
-        for(k=0;k<csub;k++){
-	  int booknum=info->class_subbook[classx][k];
-          if(booknum<0){
-            maxval[k]=1;
-          }else{
-	    maxval[k]=sbooks[info->class_subbook[classx][k]]->entries;
-          }
-        }
-        for(k=0;k<cdim;k++){
-          for(l=0;l<csub;l++){
-            int val=out[j+k];
-            if(val<maxval[l]){
-              bookas[k]=l;
-              break;
-            }
-          }
-          cval|= bookas[k]<<cshift;
-          cshift+=csubbits;
-        }
-        /* write it */
-        look->phrasebits+=
-	  vorbis_book_encode(books+info->class_book[classx],cval,opb);
-
-#ifdef TRAIN_FLOOR1
-        {
-          FILE *of;
-          char buffer[80];
-          sprintf(buffer,"line_%dx%ld_class%d.vqd",
-                  vb->pcmend/2,posts-2,class);
-          of=fopen(buffer,"a");
-          fprintf(of,"%d\n",cval);
-          fclose(of);
-        }
-#endif
-      }
-
-      /* write post values */
-      for(k=0;k<cdim;k++){
-	int book=info->class_subbook[classx][bookas[k]];
-        if(book>=0){
-          /* hack to allow training with 'bad' books */
-          if(out[j+k]<(books+book)->entries)
-            look->postbits+=vorbis_book_encode(books+book,
-                                               out[j+k],opb);
-          /*else
-            fprintf(stderr,"+!");*/
-
-#ifdef TRAIN_FLOOR1
-          {
-            FILE *of;
-            char buffer[80];
-            sprintf(buffer,"line_%dx%ld_%dsub%d.vqd",
-                    vb->pcmend/2,posts-2,class,bookas[k]);
-            of=fopen(buffer,"a");
-            fprintf(of,"%d\n",out[j+k]);
-            fclose(of);
-          }
-#endif
-        }
-      }
-      j+=cdim;
-    }
-
-    {
-      /* generate quantized floor equivalent to what we'd unpack in decode */
-      /* render the lines */
-      int hx=0;
-      int lx=0;
-      int ly=post[0]*info->mult;
-      int n=ci->blocksizes[vb->W]/2;
-
-      for(j=1;j<look->posts;j++){
-        int current=look->forward_index[j];
-        int hy=post[current]&0x7fff;
-        if(hy==post[current]){
-
-          hy*=info->mult;
-          hx=info->postlist[current];
-
-          render_line0(n,lx,hx,ly,hy,ilogmask);
-
-          lx=hx;
-          ly=hy;
-        }
-      }
-      for(j=hx;j<vb->pcmend/2;j++)ilogmask[j]=ly; /* be certain */
-      return(1);
-    }
-  }else{
-    oggpack_write(opb,0,1);
-    memset(ilogmask,0,vb->pcmend/2*sizeof(*ilogmask));
-    return(0);
-  }
-}
-
-static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){
-  vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
-  vorbis_info_floor1 *info=look->vi;
-  codec_setup_info   *ci=(codec_setup_info*)vb->vd->vi->codec_setup;
-
-  int i,j,k;
-  codebook *books=ci->fullbooks;
-
-  /* unpack wrapped/predicted values from stream */
-  if(oggpack_read(&vb->opb,1)==1){
-    int *fit_value=(int*)_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value));
-
-    fit_value[0]=oggpack_read(&vb->opb,ilog(look->quant_q-1));
-    fit_value[1]=oggpack_read(&vb->opb,ilog(look->quant_q-1));
-
-    /* partition by partition */
-    for(i=0,j=2;i<info->partitions;i++){
-      int classx=info->partitionclass[i];
-      int cdim=info->class_dim[classx];
-      int csubbits=info->class_subs[classx];
-      int csub=1<<csubbits;
-      int cval=0;
-
-      /* decode the partition's first stage cascade value */
-      if(csubbits){
-	cval=vorbis_book_decode(books+info->class_book[classx],&vb->opb);
-
-        if(cval==-1)goto eop;
-      }
-
-      for(k=0;k<cdim;k++){
-	int book=info->class_subbook[classx][cval&(csub-1)];
-        cval>>=csubbits;
-        if(book>=0){
-          if((fit_value[j+k]=vorbis_book_decode(books+book,&vb->opb))==-1)
-            goto eop;
-        }else{
-          fit_value[j+k]=0;
-        }
-      }
-      j+=cdim;
-    }
-
-    /* unwrap positive values and reconsitute via linear interpolation */
-    for(i=2;i<look->posts;i++){
-      int predicted=render_point(info->postlist[look->loneighbor[i-2]],
-                                 info->postlist[look->hineighbor[i-2]],
-                                 fit_value[look->loneighbor[i-2]],
-                                 fit_value[look->hineighbor[i-2]],
-                                 info->postlist[i]);
-      int hiroom=look->quant_q-predicted;
-      int loroom=predicted;
-      int room=(hiroom<loroom?hiroom:loroom)<<1;
-      int val=fit_value[i];
-
-      if(val){
-        if(val>=room){
-          if(hiroom>loroom){
-            val = val-loroom;
-          }else{
-            val = -1-(val-hiroom);
-          }
-        }else{
-          if(val&1){
-            val= -((val+1)>>1);
-          }else{
-            val>>=1;
-          }
-        }
-
-        fit_value[i] = (val + predicted) & 0x7fff;
-        fit_value[look->loneighbor[i-2]]&=0x7fff;
-        fit_value[look->hineighbor[i-2]]&=0x7fff;
-
-      }else{
-        fit_value[i]=predicted|0x8000;
-      }
-
-    }
-
-    return(fit_value);
-  }
- eop:
-  return(NULL);
-}
-
-static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo,
-                          float *out){
-  vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
-  vorbis_info_floor1 *info=look->vi;
-
-  codec_setup_info   *ci=(codec_setup_info*)vb->vd->vi->codec_setup;
-  int                  n=ci->blocksizes[vb->W]/2;
-  int j;
-
-  if(memo){
-    /* render the lines */
-    int *fit_value=(int *)memo;
-    int hx=0;
-    int lx=0;
-    int ly=fit_value[0]*info->mult;
-    /* guard lookup against out-of-range values */
-    ly=(ly<0?0:ly>255?255:ly);
-
-    for(j=1;j<look->posts;j++){
-      int current=look->forward_index[j];
-      int hy=fit_value[current]&0x7fff;
-      if(hy==fit_value[current]){
-
-        hx=info->postlist[current];
-        hy*=info->mult;
-        /* guard lookup against out-of-range values */
-        hy=(hy<0?0:hy>255?255:hy);
-
-        render_line(n,lx,hx,ly,hy,out);
-
-        lx=hx;
-        ly=hy;
-      }
-    }
-    for(j=hx;j<n;j++)out[j]*=FLOOR1_fromdB_LOOKUP[ly]; /* be certain */
-    return(1);
-  }
-  memset(out,0,sizeof(*out)*n);
-  return(0);
-}
-
-/* export hooks */
-const vorbis_func_floor floor1_exportbundle={
-  &floor1_pack,&floor1_unpack,&floor1_look,&floor1_free_info,
-  &floor1_free_look,&floor1_inverse1,&floor1_inverse2
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/highlevel.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/highlevel.h
deleted file mode 100644
index 118baad..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/highlevel.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: highlevel encoder setup struct separated out for vorbisenc clarity
- last mod: $Id: highlevel.h 17195 2010-05-05 21:49:51Z giles $
-
- ********************************************************************/
-
-typedef struct highlevel_byblocktype {
-  double tone_mask_setting;
-  double tone_peaklimit_setting;
-  double noise_bias_setting;
-  double noise_compand_setting;
-} highlevel_byblocktype;
-
-typedef struct highlevel_encode_setup {
-  int   set_in_stone;
-  const void *setup;
-  double base_setting;
-
-  double impulse_noisetune;
-
-  /* bitrate management below all settable */
-  float  req;
-  int    managed;
-  long   bitrate_min;
-  long   bitrate_av;
-  double bitrate_av_damp;
-  long   bitrate_max;
-  long   bitrate_reservoir;
-  double bitrate_reservoir_bias;
-
-  int impulse_block_p;
-  int noise_normalize_p;
-  int coupling_p;
-
-  double stereo_point_setting;
-  double lowpass_kHz;
-  int    lowpass_altered;
-
-  double ath_floating_dB;
-  double ath_absolute_dB;
-
-  double amplitude_track_dBpersec;
-  double trigger_setting;
-
-  highlevel_byblocktype block[4]; /* padding, impulse, transition, long */
-
-} highlevel_encode_setup;
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/info.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/info.c
deleted file mode 100644
index 613576d..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/info.c
+++ /dev/null
@@ -1,660 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: maintain the info structure, info <-> header packets
- last mod: $Id: info.c 17584 2010-11-01 19:26:16Z xiphmont $
-
- ********************************************************************/
-
-/* general handling of the header and the vorbis_info structure (and
-   substructures) */
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "codebook.h"
-#include "registry.h"
-#include "window.h"
-#include "psy.h"
-#include "misc.h"
-#include "os.h"
-
-#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.2"
-#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20101101 (Schaufenugget)"
-
-/* helpers */
-
-static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){
-
-  while(bytes--){
-    oggpack_write(o,*s++,8);
-  }
-}
-
-static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
-  while(bytes--){
-    *buf++=oggpack_read(o,8);
-  }
-}
-
-void vorbis_comment_init(vorbis_comment *vc){
-  memset(vc,0,sizeof(*vc));
-}
-
-void vorbis_comment_add(vorbis_comment *vc,const char *comment){
-  vc->user_comments=(char**)_ogg_realloc(vc->user_comments,
-                            (vc->comments+2)*sizeof(*vc->user_comments));
-  vc->comment_lengths=(int*)_ogg_realloc(vc->comment_lengths,
-                                  (vc->comments+2)*sizeof(*vc->comment_lengths));
-  vc->comment_lengths[vc->comments]=strlen(comment);
-  vc->user_comments[vc->comments]=(char*)_ogg_malloc(vc->comment_lengths[vc->comments]+1);
-  strcpy(vc->user_comments[vc->comments], comment);
-  vc->comments++;
-  vc->user_comments[vc->comments]=NULL;
-}
-
-void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *contents){
-  char *comment=(char*)alloca(strlen(tag)+strlen(contents)+2); /* +2 for = and \0 */
-  strcpy(comment, tag);
-  strcat(comment, "=");
-  strcat(comment, contents);
-  vorbis_comment_add(vc, comment);
-}
-
-/* This is more or less the same as strncasecmp - but that doesn't exist
- * everywhere, and this is a fairly trivial function, so we include it */
-static int tagcompare(const char *s1, const char *s2, int n){
-  int c=0;
-  while(c < n){
-    if(toupper(s1[c]) != toupper(s2[c]))
-      return !0;
-    c++;
-  }
-  return 0;
-}
-
-char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count){
-  long i;
-  int found = 0;
-  int taglen = strlen(tag)+1; /* +1 for the = we append */
-  char *fulltag = (char*)alloca(taglen+ 1);
-
-  strcpy(fulltag, tag);
-  strcat(fulltag, "=");
-
-  for(i=0;i<vc->comments;i++){
-    if(!tagcompare(vc->user_comments[i], fulltag, taglen)){
-      if(count == found)
-        /* We return a pointer to the data, not a copy */
-              return vc->user_comments[i] + taglen;
-      else
-        found++;
-    }
-  }
-  return NULL; /* didn't find anything */
-}
-
-int vorbis_comment_query_count(vorbis_comment *vc, const char *tag){
-  int i,count=0;
-  int taglen = strlen(tag)+1; /* +1 for the = we append */
-  char *fulltag = (char*)alloca(taglen+1);
-  strcpy(fulltag,tag);
-  strcat(fulltag, "=");
-
-  for(i=0;i<vc->comments;i++){
-    if(!tagcompare(vc->user_comments[i], fulltag, taglen))
-      count++;
-  }
-
-  return count;
-}
-
-void vorbis_comment_clear(vorbis_comment *vc){
-  if(vc){
-    long i;
-    if(vc->user_comments){
-      for(i=0;i<vc->comments;i++)
-        if(vc->user_comments[i])_ogg_free(vc->user_comments[i]);
-      _ogg_free(vc->user_comments);
-    }
-    if(vc->comment_lengths)_ogg_free(vc->comment_lengths);
-    if(vc->vendor)_ogg_free(vc->vendor);
-    memset(vc,0,sizeof(*vc));
-  }
-}
-
-/* blocksize 0 is guaranteed to be short, 1 is guaranteed to be long.
-   They may be equal, but short will never ge greater than long */
-int vorbis_info_blocksize(vorbis_info *vi,int zo){
-  codec_setup_info *ci = (codec_setup_info*)vi->codec_setup;
-  return ci ? ci->blocksizes[zo] : -1;
-}
-
-/* used by synthesis, which has a full, alloced vi */
-void vorbis_info_init(vorbis_info *vi){
-  memset(vi,0,sizeof(*vi));
-  vi->codec_setup=_ogg_calloc(1,sizeof(codec_setup_info));
-}
-
-void vorbis_info_clear(vorbis_info *vi){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  int i;
-
-  if(ci){
-
-    for(i=0;i<ci->modes;i++)
-      if(ci->mode_param[i])_ogg_free(ci->mode_param[i]);
-
-    for(i=0;i<ci->maps;i++) /* unpack does the range checking */
-      if(ci->map_param[i]) /* this may be cleaning up an aborted
-                              unpack, in which case the below type
-                              cannot be trusted */
-        _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]);
-
-    for(i=0;i<ci->floors;i++) /* unpack does the range checking */
-      if(ci->floor_param[i]) /* this may be cleaning up an aborted
-                                unpack, in which case the below type
-                                cannot be trusted */
-        _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]);
-
-    for(i=0;i<ci->residues;i++) /* unpack does the range checking */
-      if(ci->residue_param[i]) /* this may be cleaning up an aborted
-                                  unpack, in which case the below type
-                                  cannot be trusted */
-        _residue_P[ci->residue_type[i]]->free_info(ci->residue_param[i]);
-
-    for(i=0;i<ci->books;i++){
-      if(ci->book_param[i]){
-        /* knows if the book was not alloced */
-        vorbis_staticbook_destroy(ci->book_param[i]);
-      }
-      if(ci->fullbooks)
-        vorbis_book_clear(ci->fullbooks+i);
-    }
-    if(ci->fullbooks)
-        _ogg_free(ci->fullbooks);
-
-    for(i=0;i<ci->psys;i++)
-      _vi_psy_free(ci->psy_param[i]);
-
-    _ogg_free(ci);
-  }
-
-  memset(vi,0,sizeof(*vi));
-}
-
-/* Header packing/unpacking ********************************************/
-
-static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  if(!ci)return(OV_EFAULT);
-
-  vi->version=oggpack_read(opb,32);
-  if(vi->version!=0)return(OV_EVERSION);
-
-  vi->channels=oggpack_read(opb,8);
-  vi->rate=oggpack_read(opb,32);
-
-  vi->bitrate_upper=oggpack_read(opb,32);
-  vi->bitrate_nominal=oggpack_read(opb,32);
-  vi->bitrate_lower=oggpack_read(opb,32);
-
-  ci->blocksizes[0]=1<<oggpack_read(opb,4);
-  ci->blocksizes[1]=1<<oggpack_read(opb,4);
-
-  if(vi->rate<1)goto err_out;
-  if(vi->channels<1)goto err_out;
-  if(ci->blocksizes[0]<64)goto err_out;
-  if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
-  if(ci->blocksizes[1]>8192)goto err_out;
-
-  if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
-
-  return(0);
- err_out:
-  vorbis_info_clear(vi);
-  return(OV_EBADHEADER);
-}
-
-static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
-  int i;
-  int vendorlen=oggpack_read(opb,32);
-  if(vendorlen<0)goto err_out;
-  if(vendorlen>opb->storage-8)goto err_out;
-  vc->vendor=(char*)_ogg_calloc(vendorlen+1,1);
-  _v_readstring(opb,vc->vendor,vendorlen);
-  i=oggpack_read(opb,32);
-  if(i<0)goto err_out;
-  if(i>((opb->storage-oggpack_bytes(opb))>>2))goto err_out;
-  vc->comments=i;
-  vc->user_comments=(char**)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
-  vc->comment_lengths=(int*)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
-
-  for(i=0;i<vc->comments;i++){
-    int len=oggpack_read(opb,32);
-    if(len<0)goto err_out;
-    if(len>opb->storage-oggpack_bytes(opb))goto err_out;
-    vc->comment_lengths[i]=len;
-    vc->user_comments[i]=(char*)_ogg_calloc(len+1,1);
-    _v_readstring(opb,vc->user_comments[i],len);
-  }
-  if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
-
-  return(0);
- err_out:
-  vorbis_comment_clear(vc);
-  return(OV_EBADHEADER);
-}
-
-/* all of the real encoding details are here.  The modes, books,
-   everything */
-static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  int i;
-  if(!ci)return(OV_EFAULT);
-
-  /* codebooks */
-  ci->books=oggpack_read(opb,8)+1;
-  if(ci->books<=0)goto err_out;
-  for(i=0;i<ci->books;i++){
-    ci->book_param[i]=vorbis_staticbook_unpack(opb);
-    if(!ci->book_param[i])goto err_out;
-  }
-
-  /* time backend settings; hooks are unused */
-  {
-    int times=oggpack_read(opb,6)+1;
-    if(times<=0)goto err_out;
-    for(i=0;i<times;i++){
-      int test=oggpack_read(opb,16);
-      if(test<0 || test>=VI_TIMEB)goto err_out;
-    }
-  }
-
-  /* floor backend settings */
-  ci->floors=oggpack_read(opb,6)+1;
-  if(ci->floors<=0)goto err_out;
-  for(i=0;i<ci->floors;i++){
-    ci->floor_type[i]=oggpack_read(opb,16);
-    if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out;
-    ci->floor_param[i]=_floor_P[ci->floor_type[i]]->unpack(vi,opb);
-    if(!ci->floor_param[i])goto err_out;
-  }
-
-  /* residue backend settings */
-  ci->residues=oggpack_read(opb,6)+1;
-  if(ci->residues<=0)goto err_out;
-  for(i=0;i<ci->residues;i++){
-    ci->residue_type[i]=oggpack_read(opb,16);
-    if(ci->residue_type[i]<0 || ci->residue_type[i]>=VI_RESB)goto err_out;
-    ci->residue_param[i]=_residue_P[ci->residue_type[i]]->unpack(vi,opb);
-    if(!ci->residue_param[i])goto err_out;
-  }
-
-  /* map backend settings */
-  ci->maps=oggpack_read(opb,6)+1;
-  if(ci->maps<=0)goto err_out;
-  for(i=0;i<ci->maps;i++){
-    ci->map_type[i]=oggpack_read(opb,16);
-    if(ci->map_type[i]<0 || ci->map_type[i]>=VI_MAPB)goto err_out;
-    ci->map_param[i]=_mapping_P[ci->map_type[i]]->unpack(vi,opb);
-    if(!ci->map_param[i])goto err_out;
-  }
-
-  /* mode settings */
-  ci->modes=oggpack_read(opb,6)+1;
-  if(ci->modes<=0)goto err_out;
-  for(i=0;i<ci->modes;i++){
-    ci->mode_param[i]=(vorbis_info_mode*)_ogg_calloc(1,sizeof(*ci->mode_param[i]));
-    ci->mode_param[i]->blockflag=oggpack_read(opb,1);
-    ci->mode_param[i]->windowtype=oggpack_read(opb,16);
-    ci->mode_param[i]->transformtype=oggpack_read(opb,16);
-    ci->mode_param[i]->mapping=oggpack_read(opb,8);
-
-    if(ci->mode_param[i]->windowtype>=VI_WINDOWB)goto err_out;
-    if(ci->mode_param[i]->transformtype>=VI_WINDOWB)goto err_out;
-    if(ci->mode_param[i]->mapping>=ci->maps)goto err_out;
-    if(ci->mode_param[i]->mapping<0)goto err_out;
-  }
-
-  if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */
-
-  return(0);
- err_out:
-  vorbis_info_clear(vi);
-  return(OV_EBADHEADER);
-}
-
-/* Is this packet a vorbis ID header? */
-int vorbis_synthesis_idheader(ogg_packet *op){
-  oggpack_buffer opb;
-  char buffer[6];
-
-  if(op){
-    oggpack_readinit(&opb,op->packet,op->bytes);
-
-    if(!op->b_o_s)
-      return(0); /* Not the initial packet */
-
-    if(oggpack_read(&opb,8) != 1)
-      return 0; /* not an ID header */
-
-    memset(buffer,0,6);
-    _v_readstring(&opb,buffer,6);
-    if(memcmp(buffer,"vorbis",6))
-      return 0; /* not vorbis */
-
-    return 1;
-  }
-
-  return 0;
-}
-
-/* The Vorbis header is in three packets; the initial small packet in
-   the first page that identifies basic parameters, a second packet
-   with bitstream comments and a third packet that holds the
-   codebook. */
-
-int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
-  oggpack_buffer opb;
-
-  if(op){
-    oggpack_readinit(&opb,op->packet,op->bytes);
-
-    /* Which of the three types of header is this? */
-    /* Also verify header-ness, vorbis */
-    {
-      char buffer[6];
-      int packtype=oggpack_read(&opb,8);
-      memset(buffer,0,6);
-      _v_readstring(&opb,buffer,6);
-      if(memcmp(buffer,"vorbis",6)){
-        /* not a vorbis header */
-        return(OV_ENOTVORBIS);
-      }
-      switch(packtype){
-      case 0x01: /* least significant *bit* is read first */
-        if(!op->b_o_s){
-          /* Not the initial packet */
-          return(OV_EBADHEADER);
-        }
-        if(vi->rate!=0){
-          /* previously initialized info header */
-          return(OV_EBADHEADER);
-        }
-
-        return(_vorbis_unpack_info(vi,&opb));
-
-      case 0x03: /* least significant *bit* is read first */
-        if(vi->rate==0){
-          /* um... we didn't get the initial header */
-          return(OV_EBADHEADER);
-        }
-
-        return(_vorbis_unpack_comment(vc,&opb));
-
-      case 0x05: /* least significant *bit* is read first */
-        if(vi->rate==0 || vc->vendor==NULL){
-          /* um... we didn;t get the initial header or comments yet */
-          return(OV_EBADHEADER);
-        }
-
-        return(_vorbis_unpack_books(vi,&opb));
-
-      default:
-        /* Not a valid vorbis header type */
-        return(OV_EBADHEADER);
-        break;
-      }
-    }
-  }
-  return(OV_EBADHEADER);
-}
-
-/* pack side **********************************************************/
-
-static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  if(!ci)return(OV_EFAULT);
-
-  /* preamble */
-  oggpack_write(opb,0x01,8);
-  _v_writestring(opb,"vorbis", 6);
-
-  /* basic information about the stream */
-  oggpack_write(opb,0x00,32);
-  oggpack_write(opb,vi->channels,8);
-  oggpack_write(opb,vi->rate,32);
-
-  oggpack_write(opb,vi->bitrate_upper,32);
-  oggpack_write(opb,vi->bitrate_nominal,32);
-  oggpack_write(opb,vi->bitrate_lower,32);
-
-  oggpack_write(opb,ilog2(ci->blocksizes[0]),4);
-  oggpack_write(opb,ilog2(ci->blocksizes[1]),4);
-  oggpack_write(opb,1,1);
-
-  return(0);
-}
-
-static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){
-  int bytes = strlen(ENCODE_VENDOR_STRING);
-
-  /* preamble */
-  oggpack_write(opb,0x03,8);
-  _v_writestring(opb,"vorbis", 6);
-
-  /* vendor */
-  oggpack_write(opb,bytes,32);
-  _v_writestring(opb,ENCODE_VENDOR_STRING, bytes);
-
-  /* comments */
-
-  oggpack_write(opb,vc->comments,32);
-  if(vc->comments){
-    int i;
-    for(i=0;i<vc->comments;i++){
-      if(vc->user_comments[i]){
-        oggpack_write(opb,vc->comment_lengths[i],32);
-        _v_writestring(opb,vc->user_comments[i], vc->comment_lengths[i]);
-      }else{
-        oggpack_write(opb,0,32);
-      }
-    }
-  }
-  oggpack_write(opb,1,1);
-
-  return(0);
-}
-
-static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  int i;
-  if(!ci)return(OV_EFAULT);
-
-  oggpack_write(opb,0x05,8);
-  _v_writestring(opb,"vorbis", 6);
-
-  /* books */
-  oggpack_write(opb,ci->books-1,8);
-  for(i=0;i<ci->books;i++)
-    if(vorbis_staticbook_pack(ci->book_param[i],opb))goto err_out;
-
-  /* times; hook placeholders */
-  oggpack_write(opb,0,6);
-  oggpack_write(opb,0,16);
-
-  /* floors */
-  oggpack_write(opb,ci->floors-1,6);
-  for(i=0;i<ci->floors;i++){
-    oggpack_write(opb,ci->floor_type[i],16);
-    if(_floor_P[ci->floor_type[i]]->pack)
-      _floor_P[ci->floor_type[i]]->pack(ci->floor_param[i],opb);
-    else
-      goto err_out;
-  }
-
-  /* residues */
-  oggpack_write(opb,ci->residues-1,6);
-  for(i=0;i<ci->residues;i++){
-    oggpack_write(opb,ci->residue_type[i],16);
-    _residue_P[ci->residue_type[i]]->pack(ci->residue_param[i],opb);
-  }
-
-  /* maps */
-  oggpack_write(opb,ci->maps-1,6);
-  for(i=0;i<ci->maps;i++){
-    oggpack_write(opb,ci->map_type[i],16);
-    _mapping_P[ci->map_type[i]]->pack(vi,ci->map_param[i],opb);
-  }
-
-  /* modes */
-  oggpack_write(opb,ci->modes-1,6);
-  for(i=0;i<ci->modes;i++){
-    oggpack_write(opb,ci->mode_param[i]->blockflag,1);
-    oggpack_write(opb,ci->mode_param[i]->windowtype,16);
-    oggpack_write(opb,ci->mode_param[i]->transformtype,16);
-    oggpack_write(opb,ci->mode_param[i]->mapping,8);
-  }
-  oggpack_write(opb,1,1);
-
-  return(0);
-err_out:
-  return(-1);
-}
-
-int vorbis_commentheader_out(vorbis_comment *vc,
-                                          ogg_packet *op){
-
-  oggpack_buffer opb;
-
-  oggpack_writeinit(&opb);
-  if(_vorbis_pack_comment(&opb,vc)) return OV_EIMPL;
-
-  op->packet = (unsigned char*) _ogg_malloc(oggpack_bytes(&opb));
-  memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
-
-  op->bytes=oggpack_bytes(&opb);
-  op->b_o_s=0;
-  op->e_o_s=0;
-  op->granulepos=0;
-  op->packetno=1;
-
-  return 0;
-}
-
-int vorbis_analysis_headerout(vorbis_dsp_state *v,
-                              vorbis_comment *vc,
-                              ogg_packet *op,
-                              ogg_packet *op_comm,
-                              ogg_packet *op_code){
-  int ret=OV_EIMPL;
-  vorbis_info *vi=v->vi;
-  oggpack_buffer opb;
-  private_state *b=(private_state*)v->backend_state;
-
-  if(!b){
-    ret=OV_EFAULT;
-    goto err_out;
-  }
-
-  /* first header packet **********************************************/
-
-  oggpack_writeinit(&opb);
-  if(_vorbis_pack_info(&opb,vi))goto err_out;
-
-  /* build the packet */
-  if(b->header)_ogg_free(b->header);
-  b->header=(unsigned char*) _ogg_malloc(oggpack_bytes(&opb));
-  memcpy(b->header,opb.buffer,oggpack_bytes(&opb));
-  op->packet=b->header;
-  op->bytes=oggpack_bytes(&opb);
-  op->b_o_s=1;
-  op->e_o_s=0;
-  op->granulepos=0;
-  op->packetno=0;
-
-  /* second header packet (comments) **********************************/
-
-  oggpack_reset(&opb);
-  if(_vorbis_pack_comment(&opb,vc))goto err_out;
-
-  if(b->header1)_ogg_free(b->header1);
-  b->header1=(unsigned char*) _ogg_malloc(oggpack_bytes(&opb));
-  memcpy(b->header1,opb.buffer,oggpack_bytes(&opb));
-  op_comm->packet=b->header1;
-  op_comm->bytes=oggpack_bytes(&opb);
-  op_comm->b_o_s=0;
-  op_comm->e_o_s=0;
-  op_comm->granulepos=0;
-  op_comm->packetno=1;
-
-  /* third header packet (modes/codebooks) ****************************/
-
-  oggpack_reset(&opb);
-  if(_vorbis_pack_books(&opb,vi))goto err_out;
-
-  if(b->header2)_ogg_free(b->header2);
-  b->header2=(unsigned char*) _ogg_malloc(oggpack_bytes(&opb));
-  memcpy(b->header2,opb.buffer,oggpack_bytes(&opb));
-  op_code->packet=b->header2;
-  op_code->bytes=oggpack_bytes(&opb);
-  op_code->b_o_s=0;
-  op_code->e_o_s=0;
-  op_code->granulepos=0;
-  op_code->packetno=2;
-
-  oggpack_writeclear(&opb);
-  return(0);
- err_out:
-  memset(op,0,sizeof(*op));
-  memset(op_comm,0,sizeof(*op_comm));
-  memset(op_code,0,sizeof(*op_code));
-
-  if(b){
-    oggpack_writeclear(&opb);
-    if(b->header)_ogg_free(b->header);
-    if(b->header1)_ogg_free(b->header1);
-    if(b->header2)_ogg_free(b->header2);
-    b->header=NULL;
-    b->header1=NULL;
-    b->header2=NULL;
-  }
-  return(ret);
-}
-
-double vorbis_granule_time(vorbis_dsp_state *v,ogg_int64_t granulepos){
-  if(granulepos == -1) return -1;
-
-  /* We're not guaranteed a 64 bit unsigned type everywhere, so we
-     have to put the unsigned granpo in a signed type. */
-  if(granulepos>=0){
-    return((double)granulepos/v->vi->rate);
-  }else{
-    ogg_int64_t granuleoff=0xffffffff;
-    granuleoff<<=31;
-
-#ifdef __GNUC__
-    granuleoff |= 0x7ffffffffLL;
-#else
-    granuleoff |= 0x7ffffffff;
-#endif
-    return(((double)granulepos+2+granuleoff+granuleoff)/v->vi->rate);
-  }
-}
-
-const char *vorbis_version_string(void){
-  return GENERAL_VENDOR_STRING;
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.c
deleted file mode 100644
index 953e71a..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: lookup based functions
-  last mod: $Id: lookup.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <math.h>
-#include "lookup.h"
-#include "lookup_data.h"
-#include "os.h"
-#include "misc.h"
-
-#ifdef FLOAT_LOOKUP
-
-/* interpolated lookup based cos function, domain 0 to PI only */
-float vorbis_coslook(float a){
-  double d=a*(.31830989*(float)COS_LOOKUP_SZ);
-  int i=vorbis_ftoi(d-.5);
-
-  return COS_LOOKUP[i]+ (d-i)*(COS_LOOKUP[i+1]-COS_LOOKUP[i]);
-}
-
-/* interpolated 1./sqrt(p) where .5 <= p < 1. */
-float vorbis_invsqlook(float a){
-  double d=a*(2.f*(float)INVSQ_LOOKUP_SZ)-(float)INVSQ_LOOKUP_SZ;
-  int i=vorbis_ftoi(d-.5f);
-  return INVSQ_LOOKUP[i]+ (d-i)*(INVSQ_LOOKUP[i+1]-INVSQ_LOOKUP[i]);
-}
-
-/* interpolated 1./sqrt(p) where .5 <= p < 1. */
-float vorbis_invsq2explook(int a){
-  return INVSQ2EXP_LOOKUP[a-INVSQ2EXP_LOOKUP_MIN];
-}
-
-#include <stdio.h>
-/* interpolated lookup based fromdB function, domain -140dB to 0dB only */
-float vorbis_fromdBlook(float a){
-  int i=vorbis_ftoi(a*((float)(-(1<<FROMdB2_SHIFT)))-.5f);
-  return (i<0)?1.f:
-    ((i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))?0.f:
-     FROMdB_LOOKUP[i>>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]);
-}
-
-#endif
-
-#ifdef INT_LOOKUP
-/* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in
-   16.16 format
-
-   returns in m.8 format */
-long vorbis_invsqlook_i(long a,long e){
-  long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1);
-  long d=(a&INVSQ_LOOKUP_I_MASK)<<(16-INVSQ_LOOKUP_I_SHIFT); /*  0.16 */
-  long val=INVSQ_LOOKUP_I[i]-                                /*  1.16 */
-    (((INVSQ_LOOKUP_I[i]-INVSQ_LOOKUP_I[i+1])*               /*  0.16 */
-      d)>>16);                                               /* result 1.16 */
-
-  e+=32;
-  if(e&1)val=(val*5792)>>13; /* multiply val by 1/sqrt(2) */
-  e=(e>>1)-8;
-
-  return(val>>e);
-}
-
-/* interpolated lookup based fromdB function, domain -140dB to 0dB only */
-/* a is in n.12 format */
-float vorbis_fromdBlook_i(long a){
-  int i=(-a)>>(12-FROMdB2_SHIFT);
-  return (i<0)?1.f:
-    ((i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))?0.f:
-     FROMdB_LOOKUP[i>>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]);
-}
-
-/* interpolated lookup based cos function, domain 0 to PI only */
-/* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */
-long vorbis_coslook_i(long a){
-  int i=a>>COS_LOOKUP_I_SHIFT;
-  int d=a&COS_LOOKUP_I_MASK;
-  return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
-                           COS_LOOKUP_I_SHIFT);
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.h
deleted file mode 100644
index 0f8fdf4..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: lookup based functions
-  last mod: $Id: lookup.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_LOOKUP_H_
-
-#ifdef FLOAT_LOOKUP
-extern float vorbis_coslook(float a);
-extern float vorbis_invsqlook(float a);
-extern float vorbis_invsq2explook(int a);
-extern float vorbis_fromdBlook(float a);
-#endif
-#ifdef INT_LOOKUP
-extern long vorbis_invsqlook_i(long a,long e);
-extern long vorbis_coslook_i(long a);
-extern float vorbis_fromdBlook_i(long a);
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h
deleted file mode 100644
index b12d79a..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: lookup data; generated by lookups.pl; edit there
-  last mod: $Id: lookup_data.h 16037 2009-05-26 21:10:58Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_LOOKUP_DATA_H_
-
-#ifdef FLOAT_LOOKUP
-#define COS_LOOKUP_SZ 128
-static const float COS_LOOKUP[COS_LOOKUP_SZ+1]={
-        +1.0000000000000f,+0.9996988186962f,+0.9987954562052f,+0.9972904566787f,
-        +0.9951847266722f,+0.9924795345987f,+0.9891765099648f,+0.9852776423889f,
-        +0.9807852804032f,+0.9757021300385f,+0.9700312531945f,+0.9637760657954f,
-        +0.9569403357322f,+0.9495281805930f,+0.9415440651830f,+0.9329927988347f,
-        +0.9238795325113f,+0.9142097557035f,+0.9039892931234f,+0.8932243011955f,
-        +0.8819212643484f,+0.8700869911087f,+0.8577286100003f,+0.8448535652497f,
-        +0.8314696123025f,+0.8175848131516f,+0.8032075314806f,+0.7883464276266f,
-        +0.7730104533627f,+0.7572088465065f,+0.7409511253550f,+0.7242470829515f,
-        +0.7071067811865f,+0.6895405447371f,+0.6715589548470f,+0.6531728429538f,
-        +0.6343932841636f,+0.6152315905806f,+0.5956993044924f,+0.5758081914178f,
-        +0.5555702330196f,+0.5349976198871f,+0.5141027441932f,+0.4928981922298f,
-        +0.4713967368260f,+0.4496113296546f,+0.4275550934303f,+0.4052413140050f,
-        +0.3826834323651f,+0.3598950365350f,+0.3368898533922f,+0.3136817403989f,
-        +0.2902846772545f,+0.2667127574749f,+0.2429801799033f,+0.2191012401569f,
-        +0.1950903220161f,+0.1709618887603f,+0.1467304744554f,+0.1224106751992f,
-        +0.0980171403296f,+0.0735645635997f,+0.0490676743274f,+0.0245412285229f,
-        +0.0000000000000f,-0.0245412285229f,-0.0490676743274f,-0.0735645635997f,
-        -0.0980171403296f,-0.1224106751992f,-0.1467304744554f,-0.1709618887603f,
-        -0.1950903220161f,-0.2191012401569f,-0.2429801799033f,-0.2667127574749f,
-        -0.2902846772545f,-0.3136817403989f,-0.3368898533922f,-0.3598950365350f,
-        -0.3826834323651f,-0.4052413140050f,-0.4275550934303f,-0.4496113296546f,
-        -0.4713967368260f,-0.4928981922298f,-0.5141027441932f,-0.5349976198871f,
-        -0.5555702330196f,-0.5758081914178f,-0.5956993044924f,-0.6152315905806f,
-        -0.6343932841636f,-0.6531728429538f,-0.6715589548470f,-0.6895405447371f,
-        -0.7071067811865f,-0.7242470829515f,-0.7409511253550f,-0.7572088465065f,
-        -0.7730104533627f,-0.7883464276266f,-0.8032075314806f,-0.8175848131516f,
-        -0.8314696123025f,-0.8448535652497f,-0.8577286100003f,-0.8700869911087f,
-        -0.8819212643484f,-0.8932243011955f,-0.9039892931234f,-0.9142097557035f,
-        -0.9238795325113f,-0.9329927988347f,-0.9415440651830f,-0.9495281805930f,
-        -0.9569403357322f,-0.9637760657954f,-0.9700312531945f,-0.9757021300385f,
-        -0.9807852804032f,-0.9852776423889f,-0.9891765099648f,-0.9924795345987f,
-        -0.9951847266722f,-0.9972904566787f,-0.9987954562052f,-0.9996988186962f,
-        -1.0000000000000f,
-};
-
-#define INVSQ_LOOKUP_SZ 32
-static const float INVSQ_LOOKUP[INVSQ_LOOKUP_SZ+1]={
-        1.414213562373f,1.392621247646f,1.371988681140f,1.352246807566f,
-        1.333333333333f,1.315191898443f,1.297771369046f,1.281025230441f,
-        1.264911064067f,1.249390095109f,1.234426799697f,1.219988562661f,
-        1.206045378311f,1.192569588000f,1.179535649239f,1.166919931983f,
-        1.154700538379f,1.142857142857f,1.131370849898f,1.120224067222f,
-        1.109400392450f,1.098884511590f,1.088662107904f,1.078719779941f,
-        1.069044967650f,1.059625885652f,1.050451462878f,1.041511287847f,
-        1.032795558989f,1.024295039463f,1.016001016002f,1.007905261358f,
-        1.000000000000f,
-};
-
-#define INVSQ2EXP_LOOKUP_MIN (-32)
-#define INVSQ2EXP_LOOKUP_MAX 32
-static const float INVSQ2EXP_LOOKUP[INVSQ2EXP_LOOKUP_MAX-\
-                              INVSQ2EXP_LOOKUP_MIN+1]={
-                 65536.f,    46340.95001f,         32768.f,    23170.47501f,
-                 16384.f,     11585.2375f,          8192.f,    5792.618751f,
-                  4096.f,    2896.309376f,          2048.f,    1448.154688f,
-                  1024.f,    724.0773439f,           512.f,     362.038672f,
-                   256.f,     181.019336f,           128.f,    90.50966799f,
-                    64.f,      45.254834f,            32.f,      22.627417f,
-                    16.f,     11.3137085f,             8.f,    5.656854249f,
-                     4.f,    2.828427125f,             2.f,    1.414213562f,
-                     1.f,   0.7071067812f,            0.5f,   0.3535533906f,
-                   0.25f,   0.1767766953f,          0.125f,  0.08838834765f,
-                 0.0625f,  0.04419417382f,        0.03125f,  0.02209708691f,
-               0.015625f,  0.01104854346f,      0.0078125f, 0.005524271728f,
-             0.00390625f, 0.002762135864f,    0.001953125f, 0.001381067932f,
-           0.0009765625f, 0.000690533966f,  0.00048828125f, 0.000345266983f,
-         0.000244140625f,0.0001726334915f,0.0001220703125f,8.631674575e-05f,
-        6.103515625e-05f,4.315837288e-05f,3.051757812e-05f,2.157918644e-05f,
-        1.525878906e-05f,
-};
-
-#endif
-
-#define FROMdB_LOOKUP_SZ 35
-#define FROMdB2_LOOKUP_SZ 32
-#define FROMdB_SHIFT 5
-#define FROMdB2_SHIFT 3
-#define FROMdB2_MASK 31
-
-#ifdef FLOAT_LOOKUP
-static const float FROMdB_LOOKUP[FROMdB_LOOKUP_SZ]={
-                     1.f,   0.6309573445f,   0.3981071706f,   0.2511886432f,
-           0.1584893192f,            0.1f,  0.06309573445f,  0.03981071706f,
-          0.02511886432f,  0.01584893192f,           0.01f, 0.006309573445f,
-         0.003981071706f, 0.002511886432f, 0.001584893192f,          0.001f,
-        0.0006309573445f,0.0003981071706f,0.0002511886432f,0.0001584893192f,
-                 0.0001f,6.309573445e-05f,3.981071706e-05f,2.511886432e-05f,
-        1.584893192e-05f,          1e-05f,6.309573445e-06f,3.981071706e-06f,
-        2.511886432e-06f,1.584893192e-06f,          1e-06f,6.309573445e-07f,
-        3.981071706e-07f,2.511886432e-07f,1.584893192e-07f,
-};
-
-static const float FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ]={
-           0.9928302478f,   0.9786445908f,   0.9646616199f,   0.9508784391f,
-           0.9372921937f,     0.92390007f,   0.9106992942f,   0.8976871324f,
-           0.8848608897f,   0.8722179097f,   0.8597555737f,   0.8474713009f,
-            0.835362547f,   0.8234268041f,   0.8116616003f,   0.8000644989f,
-           0.7886330981f,   0.7773650302f,   0.7662579617f,    0.755309592f,
-           0.7445176537f,   0.7338799116f,   0.7233941627f,   0.7130582353f,
-           0.7028699885f,   0.6928273125f,   0.6829281272f,   0.6731703824f,
-           0.6635520573f,   0.6540711597f,   0.6447257262f,   0.6355138211f,
-};
-#endif
-
-#ifdef INT_LOOKUP
-
-#define INVSQ_LOOKUP_I_SHIFT 10
-#define INVSQ_LOOKUP_I_MASK 1023
-static const long INVSQ_LOOKUP_I[64+1]={
-           92682l,   91966l,   91267l,   90583l,
-           89915l,   89261l,   88621l,   87995l,
-           87381l,   86781l,   86192l,   85616l,
-           85051l,   84497l,   83953l,   83420l,
-           82897l,   82384l,   81880l,   81385l,
-           80899l,   80422l,   79953l,   79492l,
-           79039l,   78594l,   78156l,   77726l,
-           77302l,   76885l,   76475l,   76072l,
-           75674l,   75283l,   74898l,   74519l,
-           74146l,   73778l,   73415l,   73058l,
-           72706l,   72359l,   72016l,   71679l,
-           71347l,   71019l,   70695l,   70376l,
-           70061l,   69750l,   69444l,   69141l,
-           68842l,   68548l,   68256l,   67969l,
-           67685l,   67405l,   67128l,   66855l,
-           66585l,   66318l,   66054l,   65794l,
-           65536l,
-};
-
-#define COS_LOOKUP_I_SHIFT 9
-#define COS_LOOKUP_I_MASK 511
-#define COS_LOOKUP_I_SZ 128
-static const long COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={
-           16384l,   16379l,   16364l,   16340l,
-           16305l,   16261l,   16207l,   16143l,
-           16069l,   15986l,   15893l,   15791l,
-           15679l,   15557l,   15426l,   15286l,
-           15137l,   14978l,   14811l,   14635l,
-           14449l,   14256l,   14053l,   13842l,
-           13623l,   13395l,   13160l,   12916l,
-           12665l,   12406l,   12140l,   11866l,
-           11585l,   11297l,   11003l,   10702l,
-           10394l,   10080l,    9760l,    9434l,
-            9102l,    8765l,    8423l,    8076l,
-            7723l,    7366l,    7005l,    6639l,
-            6270l,    5897l,    5520l,    5139l,
-            4756l,    4370l,    3981l,    3590l,
-            3196l,    2801l,    2404l,    2006l,
-            1606l,    1205l,     804l,     402l,
-               0l,    -401l,    -803l,   -1204l,
-           -1605l,   -2005l,   -2403l,   -2800l,
-           -3195l,   -3589l,   -3980l,   -4369l,
-           -4755l,   -5138l,   -5519l,   -5896l,
-           -6269l,   -6638l,   -7004l,   -7365l,
-           -7722l,   -8075l,   -8422l,   -8764l,
-           -9101l,   -9433l,   -9759l,  -10079l,
-          -10393l,  -10701l,  -11002l,  -11296l,
-          -11584l,  -11865l,  -12139l,  -12405l,
-          -12664l,  -12915l,  -13159l,  -13394l,
-          -13622l,  -13841l,  -14052l,  -14255l,
-          -14448l,  -14634l,  -14810l,  -14977l,
-          -15136l,  -15285l,  -15425l,  -15556l,
-          -15678l,  -15790l,  -15892l,  -15985l,
-          -16068l,  -16142l,  -16206l,  -16260l,
-          -16304l,  -16339l,  -16363l,  -16378l,
-          -16383l,
-};
-
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.c
deleted file mode 100644
index a2325e6..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: LPC low level routines
-  last mod: $Id: lpc.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-/* Some of these routines (autocorrelator, LPC coefficient estimator)
-   are derived from code written by Jutta Degener and Carsten Bormann;
-   thus we include their copyright below.  The entirety of this file
-   is freely redistributable on the condition that both of these
-   copyright notices are preserved without modification.  */
-
-/* Preserved Copyright: *********************************************/
-
-/* Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-Technische Universita"t Berlin
-
-Any use of this software is permitted provided that this notice is not
-removed and that neither the authors nor the Technische Universita"t
-Berlin are deemed to have made any representations as to the
-suitability of this software for any purpose nor are held responsible
-for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR
-THIS SOFTWARE.
-
-As a matter of courtesy, the authors request to be informed about uses
-this software has found, about bugs in this software, and about any
-improvements that may be of general interest.
-
-Berlin, 28.11.1994
-Jutta Degener
-Carsten Bormann
-
-*********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "os.h"
-#include "smallft.h"
-#include "lpc.h"
-#include "scales.h"
-#include "misc.h"
-
-/* Autocorrelation LPC coeff generation algorithm invented by
-   N. Levinson in 1947, modified by J. Durbin in 1959. */
-
-/* Input : n elements of time doamin data
-   Output: m lpc coefficients, excitation energy */
-
-float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){
-  double *aut=(double*)alloca(sizeof(*aut)*(m+1));
-  double *lpc=(double*)alloca(sizeof(*lpc)*(m));
-  double error;
-  double epsilon;
-  int i,j;
-
-  /* autocorrelation, p+1 lag coefficients */
-  j=m+1;
-  while(j--){
-    double d=0; /* double needed for accumulator depth */
-    for(i=j;i<n;i++)d+=(double)data[i]*data[i-j];
-    aut[j]=d;
-  }
-
-  /* Generate lpc coefficients from autocorr values */
-
-  /* set our noise floor to about -100dB */
-  error=aut[0] * (1. + 1e-10);
-  epsilon=1e-9*aut[0]+1e-10;
-
-  for(i=0;i<m;i++){
-    double r= -aut[i+1];
-
-    if(error<epsilon){
-      memset(lpc+i,0,(m-i)*sizeof(*lpc));
-      goto done;
-    }
-
-    /* Sum up this iteration's reflection coefficient; note that in
-       Vorbis we don't save it.  If anyone wants to recycle this code
-       and needs reflection coefficients, save the results of 'r' from
-       each iteration. */
-
-    for(j=0;j<i;j++)r-=lpc[j]*aut[i-j];
-    r/=error;
-
-    /* Update LPC coefficients and total error */
-
-    lpc[i]=r;
-    for(j=0;j<i/2;j++){
-      double tmp=lpc[j];
-
-      lpc[j]+=r*lpc[i-1-j];
-      lpc[i-1-j]+=r*tmp;
-    }
-    if(i&1)lpc[j]+=lpc[j]*r;
-
-    error*=1.-r*r;
-
-  }
-
- done:
-
-  /* slightly damp the filter */
-  {
-    double g = .99;
-    double damp = g;
-    for(j=0;j<m;j++){
-      lpc[j]*=damp;
-      damp*=g;
-    }
-  }
-
-  for(j=0;j<m;j++)lpci[j]=(float)lpc[j];
-
-  /* we need the error value to know how big an impulse to hit the
-     filter with later */
-
-  return error;
-}
-
-void vorbis_lpc_predict(float *coeff,float *prime,int m,
-                     float *data,long n){
-
-  /* in: coeff[0...m-1] LPC coefficients
-         prime[0...m-1] initial values (allocated size of n+m-1)
-    out: data[0...n-1] data samples */
-
-  long i,j,o,p;
-  float y;
-  float *work=(float*)alloca(sizeof(*work)*(m+n));
-
-  if(!prime)
-    for(i=0;i<m;i++)
-      work[i]=0.f;
-  else
-    for(i=0;i<m;i++)
-      work[i]=prime[i];
-
-  for(i=0;i<n;i++){
-    y=0;
-    o=i;
-    p=m;
-    for(j=0;j<m;j++)
-      y-=work[o++]*coeff[--p];
-
-    data[i]=work[o]=y;
-  }
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h
deleted file mode 100644
index 4c5f052..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: LPC low level routines
-  last mod: $Id: lpc.h 16037 2009-05-26 21:10:58Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_LPC_H_
-#define _V_LPC_H_
-
-#include "../../codec.h"
-
-/* simple linear scale LPC code */
-extern float vorbis_lpc_from_data(float *data,float *lpc,int n,int m);
-
-extern void vorbis_lpc_predict(float *coeff,float *prime,int m,
-                               float *data,long n);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c
deleted file mode 100644
index a886241..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: LSP (also called LSF) conversion routines
-  last mod: $Id: lsp.c 17538 2010-10-15 02:52:29Z tterribe $
-
-  The LSP generation code is taken (with minimal modification and a
-  few bugfixes) from "On the Computation of the LSP Frequencies" by
-  Joseph Rothweiler (see http://www.rothweiler.us for contact info).
-  The paper is available at:
-
-  http://www.myown1.com/joe/lsf
-
- ********************************************************************/
-
-/* Note that the lpc-lsp conversion finds the roots of polynomial with
-   an iterative root polisher (CACM algorithm 283).  It *is* possible
-   to confuse this algorithm into not converging; that should only
-   happen with absurdly closely spaced roots (very sharp peaks in the
-   LPC f response) which in turn should be impossible in our use of
-   the code.  If this *does* happen anyway, it's a bug in the floor
-   finder; find the cause of the confusion (probably a single bin
-   spike or accidental near-float-limit resolution problems) and
-   correct it. */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "lsp.h"
-#include "os.h"
-#include "misc.h"
-#include "lookup.h"
-#include "scales.h"
-
-/* three possible LSP to f curve functions; the exact computation
-   (float), a lookup based float implementation, and an integer
-   implementation.  The float lookup is likely the optimal choice on
-   any machine with an FPU.  The integer implementation is *not* fixed
-   point (due to the need for a large dynamic range and thus a
-   separately tracked exponent) and thus much more complex than the
-   relatively simple float implementations. It's mostly for future
-   work on a fully fixed point implementation for processors like the
-   ARM family. */
-
-/* define either of these (preferably FLOAT_LOOKUP) to have faster
-   but less precise implementation. */
-#undef FLOAT_LOOKUP
-#undef INT_LOOKUP
-
-#ifdef FLOAT_LOOKUP
-#include "lookup.c" /* catch this in the build system; we #include for
-                       compilers (like gcc) that can't inline across
-                       modules */
-
-/* side effect: changes *lsp to cosines of lsp */
-void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
-                            float amp,float ampoffset){
-  int i;
-  float wdel=M_PI/ln;
-  vorbis_fpu_control fpu;
-
-  vorbis_fpu_setround(&fpu);
-  for(i=0;i<m;i++)lsp[i]=vorbis_coslook(lsp[i]);
-
-  i=0;
-  while(i<n){
-    int k=map[i];
-    int qexp;
-    float p=.7071067812f;
-    float q=.7071067812f;
-    float w=vorbis_coslook(wdel*k);
-    float *ftmp=lsp;
-    int c=m>>1;
-
-    while(c--){
-      q*=ftmp[0]-w;
-      p*=ftmp[1]-w;
-      ftmp+=2;
-    }
-
-    if(m&1){
-      /* odd order filter; slightly assymetric */
-      /* the last coefficient */
-      q*=ftmp[0]-w;
-      q*=q;
-      p*=p*(1.f-w*w);
-    }else{
-      /* even order filter; still symmetric */
-      q*=q*(1.f+w);
-      p*=p*(1.f-w);
-    }
-
-    q=frexp(p+q,&qexp);
-    q=vorbis_fromdBlook(amp*
-                        vorbis_invsqlook(q)*
-                        vorbis_invsq2explook(qexp+m)-
-                        ampoffset);
-
-    do{
-      curve[i++]*=q;
-    }while(map[i]==k);
-  }
-  vorbis_fpu_restore(fpu);
-}
-
-#else
-
-#ifdef INT_LOOKUP
-#include "lookup.c" /* catch this in the build system; we #include for
-                       compilers (like gcc) that can't inline across
-                       modules */
-
-static const int MLOOP_1[64]={
-   0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13,
-  14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14,
-  15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
-  15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
-};
-
-static const int MLOOP_2[64]={
-  0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7,
-  8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8,
-  9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
-  9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
-};
-
-static const int MLOOP_3[8]={0,1,2,2,3,3,3,3};
-
-
-/* side effect: changes *lsp to cosines of lsp */
-void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
-                            float amp,float ampoffset){
-
-  /* 0 <= m < 256 */
-
-  /* set up for using all int later */
-  int i;
-  int ampoffseti=rint(ampoffset*4096.f);
-  int ampi=rint(amp*16.f);
-  long *ilsp=(long*)alloca(m*sizeof(*ilsp));
-  for(i=0;i<m;i++)ilsp[i]=vorbis_coslook_i(lsp[i]/M_PI*65536.f+.5f);
-
-  i=0;
-  while(i<n){
-    int j,k=map[i];
-    unsigned long pi=46341; /* 2**-.5 in 0.16 */
-    unsigned long qi=46341;
-    int qexp=0,shift;
-    long wi=vorbis_coslook_i(k*65536/ln);
-
-    qi*=labs(ilsp[0]-wi);
-    pi*=labs(ilsp[1]-wi);
-
-    for(j=3;j<m;j+=2){
-      if(!(shift=MLOOP_1[(pi|qi)>>25]))
-        if(!(shift=MLOOP_2[(pi|qi)>>19]))
-          shift=MLOOP_3[(pi|qi)>>16];
-      qi=(qi>>shift)*labs(ilsp[j-1]-wi);
-      pi=(pi>>shift)*labs(ilsp[j]-wi);
-      qexp+=shift;
-    }
-    if(!(shift=MLOOP_1[(pi|qi)>>25]))
-      if(!(shift=MLOOP_2[(pi|qi)>>19]))
-        shift=MLOOP_3[(pi|qi)>>16];
-
-    /* pi,qi normalized collectively, both tracked using qexp */
-
-    if(m&1){
-      /* odd order filter; slightly assymetric */
-      /* the last coefficient */
-      qi=(qi>>shift)*labs(ilsp[j-1]-wi);
-      pi=(pi>>shift)<<14;
-      qexp+=shift;
-
-      if(!(shift=MLOOP_1[(pi|qi)>>25]))
-        if(!(shift=MLOOP_2[(pi|qi)>>19]))
-          shift=MLOOP_3[(pi|qi)>>16];
-
-      pi>>=shift;
-      qi>>=shift;
-      qexp+=shift-14*((m+1)>>1);
-
-      pi=((pi*pi)>>16);
-      qi=((qi*qi)>>16);
-      qexp=qexp*2+m;
-
-      pi*=(1<<14)-((wi*wi)>>14);
-      qi+=pi>>14;
-
-    }else{
-      /* even order filter; still symmetric */
-
-      /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't
-         worth tracking step by step */
-
-      pi>>=shift;
-      qi>>=shift;
-      qexp+=shift-7*m;
-
-      pi=((pi*pi)>>16);
-      qi=((qi*qi)>>16);
-      qexp=qexp*2+m;
-
-      pi*=(1<<14)-wi;
-      qi*=(1<<14)+wi;
-      qi=(qi+pi)>>14;
-
-    }
-
-
-    /* we've let the normalization drift because it wasn't important;
-       however, for the lookup, things must be normalized again.  We
-       need at most one right shift or a number of left shifts */
-
-    if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
-      qi>>=1; qexp++;
-    }else
-      while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
-        qi<<=1; qexp--;
-      }
-
-    amp=vorbis_fromdBlook_i(ampi*                     /*  n.4         */
-                            vorbis_invsqlook_i(qi,qexp)-
-                                                      /*  m.8, m+n<=8 */
-                            ampoffseti);              /*  8.12[0]     */
-
-    curve[i]*=amp;
-    while(map[++i]==k)curve[i]*=amp;
-  }
-}
-
-#else
-
-/* old, nonoptimized but simple version for any poor sap who needs to
-   figure out what the hell this code does, or wants the other
-   fraction of a dB precision */
-
-/* side effect: changes *lsp to cosines of lsp */
-void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
-                            float amp,float ampoffset){
-  int i;
-  float wdel=M_PI/ln;
-  for(i=0;i<m;i++)lsp[i]=2.f*cos(lsp[i]);
-
-  i=0;
-  while(i<n){
-    int j,k=map[i];
-    float p=.5f;
-    float q=.5f;
-    float w=2.f*cos(wdel*k);
-    for(j=1;j<m;j+=2){
-      q *= w-lsp[j-1];
-      p *= w-lsp[j];
-    }
-    if(j==m){
-      /* odd order filter; slightly assymetric */
-      /* the last coefficient */
-      q*=w-lsp[j-1];
-      p*=p*(4.f-w*w);
-      q*=q;
-    }else{
-      /* even order filter; still symmetric */
-      p*=p*(2.f-w);
-      q*=q*(2.f+w);
-    }
-
-    q=fromdB(amp/sqrt(p+q)-ampoffset);
-
-    curve[i]*=q;
-    while(map[++i]==k)curve[i]*=q;
-  }
-}
-
-#endif
-#endif
-
-static void cheby(float *g, int ord) {
-  int i, j;
-
-  g[0] *= .5f;
-  for(i=2; i<= ord; i++) {
-    for(j=ord; j >= i; j--) {
-      g[j-2] -= g[j];
-      g[j] += g[j];
-    }
-  }
-}
-
-static int JUCE_CDECL comp(const void *a,const void *b){
-  return (*(float *)a<*(float *)b)-(*(float *)a>*(float *)b);
-}
-
-/* Newton-Raphson-Maehly actually functioned as a decent root finder,
-   but there are root sets for which it gets into limit cycles
-   (exacerbated by zero suppression) and fails.  We can't afford to
-   fail, even if the failure is 1 in 100,000,000, so we now use
-   Laguerre and later polish with Newton-Raphson (which can then
-   afford to fail) */
-
-#define EPSILON 10e-7
-static int Laguerre_With_Deflation(float *a,int ord,float *r){
-  int i,m;
-  double *defl=(double*)alloca(sizeof(*defl)*(ord+1));
-  for(i=0;i<=ord;i++)defl[i]=a[i];
-
-  for(m=ord;m>0;m--){
-    double newx=0.f,delta;
-
-    /* iterate a root */
-    while(1){
-      double p=defl[m],pp=0.f,ppp=0.f,denom;
-
-      /* eval the polynomial and its first two derivatives */
-      for(i=m;i>0;i--){
-	ppp = newx*ppp + pp;
-	pp  = newx*pp  + p;
-	p   = newx*p   + defl[i-1];
-      }
-
-      /* Laguerre's method */
-      denom=(m-1) * ((m-1)*pp*pp - m*p*ppp);
-      if(denom<0)
-        return(-1);  /* complex root!  The LPC generator handed us a bad filter */
-
-      if(pp>0){
-        denom = pp + sqrt(denom);
-        if(denom<EPSILON)denom=EPSILON;
-      }else{
-        denom = pp - sqrt(denom);
-        if(denom>-(EPSILON))denom=-(EPSILON);
-      }
-
-      delta  = m*p/denom;
-      newx   -= delta;
-
-      if(delta<0.f)delta*=-1;
-
-      if(fabs(delta/newx)<10e-12)break;
-    }
-
-    r[m-1]=newx;
-
-    /* forward deflation */
-
-    for(i=m;i>0;i--)
-      defl[i-1]+=newx*defl[i];
-    defl++;
-
-  }
-  return(0);
-}
-
-
-/* for spit-and-polish only */
-static int Newton_Raphson(float *a,int ord,float *r){
-  int i, k, count=0;
-  double error=1.f;
-  double *root=(double*)alloca(ord*sizeof(*root));
-
-  for(i=0; i<ord;i++) root[i] = r[i];
-
-  while(error>1e-20){
-    error=0;
-
-    for(i=0; i<ord; i++) { /* Update each point. */
-      double pp=0.,delta;
-      double rooti=root[i];
-      double p=a[ord];
-      for(k=ord-1; k>= 0; k--) {
-
-        pp= pp* rooti + p;
-        p = p * rooti + a[k];
-      }
-
-      delta = p/pp;
-      root[i] -= delta;
-      error+= delta*delta;
-    }
-
-    if(count>40)return(-1);
-
-    count++;
-  }
-
-  /* Replaced the original bubble sort with a real sort.  With your
-     help, we can eliminate the bubble sort in our lifetime. --Monty */
-
-  for(i=0; i<ord;i++) r[i] = root[i];
-  return(0);
-}
-
-
-/* Convert lpc coefficients to lsp coefficients */
-int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m){
-  int order2=(m+1)>>1;
-  int g1_order,g2_order;
-  float *g1=(float*)alloca(sizeof(*g1)*(order2+1));
-  float *g2=(float*)alloca(sizeof(*g2)*(order2+1));
-  float *g1r=(float*)alloca(sizeof(*g1r)*(order2+1));
-  float *g2r=(float*)alloca(sizeof(*g2r)*(order2+1));
-  int i;
-
-  /* even and odd are slightly different base cases */
-  g1_order=(m+1)>>1;
-  g2_order=(m)  >>1;
-
-  /* Compute the lengths of the x polynomials. */
-  /* Compute the first half of K & R F1 & F2 polynomials. */
-  /* Compute half of the symmetric and antisymmetric polynomials. */
-  /* Remove the roots at +1 and -1. */
-
-  g1[g1_order] = 1.f;
-  for(i=1;i<=g1_order;i++) g1[g1_order-i] = lpc[i-1]+lpc[m-i];
-  g2[g2_order] = 1.f;
-  for(i=1;i<=g2_order;i++) g2[g2_order-i] = lpc[i-1]-lpc[m-i];
-
-  if(g1_order>g2_order){
-    for(i=2; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+2];
-  }else{
-    for(i=1; i<=g1_order;i++) g1[g1_order-i] -= g1[g1_order-i+1];
-    for(i=1; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+1];
-  }
-
-  /* Convert into polynomials in cos(alpha) */
-  cheby(g1,g1_order);
-  cheby(g2,g2_order);
-
-  /* Find the roots of the 2 even polynomials.*/
-  if(Laguerre_With_Deflation(g1,g1_order,g1r) ||
-     Laguerre_With_Deflation(g2,g2_order,g2r))
-    return(-1);
-
-  Newton_Raphson(g1,g1_order,g1r); /* if it fails, it leaves g1r alone */
-  Newton_Raphson(g2,g2_order,g2r); /* if it fails, it leaves g2r alone */
-
-  qsort(g1r,g1_order,sizeof(*g1r),comp);
-  qsort(g2r,g2_order,sizeof(*g2r),comp);
-
-  for(i=0;i<g1_order;i++)
-    lsp[i*2] = acos(g1r[i]);
-
-  for(i=0;i<g2_order;i++)
-    lsp[i*2+1] = acos(g2r[i]);
-  return(0);
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.h
deleted file mode 100644
index 2e52ef1..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
-  function: LSP (also called LSF) conversion routines
-  last mod: $Id: lsp.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-
-#ifndef _V_LSP_H_
-#define _V_LSP_H_
-
-extern int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m);
-
-extern void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,
-                                float *lsp,int m,
-                                float amp,float ampoffset);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c
deleted file mode 100644
index b24ac86..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: channel mapping 0 implementation
- last mod: $Id: mapping0.c 17022 2010-03-25 03:45:42Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "codebook.h"
-#include "window.h"
-#include "registry.h"
-#include "psy.h"
-#include "misc.h"
-
-/* simplistic, wasteful way of doing this (unique lookup for each
-   mode/submapping); there should be a central repository for
-   identical lookups.  That will require minor work, so I'm putting it
-   off as low priority.
-
-   Why a lookup for each backend in a given mode?  Because the
-   blocksize is set by the mode, and low backend lookups may require
-   parameters from other areas of the mode/mapping */
-
-static void mapping0_free_info(vorbis_info_mapping *i){
-  vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)i;
-  if(info){
-    memset(info,0,sizeof(*info));
-    _ogg_free(info);
-  }
-}
-
-static int ilog3(unsigned int v){
-  int ret=0;
-  if(v)--v;
-  while(v){
-    ret++;
-    v>>=1;
-  }
-  return(ret);
-}
-
-static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm,
-                          oggpack_buffer *opb){
-  int i;
-  vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)vm;
-
-  /* another 'we meant to do it this way' hack...  up to beta 4, we
-     packed 4 binary zeros here to signify one submapping in use.  We
-     now redefine that to mean four bitflags that indicate use of
-     deeper features; bit0:submappings, bit1:coupling,
-     bit2,3:reserved. This is backward compatable with all actual uses
-     of the beta code. */
-
-  if(info->submaps>1){
-    oggpack_write(opb,1,1);
-    oggpack_write(opb,info->submaps-1,4);
-  }else
-    oggpack_write(opb,0,1);
-
-  if(info->coupling_steps>0){
-    oggpack_write(opb,1,1);
-    oggpack_write(opb,info->coupling_steps-1,8);
-
-    for(i=0;i<info->coupling_steps;i++){
-      oggpack_write(opb,info->coupling_mag[i],ilog3(vi->channels));
-      oggpack_write(opb,info->coupling_ang[i],ilog3(vi->channels));
-    }
-  }else
-    oggpack_write(opb,0,1);
-
-  oggpack_write(opb,0,2); /* 2,3:reserved */
-
-  /* we don't write the channel submappings if we only have one... */
-  if(info->submaps>1){
-    for(i=0;i<vi->channels;i++)
-      oggpack_write(opb,info->chmuxlist[i],4);
-  }
-  for(i=0;i<info->submaps;i++){
-    oggpack_write(opb,0,8); /* time submap unused */
-    oggpack_write(opb,info->floorsubmap[i],8);
-    oggpack_write(opb,info->residuesubmap[i],8);
-  }
-}
-
-/* also responsible for range checking */
-static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb){
-  int i,b;
-  vorbis_info_mapping0 *info=(vorbis_info_mapping0*)_ogg_calloc(1,sizeof(*info));
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  memset(info,0,sizeof(*info));
-
-  b=oggpack_read(opb,1);
-  if(b<0)goto err_out;
-  if(b){
-    info->submaps=oggpack_read(opb,4)+1;
-    if(info->submaps<=0)goto err_out;
-  }else
-    info->submaps=1;
-
-  b=oggpack_read(opb,1);
-  if(b<0)goto err_out;
-  if(b){
-    info->coupling_steps=oggpack_read(opb,8)+1;
-    if(info->coupling_steps<=0)goto err_out;
-    for(i=0;i<info->coupling_steps;i++){
-      int testM=info->coupling_mag[i]=oggpack_read(opb,ilog3(vi->channels));
-      int testA=info->coupling_ang[i]=oggpack_read(opb,ilog3(vi->channels));
-
-      if(testM<0 ||
-         testA<0 ||
-         testM==testA ||
-         testM>=vi->channels ||
-         testA>=vi->channels) goto err_out;
-    }
-
-  }
-
-  if(oggpack_read(opb,2)!=0)goto err_out; /* 2,3:reserved */
-
-  if(info->submaps>1){
-    for(i=0;i<vi->channels;i++){
-      info->chmuxlist[i]=oggpack_read(opb,4);
-      if(info->chmuxlist[i]>=info->submaps || info->chmuxlist[i]<0)goto err_out;
-    }
-  }
-  for(i=0;i<info->submaps;i++){
-    oggpack_read(opb,8); /* time submap unused */
-    info->floorsubmap[i]=oggpack_read(opb,8);
-    if(info->floorsubmap[i]>=ci->floors || info->floorsubmap[i]<0)goto err_out;
-    info->residuesubmap[i]=oggpack_read(opb,8);
-    if(info->residuesubmap[i]>=ci->residues || info->residuesubmap[i]<0)goto err_out;
-  }
-
-  return info;
-
- err_out:
-  mapping0_free_info(info);
-  return(NULL);
-}
-
-#include "os.h"
-#include "lpc.h"
-#include "lsp.h"
-#include "envelope.h"
-#include "mdct.h"
-#include "psy.h"
-#include "scales.h"
-
-#if 0
-static long seq=0;
-static ogg_int64_t total=0;
-static float FLOOR1_fromdB_LOOKUP[256]={
-  1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F,
-  1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F,
-  1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F,
-  2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F,
-  2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F,
-  3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F,
-  4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F,
-  6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F,
-  7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F,
-  1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F,
-  1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F,
-  1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F,
-  2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F,
-  2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F,
-  3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F,
-  4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F,
-  5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F,
-  7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F,
-  9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F,
-  1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F,
-  1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F,
-  2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F,
-  2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F,
-  3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F,
-  4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F,
-  5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F,
-  7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F,
-  9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F,
-  0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F,
-  0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F,
-  0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F,
-  0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F,
-  0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F,
-  0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F,
-  0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F,
-  0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F,
-  0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F,
-  0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F,
-  0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F,
-  0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F,
-  0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F,
-  0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F,
-  0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F,
-  0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F,
-  0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F,
-  0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F,
-  0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F,
-  0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F,
-  0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F,
-  0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F,
-  0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F,
-  0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F,
-  0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F,
-  0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F,
-  0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F,
-  0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F,
-  0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F,
-  0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F,
-  0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F,
-  0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F,
-  0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F,
-  0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F,
-  0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F,
-  0.82788260F, 0.88168307F, 0.9389798F, 1.F,
-};
-
-#endif
-
-
-static int mapping0_forward(vorbis_block *vb){
-  vorbis_dsp_state      *vd=vb->vd;
-  vorbis_info           *vi=vd->vi;
-  codec_setup_info      *ci=(codec_setup_info*)vi->codec_setup;
-  private_state         *b=(private_state*)vb->vd->backend_state;
-  vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
-  int                    n=vb->pcmend;
-  int i,j,k;
-
-  int    *nonzero    = (int*)alloca(sizeof(*nonzero)*vi->channels);
-  float  **gmdct     = (float**)_vorbis_block_alloc(vb,vi->channels*sizeof(*gmdct));
-  int    **iwork      = (int**)_vorbis_block_alloc(vb,vi->channels*sizeof(*iwork));
-  int ***floor_posts = (int***)_vorbis_block_alloc(vb,vi->channels*sizeof(*floor_posts));
-
-  float global_ampmax=vbi->ampmax;
-  float *local_ampmax=(float*)alloca(sizeof(*local_ampmax)*vi->channels);
-  int blocktype=vbi->blocktype;
-
-  int modenumber=vb->W;
-  vorbis_info_mapping0 *info=(vorbis_info_mapping0*)ci->map_param[modenumber];
-  vorbis_look_psy *psy_look=b->psy+blocktype+(vb->W?2:0);
-
-  vb->mode=modenumber;
-
-  for(i=0;i<vi->channels;i++){
-    float scale=4.f/n;
-    float scale_dB;
-
-    float *pcm     =vb->pcm[i];
-    float *logfft  =pcm;
-
-    iwork[i]=(int*)_vorbis_block_alloc(vb,n/2*sizeof(**iwork));
-    gmdct[i]=(float*)_vorbis_block_alloc(vb,n/2*sizeof(**gmdct));
-
-    scale_dB=todB(&scale) + .345; /* + .345 is a hack; the original
-                                     todB estimation used on IEEE 754
-                                     compliant machines had a bug that
-                                     returned dB values about a third
-                                     of a decibel too high.  The bug
-                                     was harmless because tunings
-                                     implicitly took that into
-                                     account.  However, fixing the bug
-                                     in the estimator requires
-                                     changing all the tunings as well.
-                                     For now, it's easier to sync
-                                     things back up here, and
-                                     recalibrate the tunings in the
-                                     next major model upgrade. */
-
-#if 0
-    if(vi->channels==2){
-      if(i==0)
-        _analysis_output("pcmL",seq,pcm,n,0,0,total-n/2);
-      else
-        _analysis_output("pcmR",seq,pcm,n,0,0,total-n/2);
-    }else{
-      _analysis_output("pcm",seq,pcm,n,0,0,total-n/2);
-    }
-#endif
-
-    /* window the PCM data */
-    _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW);
-
-#if 0
-    if(vi->channels==2){
-      if(i==0)
-        _analysis_output("windowedL",seq,pcm,n,0,0,total-n/2);
-      else
-        _analysis_output("windowedR",seq,pcm,n,0,0,total-n/2);
-    }else{
-      _analysis_output("windowed",seq,pcm,n,0,0,total-n/2);
-    }
-#endif
-
-    /* transform the PCM data */
-    /* only MDCT right now.... */
-    mdct_forward((mdct_lookup*) b->transform[vb->W][0],pcm,gmdct[i]);
-
-    /* FFT yields more accurate tonal estimation (not phase sensitive) */
-    drft_forward(&b->fft_look[vb->W],pcm);
-    logfft[0]=scale_dB+todB(pcm)  + .345; /* + .345 is a hack; the
-                                     original todB estimation used on
-                                     IEEE 754 compliant machines had a
-                                     bug that returned dB values about
-                                     a third of a decibel too high.
-                                     The bug was harmless because
-                                     tunings implicitly took that into
-                                     account.  However, fixing the bug
-                                     in the estimator requires
-                                     changing all the tunings as well.
-                                     For now, it's easier to sync
-                                     things back up here, and
-                                     recalibrate the tunings in the
-                                     next major model upgrade. */
-    local_ampmax[i]=logfft[0];
-    for(j=1;j<n-1;j+=2){
-      float temp=pcm[j]*pcm[j]+pcm[j+1]*pcm[j+1];
-      temp=logfft[(j+1)>>1]=scale_dB+.5f*todB(&temp)  + .345; /* +
-                                     .345 is a hack; the original todB
-                                     estimation used on IEEE 754
-                                     compliant machines had a bug that
-                                     returned dB values about a third
-                                     of a decibel too high.  The bug
-                                     was harmless because tunings
-                                     implicitly took that into
-                                     account.  However, fixing the bug
-                                     in the estimator requires
-                                     changing all the tunings as well.
-                                     For now, it's easier to sync
-                                     things back up here, and
-                                     recalibrate the tunings in the
-                                     next major model upgrade. */
-      if(temp>local_ampmax[i])local_ampmax[i]=temp;
-    }
-
-    if(local_ampmax[i]>0.f)local_ampmax[i]=0.f;
-    if(local_ampmax[i]>global_ampmax)global_ampmax=local_ampmax[i];
-
-#if 0
-    if(vi->channels==2){
-      if(i==0){
-        _analysis_output("fftL",seq,logfft,n/2,1,0,0);
-      }else{
-        _analysis_output("fftR",seq,logfft,n/2,1,0,0);
-      }
-    }else{
-      _analysis_output("fft",seq,logfft,n/2,1,0,0);
-    }
-#endif
-
-  }
-
-  {
-    float   *noise        = (float*)_vorbis_block_alloc(vb,n/2*sizeof(*noise));
-    float   *tone         = (float*)_vorbis_block_alloc(vb,n/2*sizeof(*tone));
-
-    for(i=0;i<vi->channels;i++){
-      /* the encoder setup assumes that all the modes used by any
-         specific bitrate tweaking use the same floor */
-
-      int submap=info->chmuxlist[i];
-
-      /* the following makes things clearer to *me* anyway */
-      float *mdct    =gmdct[i];
-      float *logfft  =vb->pcm[i];
-
-      float *logmdct =logfft+n/2;
-      float *logmask =logfft;
-
-      vb->mode=modenumber;
-
-      floor_posts[i]=(int**)_vorbis_block_alloc(vb,PACKETBLOBS*sizeof(**floor_posts));
-      memset(floor_posts[i],0,sizeof(**floor_posts)*PACKETBLOBS);
-
-      for(j=0;j<n/2;j++)
-        logmdct[j]=todB(mdct+j)  + .345; /* + .345 is a hack; the original
-                                     todB estimation used on IEEE 754
-                                     compliant machines had a bug that
-                                     returned dB values about a third
-                                     of a decibel too high.  The bug
-                                     was harmless because tunings
-                                     implicitly took that into
-                                     account.  However, fixing the bug
-                                     in the estimator requires
-                                     changing all the tunings as well.
-                                     For now, it's easier to sync
-                                     things back up here, and
-                                     recalibrate the tunings in the
-                                     next major model upgrade. */
-
-#if 0
-      if(vi->channels==2){
-        if(i==0)
-          _analysis_output("mdctL",seq,logmdct,n/2,1,0,0);
-        else
-          _analysis_output("mdctR",seq,logmdct,n/2,1,0,0);
-      }else{
-        _analysis_output("mdct",seq,logmdct,n/2,1,0,0);
-      }
-#endif
-
-      /* first step; noise masking.  Not only does 'noise masking'
-         give us curves from which we can decide how much resolution
-         to give noise parts of the spectrum, it also implicitly hands
-         us a tonality estimate (the larger the value in the
-         'noise_depth' vector, the more tonal that area is) */
-
-      _vp_noisemask(psy_look,
-                    logmdct,
-                    noise); /* noise does not have by-frequency offset
-                               bias applied yet */
-#if 0
-      if(vi->channels==2){
-        if(i==0)
-          _analysis_output("noiseL",seq,noise,n/2,1,0,0);
-        else
-          _analysis_output("noiseR",seq,noise,n/2,1,0,0);
-      }else{
-        _analysis_output("noise",seq,noise,n/2,1,0,0);
-      }
-#endif
-
-      /* second step: 'all the other crap'; all the stuff that isn't
-         computed/fit for bitrate management goes in the second psy
-         vector.  This includes tone masking, peak limiting and ATH */
-
-      _vp_tonemask(psy_look,
-                   logfft,
-                   tone,
-                   global_ampmax,
-                   local_ampmax[i]);
-
-#if 0
-      if(vi->channels==2){
-        if(i==0)
-          _analysis_output("toneL",seq,tone,n/2,1,0,0);
-        else
-          _analysis_output("toneR",seq,tone,n/2,1,0,0);
-      }else{
-        _analysis_output("tone",seq,tone,n/2,1,0,0);
-      }
-#endif
-
-      /* third step; we offset the noise vectors, overlay tone
-         masking.  We then do a floor1-specific line fit.  If we're
-         performing bitrate management, the line fit is performed
-         multiple times for up/down tweakage on demand. */
-
-#if 0
-      {
-      float aotuv[psy_look->n];
-#endif
-
-        _vp_offset_and_mix(psy_look,
-                           noise,
-                           tone,
-                           1,
-                           logmask,
-                           mdct,
-                           logmdct);
-
-#if 0
-        if(vi->channels==2){
-          if(i==0)
-            _analysis_output("aotuvM1_L",seq,aotuv,psy_look->n,1,1,0);
-          else
-            _analysis_output("aotuvM1_R",seq,aotuv,psy_look->n,1,1,0);
-        }else{
-          _analysis_output("aotuvM1",seq,aotuv,psy_look->n,1,1,0);
-        }
-      }
-#endif
-
-
-#if 0
-      if(vi->channels==2){
-        if(i==0)
-          _analysis_output("mask1L",seq,logmask,n/2,1,0,0);
-        else
-          _analysis_output("mask1R",seq,logmask,n/2,1,0,0);
-      }else{
-        _analysis_output("mask1",seq,logmask,n/2,1,0,0);
-      }
-#endif
-
-      /* this algorithm is hardwired to floor 1 for now; abort out if
-         we're *not* floor1.  This won't happen unless someone has
-         broken the encode setup lib.  Guard it anyway. */
-      if(ci->floor_type[info->floorsubmap[submap]]!=1)return(-1);
-
-      floor_posts[i][PACKETBLOBS/2]=
-        floor1_fit(vb,(vorbis_look_floor1*)(b->flr[info->floorsubmap[submap]]),
-                   logmdct,
-                   logmask);
-
-      /* are we managing bitrate?  If so, perform two more fits for
-         later rate tweaking (fits represent hi/lo) */
-      if(vorbis_bitrate_managed(vb) && floor_posts[i][PACKETBLOBS/2]){
-        /* higher rate by way of lower noise curve */
-
-        _vp_offset_and_mix(psy_look,
-                           noise,
-                           tone,
-                           2,
-                           logmask,
-                           mdct,
-                           logmdct);
-
-#if 0
-        if(vi->channels==2){
-          if(i==0)
-            _analysis_output("mask2L",seq,logmask,n/2,1,0,0);
-          else
-            _analysis_output("mask2R",seq,logmask,n/2,1,0,0);
-        }else{
-          _analysis_output("mask2",seq,logmask,n/2,1,0,0);
-        }
-#endif
-
-        floor_posts[i][PACKETBLOBS-1]=
-          floor1_fit(vb,(vorbis_look_floor1*)(b->flr[info->floorsubmap[submap]]),
-                     logmdct,
-                     logmask);
-
-        /* lower rate by way of higher noise curve */
-        _vp_offset_and_mix(psy_look,
-                           noise,
-                           tone,
-                           0,
-                           logmask,
-                           mdct,
-                           logmdct);
-
-#if 0
-        if(vi->channels==2){
-          if(i==0)
-            _analysis_output("mask0L",seq,logmask,n/2,1,0,0);
-          else
-            _analysis_output("mask0R",seq,logmask,n/2,1,0,0);
-        }else{
-          _analysis_output("mask0",seq,logmask,n/2,1,0,0);
-        }
-#endif
-
-        floor_posts[i][0]=
-          floor1_fit(vb,(vorbis_look_floor1*)(b->flr[info->floorsubmap[submap]]),
-                     logmdct,
-                     logmask);
-
-        /* we also interpolate a range of intermediate curves for
-           intermediate rates */
-        for(k=1;k<PACKETBLOBS/2;k++)
-          floor_posts[i][k]=
-            floor1_interpolate_fit(vb,(vorbis_look_floor1*)(b->flr[info->floorsubmap[submap]]),
-                                   floor_posts[i][0],
-                                   floor_posts[i][PACKETBLOBS/2],
-                                   k*65536/(PACKETBLOBS/2));
-        for(k=PACKETBLOBS/2+1;k<PACKETBLOBS-1;k++)
-          floor_posts[i][k]=
-            floor1_interpolate_fit(vb,(vorbis_look_floor1*)(b->flr[info->floorsubmap[submap]]),
-                                   floor_posts[i][PACKETBLOBS/2],
-                                   floor_posts[i][PACKETBLOBS-1],
-                                   (k-PACKETBLOBS/2)*65536/(PACKETBLOBS/2));
-      }
-    }
-  }
-  vbi->ampmax=global_ampmax;
-
-  /*
-    the next phases are performed once for vbr-only and PACKETBLOB
-    times for bitrate managed modes.
-
-    1) encode actual mode being used
-    2) encode the floor for each channel, compute coded mask curve/res
-    3) normalize and couple.
-    4) encode residue
-    5) save packet bytes to the packetblob vector
-
-  */
-
-  /* iterate over the many masking curve fits we've created */
-
-  {
-    int **couple_bundle=(int**)alloca(sizeof(*couple_bundle)*vi->channels);
-    int *zerobundle=(int*)alloca(sizeof(*zerobundle)*vi->channels);
-
-    for(k=(vorbis_bitrate_managed(vb)?0:PACKETBLOBS/2);
-        k<=(vorbis_bitrate_managed(vb)?PACKETBLOBS-1:PACKETBLOBS/2);
-        k++){
-      oggpack_buffer *opb=vbi->packetblob[k];
-
-      /* start out our new packet blob with packet type and mode */
-      /* Encode the packet type */
-      oggpack_write(opb,0,1);
-      /* Encode the modenumber */
-      /* Encode frame mode, pre,post windowsize, then dispatch */
-      oggpack_write(opb,modenumber,b->modebits);
-      if(vb->W){
-        oggpack_write(opb,vb->lW,1);
-        oggpack_write(opb,vb->nW,1);
-      }
-
-      /* encode floor, compute masking curve, sep out residue */
-      for(i=0;i<vi->channels;i++){
-        int submap=info->chmuxlist[i];
-        int *ilogmask=iwork[i];
-
-        nonzero[i]=floor1_encode(opb,vb,(vorbis_look_floor1*)(b->flr[info->floorsubmap[submap]]),
-                                 floor_posts[i][k],
-                                 ilogmask);
-#if 0
-        {
-          char buf[80];
-          sprintf(buf,"maskI%c%d",i?'R':'L',k);
-          float work[n/2];
-          for(j=0;j<n/2;j++)
-            work[j]=FLOOR1_fromdB_LOOKUP[iwork[i][j]];
-          _analysis_output(buf,seq,work,n/2,1,1,0);
-        }
-#endif
-      }
-
-      /* our iteration is now based on masking curve, not prequant and
-         coupling.  Only one prequant/coupling step */
-
-      /* quantize/couple */
-      /* incomplete implementation that assumes the tree is all depth
-         one, or no tree at all */
-      _vp_couple_quantize_normalize(k,
-                                    &ci->psy_g_param,
-                                    psy_look,
-                                    info,
-                                    gmdct,
-                                    iwork,
-                                    nonzero,
-                                    ci->psy_g_param.sliding_lowpass[vb->W][k],
-                                    vi->channels);
-
-#if 0
-      for(i=0;i<vi->channels;i++){
-        char buf[80];
-        sprintf(buf,"res%c%d",i?'R':'L',k);
-        float work[n/2];
-        for(j=0;j<n/2;j++)
-          work[j]=iwork[i][j];
-        _analysis_output(buf,seq,work,n/2,1,0,0);
-      }
-#endif
-
-      /* classify and encode by submap */
-      for(i=0;i<info->submaps;i++){
-        int ch_in_bundle=0;
-        long **classifications;
-        int resnum=info->residuesubmap[i];
-
-        for(j=0;j<vi->channels;j++){
-          if(info->chmuxlist[j]==i){
-            zerobundle[ch_in_bundle]=0;
-            if(nonzero[j])zerobundle[ch_in_bundle]=1;
-            couple_bundle[ch_in_bundle++]=iwork[j];
-          }
-        }
-
-        classifications=_residue_P[ci->residue_type[resnum]]->
-          classx(vb,b->residue[resnum],couple_bundle,zerobundle,ch_in_bundle);
-
-        ch_in_bundle=0;
-        for(j=0;j<vi->channels;j++)
-          if(info->chmuxlist[j]==i)
-            couple_bundle[ch_in_bundle++]=iwork[j];
-
-        _residue_P[ci->residue_type[resnum]]->
-          forward(opb,vb,b->residue[resnum],
-                  couple_bundle,zerobundle,ch_in_bundle,classifications,i);
-      }
-
-      /* ok, done encoding.  Next protopacket. */
-    }
-
-  }
-
-#if 0
-  seq++;
-  total+=ci->blocksizes[vb->W]/4+ci->blocksizes[vb->nW]/4;
-#endif
-  return(0);
-}
-
-static int mapping0_inverse(vorbis_block *vb,vorbis_info_mapping *l){
-  vorbis_dsp_state     *vd=vb->vd;
-  vorbis_info          *vi=vd->vi;
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  private_state        *b=(private_state*)vd->backend_state;
-  vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)l;
-
-  int                   i,j;
-  long                  n=vb->pcmend=ci->blocksizes[vb->W];
-
-  float **pcmbundle=(float**) alloca(sizeof(*pcmbundle)*vi->channels);
-  int    *zerobundle=(int*) alloca(sizeof(*zerobundle)*vi->channels);
-
-  int   *nonzero  =(int*) alloca(sizeof(*nonzero)*vi->channels);
-  void **floormemo=(void**) alloca(sizeof(*floormemo)*vi->channels);
-
-  /* recover the spectral envelope; store it in the PCM vector for now */
-  for(i=0;i<vi->channels;i++){
-    int submap=info->chmuxlist[i];
-    floormemo[i]=_floor_P[ci->floor_type[info->floorsubmap[submap]]]->
-      inverse1(vb,b->flr[info->floorsubmap[submap]]);
-    if(floormemo[i])
-      nonzero[i]=1;
-    else
-      nonzero[i]=0;
-    memset(vb->pcm[i],0,sizeof(*vb->pcm[i])*n/2);
-  }
-
-  /* channel coupling can 'dirty' the nonzero listing */
-  for(i=0;i<info->coupling_steps;i++){
-    if(nonzero[info->coupling_mag[i]] ||
-       nonzero[info->coupling_ang[i]]){
-      nonzero[info->coupling_mag[i]]=1;
-      nonzero[info->coupling_ang[i]]=1;
-    }
-  }
-
-  /* recover the residue into our working vectors */
-  for(i=0;i<info->submaps;i++){
-    int ch_in_bundle=0;
-    for(j=0;j<vi->channels;j++){
-      if(info->chmuxlist[j]==i){
-        if(nonzero[j])
-          zerobundle[ch_in_bundle]=1;
-        else
-          zerobundle[ch_in_bundle]=0;
-        pcmbundle[ch_in_bundle++]=vb->pcm[j];
-      }
-    }
-
-    _residue_P[ci->residue_type[info->residuesubmap[i]]]->
-      inverse(vb,b->residue[info->residuesubmap[i]],
-              pcmbundle,zerobundle,ch_in_bundle);
-  }
-
-  /* channel coupling */
-  for(i=info->coupling_steps-1;i>=0;i--){
-    float *pcmM=vb->pcm[info->coupling_mag[i]];
-    float *pcmA=vb->pcm[info->coupling_ang[i]];
-
-    for(j=0;j<n/2;j++){
-      float mag=pcmM[j];
-      float ang=pcmA[j];
-
-      if(mag>0)
-        if(ang>0){
-          pcmM[j]=mag;
-          pcmA[j]=mag-ang;
-        }else{
-          pcmA[j]=mag;
-          pcmM[j]=mag+ang;
-        }
-      else
-        if(ang>0){
-          pcmM[j]=mag;
-          pcmA[j]=mag+ang;
-        }else{
-          pcmA[j]=mag;
-          pcmM[j]=mag-ang;
-        }
-    }
-  }
-
-  /* compute and apply spectral envelope */
-  for(i=0;i<vi->channels;i++){
-    float *pcm=vb->pcm[i];
-    int submap=info->chmuxlist[i];
-    _floor_P[ci->floor_type[info->floorsubmap[submap]]]->
-      inverse2(vb,b->flr[info->floorsubmap[submap]],
-               floormemo[i],pcm);
-  }
-
-  /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */
-  /* only MDCT right now.... */
-  for(i=0;i<vi->channels;i++){
-    float *pcm=vb->pcm[i];
-    mdct_backward((mdct_lookup*) b->transform[vb->W][0],pcm,pcm);
-  }
-
-  /* all done! */
-  return(0);
-}
-
-/* export hooks */
-const vorbis_func_mapping mapping0_exportbundle={
-  &mapping0_pack,
-  &mapping0_unpack,
-  &mapping0_free_info,
-  &mapping0_forward,
-  &mapping0_inverse
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h
deleted file mode 100644
index 31c825f..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/masking.h
+++ /dev/null
@@ -1,785 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: masking curve data for psychoacoustics
- last mod: $Id: masking.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_MASKING_H_
-#define _V_MASKING_H_
-
-/* more detailed ATH; the bass if flat to save stressing the floor
-   overly for only a bin or two of savings. */
-
-#define MAX_ATH 88
-static const float ATH[]={
-  /*15*/  -51, -52, -53, -54, -55, -56, -57, -58,
-  /*31*/  -59, -60, -61, -62, -63, -64, -65, -66,
-  /*63*/  -67, -68, -69, -70, -71, -72, -73, -74,
-  /*125*/ -75, -76, -77, -78, -80, -81, -82, -83,
-  /*250*/ -84, -85, -86, -87, -88, -88, -89, -89,
-  /*500*/ -90, -91, -91, -92, -93, -94, -95, -96,
-  /*1k*/  -96, -97, -98, -98, -99, -99,-100,-100,
-  /*2k*/ -101,-102,-103,-104,-106,-107,-107,-107,
-  /*4k*/ -107,-105,-103,-102,-101, -99, -98, -96,
-  /*8k*/  -95, -95, -96, -97, -96, -95, -93, -90,
-  /*16k*/ -80, -70, -50, -40, -30, -30, -30, -30
-};
-
-/* The tone masking curves from Ehmer's and Fielder's papers have been
-   replaced by an empirically collected data set.  The previously
-   published values were, far too often, simply on crack. */
-
-#define EHMER_OFFSET 16
-#define EHMER_MAX 56
-
-/* masking tones from -50 to 0dB, 62.5 through 16kHz at half octaves
-   test tones from -2 octaves to +5 octaves sampled at eighth octaves */
-/* (Vorbis 0dB, the loudest possible tone, is assumed to be ~100dB SPL
-   for collection of these curves) */
-
-static const float tonemasks[P_BANDS][6][EHMER_MAX]={
-  /* 62.5 Hz */
-  {{ -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,
-     -60,  -60,  -60,  -60,  -62,  -62,  -65,  -73,
-     -69,  -68,  -68,  -67,  -70,  -70,  -72,  -74,
-     -75,  -79,  -79,  -80,  -83,  -88,  -93, -100,
-     -110, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-     -48,  -48,  -48,  -48,  -48,  -53,  -61,  -66,
-     -66,  -68,  -67,  -70,  -76,  -76,  -72,  -73,
-     -75,  -76,  -78,  -79,  -83,  -88,  -93, -100,
-     -110, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37,
-     -38,  -40,  -42,  -46,  -48,  -53,  -55,  -62,
-     -65,  -58,  -56,  -56,  -61,  -60,  -65,  -67,
-     -69,  -71,  -77,  -77,  -78,  -80,  -82,  -84,
-     -88,  -93,  -98, -106, -112, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
-     -25,  -26,  -27,  -29,  -32,  -38,  -48,  -52,
-     -52,  -50,  -48,  -48,  -51,  -52,  -54,  -60,
-     -67,  -67,  -66,  -68,  -69,  -73,  -73,  -76,
-     -80,  -81,  -81,  -85,  -85,  -86,  -88,  -93,
-     -100, -110, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
-     -17,  -19,  -20,  -22,  -26,  -28,  -31,  -40,
-     -47,  -39,  -39,  -40,  -42,  -43,  -47,  -51,
-     -57,  -52,  -55,  -55,  -60,  -58,  -62,  -63,
-     -70,  -67,  -69,  -72,  -73,  -77,  -80,  -82,
-     -83,  -87,  -90,  -94,  -98, -104, -115, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   {  -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
-      -8,   -8,  -10,  -11,  -15,  -19,  -25,  -30,
-      -34,  -31,  -30,  -31,  -29,  -32,  -35,  -42,
-      -48,  -42,  -44,  -46,  -50,  -50,  -51,  -52,
-      -59,  -54,  -55,  -55,  -58,  -62,  -63,  -66,
-      -72,  -73,  -76,  -75,  -78,  -80,  -80,  -81,
-      -84,  -88,  -90,  -94,  -98, -101, -106, -110}},
-  /* 88Hz */
-  {{ -66,  -66,  -66,  -66,  -66,  -66,  -66,  -66,
-     -66,  -66,  -66,  -66,  -66,  -67,  -67,  -67,
-     -76,  -72,  -71,  -74,  -76,  -76,  -75,  -78,
-     -79,  -79,  -81,  -83,  -86,  -89,  -93,  -97,
-     -100, -105, -110, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
-     -47,  -47,  -47,  -48,  -51,  -55,  -59,  -66,
-     -66,  -66,  -67,  -66,  -68,  -69,  -70,  -74,
-     -79,  -77,  -77,  -78,  -80,  -81,  -82,  -84,
-     -86,  -88,  -91,  -95, -100, -108, -116, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-     -36,  -37,  -37,  -41,  -44,  -48,  -51,  -58,
-     -62,  -60,  -57,  -59,  -59,  -60,  -63,  -65,
-     -72,  -71,  -70,  -72,  -74,  -77,  -76,  -78,
-     -81,  -81,  -80,  -83,  -86,  -91,  -96, -100,
-     -105, -110, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
-     -28,  -30,  -32,  -32,  -33,  -35,  -41,  -49,
-     -50,  -49,  -47,  -48,  -48,  -52,  -51,  -57,
-     -65,  -61,  -59,  -61,  -64,  -69,  -70,  -74,
-     -77,  -77,  -78,  -81,  -84,  -85,  -87,  -90,
-     -92,  -96, -100, -107, -112, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
-     -20,  -21,  -23,  -27,  -30,  -35,  -36,  -41,
-     -46,  -44,  -42,  -40,  -41,  -41,  -43,  -48,
-     -55,  -53,  -52,  -53,  -56,  -59,  -58,  -60,
-     -67,  -66,  -69,  -71,  -72,  -75,  -79,  -81,
-     -84,  -87,  -90,  -93,  -97, -101, -107, -114,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   {  -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
-      -11,  -12,  -12,  -15,  -16,  -20,  -23,  -30,
-      -37,  -34,  -33,  -34,  -31,  -32,  -32,  -38,
-      -47,  -44,  -41,  -40,  -47,  -49,  -46,  -46,
-      -58,  -50,  -50,  -54,  -58,  -62,  -64,  -67,
-      -67,  -70,  -72,  -76,  -79,  -83,  -87,  -91,
-      -96, -100, -104, -110, -999, -999, -999, -999}},
-  /* 125 Hz */
-  {{ -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,
-     -62,  -62,  -63,  -64,  -66,  -67,  -66,  -68,
-     -75,  -72,  -76,  -75,  -76,  -78,  -79,  -82,
-     -84,  -85,  -90,  -94, -101, -110, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,
-     -59,  -59,  -59,  -60,  -60,  -61,  -63,  -66,
-     -71,  -68,  -70,  -70,  -71,  -72,  -72,  -75,
-     -81,  -78,  -79,  -82,  -83,  -86,  -90,  -97,
-     -103, -113, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
-     -53,  -54,  -55,  -57,  -56,  -57,  -55,  -61,
-     -65,  -60,  -60,  -62,  -63,  -63,  -66,  -68,
-     -74,  -73,  -75,  -75,  -78,  -80,  -80,  -82,
-     -85,  -90,  -96, -101, -108, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
-     -46,  -46,  -47,  -47,  -47,  -47,  -48,  -51,
-     -57,  -51,  -49,  -50,  -51,  -53,  -54,  -59,
-     -66,  -60,  -62,  -67,  -67,  -70,  -72,  -75,
-     -76,  -78,  -81,  -85,  -88,  -94,  -97, -104,
-     -112, -999, -999, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-     -39,  -41,  -42,  -42,  -39,  -38,  -41,  -43,
-     -52,  -44,  -40,  -39,  -37,  -37,  -40,  -47,
-     -54,  -50,  -48,  -50,  -55,  -61,  -59,  -62,
-     -66,  -66,  -66,  -69,  -69,  -73,  -74,  -74,
-     -75,  -77,  -79,  -82,  -87,  -91,  -95, -100,
-     -108, -115, -999, -999, -999, -999, -999, -999},
-   { -28,  -26,  -24,  -22,  -20,  -20,  -23,  -29,
-     -30,  -31,  -28,  -27,  -28,  -28,  -28,  -35,
-     -40,  -33,  -32,  -29,  -30,  -30,  -30,  -37,
-     -45,  -41,  -37,  -38,  -45,  -47,  -47,  -48,
-     -53,  -49,  -48,  -50,  -49,  -49,  -51,  -52,
-     -58,  -56,  -57,  -56,  -60,  -61,  -62,  -70,
-     -72,  -74,  -78,  -83,  -88,  -93, -100, -106}},
-  /* 177 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -110, -105, -100,  -95,  -91,  -87,  -83,
-    -80,  -78,  -76,  -78,  -78,  -81,  -83,  -85,
-    -86,  -85,  -86,  -87,  -90,  -97, -107, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -110, -105, -100,  -95,  -90,
-    -85,  -81,  -77,  -73,  -70,  -67,  -67,  -68,
-    -75,  -73,  -70,  -69,  -70,  -72,  -75,  -79,
-    -84,  -83,  -84,  -86,  -88,  -89,  -89,  -93,
-    -98, -105, -112, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-105, -100,  -95,  -90,  -85,  -80,  -76,  -71,
-    -68,  -68,  -65,  -63,  -63,  -62,  -62,  -64,
-    -65,  -64,  -61,  -62,  -63,  -64,  -66,  -68,
-    -73,  -73,  -74,  -75,  -76,  -81,  -83,  -85,
-    -88,  -89,  -92,  -95, -100, -108, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   { -80,  -75,  -71,  -68,  -65,  -63,  -62,  -61,
-     -61,  -61,  -61,  -59,  -56,  -57,  -53,  -50,
-     -58,  -52,  -50,  -50,  -52,  -53,  -54,  -58,
-     -67,  -63,  -67,  -68,  -72,  -75,  -78,  -80,
-     -81,  -81,  -82,  -85,  -89,  -90,  -93,  -97,
-     -101, -107, -114, -999, -999, -999, -999, -999,
-     -999, -999, -999, -999, -999, -999, -999, -999},
-   { -65,  -61,  -59,  -57,  -56,  -55,  -55,  -56,
-     -56,  -57,  -55,  -53,  -52,  -47,  -44,  -44,
-     -50,  -44,  -41,  -39,  -39,  -42,  -40,  -46,
-     -51,  -49,  -50,  -53,  -54,  -63,  -60,  -61,
-     -62,  -66,  -66,  -66,  -70,  -73,  -74,  -75,
-     -76,  -75,  -79,  -85,  -89,  -91,  -96, -102,
-     -110, -999, -999, -999, -999, -999, -999, -999},
-   { -52,  -50,  -49,  -49,  -48,  -48,  -48,  -49,
-     -50,  -50,  -49,  -46,  -43,  -39,  -35,  -33,
-     -38,  -36,  -32,  -29,  -32,  -32,  -32,  -35,
-     -44,  -39,  -38,  -38,  -46,  -50,  -45,  -46,
-     -53,  -50,  -50,  -50,  -54,  -54,  -53,  -53,
-     -56,  -57,  -59,  -66,  -70,  -72,  -74,  -79,
-     -83,  -85,  -90, -97, -114, -999, -999, -999}},
-  /* 250 Hz */
-  {{-999, -999, -999, -999, -999, -999, -110, -105,
-    -100,  -95,  -90,  -86,  -80,  -75,  -75,  -79,
-    -80,  -79,  -80,  -81,  -82,  -88,  -95, -103,
-    -110, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -108, -103,  -98,  -93,
-    -88,  -83,  -79,  -78,  -75,  -71,  -67,  -68,
-    -73,  -73,  -72,  -73,  -75,  -77,  -80,  -82,
-    -88,  -93, -100, -107, -114, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -110, -105, -101,  -96,  -90,
-    -86,  -81,  -77,  -73,  -69,  -66,  -61,  -62,
-    -66,  -64,  -62,  -65,  -66,  -70,  -72,  -76,
-    -81,  -80,  -84,  -90,  -95, -102, -110, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -107, -103,  -97,  -92,  -88,
-    -83,  -79,  -74,  -70,  -66,  -59,  -53,  -58,
-    -62,  -55,  -54,  -54,  -54,  -58,  -61,  -62,
-    -72,  -70,  -72,  -75,  -78,  -80,  -81,  -80,
-    -83,  -83,  -88,  -93, -100, -107, -115, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -105, -100,  -95,  -90,  -85,
-    -80,  -75,  -70,  -66,  -62,  -56,  -48,  -44,
-    -48,  -46,  -46,  -43,  -46,  -48,  -48,  -51,
-    -58,  -58,  -59,  -60,  -62,  -62,  -61,  -61,
-    -65,  -64,  -65,  -68,  -70,  -74,  -75,  -78,
-    -81,  -86,  -95, -110, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999,  -999, -105, -100,  -95,  -90,  -85,  -80,
-    -75,  -70,  -65,  -61,  -55,  -49,  -39,  -33,
-    -40,  -35,  -32,  -38,  -40,  -33,  -35,  -37,
-    -46,  -41,  -45,  -44,  -46,  -42,  -45,  -46,
-    -52,  -50,  -50,  -50,  -54,  -54,  -55,  -57,
-    -62,  -64,  -66,  -68,  -70,  -76,  -81,  -90,
-    -100, -110, -999, -999, -999, -999, -999, -999}},
-  /* 354 hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -105,  -98,  -90,  -85,  -82,  -83,  -80,  -78,
-    -84,  -79,  -80,  -83,  -87,  -89,  -91,  -93,
-    -99, -106, -117, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -105,  -98,  -90,  -85,  -80,  -75,  -70,  -68,
-    -74,  -72,  -74,  -77,  -80,  -82,  -85,  -87,
-    -92,  -89,  -91,  -95, -100, -106, -112, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -105,  -98,  -90,  -83,  -75,  -71,  -63,  -64,
-    -67,  -62,  -64,  -67,  -70,  -73,  -77,  -81,
-    -84,  -83,  -85,  -89,  -90,  -93,  -98, -104,
-    -109, -114, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -103,  -96,  -88,  -81,  -75,  -68,  -58,  -54,
-    -56,  -54,  -56,  -56,  -58,  -60,  -63,  -66,
-    -74,  -69,  -72,  -72,  -75,  -74,  -77,  -81,
-    -81,  -82,  -84,  -87,  -93,  -96,  -99, -104,
-    -110, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -108, -102,  -96,
-    -91,  -85,  -80,  -74,  -68,  -60,  -51,  -46,
-    -48,  -46,  -43,  -45,  -47,  -47,  -49,  -48,
-    -56,  -53,  -55,  -58,  -57,  -63,  -58,  -60,
-    -66,  -64,  -67,  -70,  -70,  -74,  -77,  -84,
-    -86,  -89,  -91,  -93,  -94, -101, -109, -118,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -108, -103,  -98,  -93,  -88,
-    -83,  -78,  -73,  -68,  -60,  -53,  -44,  -35,
-    -38,  -38,  -34,  -34,  -36,  -40,  -41,  -44,
-    -51,  -45,  -46,  -47,  -46,  -54,  -50,  -49,
-    -50,  -50,  -50,  -51,  -54,  -57,  -58,  -60,
-    -66,  -66,  -66,  -64,  -65,  -68,  -77,  -82,
-    -87,  -95, -110, -999, -999, -999, -999, -999}},
-  /* 500 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -107, -102,  -97,  -92,  -87,  -83,  -78,  -75,
-    -82,  -79,  -83,  -85,  -89,  -92,  -95,  -98,
-    -101, -105, -109, -113, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -106,
-    -100,  -95,  -90,  -86,  -81,  -78,  -74,  -69,
-    -74,  -74,  -76,  -79,  -83,  -84,  -86,  -89,
-    -92,  -97,  -93, -100, -103, -107, -110, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -106, -100,
-    -95, -90, -87, -83, -80, -75, -69, -60,
-    -66, -66, -68, -70, -74, -78, -79, -81,
-    -81, -83, -84, -87, -93, -96, -99, -103,
-    -107, -110, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -108, -103, -98,
-    -93, -89, -85, -82, -78, -71, -62, -55,
-    -58, -58, -54, -54, -55, -59, -61, -62,
-    -70, -66, -66, -67, -70, -72, -75, -78,
-    -84, -84, -84, -88, -91, -90, -95, -98,
-    -102, -103, -106, -110, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -108, -103,  -98,  -94,
-    -90,  -87,  -82,  -79,  -73,  -67,  -58,  -47,
-    -50,  -45,  -41,  -45,  -48,  -44,  -44,  -49,
-    -54,  -51,  -48,  -47,  -49,  -50,  -51,  -57,
-    -58,  -60,  -63,  -69,  -70,  -69,  -71,  -74,
-    -78,  -82,  -90,  -95, -101, -105, -110, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -105, -101, -97, -93, -90,
-    -85, -80, -77, -72, -65, -56, -48, -37,
-    -40, -36, -34, -40, -50, -47, -38, -41,
-    -47, -38, -35, -39, -38, -43, -40, -45,
-    -50, -45, -44, -47, -50, -55, -48, -48,
-    -52, -66, -70, -76, -82, -90, -97, -105,
-    -110, -999, -999, -999, -999, -999, -999, -999}},
-  /* 707 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -108, -103,  -98,  -93,  -86,  -79,  -76,
-    -83,  -81,  -85,  -87,  -89,  -93,  -98, -102,
-    -107, -112, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -108, -103,  -98,  -93,  -86,  -79,  -71,
-    -77,  -74,  -77,  -79,  -81,  -84,  -85,  -90,
-    -92,  -93,  -92,  -98, -101, -108, -112, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -108, -103,  -98,  -93,  -87,  -78,  -68,  -65,
-    -66,  -62,  -65,  -67,  -70,  -73,  -75,  -78,
-    -82,  -82,  -83,  -84,  -91,  -93,  -98, -102,
-    -106, -110, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -105, -100, -95, -90, -82, -74, -62, -57,
-    -58, -56, -51, -52, -52, -54, -54, -58,
-    -66, -59, -60, -63, -66, -69, -73, -79,
-    -83, -84, -80, -81, -81, -82, -88, -92,
-    -98, -105, -113, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -107,
-    -102,  -97,  -92,  -84,  -79,  -69,  -57,  -47,
-    -52,  -47,  -44,  -45,  -50,  -52,  -42,  -42,
-    -53,  -43,  -43,  -48,  -51,  -56,  -55,  -52,
-    -57,  -59,  -61,  -62,  -67,  -71,  -78,  -83,
-    -86,  -94,  -98, -103, -110, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -105, -100,
-    -95,  -90,  -84,  -78,  -70,  -61,  -51,  -41,
-    -40,  -38,  -40,  -46,  -52,  -51,  -41,  -40,
-    -46,  -40,  -38,  -38,  -41,  -46,  -41,  -46,
-    -47,  -43,  -43,  -45,  -41,  -45,  -56,  -67,
-    -68,  -83,  -87,  -90,  -95, -102, -107, -113,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 1000 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -109, -105, -101,  -96,  -91,  -84,  -77,
-    -82,  -82,  -85,  -89,  -94, -100, -106, -110,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -106, -103,  -98,  -92,  -85,  -80,  -71,
-    -75,  -72,  -76,  -80,  -84,  -86,  -89,  -93,
-    -100, -107, -113, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -107,
-    -104, -101,  -97,  -92,  -88,  -84,  -80,  -64,
-    -66,  -63,  -64,  -66,  -69,  -73,  -77,  -83,
-    -83,  -86,  -91,  -98, -104, -111, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -107,
-    -104, -101,  -97,  -92,  -90,  -84,  -74,  -57,
-    -58,  -52,  -55,  -54,  -50,  -52,  -50,  -52,
-    -63,  -62,  -69,  -76,  -77,  -78,  -78,  -79,
-    -82,  -88,  -94, -100, -106, -111, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -106, -102,
-    -98,  -95,  -90,  -85,  -83,  -78,  -70,  -50,
-    -50,  -41,  -44,  -49,  -47,  -50,  -50,  -44,
-    -55,  -46,  -47,  -48,  -48,  -54,  -49,  -49,
-    -58,  -62,  -71,  -81,  -87,  -92,  -97, -102,
-    -108, -114, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -106, -102,
-    -98,  -95,  -90,  -85,  -83,  -78,  -70,  -45,
-    -43,  -41,  -47,  -50,  -51,  -50,  -49,  -45,
-    -47,  -41,  -44,  -41,  -39,  -43,  -38,  -37,
-    -40,  -41,  -44,  -50,  -58,  -65,  -73,  -79,
-    -85,  -92,  -97, -101, -105, -109, -113, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 1414 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -107, -100,  -95,  -87,  -81,
-    -85,  -83,  -88,  -93, -100, -107, -114, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -107, -101,  -95,  -88,  -83,  -76,
-    -73,  -72,  -79,  -84,  -90,  -95, -100, -105,
-    -110, -115, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -104,  -98,  -92,  -87,  -81,  -70,
-    -65,  -62,  -67,  -71,  -74,  -80,  -85,  -91,
-    -95,  -99, -103, -108, -111, -114, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -103,  -97,  -90,  -85,  -76,  -60,
-    -56,  -54,  -60,  -62,  -61,  -56,  -63,  -65,
-    -73,  -74,  -77,  -75,  -78,  -81,  -86,  -87,
-    -88,  -91,  -94,  -98, -103, -110, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -105,
-    -100,  -97,  -92,  -86,  -81,  -79,  -70,  -57,
-    -51,  -47,  -51,  -58,  -60,  -56,  -53,  -50,
-    -58,  -52,  -50,  -50,  -53,  -55,  -64,  -69,
-    -71,  -85,  -82,  -78,  -81,  -85,  -95, -102,
-    -112, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -105,
-    -100,  -97,  -92,  -85,  -83,  -79,  -72,  -49,
-    -40,  -43,  -43,  -54,  -56,  -51,  -50,  -40,
-    -43,  -38,  -36,  -35,  -37,  -38,  -37,  -44,
-    -54,  -60,  -57,  -60,  -70,  -75,  -84,  -92,
-    -103, -112, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 2000 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -102,  -95,  -89,  -82,
-    -83,  -84,  -90,  -92,  -99, -107, -113, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -107, -101,  -95,  -89,  -83,  -72,
-    -74,  -78,  -85,  -88,  -88,  -90,  -92,  -98,
-    -105, -111, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -109, -103, -97, -93, -87, -81, -70,
-    -70, -67, -75, -73, -76, -79, -81, -83,
-    -88, -89, -97, -103, -110, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -107, -100,  -94,  -88,  -83,  -75,  -63,
-    -59,  -59,  -63,  -66,  -60,  -62,  -67,  -67,
-    -77,  -76,  -81,  -88,  -86,  -92,  -96, -102,
-    -109, -116, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -105,  -98,  -92,  -86,  -81,  -73,  -56,
-    -52,  -47,  -55,  -60,  -58,  -52,  -51,  -45,
-    -49,  -50,  -53,  -54,  -61,  -71,  -70,  -69,
-    -78,  -79,  -87,  -90,  -96, -104, -112, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -103,  -96,  -90,  -86,  -78,  -70,  -51,
-    -42,  -47,  -48,  -55,  -54,  -54,  -53,  -42,
-    -35,  -28,  -33,  -38,  -37,  -44,  -47,  -49,
-    -54,  -63,  -68,  -78,  -82,  -89,  -94,  -99,
-    -104, -109, -114, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 2828 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -110, -100,  -90,  -79,
-    -85,  -81,  -82,  -82,  -89,  -94,  -99, -103,
-    -109, -115, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -105,  -97,  -85,  -72,
-    -74,  -70,  -70,  -70,  -76,  -85,  -91,  -93,
-    -97, -103, -109, -115, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -112,  -93,  -81,  -68,
-    -62,  -60,  -60,  -57,  -63,  -70,  -77,  -82,
-    -90,  -93,  -98, -104, -109, -113, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -113, -100,  -93,  -84,  -63,
-    -58,  -48,  -53,  -54,  -52,  -52,  -57,  -64,
-    -66,  -76,  -83,  -81,  -85,  -85,  -90,  -95,
-    -98, -101, -103, -106, -108, -111, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -105,  -95,  -86,  -74,  -53,
-    -50,  -38,  -43,  -49,  -43,  -42,  -39,  -39,
-    -46,  -52,  -57,  -56,  -72,  -69,  -74,  -81,
-    -87,  -92,  -94,  -97,  -99, -102, -105, -108,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -108,  -99,  -90,  -76,  -66,  -45,
-    -43,  -41,  -44,  -47,  -43,  -47,  -40,  -30,
-    -31,  -31,  -39,  -33,  -40,  -41,  -43,  -53,
-    -59,  -70,  -73,  -77,  -79,  -82,  -84,  -87,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 4000 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -110,  -91,  -76,
-    -75,  -85,  -93,  -98, -104, -110, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -110,  -91,  -70,
-    -70,  -75,  -86,  -89,  -94,  -98, -101, -106,
-    -110, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -110,  -95,  -80,  -60,
-    -65,  -64,  -74,  -83,  -88,  -91,  -95,  -99,
-    -103, -107, -110, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -110,  -95,  -80,  -58,
-    -55,  -49,  -66,  -68,  -71,  -78,  -78,  -80,
-    -88,  -85,  -89,  -97, -100, -105, -110, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -110,  -95,  -80,  -53,
-    -52,  -41,  -59,  -59,  -49,  -58,  -56,  -63,
-    -86,  -79,  -90,  -93,  -98, -103, -107, -112,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110,  -97,  -91,  -73,  -45,
-    -40,  -33,  -53,  -61,  -49,  -54,  -50,  -50,
-    -60,  -52,  -67,  -74,  -81,  -92,  -96, -100,
-    -105, -110, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 5657 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -113, -106,  -99,  -92,  -77,
-    -80,  -88,  -97, -106, -115, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -116, -109, -102,  -95,  -89,  -74,
-    -72,  -88,  -87,  -95, -102, -109, -116, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -116, -109, -102,  -95,  -89,  -75,
-    -66,  -74,  -77,  -78,  -86,  -87,  -90,  -96,
-    -105, -115, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -115, -108, -101,  -94,  -88,  -66,
-    -56,  -61,  -70,  -65,  -78,  -72,  -83,  -84,
-    -93,  -98, -105, -110, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -110, -105,  -95,  -89,  -82,  -57,
-    -52,  -52,  -59,  -56,  -59,  -58,  -69,  -67,
-    -88,  -82,  -82,  -89,  -94, -100, -108, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -110, -101,  -96,  -90,  -83,  -77,  -54,
-    -43,  -38,  -50,  -48,  -52,  -48,  -42,  -42,
-    -51,  -52,  -53,  -59,  -65,  -71,  -78,  -85,
-    -95, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 8000 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -120, -105,  -86,  -68,
-    -78,  -79,  -90, -100, -110, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -120, -105,  -86,  -66,
-    -73,  -77,  -88,  -96, -105, -115, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -120, -105,  -92,  -80,  -61,
-    -64,  -68,  -80,  -87,  -92, -100, -110, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -120, -104,  -91,  -79,  -52,
-    -60,  -54,  -64,  -69,  -77,  -80,  -82,  -84,
-    -85,  -87,  -88,  -90, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -118, -100,  -87,  -77,  -49,
-    -50,  -44,  -58,  -61,  -61,  -67,  -65,  -62,
-    -62,  -62,  -65,  -68, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -115,  -98,  -84,  -62,  -49,
-    -44,  -38,  -46,  -49,  -49,  -46,  -39,  -37,
-    -39,  -40,  -42,  -43, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 11314 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -110,  -88,  -74,
-    -77,  -82,  -82,  -85,  -90,  -94,  -99, -104,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -110,  -88,  -66,
-    -70,  -81,  -80,  -81,  -84,  -88,  -91,  -93,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -110,  -88,  -61,
-    -63,  -70,  -71,  -74,  -77,  -80,  -83,  -85,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -110, -86, -62,
-    -63,  -62,  -62,  -58,  -52,  -50,  -50,  -52,
-    -54, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -118, -108,  -84,  -53,
-    -50,  -50,  -50,  -55,  -47,  -45,  -40,  -40,
-    -40, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -118, -100,  -73,  -43,
-    -37,  -42,  -43,  -53,  -38,  -37,  -35,  -35,
-    -38, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}},
-  /* 16000 Hz */
-  {{-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -100,  -91,  -84,  -74,
-    -80,  -80,  -80,  -80,  -80, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -100,  -91,  -84,  -74,
-    -68,  -68,  -68,  -68,  -68, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -100,  -86,  -78,  -70,
-    -60,  -45,  -30,  -21, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -100,  -87,  -78,  -67,
-    -48,  -38,  -29,  -21, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -100,  -86,  -69,  -56,
-    -45,  -35,  -33,  -29, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999},
-   {-999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -110, -100,  -83,  -71,  -48,
-    -27,  -38,  -37,  -34, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999,
-    -999, -999, -999, -999, -999, -999, -999, -999}}
-};
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c
deleted file mode 100644
index d41dc86..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: normalized modified discrete cosine transform
-           power of two length transform only [64 <= n ]
- last mod: $Id: mdct.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- Original algorithm adapted long ago from _The use of multirate filter
- banks for coding of high quality digital audio_, by T. Sporer,
- K. Brandenburg and B. Edler, collection of the European Signal
- Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
- 211-214
-
- The below code implements an algorithm that no longer looks much like
- that presented in the paper, but the basic structure remains if you
- dig deep enough to see it.
-
- This module DOES NOT INCLUDE code to generate/apply the window
- function.  Everybody has their own weird favorite including me... I
- happen to like the properties of y=sin(.5PI*sin^2(x)), but others may
- vehemently disagree.
-
- ********************************************************************/
-
-/* this can also be run as an integer transform by uncommenting a
-   define in mdct.h; the integerization is a first pass and although
-   it's likely stable for Vorbis, the dynamic range is constrained and
-   roundoff isn't done (so it's noisy).  Consider it functional, but
-   only a starting point.  There's no point on a machine with an FPU */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "../../codec.h"
-#include "mdct.h"
-#include "os.h"
-#include "misc.h"
-
-/* build lookups for trig functions; also pre-figure scaling and
-   some window function algebra. */
-
-void mdct_init(mdct_lookup *lookup,int n){
-  int   *bitrev=(int*) _ogg_malloc(sizeof(*bitrev)*(n/4));
-  DATA_TYPE *T=(DATA_TYPE*) _ogg_malloc(sizeof(*T)*(n+n/4));
-
-  int i;
-  int n2=n>>1;
-  int log2n=lookup->log2n=rint(log((float)n)/log(2.f));
-  lookup->n=n;
-  lookup->trig=T;
-  lookup->bitrev=bitrev;
-
-/* trig lookups... */
-
-  for(i=0;i<n/4;i++){
-    T[i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i)));
-    T[i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i)));
-    T[n2+i*2]=FLOAT_CONV(cos((M_PI/(2*n))*(2*i+1)));
-    T[n2+i*2+1]=FLOAT_CONV(sin((M_PI/(2*n))*(2*i+1)));
-  }
-  for(i=0;i<n/8;i++){
-    T[n+i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i+2))*.5);
-    T[n+i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i+2))*.5);
-  }
-
-  /* bitreverse lookup... */
-
-  {
-    int mask=(1<<(log2n-1))-1,i,j;
-    int msb=1<<(log2n-2);
-    for(i=0;i<n/8;i++){
-      int acc=0;
-      for(j=0;msb>>j;j++)
-        if((msb>>j)&i)acc|=1<<j;
-      bitrev[i*2]=((~acc)&mask)-1;
-      bitrev[i*2+1]=acc;
-
-    }
-  }
-  lookup->scale=FLOAT_CONV(4.f/n);
-}
-
-/* 8 point butterfly (in place, 4 register) */
-STIN void mdct_butterfly_8(DATA_TYPE *x){
-  REG_TYPE r0   = x[6] + x[2];
-  REG_TYPE r1   = x[6] - x[2];
-  REG_TYPE r2   = x[4] + x[0];
-  REG_TYPE r3   = x[4] - x[0];
-
-           x[6] = r0   + r2;
-           x[4] = r0   - r2;
-
-           r0   = x[5] - x[1];
-           r2   = x[7] - x[3];
-           x[0] = r1   + r0;
-           x[2] = r1   - r0;
-
-           r0   = x[5] + x[1];
-           r1   = x[7] + x[3];
-           x[3] = r2   + r3;
-           x[1] = r2   - r3;
-           x[7] = r1   + r0;
-           x[5] = r1   - r0;
-
-}
-
-/* 16 point butterfly (in place, 4 register) */
-STIN void mdct_butterfly_16(DATA_TYPE *x){
-  REG_TYPE r0     = x[1]  - x[9];
-  REG_TYPE r1     = x[0]  - x[8];
-
-           x[8]  += x[0];
-           x[9]  += x[1];
-           x[0]   = MULT_NORM((r0   + r1) * cPI2_8);
-           x[1]   = MULT_NORM((r0   - r1) * cPI2_8);
-
-           r0     = x[3]  - x[11];
-           r1     = x[10] - x[2];
-           x[10] += x[2];
-           x[11] += x[3];
-           x[2]   = r0;
-           x[3]   = r1;
-
-           r0     = x[12] - x[4];
-           r1     = x[13] - x[5];
-           x[12] += x[4];
-           x[13] += x[5];
-           x[4]   = MULT_NORM((r0   - r1) * cPI2_8);
-           x[5]   = MULT_NORM((r0   + r1) * cPI2_8);
-
-           r0     = x[14] - x[6];
-           r1     = x[15] - x[7];
-           x[14] += x[6];
-           x[15] += x[7];
-           x[6]  = r0;
-           x[7]  = r1;
-
-           mdct_butterfly_8(x);
-           mdct_butterfly_8(x+8);
-}
-
-/* 32 point butterfly (in place, 4 register) */
-STIN void mdct_butterfly_32(DATA_TYPE *x){
-  REG_TYPE r0     = x[30] - x[14];
-  REG_TYPE r1     = x[31] - x[15];
-
-           x[30] +=         x[14];
-           x[31] +=         x[15];
-           x[14]  =         r0;
-           x[15]  =         r1;
-
-           r0     = x[28] - x[12];
-           r1     = x[29] - x[13];
-           x[28] +=         x[12];
-           x[29] +=         x[13];
-           x[12]  = MULT_NORM( r0 * cPI1_8  -  r1 * cPI3_8 );
-           x[13]  = MULT_NORM( r0 * cPI3_8  +  r1 * cPI1_8 );
-
-           r0     = x[26] - x[10];
-           r1     = x[27] - x[11];
-           x[26] +=         x[10];
-           x[27] +=         x[11];
-           x[10]  = MULT_NORM(( r0  - r1 ) * cPI2_8);
-           x[11]  = MULT_NORM(( r0  + r1 ) * cPI2_8);
-
-           r0     = x[24] - x[8];
-           r1     = x[25] - x[9];
-           x[24] += x[8];
-           x[25] += x[9];
-           x[8]   = MULT_NORM( r0 * cPI3_8  -  r1 * cPI1_8 );
-           x[9]   = MULT_NORM( r1 * cPI3_8  +  r0 * cPI1_8 );
-
-           r0     = x[22] - x[6];
-           r1     = x[7]  - x[23];
-           x[22] += x[6];
-           x[23] += x[7];
-           x[6]   = r1;
-           x[7]   = r0;
-
-           r0     = x[4]  - x[20];
-           r1     = x[5]  - x[21];
-           x[20] += x[4];
-           x[21] += x[5];
-           x[4]   = MULT_NORM( r1 * cPI1_8  +  r0 * cPI3_8 );
-           x[5]   = MULT_NORM( r1 * cPI3_8  -  r0 * cPI1_8 );
-
-           r0     = x[2]  - x[18];
-           r1     = x[3]  - x[19];
-           x[18] += x[2];
-           x[19] += x[3];
-           x[2]   = MULT_NORM(( r1  + r0 ) * cPI2_8);
-           x[3]   = MULT_NORM(( r1  - r0 ) * cPI2_8);
-
-           r0     = x[0]  - x[16];
-           r1     = x[1]  - x[17];
-           x[16] += x[0];
-           x[17] += x[1];
-           x[0]   = MULT_NORM( r1 * cPI3_8  +  r0 * cPI1_8 );
-           x[1]   = MULT_NORM( r1 * cPI1_8  -  r0 * cPI3_8 );
-
-           mdct_butterfly_16(x);
-           mdct_butterfly_16(x+16);
-
-}
-
-/* N point first stage butterfly (in place, 2 register) */
-STIN void mdct_butterfly_first(DATA_TYPE *T,
-                                        DATA_TYPE *x,
-                                        int points){
-
-  DATA_TYPE *x1        = x          + points      - 8;
-  DATA_TYPE *x2        = x          + (points>>1) - 8;
-  REG_TYPE   r0;
-  REG_TYPE   r1;
-
-  do{
-
-               r0      = x1[6]      -  x2[6];
-               r1      = x1[7]      -  x2[7];
-               x1[6]  += x2[6];
-               x1[7]  += x2[7];
-               x2[6]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
-               x2[7]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
-
-               r0      = x1[4]      -  x2[4];
-               r1      = x1[5]      -  x2[5];
-               x1[4]  += x2[4];
-               x1[5]  += x2[5];
-               x2[4]   = MULT_NORM(r1 * T[5]  +  r0 * T[4]);
-               x2[5]   = MULT_NORM(r1 * T[4]  -  r0 * T[5]);
-
-               r0      = x1[2]      -  x2[2];
-               r1      = x1[3]      -  x2[3];
-               x1[2]  += x2[2];
-               x1[3]  += x2[3];
-               x2[2]   = MULT_NORM(r1 * T[9]  +  r0 * T[8]);
-               x2[3]   = MULT_NORM(r1 * T[8]  -  r0 * T[9]);
-
-               r0      = x1[0]      -  x2[0];
-               r1      = x1[1]      -  x2[1];
-               x1[0]  += x2[0];
-               x1[1]  += x2[1];
-               x2[0]   = MULT_NORM(r1 * T[13] +  r0 * T[12]);
-               x2[1]   = MULT_NORM(r1 * T[12] -  r0 * T[13]);
-
-    x1-=8;
-    x2-=8;
-    T+=16;
-
-  }while(x2>=x);
-}
-
-/* N/stage point generic N stage butterfly (in place, 2 register) */
-STIN void mdct_butterfly_generic(DATA_TYPE *T,
-                                          DATA_TYPE *x,
-                                          int points,
-                                          int trigint){
-
-  DATA_TYPE *x1        = x          + points      - 8;
-  DATA_TYPE *x2        = x          + (points>>1) - 8;
-  REG_TYPE   r0;
-  REG_TYPE   r1;
-
-  do{
-
-               r0      = x1[6]      -  x2[6];
-               r1      = x1[7]      -  x2[7];
-               x1[6]  += x2[6];
-               x1[7]  += x2[7];
-               x2[6]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
-               x2[7]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
-
-               T+=trigint;
-
-               r0      = x1[4]      -  x2[4];
-               r1      = x1[5]      -  x2[5];
-               x1[4]  += x2[4];
-               x1[5]  += x2[5];
-               x2[4]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
-               x2[5]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
-
-               T+=trigint;
-
-               r0      = x1[2]      -  x2[2];
-               r1      = x1[3]      -  x2[3];
-               x1[2]  += x2[2];
-               x1[3]  += x2[3];
-               x2[2]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
-               x2[3]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
-
-               T+=trigint;
-
-               r0      = x1[0]      -  x2[0];
-               r1      = x1[1]      -  x2[1];
-               x1[0]  += x2[0];
-               x1[1]  += x2[1];
-               x2[0]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
-               x2[1]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
-
-               T+=trigint;
-    x1-=8;
-    x2-=8;
-
-  }while(x2>=x);
-}
-
-STIN void mdct_butterflies(mdct_lookup *init,
-                             DATA_TYPE *x,
-                             int points){
-
-  DATA_TYPE *T=init->trig;
-  int stages=init->log2n-5;
-  int i,j;
-
-  if(--stages>0){
-    mdct_butterfly_first(T,x,points);
-  }
-
-  for(i=1;--stages>0;i++){
-    for(j=0;j<(1<<i);j++)
-      mdct_butterfly_generic(T,x+(points>>i)*j,points>>i,4<<i);
-  }
-
-  for(j=0;j<points;j+=32)
-    mdct_butterfly_32(x+j);
-
-}
-
-void mdct_clear(mdct_lookup *l){
-  if(l){
-    if(l->trig)_ogg_free(l->trig);
-    if(l->bitrev)_ogg_free(l->bitrev);
-    memset(l,0,sizeof(*l));
-  }
-}
-
-STIN void mdct_bitreverse(mdct_lookup *init,
-                            DATA_TYPE *x){
-  int        n       = init->n;
-  int       *bit     = init->bitrev;
-  DATA_TYPE *w0      = x;
-  DATA_TYPE *w1      = x = w0+(n>>1);
-  DATA_TYPE *T       = init->trig+n;
-
-  do{
-    DATA_TYPE *x0    = x+bit[0];
-    DATA_TYPE *x1    = x+bit[1];
-
-    REG_TYPE  r0     = x0[1]  - x1[1];
-    REG_TYPE  r1     = x0[0]  + x1[0];
-    REG_TYPE  r2     = MULT_NORM(r1     * T[0]   + r0 * T[1]);
-    REG_TYPE  r3     = MULT_NORM(r1     * T[1]   - r0 * T[0]);
-
-              w1    -= 4;
-
-              r0     = HALVE(x0[1] + x1[1]);
-              r1     = HALVE(x0[0] - x1[0]);
-
-              w0[0]  = r0     + r2;
-              w1[2]  = r0     - r2;
-              w0[1]  = r1     + r3;
-              w1[3]  = r3     - r1;
-
-              x0     = x+bit[2];
-              x1     = x+bit[3];
-
-              r0     = x0[1]  - x1[1];
-              r1     = x0[0]  + x1[0];
-              r2     = MULT_NORM(r1     * T[2]   + r0 * T[3]);
-              r3     = MULT_NORM(r1     * T[3]   - r0 * T[2]);
-
-              r0     = HALVE(x0[1] + x1[1]);
-              r1     = HALVE(x0[0] - x1[0]);
-
-              w0[2]  = r0     + r2;
-              w1[0]  = r0     - r2;
-              w0[3]  = r1     + r3;
-              w1[1]  = r3     - r1;
-
-              T     += 4;
-              bit   += 4;
-              w0    += 4;
-
-  }while(w0<w1);
-}
-
-void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
-  int n=init->n;
-  int n2=n>>1;
-  int n4=n>>2;
-
-  /* rotate */
-
-  DATA_TYPE *iX = in+n2-7;
-  DATA_TYPE *oX = out+n2+n4;
-  DATA_TYPE *T  = init->trig+n4;
-
-  do{
-    oX         -= 4;
-    oX[0]       = MULT_NORM(-iX[2] * T[3] - iX[0]  * T[2]);
-    oX[1]       = MULT_NORM (iX[0] * T[3] - iX[2]  * T[2]);
-    oX[2]       = MULT_NORM(-iX[6] * T[1] - iX[4]  * T[0]);
-    oX[3]       = MULT_NORM (iX[4] * T[1] - iX[6]  * T[0]);
-    iX         -= 8;
-    T          += 4;
-  }while(iX>=in);
-
-  iX            = in+n2-8;
-  oX            = out+n2+n4;
-  T             = init->trig+n4;
-
-  do{
-    T          -= 4;
-    oX[0]       =  MULT_NORM (iX[4] * T[3] + iX[6] * T[2]);
-    oX[1]       =  MULT_NORM (iX[4] * T[2] - iX[6] * T[3]);
-    oX[2]       =  MULT_NORM (iX[0] * T[1] + iX[2] * T[0]);
-    oX[3]       =  MULT_NORM (iX[0] * T[0] - iX[2] * T[1]);
-    iX         -= 8;
-    oX         += 4;
-  }while(iX>=in);
-
-  mdct_butterflies(init,out+n2,n2);
-  mdct_bitreverse(init,out);
-
-  /* roatate + window */
-
-  {
-    DATA_TYPE *oX1=out+n2+n4;
-    DATA_TYPE *oX2=out+n2+n4;
-    DATA_TYPE *iX =out;
-    T             =init->trig+n2;
-
-    do{
-      oX1-=4;
-
-      oX1[3]  =  MULT_NORM (iX[0] * T[1] - iX[1] * T[0]);
-      oX2[0]  = -MULT_NORM (iX[0] * T[0] + iX[1] * T[1]);
-
-      oX1[2]  =  MULT_NORM (iX[2] * T[3] - iX[3] * T[2]);
-      oX2[1]  = -MULT_NORM (iX[2] * T[2] + iX[3] * T[3]);
-
-      oX1[1]  =  MULT_NORM (iX[4] * T[5] - iX[5] * T[4]);
-      oX2[2]  = -MULT_NORM (iX[4] * T[4] + iX[5] * T[5]);
-
-      oX1[0]  =  MULT_NORM (iX[6] * T[7] - iX[7] * T[6]);
-      oX2[3]  = -MULT_NORM (iX[6] * T[6] + iX[7] * T[7]);
-
-      oX2+=4;
-      iX    +=   8;
-      T     +=   8;
-    }while(iX<oX1);
-
-    iX=out+n2+n4;
-    oX1=out+n4;
-    oX2=oX1;
-
-    do{
-      oX1-=4;
-      iX-=4;
-
-      oX2[0] = -(oX1[3] = iX[3]);
-      oX2[1] = -(oX1[2] = iX[2]);
-      oX2[2] = -(oX1[1] = iX[1]);
-      oX2[3] = -(oX1[0] = iX[0]);
-
-      oX2+=4;
-    }while(oX2<iX);
-
-    iX=out+n2+n4;
-    oX1=out+n2+n4;
-    oX2=out+n2;
-    do{
-      oX1-=4;
-      oX1[0]= iX[3];
-      oX1[1]= iX[2];
-      oX1[2]= iX[1];
-      oX1[3]= iX[0];
-      iX+=4;
-    }while(oX1>oX2);
-  }
-}
-
-void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
-  int n=init->n;
-  int n2=n>>1;
-  int n4=n>>2;
-  int n8=n>>3;
-  DATA_TYPE *w=(DATA_TYPE*) alloca(n*sizeof(*w)); /* forward needs working space */
-  DATA_TYPE *w2=w+n2;
-
-  /* rotate */
-
-  /* window + rotate + step 1 */
-
-  REG_TYPE r0;
-  REG_TYPE r1;
-  DATA_TYPE *x0=in+n2+n4;
-  DATA_TYPE *x1=x0+1;
-  DATA_TYPE *T=init->trig+n2;
-
-  int i=0;
-
-  for(i=0;i<n8;i+=2){
-    x0 -=4;
-    T-=2;
-    r0= x0[2] + x1[0];
-    r1= x0[0] + x1[2];
-    w2[i]=   MULT_NORM(r1*T[1] + r0*T[0]);
-    w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
-    x1 +=4;
-  }
-
-  x1=in+1;
-
-  for(;i<n2-n8;i+=2){
-    T-=2;
-    x0 -=4;
-    r0= x0[2] - x1[0];
-    r1= x0[0] - x1[2];
-    w2[i]=   MULT_NORM(r1*T[1] + r0*T[0]);
-    w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
-    x1 +=4;
-  }
-
-  x0=in+n;
-
-  for(;i<n2;i+=2){
-    T-=2;
-    x0 -=4;
-    r0= -x0[2] - x1[0];
-    r1= -x0[0] - x1[2];
-    w2[i]=   MULT_NORM(r1*T[1] + r0*T[0]);
-    w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
-    x1 +=4;
-  }
-
-
-  mdct_butterflies(init,w+n2,n2);
-  mdct_bitreverse(init,w);
-
-  /* roatate + window */
-
-  T=init->trig+n2;
-  x0=out+n2;
-
-  for(i=0;i<n4;i++){
-    x0--;
-    out[i] =MULT_NORM((w[0]*T[0]+w[1]*T[1])*init->scale);
-    x0[0]  =MULT_NORM((w[0]*T[1]-w[1]*T[0])*init->scale);
-    w+=2;
-    T+=2;
-  }
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h
deleted file mode 100644
index af3e49e..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: modified discrete cosine transform prototypes
- last mod: $Id: mdct.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _OGG_mdct_H_
-#define _OGG_mdct_H_
-
-#include "../../codec.h"
-
-
-
-
-
-/*#define MDCT_INTEGERIZED  <- be warned there could be some hurt left here*/
-#ifdef MDCT_INTEGERIZED
-
-#define DATA_TYPE int
-#define REG_TYPE  register int
-#define TRIGBITS 14
-#define cPI3_8 6270
-#define cPI2_8 11585
-#define cPI1_8 15137
-
-#define FLOAT_CONV(x) ((int)((x)*(1<<TRIGBITS)+.5))
-#define MULT_NORM(x) ((x)>>TRIGBITS)
-#define HALVE(x) ((x)>>1)
-
-#else
-
-#define DATA_TYPE float
-#define REG_TYPE  float
-#define cPI3_8 .38268343236508977175F
-#define cPI2_8 .70710678118654752441F
-#define cPI1_8 .92387953251128675613F
-
-#define FLOAT_CONV(x) (x)
-#define MULT_NORM(x) (x)
-#define HALVE(x) ((x)*.5f)
-
-#endif
-
-
-typedef struct {
-  int n;
-  int log2n;
-
-  DATA_TYPE *trig;
-  int       *bitrev;
-
-  DATA_TYPE scale;
-} mdct_lookup;
-
-extern void mdct_init(mdct_lookup *lookup,int n);
-extern void mdct_clear(mdct_lookup *l);
-extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
-extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h
deleted file mode 100644
index 044a543..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: miscellaneous prototypes
- last mod: $Id: misc.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_RANDOM_H_
-#define _V_RANDOM_H_
-#include "../../codec.h"
-
-extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
-extern void _vorbis_block_ripcord(vorbis_block *vb);
-
-#ifdef ANALYSIS
-extern int analysis_noisy;
-extern void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
-                             ogg_int64_t off);
-extern void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,
-                             ogg_int64_t off);
-#endif
-
-#ifdef DEBUG_MALLOC
-
-#define _VDBG_GRAPHFILE "malloc.m"
-#undef _VDBG_GRAPHFILE
-extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line);
-extern void _VDBG_free(void *ptr,char *file,long line);
-
-#ifndef MISC_C
-#undef _ogg_malloc
-#undef _ogg_calloc
-#undef _ogg_realloc
-#undef _ogg_free
-
-#define _ogg_malloc(x) _VDBG_malloc(NULL,(x),__FILE__,__LINE__)
-#define _ogg_calloc(x,y) _VDBG_malloc(NULL,(x)*(y),__FILE__,__LINE__)
-#define _ogg_realloc(x,y) _VDBG_malloc((x),(y),__FILE__,__LINE__)
-#define _ogg_free(x) _VDBG_free((x),__FILE__,__LINE__)
-#endif
-#endif
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h
deleted file mode 100644
index e1c80e2..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/floor_all.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: key floor settings
- last mod: $Id: floor_all.h 17050 2010-03-26 01:34:42Z xiphmont $
-
- ********************************************************************/
-
-#include "../../../codec.h"
-#include "../backends.h"
-#include "../books/floor/floor_books.h"
-
-static const static_codebook*const _floor_128x4_books[]={
-  &_huff_book_line_128x4_class0,
-  &_huff_book_line_128x4_0sub0,
-  &_huff_book_line_128x4_0sub1,
-  &_huff_book_line_128x4_0sub2,
-  &_huff_book_line_128x4_0sub3,
-};
-static const static_codebook*const _floor_256x4_books[]={
-  &_huff_book_line_256x4_class0,
-  &_huff_book_line_256x4_0sub0,
-  &_huff_book_line_256x4_0sub1,
-  &_huff_book_line_256x4_0sub2,
-  &_huff_book_line_256x4_0sub3,
-};
-static const static_codebook*const _floor_128x7_books[]={
-  &_huff_book_line_128x7_class0,
-  &_huff_book_line_128x7_class1,
-
-  &_huff_book_line_128x7_0sub1,
-  &_huff_book_line_128x7_0sub2,
-  &_huff_book_line_128x7_0sub3,
-  &_huff_book_line_128x7_1sub1,
-  &_huff_book_line_128x7_1sub2,
-  &_huff_book_line_128x7_1sub3,
-};
-static const static_codebook*const _floor_256x7_books[]={
-  &_huff_book_line_256x7_class0,
-  &_huff_book_line_256x7_class1,
-
-  &_huff_book_line_256x7_0sub1,
-  &_huff_book_line_256x7_0sub2,
-  &_huff_book_line_256x7_0sub3,
-  &_huff_book_line_256x7_1sub1,
-  &_huff_book_line_256x7_1sub2,
-  &_huff_book_line_256x7_1sub3,
-};
-static const static_codebook*const _floor_128x11_books[]={
-  &_huff_book_line_128x11_class1,
-  &_huff_book_line_128x11_class2,
-  &_huff_book_line_128x11_class3,
-
-  &_huff_book_line_128x11_0sub0,
-  &_huff_book_line_128x11_1sub0,
-  &_huff_book_line_128x11_1sub1,
-  &_huff_book_line_128x11_2sub1,
-  &_huff_book_line_128x11_2sub2,
-  &_huff_book_line_128x11_2sub3,
-  &_huff_book_line_128x11_3sub1,
-  &_huff_book_line_128x11_3sub2,
-  &_huff_book_line_128x11_3sub3,
-};
-static const static_codebook*const _floor_128x17_books[]={
-  &_huff_book_line_128x17_class1,
-  &_huff_book_line_128x17_class2,
-  &_huff_book_line_128x17_class3,
-
-  &_huff_book_line_128x17_0sub0,
-  &_huff_book_line_128x17_1sub0,
-  &_huff_book_line_128x17_1sub1,
-  &_huff_book_line_128x17_2sub1,
-  &_huff_book_line_128x17_2sub2,
-  &_huff_book_line_128x17_2sub3,
-  &_huff_book_line_128x17_3sub1,
-  &_huff_book_line_128x17_3sub2,
-  &_huff_book_line_128x17_3sub3,
-};
-static const static_codebook*const _floor_256x4low_books[]={
-  &_huff_book_line_256x4low_class0,
-  &_huff_book_line_256x4low_0sub0,
-  &_huff_book_line_256x4low_0sub1,
-  &_huff_book_line_256x4low_0sub2,
-  &_huff_book_line_256x4low_0sub3,
-};
-static const static_codebook*const _floor_1024x27_books[]={
-  &_huff_book_line_1024x27_class1,
-  &_huff_book_line_1024x27_class2,
-  &_huff_book_line_1024x27_class3,
-  &_huff_book_line_1024x27_class4,
-
-  &_huff_book_line_1024x27_0sub0,
-  &_huff_book_line_1024x27_1sub0,
-  &_huff_book_line_1024x27_1sub1,
-  &_huff_book_line_1024x27_2sub0,
-  &_huff_book_line_1024x27_2sub1,
-  &_huff_book_line_1024x27_3sub1,
-  &_huff_book_line_1024x27_3sub2,
-  &_huff_book_line_1024x27_3sub3,
-  &_huff_book_line_1024x27_4sub1,
-  &_huff_book_line_1024x27_4sub2,
-  &_huff_book_line_1024x27_4sub3,
-};
-static const static_codebook*const _floor_2048x27_books[]={
-  &_huff_book_line_2048x27_class1,
-  &_huff_book_line_2048x27_class2,
-  &_huff_book_line_2048x27_class3,
-  &_huff_book_line_2048x27_class4,
-
-  &_huff_book_line_2048x27_0sub0,
-  &_huff_book_line_2048x27_1sub0,
-  &_huff_book_line_2048x27_1sub1,
-  &_huff_book_line_2048x27_2sub0,
-  &_huff_book_line_2048x27_2sub1,
-  &_huff_book_line_2048x27_3sub1,
-  &_huff_book_line_2048x27_3sub2,
-  &_huff_book_line_2048x27_3sub3,
-  &_huff_book_line_2048x27_4sub1,
-  &_huff_book_line_2048x27_4sub2,
-  &_huff_book_line_2048x27_4sub3,
-};
-
-static const static_codebook*const _floor_512x17_books[]={
-  &_huff_book_line_512x17_class1,
-  &_huff_book_line_512x17_class2,
-  &_huff_book_line_512x17_class3,
-
-  &_huff_book_line_512x17_0sub0,
-  &_huff_book_line_512x17_1sub0,
-  &_huff_book_line_512x17_1sub1,
-  &_huff_book_line_512x17_2sub1,
-  &_huff_book_line_512x17_2sub2,
-  &_huff_book_line_512x17_2sub3,
-  &_huff_book_line_512x17_3sub1,
-  &_huff_book_line_512x17_3sub2,
-  &_huff_book_line_512x17_3sub3,
-};
-
-static const static_codebook*const _floor_Xx0_books[]={
-  0
-};
-
-static const static_codebook*const *const _floor_books[11]={
-  _floor_128x4_books,
-  _floor_256x4_books,
-  _floor_128x7_books,
-  _floor_256x7_books,
-  _floor_128x11_books,
-  _floor_128x17_books,
-  _floor_256x4low_books,
-  _floor_1024x27_books,
-  _floor_2048x27_books,
-  _floor_512x17_books,
-  _floor_Xx0_books,
-};
-
-static const vorbis_info_floor1 _floor[11]={
-  /* 0: 128 x 4 */
-  {
-    1,{0},{4},{2},{0},
-    {{1,2,3,4}},
-    4,{0,128, 33,8,16,70},
-
-    60,30,500,   1.,18.,  128
-  },
-  /* 1: 256 x 4 */
-  {
-    1,{0},{4},{2},{0},
-    {{1,2,3,4}},
-    4,{0,256, 66,16,32,140},
-
-    60,30,500,   1.,18.,  256
-  },
-  /* 2: 128 x 7 */
-  {
-    2,{0,1},{3,4},{2,2},{0,1},
-    {{-1,2,3,4},{-1,5,6,7}},
-    4,{0,128, 14,4,58, 2,8,28,90},
-
-    60,30,500,   1.,18.,  128
-  },
-  /* 3: 256 x 7 */
-  {
-    2,{0,1},{3,4},{2,2},{0,1},
-    {{-1,2,3,4},{-1,5,6,7}},
-    4,{0,256, 28,8,116, 4,16,56,180},
-
-    60,30,500,   1.,18.,  256
-  },
-  /* 4: 128 x 11 */
-  {
-    4,{0,1,2,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
-    {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
-
-    2,{0,128,  8,33,  4,16,70,  2,6,12,  23,46,90},
-
-     60,30,500,   1,18.,  128
-  },
-  /* 5: 128 x 17 */
-  {
-    6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
-    {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
-    2,{0,128,  12,46,  4,8,16,  23,33,70,  2,6,10,  14,19,28,  39,58,90},
-
-    60,30,500,    1,18.,  128
-  },
-  /* 6: 256 x 4 (low bitrate version) */
-  {
-    1,{0},{4},{2},{0},
-    {{1,2,3,4}},
-    4,{0,256, 66,16,32,140},
-
-    60,30,500,   1.,18.,  256
-  },
-  /* 7: 1024 x 27 */
-  {
-    8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3},
-    {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}},
-    2,{0,1024,   93,23,372, 6,46,186,750,  14,33,65, 130,260,556,
-       3,10,18,28,  39,55,79,111,  158,220,312,  464,650,850},
-
-    60,30,500,    3,18.,  1024
-  },
-  /* 8: 2048 x 27 */
-  {
-    8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3},
-    {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}},
-    2,{0,2048,   186,46,744, 12,92,372,1500,  28,66,130, 260,520,1112,
-       6,20,36,56,  78,110,158,222,  316,440,624,  928,1300,1700},
-
-    60,30,500,    3,18.,  2048
-  },
-  /* 9: 512 x 17 */
-  {
-    6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
-    {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
-    2,{0,512,  46,186,  16,33,65,  93,130,278,
-       7,23,39,  55,79,110,  156,232,360},
-
-    60,30,500,    1,18.,  512
-  },
-
-  /* 10: X x 0 (LFE floor; edge posts only) */
-  {
-    0,{0}, {0},{0},{-1},
-    {{-1}},
-    2,{0,12},
-    60,30,500,   1.,18.,  10
-  },
-
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h
deleted file mode 100644
index 0d0d2ae..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 11kHz settings
- last mod: $Id: psych_11.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-static const double _psy_lowpass_11[3]={4.5,5.5,30.,};
-
-static const att3 _psy_tone_masteratt_11[3]={
-  {{ 30,  25,  12},  0,   0},  /* 0 */
-  {{ 30,  25,  12},  0,   0},  /* 0 */
-  {{ 20,   0, -14},  0,   0}, /* 0 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_11[3]={
-  /* adjust for mode zero */
-  /* 63     125     250     500     1     2     4     8    16 */
-  {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 2, 0,99,99,99}}, /* 0 */
-  {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 5, 0, 0,99,99,99}}, /* 1 */
-  {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 2 */
-};
-
-
-static const noise3 _psy_noisebias_11[3]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-  {{{-10,-10,-10,-10, -5, -5, -5,  0,  4, 10, 10, 12, 12, 12, 99, 99, 99},
-    {-15,-15,-15,-15,-10,-10, -5,  0,  0,  4,  4,  5,  5, 10, 99, 99, 99},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
-  {{{-10,-10,-10,-10, -5, -5, -5,  0,  4, 10, 10, 12, 12, 12, 99, 99, 99},
-    {-15,-15,-15,-15,-10,-10, -5, -5, -5,  0,  0,  0,  0,  0, 99, 99, 99},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5, 99, 99, 99},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}},
-};
-
-static const double _noise_thresh_11[3]={ .3,.5,.5 };
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h
deleted file mode 100644
index 0c6593b..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 16kHz settings
- last mod: $Id: psych_16.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-/* stereo mode by base quality level */
-static const adj_stereo _psy_stereo_modes_16[4]={
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  */
-  {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   {  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,  4,  4},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   {  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  4,  4,  4,  4,  4},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  {{  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  5,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-};
-
-static const double _psy_lowpass_16[4]={6.5,8,30.,99.};
-
-static const att3 _psy_tone_masteratt_16[4]={
-  {{ 30,  25,  12},  0,   0},  /* 0 */
-  {{ 25,  22,  12},  0,   0},  /* 0 */
-  {{ 20,  12,   0},  0,   0},  /* 0 */
-  {{ 15,   0, -14},  0,   0}, /* 0 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_16[4]={
-  /* adjust for mode zero */
-  /* 63     125     250     500       1     2     4     8    16 */
-  {{-20,-20,-20,-20,-20,-16,-10,  0,  0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 0 */
-  {{-20,-20,-20,-20,-20,-16,-10,  0,  0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 1 */
-  {{-20,-20,-20,-20,-20,-16,-10,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
-  {{-30,-30,-30,-30,-30,-26,-20,-10, -5, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
-};
-
-
-static const noise3 _psy_noisebias_16_short[4]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-  {{{-15,-15,-15,-15,-15,-10,-10,-5,   4, 10, 10, 10, 10, 12, 12, 14, 20},
-    {-15,-15,-15,-15,-15,-10,-10, -5,  0,  0,  4,  5,  5,  6,  8,  8, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
-  {{{-15,-15,-15,-15,-15,-10,-10,-5,   4,  6,  6,  6,  6,  8, 10, 12, 20},
-    {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5,  4,  5,  6,  8,  8, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8, 12},
-    {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10, -8,  0,  0,  0,  0,  2,  5},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5,  0,  0,  0,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-};
-
-static const noise3 _psy_noisebias_16_impulse[4]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-  {{{-15,-15,-15,-15,-15,-10,-10,-5,   4, 10, 10, 10, 10, 12, 12, 14, 20},
-    {-15,-15,-15,-15,-15,-10,-10, -5,  0,  0,  4,  5,  5,  6,  8,  8, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
-  {{{-15,-15,-15,-15,-15,-10,-10,-5,   4,  4,  4,  4,  5,  5,  6,  8, 15},
-    {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5,  0,  0,  0,  0,  4, 10},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  4, 10},
-    {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10,-10,-10,-10,-10,-10, -7, -5},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5,  0,  0,  0,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-18,-18,-18,-20,-20,-20,-20,-20,-20,-16},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-};
-
-static const noise3 _psy_noisebias_16[4]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-  {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  6,  8,  8, 10, 10, 10, 14, 20},
-    {-10,-10,-10,-10,-10, -5, -2, -2,  0,  0,  0,  4,  5,  6,  8,  8, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
-  {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  6,  6,  6,  6,  8, 10, 12, 20},
-    {-15,-15,-15,-15,-15,-10, -5, -5,  0,  0,  0,  4,  5,  6,  8,  8, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8, 12},
-    {-20,-20,-20,-20,-16,-12,-20,-10, -5, -5,  0,  0,  0,  0,  0,  2,  5},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5,  0,  0,  0,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-};
-
-static const noiseguard _psy_noiseguards_16[4]={
-  {10,10,-1},
-  {10,10,-1},
-  {20,20,-1},
-  {20,20,-1},
-};
-
-static const double _noise_thresh_16[4]={ .3,.5,.5,.5 };
-
-static const int _noise_start_16[3]={ 256,256,9999 };
-static const int _noise_part_16[4]={ 8,8,8,8 };
-
-static const int _psy_ath_floater_16[4]={
-  -100,-100,-100,-105,
-};
-
-static const int _psy_ath_abs_16[4]={
-  -130,-130,-130,-140,
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h
deleted file mode 100644
index d0cbb60..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h
+++ /dev/null
@@ -1,642 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: key psychoacoustic settings for 44.1/48kHz
- last mod: $Id: psych_44.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-
-/* preecho trigger settings *****************************************/
-
-static const vorbis_info_psy_global _psy_global_44[5]={
-
-  {8,   /* lines per eighth octave */
-   {20.f,14.f,12.f,12.f,12.f,12.f,12.f},
-   {-60.f,-30.f,-40.f,-40.f,-40.f,-40.f,-40.f}, 2,-75.f,
-   -6.f,
-   {99},{{99},{99}},{0},{0},{{0},{0}}
-  },
-  {8,   /* lines per eighth octave */
-   {14.f,10.f,10.f,10.f,10.f,10.f,10.f},
-   {-40.f,-30.f,-25.f,-25.f,-25.f,-25.f,-25.f}, 2,-80.f,
-   -6.f,
-   {99},{{99},{99}},{0},{0},{{0},{0}}
-  },
-  {8,   /* lines per eighth octave */
-   {12.f,10.f,10.f,10.f,10.f,10.f,10.f},
-   {-20.f,-20.f,-15.f,-15.f,-15.f,-15.f,-15.f}, 0,-80.f,
-   -6.f,
-   {99},{{99},{99}},{0},{0},{{0},{0}}
-  },
-  {8,   /* lines per eighth octave */
-   {10.f,8.f,8.f,8.f,8.f,8.f,8.f},
-   {-20.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-80.f,
-   -6.f,
-   {99},{{99},{99}},{0},{0},{{0},{0}}
-  },
-  {8,   /* lines per eighth octave */
-   {10.f,6.f,6.f,6.f,6.f,6.f,6.f},
-   {-15.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-85.f,
-   -6.f,
-   {99},{{99},{99}},{0},{0},{{0},{0}}
-  },
-};
-
-/* noise compander lookups * low, mid, high quality ****************/
-static const compandblock _psy_compand_44[6]={
-  /* sub-mode Z short */
-  {{
-    0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
-    8, 9,10,11,12,13,14, 15,     /* 15dB */
-    16,17,18,19,20,21,22, 23,     /* 23dB */
-    24,25,26,27,28,29,30, 31,     /* 31dB */
-    32,33,34,35,36,37,38, 39,     /* 39dB */
-  }},
-  /* mode_Z nominal short */
-  {{
-     0, 1, 2, 3, 4, 5, 6,  6,     /* 7dB */
-     7, 7, 7, 7, 6, 6, 6,  7,     /* 15dB */
-     7, 8, 9,10,11,12,13, 14,     /* 23dB */
-    15,16,17,17,17,18,18, 19,     /* 31dB */
-    19,19,20,21,22,23,24, 25,     /* 39dB */
-  }},
-  /* mode A short */
-  {{
-    0, 1, 2, 3, 4, 5, 5,  5,     /* 7dB */
-    6, 6, 6, 5, 4, 4, 4,  4,     /* 15dB */
-    4, 4, 5, 5, 5, 6, 6,  6,     /* 23dB */
-    7, 7, 7, 8, 8, 8, 9, 10,     /* 31dB */
-    11,12,13,14,15,16,17, 18,     /* 39dB */
-  }},
-  /* sub-mode Z long */
-  {{
-     0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
-     8, 9,10,11,12,13,14, 15,     /* 15dB */
-    16,17,18,19,20,21,22, 23,     /* 23dB */
-    24,25,26,27,28,29,30, 31,     /* 31dB */
-    32,33,34,35,36,37,38, 39,     /* 39dB */
-  }},
-  /* mode_Z nominal long */
-  {{
-    0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
-    8, 9,10,11,12,12,13, 13,     /* 15dB */
-    13,14,14,14,15,15,15, 15,     /* 23dB */
-    16,16,17,17,17,18,18, 19,     /* 31dB */
-    19,19,20,21,22,23,24, 25,     /* 39dB */
-  }},
-  /* mode A long */
-  {{
-    0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
-    8, 8, 7, 6, 5, 4, 4,  4,     /* 15dB */
-    4, 4, 5, 5, 5, 6, 6,  6,     /* 23dB */
-    7, 7, 7, 8, 8, 8, 9, 10,     /* 31dB */
-    11,12,13,14,15,16,17, 18,     /* 39dB */
-  }}
-};
-
-/* tonal masking curve level adjustments *************************/
-
-static const vp_adjblock _vp_tonemask_adj_longblock[12]={
-
-   /* 63     125     250     500       1       2       4       8      16 */
-
-   {{ -3, -8,-13,-15,-10,-10,-10,-10,-10,-10,-10,  0,  0,  0,  0,  0,  0}}, /* -1 */
-
-/* {{-15,-15,-15,-15,-10, -8, -4, -2,  0,  0,  0, 10,  0,  0,  0,  0,  0}},    0 */
-   {{ -4,-10,-14,-16,-15,-14,-13,-12,-12,-12,-11, -1, -1, -1, -1, -1,  0}}, /* 0 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  5,  0,  0,  0,  0,  0}},    1 */
-   {{ -6,-12,-14,-16,-15,-15,-14,-13,-13,-12,-12, -2, -2, -1, -1, -1,  0}}, /* 1 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    2 */
-   {{-12,-13,-14,-16,-16,-16,-15,-14,-13,-12,-12, -6, -3, -1, -1, -1,  0}}, /* 2 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    3 */
-   {{-15,-15,-15,-16,-16,-16,-16,-14,-13,-13,-13,-10, -4, -2, -1, -1,  0}}, /* 3 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}}, *//* 4 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7  -3, -1, -1 , 0}}, /* 4 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    5 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7  -3, -1, -1 , 0}}, /* 5 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    6 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -8, -4, -2, -2,  0}}, /* 6 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    7 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 7 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    8 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 8 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    9 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 9 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  0,  0}},    10 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 10 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_otherblock[12]={
-   /* 63     125     250     500       1       2       4       8      16 */
-
-   {{ -3, -8,-13,-15,-10,-10, -9, -9, -9, -9, -9,  1,  1,  1,  1,  1,  1}}, /* -1 */
-
-/* {{-20,-20,-20,-20,-14,-12,-10, -8, -4,  0,  0, 10,  0,  0,  0,  0,  0}},    0 */
-   {{ -4,-10,-14,-16,-14,-13,-12,-12,-11,-11,-10,  0,  0,  0,  0,  0,  0}}, /* 0 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  5,  0,  0,  0,  0,  0}},    1 */
-   {{ -6,-12,-14,-16,-15,-15,-14,-13,-13,-12,-12, -2, -2, -1,  0,  0,  0}}, /* 1 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    2 */
-   {{-12,-13,-14,-16,-16,-16,-15,-14,-13,-12,-12, -5, -2, -1,  0,  0,  0}}, /* 2 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    3 */
-   {{-15,-15,-15,-16,-16,-16,-16,-14,-13,-13,-13,-10, -4, -2,  0,  0,  0}}, /* 3 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    4 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7  -3, -1, -1 , 0}}, /* 4 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    5 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7  -3, -1, -1 , 0}}, /* 5 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    6 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -8, -4, -2, -2,  0}}, /* 6 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    7 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 7 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    8 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 8 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    9 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 9 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10,  0,  0,  0,  0,  0,  0,  0,  0}},    10 */
-   {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2,  0}}, /* 10 */
-};
-
-/* noise bias (transition block) */
-static const noise3 _psy_noisebias_trans[12]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-  /* -1 */
-  {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  8,  8,  8,  8, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2,  2,  2,  3,  6,  6, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
-  /* 0
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4,  0,  0,  0,  0,  2,  4,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4,  -2}}},*/
-  {{{-15,-15,-15,-15,-15,-12, -6, -4,  0,  2,  4,  4,  5,  5,  5,  8,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4,  0,  0,  0,  0,  2,  3,   6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4,  -2}}},
-  /* 1
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  8},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},*/
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2,  0,  1,   4},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6,  -4}}},
-  /* 2
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  2,  2,  4,  4,  5,  6,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}}, */
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  2,  2,  4,  4,  5,  6,  10},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -2, -1,  0,  3},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -7, -4}}},
-  /* 3
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  2,  2,  4,  4,  4,  5,  8},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  2,  2,  4,  4,  4,  5,  8},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -2,  0,  2},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
-  /* 4
-  {{{-20,-20,-20,-20,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  5},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
-  {{{-20,-20,-20,-20,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -2, -1,  1},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
-  /* 5
-  {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1,  2},
-    {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}}, */
-  {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -3, -1,  0},
-    {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},
-  /* 6
-  {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2,  1},
-    {-34,-34,-34,-34,-30,-26,-24,-18,-17,-15,-15,-15,-15,-13,-13,-12, -8}}},*/
-  {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -5, -2,  0},
-    {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}},
-  /* 7
-  {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-32,-32,-32,-32,-28,-24,-24,-18,-14,-12,-10, -8, -8, -8, -6, -4,  0},
-    {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}},*/
-  {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-32,-32,-32,-32,-28,-24,-24,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2},
-    {-34,-34,-34,-34,-30,-26,-26,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
-  /* 8
-  {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2,  0,  0,  0,  1,  2,  3,  7},
-    {-36,-36,-36,-36,-30,-30,-30,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2},
-    {-36,-36,-36,-36,-34,-30,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},*/
-  {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2,  0,  0,  0,  1,  2,  3,  7},
-    {-36,-36,-36,-36,-30,-30,-30,-24,-20,-16,-16,-16,-16,-14,-12,-10, -7},
-    {-36,-36,-36,-36,-34,-30,-28,-26,-24,-30,-30,-30,-30,-30,-30,-24,-20}}},
-  /* 9
-  {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2,  2},
-    {-36,-36,-36,-36,-34,-32,-32,-28,-20,-16,-16,-16,-16,-14,-12,-10, -7},
-    {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},*/
-  {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2,  2},
-    {-38,-38,-38,-38,-36,-34,-34,-30,-24,-20,-20,-20,-20,-18,-16,-12,-10},
-    {-40,-40,-40,-40,-40,-40,-40,-38,-35,-35,-35,-35,-35,-35,-35,-35,-30}}},
-  /* 10 */
-  {{{-30,-30,-30,-30,-30,-30,-30,-28,-20,-14,-14,-14,-14,-14,-14,-12,-10},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-20},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-/*  noise bias (long block) */
-static const noise3 _psy_noisebias_long[12]={
-  /*63     125     250     500      1k       2k      4k      8k     16k*/
-  /* -1 */
-  {{{-10,-10,-10,-10,-10, -4,  0,  0,  0,  6,  6,  6,  6, 10, 10, 12,  20},
-    {-20,-20,-20,-20,-20,-20,-10, -2,  0,  0,  0,  0,  0,  2,  4,  6,  15},
-    {-20,-20,-20,-20,-20,-20,-20,-10, -6, -6, -6, -6, -6, -4, -4, -4, -2}}},
-
-  /* 0 */
-  /*  {{{-10,-10,-10,-10,-10,-10, -8,  2,  2,  2,  4,  4,  5,  5,  5,  8,  10},
-      {-20,-20,-20,-20,-20,-20,-20,-14, -6,  0,  0,  0,  0,  0,  2,  4,  10},
-      {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}},*/
-  {{{-10,-10,-10,-10,-10,-10, -8,  2,  2,  2,  4,  4,  5,  5,  5,  8,  10},
-    {-20,-20,-20,-20,-20,-20,-20,-14, -6,  0,  0,  0,  0,  0,  2,  3,  6},
-    {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}},
-  /* 1 */
-  /*  {{{-10,-10,-10,-10,-10,-10, -8, -4,  0,  2,  4,  4,  5,  5,  5,  8,  10},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  8},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},*/
-  {{{-10,-10,-10,-10,-10,-10, -8, -4,  0,  2,  4,  4,  5,  5,  5,  8,  10},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2,  0,  1,  4},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},
-  /* 2 */
-  /*  {{{-10,-10,-10,-10,-10,-10,-10, -8,  0,  2,  2,  2,  4,  4,  5,  6,  10},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  6},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
-  {{{-10,-10,-10,-10,-10,-10,-10, -8,  0,  2,  2,  2,  4,  4,  5,  6,  10},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -2, -1,  0,  3},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
-  /* 3 */
-  /*  {{{-10,-10,-10,-10,-10,-10,-10, -8,  0,  2,  2,  2,  4,  4,  4,  5,  8},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  6},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
-  {{{-10,-10,-10,-10,-10,-10,-10, -8,  0,  2,  2,  2,  4,  4,  4,  5,  8},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -2,  0,  2},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -5}}},
-  /* 4 */
-  /*  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  5},
-      {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
-  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -2, -1,  1},
-    {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -7}}},
-  /* 5 */
-  /*  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-      {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1,  2},
-      {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},*/
-  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -3, -1,  0},
-    {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -8}}},
-  /* 6 */
-  /*  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-      {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2,  1},
-      {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12, -8}}},*/
-  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -5, -2,  0},
-    {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12,-10}}},
-  /* 7 */
-  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
-    {-24,-24,-24,-24,-24,-24,-24,-18,-14,-10, -8, -8, -8, -8, -6, -4,  0},
-    {-26,-26,-26,-26,-26,-26,-26,-22,-20,-19,-19,-19,-19,-18,-17,-16,-12}}},
-  /* 8 */
-  {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  0,  0,  0,  0,  1,  2,  3,  7},
-    {-26,-26,-26,-26,-26,-26,-26,-20,-16,-12,-10,-10,-10,-10, -8, -6, -2},
-    {-28,-28,-28,-28,-28,-28,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
-  /* 9 */
-  {{{-22,-22,-22,-22,-22,-22,-22,-18,-14, -8, -4, -4, -4, -4, -4, -2,  2},
-    {-26,-26,-26,-26,-26,-26,-26,-22,-18,-16,-16,-16,-16,-14,-12,-10, -7},
-    {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
-  /* 10 */
-  {{{-24,-24,-24,-24,-24,-24,-24,-24,-24,-18,-14,-14,-14,-14,-14,-12,-10},
-    {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-20},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-/* noise bias (impulse block) */
-static const noise3 _psy_noisebias_impulse[12]={
-  /*  63     125     250     500      1k      2k      4k      8k     16k*/
-  /* -1 */
-  {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  8,  8,  8,  8, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2,  2,  2,  3,  6,  6, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
-
-  /* 0 */
-  /*  {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  4,  8,  8,  8, 10, 12, 14, 20},
-      {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2,  0,  0,  0,  0,  2,  4,  10},
-      {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},*/
-  {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  4,  8,  8,  8, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2,  0,  0,  0,  0,  2,  3,  6},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
-  /* 1 */
-  {{{-12,-12,-12,-12,-12, -8, -6, -4,  0,  4,  4,  4,  4, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -4, -4, -2, -2, -2, -2,  2},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8,-10,-10, -8, -8, -8, -6, -4}}},
-  /* 2 */
-  {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  8, 10, 10, 16},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
-  /* 3 */
-  {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  6,  8,  8, 14},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
-  /* 4 */
-  {{{-16,-16,-16,-16,-16,-12,-10, -6, -2,  0,  0,  0,  0,  4,  6,  6, 12},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
-  /* 5 */
-  {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  4,  6, 11},
-    {-32,-32,-32,-32,-28,-24,-22,-16,-10, -6, -8, -8, -6, -6, -6, -4, -2},
-    {-34,-34,-34,-34,-30,-26,-24,-18,-14,-12,-12,-12,-12,-12,-10, -9, -5}}},
-  /* 6
-  {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  4,  6, 11},
-      {-34,-34,-34,-34,-30,-30,-24,-20,-12,-12,-14,-14,-10, -9, -8, -6, -4},
-      {-34,-34,-34,-34,-34,-30,-26,-20,-16,-15,-15,-15,-15,-15,-13,-12, -8}}},*/
-  {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  4,  6, 11},
-    {-34,-34,-34,-34,-30,-30,-30,-24,-16,-16,-16,-16,-16,-16,-14,-14,-12},
-    {-36,-36,-36,-36,-36,-34,-28,-24,-20,-20,-20,-20,-20,-20,-20,-18,-16}}},
-  /* 7 */
-  /*  {{{-22,-22,-22,-22,-22,-20,-14,-10, -6,  0,  0,  0,  0,  4,  4,  6, 11},
-      {-34,-34,-34,-34,-30,-30,-24,-20,-14,-14,-16,-16,-14,-12,-10,-10,-10},
-      {-34,-34,-34,-34,-32,-32,-30,-24,-20,-19,-19,-19,-19,-19,-17,-16,-12}}},*/
-  {{{-22,-22,-22,-22,-22,-20,-14,-10, -6,  0,  0,  0,  0,  4,  4,  6, 11},
-    {-34,-34,-34,-34,-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-24,-22},
-    {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-30,-24}}},
-  /* 8 */
-  /*  {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1,  3,  3,  5, 10},
-      {-34,-34,-34,-34,-30,-30,-30,-24,-20,-20,-20,-20,-20,-18,-16,-16,-14},
-      {-36,-36,-36,-36,-36,-34,-28,-24,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},*/
-  {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1,  3,  3,  5, 10},
-    {-34,-34,-34,-34,-34,-32,-32,-30,-26,-26,-26,-26,-26,-26,-26,-26,-24},
-    {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-30,-24}}},
-  /* 9 */
-  /*  {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2,  2},
-      {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-22,-20,-20,-18},
-      {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},*/
-  {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2,  2},
-    {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26},
-    {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
-  /* 10 */
-  {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-16,-16,-16,-16,-16,-14,-12},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-26},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-/* noise bias (padding block) */
-static const noise3 _psy_noisebias_padding[12]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-
-  /* -1 */
-  {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  8,  8,  8,  8, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2,  2,  2,  3,  6,  6, 15},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
-
-  /* 0 */
-  {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  8,  8,  8,  8, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2,  2,  3,  6,  6,  8, 10},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -4, -4, -4, -4, -2,  0,  2}}},
-  /* 1 */
-  {{{-12,-12,-12,-12,-12, -8, -6, -4,  0,  4,  4,  4,  4, 10, 12, 14, 20},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4,  0,  0,  0,  2,  2,  4,  8},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -6, -4, -2,  0}}},
-  /* 2 */
-  /*  {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  8, 10, 10, 16},
-      {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4,  0,  0,  0,  2,  2,  4,  8},
-      {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},*/
-  {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  8, 10, 10, 16},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1,  0,  0,  2,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
-  /* 3 */
-  {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  6,  8,  8, 14},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1,  0,  0,  2,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
-  /* 4 */
-  {{{-16,-16,-16,-16,-16,-12,-10, -6, -2,  0,  0,  0,  0,  4,  6,  6, 12},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, -1,  0,  2,  6},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
-  /* 5 */
-  {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  6,  6, 12},
-    {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -3, -3, -3, -3, -2,  0,  4},
-    {-34,-34,-34,-34,-30,-26,-24,-18,-14,-10,-10,-10,-10,-10, -8, -5, -3}}},
-  /* 6 */
-  {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  6,  6, 12},
-    {-34,-34,-34,-34,-30,-30,-24,-20,-14, -8, -4, -4, -4, -4, -3, -1,  4},
-    {-34,-34,-34,-34,-34,-30,-26,-20,-16,-13,-13,-13,-13,-13,-11, -8, -6}}},
-  /* 7 */
-  {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  6,  6, 12},
-    {-34,-34,-34,-34,-30,-30,-30,-24,-16,-10, -8, -6, -6, -6, -5, -3,  1},
-    {-34,-34,-34,-34,-32,-32,-28,-22,-18,-16,-16,-16,-16,-16,-14,-12,-10}}},
-  /* 8 */
-  {{{-22,-22,-22,-22,-22,-20,-14,-10, -4,  0,  0,  0,  0,  3,  5,  5, 11},
-    {-34,-34,-34,-34,-30,-30,-30,-24,-16,-12,-10, -8, -8, -8, -7, -5, -2},
-    {-36,-36,-36,-36,-36,-34,-28,-22,-20,-20,-20,-20,-20,-20,-20,-16,-14}}},
-  /* 9 */
-  {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -2, -2, -2, -2,  0,  2,  6},
-    {-36,-36,-36,-36,-34,-32,-32,-24,-16,-12,-12,-12,-12,-12,-10, -8, -5},
-    {-40,-40,-40,-40,-40,-40,-40,-32,-26,-24,-24,-24,-24,-24,-24,-20,-18}}},
-  /* 10 */
-  {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-12,-12,-12,-12,-12,-10, -8},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-25,-25,-25,-25,-25,-25,-15},
-    {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-
-static const noiseguard _psy_noiseguards_44[4]={
-  {3,3,15},
-  {3,3,15},
-  {10,10,100},
-  {10,10,100},
-};
-
-static const int _psy_tone_suppress[12]={
-  -20,-20,-20,-20,-20,-24,-30,-40,-40,-45,-45,-45,
-};
-static const int _psy_tone_0dB[12]={
-  90,90,95,95,95,95,105,105,105,105,105,105,
-};
-static const int _psy_noise_suppress[12]={
-  -20,-20,-24,-24,-24,-24,-30,-40,-40,-45,-45,-45,
-};
-
-static const vorbis_info_psy _psy_info_template={
-  /* blockflag */
-  -1,
-  /* ath_adjatt, ath_maxatt */
-  -140.,-140.,
-  /* tonemask att boost/decay,suppr,curves */
-  {0.f,0.f,0.f},     0.,0.,    -40.f, {0.},
-
-  /*noisemaskp,supp, low/high window, low/hi guard, minimum */
-  1,          -0.f,           .5f, .5f,         0,0,0,
-  /* noiseoffset*3, noisecompand, max_curve_dB */
-  {{-1},{-1},{-1}},{-1},105.f,
-  /* noise normalization - noise_p, start, partition, thresh. */
-  0,-1,-1,0.,
-};
-
-/* ath ****************/
-
-static const int _psy_ath_floater[12]={
-  -100,-100,-100,-100,-100,-100,-105,-105,-105,-105,-110,-120,
-};
-static const int _psy_ath_abs[12]={
-  -130,-130,-130,-130,-140,-140,-140,-140,-140,-140,-140,-150,
-};
-
-/* stereo setup.  These don't map directly to quality level, there's
-   an additional indirection as several of the below may be used in a
-   single bitmanaged stream
-
-****************/
-
-/* various stereo possibilities */
-
-/* stereo mode by base quality level */
-static const adj_stereo _psy_stereo_modes_44[12]={
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         -1  */
-  {{  4,  4,  4,  4,  4,  4,  4,  3,  2,  2,  1,  0,  0,  0,  0},
-   {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  5,  4,  3},
-   {  1,  2,  3,  4,  4,  4,  4,  4,  4,  5,  6,  7,  8,  8,  8},
-   { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
-
-/*    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         0  */
-  {{  4,  4,  4,  4,  4,  4,  4,  3,  2,  1,  0,  0,  0,  0,  0},
-   {  8,  8,  8,  8,  6,  6,  5,  5,  5,  5,  5,  5,  5,  4,  3},
-   {  1,  2,  3,  4,  4,  5,  6,  6,  6,  6,  6,  8,  8,  8,  8},
-   { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
-
-
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         1  */
-  {{  3,  3,  3,  3,  3,  3,  3,  3,  2,  1,  0,  0,  0,  0,  0},
-   {  8,  8,  8,  8,  6,  6,  5,  5,  5,  5,  5,  5,  5,  4,  3},
-   {  1,  2,  3,  4,  4,  5,  6,  6,  6,  6,  6,  8,  8,  8,  8},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-
-
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         2  */
-  {{  3,  3,  3,  3,  3,  3,  3,  2,  1,  1,  0,  0,  0,  0,  0},
-   {  8,  8,  6,  6,  5,  5,  4,  4,  4,  4,  4,  4,  3,  2,  1},
-   {  3,  4,  4,  5,  5,  6,  6,  6,  6,  6,  6,  8,  8,  8,  8},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         3  */
-  {{  2,  2,  2,  2,  2,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0},
-   {  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  3,  2,  1},
-   {  4,  4,  5,  6,  6,  6,  6,  6,  8,  8, 10, 10, 10, 10, 10},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         4  */
-  {{  2,  2,  2,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  3,  3,  2,  1,  0},
-   {  6,  6,  6,  8,  8,  8,  8,  8,  8,  8, 10, 10, 10, 10, 10},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         5  */
-  {{  2,  2,  2,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  3,  3,  3,  3,  3,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0},
-   {  6,  7,  8,  8,  8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         6  */
-  {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  3,  3,  3,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  8,  8,  8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         7  */
-  {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  3,  3,  3,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  8,  8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         8  */
-  {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         9  */
-  {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14        10  */
-  {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
-   {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-};
-
-/* tone master attenuation by base quality mode and bitrate tweak */
-static const att3 _psy_tone_masteratt_44[12]={
-  {{ 35,  21,   9},  0,    0}, /* -1 */
-  {{ 30,  20,   8}, -2, 1.25}, /* 0 */
-  /*  {{ 25,  14,   4},  0,    0}, *//* 1 */
-  {{ 25,  12,   2},  0,    0}, /* 1 */
-  /*  {{ 20,  10,  -2},  0,    0}, *//* 2 */
-  {{ 20,   9,  -3},  0,    0}, /* 2 */
-  {{ 20,   9,  -4},  0,    0}, /* 3 */
-  {{ 20,   9,  -4},  0,    0}, /* 4 */
-  {{ 20,   6,  -6},  0,    0}, /* 5 */
-  {{ 20,   3, -10},  0,    0}, /* 6 */
-  {{ 18,   1, -14},  0,    0}, /* 7 */
-  {{ 18,   0, -16},  0,    0}, /* 8 */
-  {{ 18,  -2, -16},  0,    0}, /* 9 */
-  {{ 12,  -2, -20},  0,    0}, /* 10 */
-};
-
-/* lowpass by mode **************/
-static const double _psy_lowpass_44[12]={
-  /*  15.1,15.8,16.5,17.9,20.5,48.,999.,999.,999.,999.,999. */
-  13.9,15.1,15.8,16.5,17.2,18.9,20.1,48.,999.,999.,999.,999.
-};
-
-/* noise normalization **********/
-
-static const int _noise_start_short_44[11]={
-  /*  16,16,16,16,32,32,9999,9999,9999,9999 */
-  32,16,16,16,32,9999,9999,9999,9999,9999,9999
-};
-static const int _noise_start_long_44[11]={
-  /*  128,128,128,256,512,512,9999,9999,9999,9999 */
-  256,128,128,256,512,9999,9999,9999,9999,9999,9999
-};
-
-static const int _noise_part_short_44[11]={
-    8,8,8,8,8,8,8,8,8,8,8
-};
-static const int _noise_part_long_44[11]={
-    32,32,32,32,32,32,32,32,32,32,32
-};
-
-static const double _noise_thresh_44[11]={
-  /*  .2,.2,.3,.4,.5,.5,9999.,9999.,9999.,9999., */
-   .2,.2,.2,.4,.6,9999.,9999.,9999.,9999.,9999.,9999.,
-};
-
-static const double _noise_thresh_5only[2]={
- .5,.5,
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h
deleted file mode 100644
index 9cb9f31..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 8kHz psychoacoustic settings
- last mod: $Id: psych_8.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-static const att3 _psy_tone_masteratt_8[3]={
-  {{ 32,  25,  12},  0,   0},  /* 0 */
-  {{ 30,  25,  12},  0,   0},  /* 0 */
-  {{ 20,   0, -14},  0,   0}, /* 0 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_8[3]={
-  /* adjust for mode zero */
-  /* 63     125     250     500     1     2     4     8    16 */
-  {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */
-  {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */
-  {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 1 */
-};
-
-
-static const noise3 _psy_noisebias_8[3]={
-  /*  63     125     250     500      1k       2k      4k      8k     16k*/
-  {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  8,  8,  8, 10, 10, 99, 99, 99},
-    {-10,-10,-10,-10, -5, -5, -5,  0,  0,  4,  4,  4,  4,  4, 99, 99, 99},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
-  {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  8,  8,  8, 10, 10, 99, 99, 99},
-    {-10,-10,-10,-10,-10,-10, -5, -5, -5,  0,  0,  0,  0,  0, 99, 99, 99},
-    {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
-  {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5, 99, 99, 99},
-    {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99},
-    {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}},
-};
-
-/* stereo mode by base quality level */
-static const adj_stereo _psy_stereo_modes_8[3]={
-  /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  */
-  {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-  {{  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
-   {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
-   {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
-   { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-};
-
-static const noiseguard _psy_noiseguards_8[2]={
-  {10,10,-1},
-  {10,10,-1},
-};
-
-static const compandblock _psy_compand_8[2]={
-  {{
-     0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
-     8, 8, 9, 9,10,10,11, 11,     /* 15dB */
-    12,12,13,13,14,14,15, 15,     /* 23dB */
-    16,16,17,17,17,18,18, 19,     /* 31dB */
-    19,19,20,21,22,23,24, 25,     /* 39dB */
-  }},
-  {{
-     0, 1, 2, 3, 4, 5, 6,  6,     /* 7dB */
-     7, 7, 6, 6, 5, 5, 4,  4,     /* 15dB */
-     3, 3, 3, 4, 5, 6, 7,  8,     /* 23dB */
-     9,10,11,12,13,14,15, 16,     /* 31dB */
-    17,18,19,20,21,22,23, 24,     /* 39dB */
-  }},
-};
-
-static const double _psy_lowpass_8[3]={3.,4.,4.};
-static const int _noise_start_8[2]={
-  64,64,
-};
-static const int _noise_part_8[2]={
-  8,8,
-};
-
-static const int _psy_ath_floater_8[3]={
-  -100,-100,-105,
-};
-
-static const int _psy_ath_abs_8[3]={
-  -130,-130,-140,
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h
deleted file mode 100644
index 4d7c71a..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/********************************************************************
- *                                                                  *
- * This FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel residue templates 16/22kHz
- last mod: $Id: residue_16.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-/***** residue backends *********************************************/
-
-static const static_bookblock _resbook_16s_0={
-  {
-    {0},
-    {0,0,&_16c0_s_p1_0},
-    {0},
-    {0,0,&_16c0_s_p3_0},
-    {0,0,&_16c0_s_p4_0},
-    {0,0,&_16c0_s_p5_0},
-    {0,0,&_16c0_s_p6_0},
-    {&_16c0_s_p7_0,&_16c0_s_p7_1},
-    {&_16c0_s_p8_0,&_16c0_s_p8_1},
-    {&_16c0_s_p9_0,&_16c0_s_p9_1,&_16c0_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_16s_1={
-  {
-    {0},
-    {0,0,&_16c1_s_p1_0},
-    {0},
-    {0,0,&_16c1_s_p3_0},
-    {0,0,&_16c1_s_p4_0},
-    {0,0,&_16c1_s_p5_0},
-    {0,0,&_16c1_s_p6_0},
-    {&_16c1_s_p7_0,&_16c1_s_p7_1},
-    {&_16c1_s_p8_0,&_16c1_s_p8_1},
-    {&_16c1_s_p9_0,&_16c1_s_p9_1,&_16c1_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_16s_2={
-  {
-    {0},
-    {0,0,&_16c2_s_p1_0},
-    {0,0,&_16c2_s_p2_0},
-    {0,0,&_16c2_s_p3_0},
-    {0,0,&_16c2_s_p4_0},
-    {&_16c2_s_p5_0,&_16c2_s_p5_1},
-    {&_16c2_s_p6_0,&_16c2_s_p6_1},
-    {&_16c2_s_p7_0,&_16c2_s_p7_1},
-    {&_16c2_s_p8_0,&_16c2_s_p8_1},
-    {&_16c2_s_p9_0,&_16c2_s_p9_1,&_16c2_s_p9_2}
-   }
-};
-
-static const vorbis_residue_template _res_16s_0[]={
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__16c0_s_single,&_huff_book__16c0_s_single,
-   &_resbook_16s_0,&_resbook_16s_0},
-};
-static const vorbis_residue_template _res_16s_1[]={
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__16c1_s_short,&_huff_book__16c1_s_short,
-   &_resbook_16s_1,&_resbook_16s_1},
-
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__16c1_s_long,&_huff_book__16c1_s_long,
-   &_resbook_16s_1,&_resbook_16s_1}
-};
-static const vorbis_residue_template _res_16s_2[]={
-  {2,0,32,  &_residue_44_high,
-   &_huff_book__16c2_s_short,&_huff_book__16c2_s_short,
-   &_resbook_16s_2,&_resbook_16s_2},
-
-  {2,0,32,  &_residue_44_high,
-   &_huff_book__16c2_s_long,&_huff_book__16c2_s_long,
-   &_resbook_16s_2,&_resbook_16s_2}
-};
-
-static const vorbis_mapping_template _mapres_template_16_stereo[3]={
-  { _map_nominal, _res_16s_0 }, /* 0 */
-  { _map_nominal, _res_16s_1 }, /* 1 */
-  { _map_nominal, _res_16s_2 }, /* 2 */
-};
-
-static const static_bookblock _resbook_16u_0={
-  {
-    {0},
-    {0,0,&_16u0__p1_0},
-    {0,0,&_16u0__p2_0},
-    {0,0,&_16u0__p3_0},
-    {0,0,&_16u0__p4_0},
-    {0,0,&_16u0__p5_0},
-    {&_16u0__p6_0,&_16u0__p6_1},
-    {&_16u0__p7_0,&_16u0__p7_1,&_16u0__p7_2}
-   }
-};
-static const static_bookblock _resbook_16u_1={
-  {
-    {0},
-    {0,0,&_16u1__p1_0},
-    {0,0,&_16u1__p2_0},
-    {0,0,&_16u1__p3_0},
-    {0,0,&_16u1__p4_0},
-    {0,0,&_16u1__p5_0},
-    {0,0,&_16u1__p6_0},
-    {&_16u1__p7_0,&_16u1__p7_1},
-    {&_16u1__p8_0,&_16u1__p8_1},
-    {&_16u1__p9_0,&_16u1__p9_1,&_16u1__p9_2}
-   }
-};
-static const static_bookblock _resbook_16u_2={
-  {
-    {0},
-    {0,0,&_16u2_p1_0},
-    {0,0,&_16u2_p2_0},
-    {0,0,&_16u2_p3_0},
-    {0,0,&_16u2_p4_0},
-    {&_16u2_p5_0,&_16u2_p5_1},
-    {&_16u2_p6_0,&_16u2_p6_1},
-    {&_16u2_p7_0,&_16u2_p7_1},
-    {&_16u2_p8_0,&_16u2_p8_1},
-    {&_16u2_p9_0,&_16u2_p9_1,&_16u2_p9_2}
-   }
-};
-
-static const vorbis_residue_template _res_16u_0[]={
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__16u0__single,&_huff_book__16u0__single,
-   &_resbook_16u_0,&_resbook_16u_0},
-};
-static const vorbis_residue_template _res_16u_1[]={
-  {1,0,32,  &_residue_44_mid_un,
-   &_huff_book__16u1__short,&_huff_book__16u1__short,
-   &_resbook_16u_1,&_resbook_16u_1},
-
-  {1,0,32,  &_residue_44_mid_un,
-   &_huff_book__16u1__long,&_huff_book__16u1__long,
-   &_resbook_16u_1,&_resbook_16u_1}
-};
-static const vorbis_residue_template _res_16u_2[]={
-  {1,0,32,  &_residue_44_hi_un,
-   &_huff_book__16u2__short,&_huff_book__16u2__short,
-   &_resbook_16u_2,&_resbook_16u_2},
-
-  {1,0,32,  &_residue_44_hi_un,
-   &_huff_book__16u2__long,&_huff_book__16u2__long,
-   &_resbook_16u_2,&_resbook_16u_2}
-};
-
-
-static const vorbis_mapping_template _mapres_template_16_uncoupled[3]={
-  { _map_nominal_u, _res_16u_0 }, /* 0 */
-  { _map_nominal_u, _res_16u_1 }, /* 1 */
-  { _map_nominal_u, _res_16u_2 }, /* 2 */
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h
deleted file mode 100644
index b01ce47..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel residue templates for 32/44.1/48kHz
- last mod: $Id: residue_44.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "../../../codec.h"
-#include "../backends.h"
-#include "../books/coupled/res_books_stereo.h"
-
-/***** residue backends *********************************************/
-
-static const vorbis_info_residue0 _residue_44_low={
-  0,-1, -1, 9,-1,-1,
-  /* 0   1   2   3   4   5   6   7  */
-  {0},
-  {-1},
-  {  0,  1,  2,  2,  4,  8, 16, 32},
-  {  0,  0,  0,999,  4,  8, 16, 32},
-};
-
-static const vorbis_info_residue0 _residue_44_mid={
-  0,-1, -1, 10,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8  */
-  {0},
-  {-1},
-  {  0,  1,  1,  2,  2,  4,  8, 16, 32},
-  {  0,  0,999,  0,999,  4,  8, 16, 32},
-};
-
-static const vorbis_info_residue0 _residue_44_high={
-  0,-1, -1, 10,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8  */
-  {0},
-  {-1},
-  {  0,  1,  2,  4,  8, 16, 32, 71,157},
-  {  0,  1,  2,  3,  4,  8, 16, 71,157},
-};
-
-static const static_bookblock _resbook_44s_n1={
-  {
-    {0},{0,0,&_44cn1_s_p1_0},{0,0,&_44cn1_s_p2_0},
-    {0,0,&_44cn1_s_p3_0},{0,0,&_44cn1_s_p4_0},{0,0,&_44cn1_s_p5_0},
-    {&_44cn1_s_p6_0,&_44cn1_s_p6_1},{&_44cn1_s_p7_0,&_44cn1_s_p7_1},
-    {&_44cn1_s_p8_0,&_44cn1_s_p8_1,&_44cn1_s_p8_2}
-   }
-};
-static const static_bookblock _resbook_44sm_n1={
-  {
-    {0},{0,0,&_44cn1_sm_p1_0},{0,0,&_44cn1_sm_p2_0},
-    {0,0,&_44cn1_sm_p3_0},{0,0,&_44cn1_sm_p4_0},{0,0,&_44cn1_sm_p5_0},
-    {&_44cn1_sm_p6_0,&_44cn1_sm_p6_1},{&_44cn1_sm_p7_0,&_44cn1_sm_p7_1},
-    {&_44cn1_sm_p8_0,&_44cn1_sm_p8_1,&_44cn1_sm_p8_2}
-   }
-};
-
-static const static_bookblock _resbook_44s_0={
-  {
-    {0},{0,0,&_44c0_s_p1_0},{0,0,&_44c0_s_p2_0},
-    {0,0,&_44c0_s_p3_0},{0,0,&_44c0_s_p4_0},{0,0,&_44c0_s_p5_0},
-    {&_44c0_s_p6_0,&_44c0_s_p6_1},{&_44c0_s_p7_0,&_44c0_s_p7_1},
-    {&_44c0_s_p8_0,&_44c0_s_p8_1,&_44c0_s_p8_2}
-   }
-};
-static const static_bookblock _resbook_44sm_0={
-  {
-    {0},{0,0,&_44c0_sm_p1_0},{0,0,&_44c0_sm_p2_0},
-    {0,0,&_44c0_sm_p3_0},{0,0,&_44c0_sm_p4_0},{0,0,&_44c0_sm_p5_0},
-    {&_44c0_sm_p6_0,&_44c0_sm_p6_1},{&_44c0_sm_p7_0,&_44c0_sm_p7_1},
-    {&_44c0_sm_p8_0,&_44c0_sm_p8_1,&_44c0_sm_p8_2}
-   }
-};
-
-static const static_bookblock _resbook_44s_1={
-  {
-    {0},{0,0,&_44c1_s_p1_0},{0,0,&_44c1_s_p2_0},
-    {0,0,&_44c1_s_p3_0},{0,0,&_44c1_s_p4_0},{0,0,&_44c1_s_p5_0},
-    {&_44c1_s_p6_0,&_44c1_s_p6_1},{&_44c1_s_p7_0,&_44c1_s_p7_1},
-    {&_44c1_s_p8_0,&_44c1_s_p8_1,&_44c1_s_p8_2}
-   }
-};
-static const static_bookblock _resbook_44sm_1={
-  {
-    {0},{0,0,&_44c1_sm_p1_0},{0,0,&_44c1_sm_p2_0},
-    {0,0,&_44c1_sm_p3_0},{0,0,&_44c1_sm_p4_0},{0,0,&_44c1_sm_p5_0},
-    {&_44c1_sm_p6_0,&_44c1_sm_p6_1},{&_44c1_sm_p7_0,&_44c1_sm_p7_1},
-    {&_44c1_sm_p8_0,&_44c1_sm_p8_1,&_44c1_sm_p8_2}
-   }
-};
-
-static const static_bookblock _resbook_44s_2={
-  {
-    {0},{0,0,&_44c2_s_p1_0},{0,0,&_44c2_s_p2_0},{0,0,&_44c2_s_p3_0},
-    {0,0,&_44c2_s_p4_0},{0,0,&_44c2_s_p5_0},{0,0,&_44c2_s_p6_0},
-    {&_44c2_s_p7_0,&_44c2_s_p7_1},{&_44c2_s_p8_0,&_44c2_s_p8_1},
-    {&_44c2_s_p9_0,&_44c2_s_p9_1,&_44c2_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_3={
-  {
-    {0},{0,0,&_44c3_s_p1_0},{0,0,&_44c3_s_p2_0},{0,0,&_44c3_s_p3_0},
-    {0,0,&_44c3_s_p4_0},{0,0,&_44c3_s_p5_0},{0,0,&_44c3_s_p6_0},
-    {&_44c3_s_p7_0,&_44c3_s_p7_1},{&_44c3_s_p8_0,&_44c3_s_p8_1},
-    {&_44c3_s_p9_0,&_44c3_s_p9_1,&_44c3_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_4={
-  {
-    {0},{0,0,&_44c4_s_p1_0},{0,0,&_44c4_s_p2_0},{0,0,&_44c4_s_p3_0},
-    {0,0,&_44c4_s_p4_0},{0,0,&_44c4_s_p5_0},{0,0,&_44c4_s_p6_0},
-    {&_44c4_s_p7_0,&_44c4_s_p7_1},{&_44c4_s_p8_0,&_44c4_s_p8_1},
-    {&_44c4_s_p9_0,&_44c4_s_p9_1,&_44c4_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_5={
-  {
-    {0},{0,0,&_44c5_s_p1_0},{0,0,&_44c5_s_p2_0},{0,0,&_44c5_s_p3_0},
-    {0,0,&_44c5_s_p4_0},{0,0,&_44c5_s_p5_0},{0,0,&_44c5_s_p6_0},
-    {&_44c5_s_p7_0,&_44c5_s_p7_1},{&_44c5_s_p8_0,&_44c5_s_p8_1},
-    {&_44c5_s_p9_0,&_44c5_s_p9_1,&_44c5_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_6={
-  {
-    {0},{0,0,&_44c6_s_p1_0},{0,0,&_44c6_s_p2_0},{0,0,&_44c6_s_p3_0},
-    {0,0,&_44c6_s_p4_0},
-    {&_44c6_s_p5_0,&_44c6_s_p5_1},
-    {&_44c6_s_p6_0,&_44c6_s_p6_1},
-    {&_44c6_s_p7_0,&_44c6_s_p7_1},
-    {&_44c6_s_p8_0,&_44c6_s_p8_1},
-    {&_44c6_s_p9_0,&_44c6_s_p9_1,&_44c6_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_7={
-  {
-    {0},{0,0,&_44c7_s_p1_0},{0,0,&_44c7_s_p2_0},{0,0,&_44c7_s_p3_0},
-    {0,0,&_44c7_s_p4_0},
-    {&_44c7_s_p5_0,&_44c7_s_p5_1},
-    {&_44c7_s_p6_0,&_44c7_s_p6_1},
-    {&_44c7_s_p7_0,&_44c7_s_p7_1},
-    {&_44c7_s_p8_0,&_44c7_s_p8_1},
-    {&_44c7_s_p9_0,&_44c7_s_p9_1,&_44c7_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_8={
-  {
-    {0},{0,0,&_44c8_s_p1_0},{0,0,&_44c8_s_p2_0},{0,0,&_44c8_s_p3_0},
-    {0,0,&_44c8_s_p4_0},
-    {&_44c8_s_p5_0,&_44c8_s_p5_1},
-    {&_44c8_s_p6_0,&_44c8_s_p6_1},
-    {&_44c8_s_p7_0,&_44c8_s_p7_1},
-    {&_44c8_s_p8_0,&_44c8_s_p8_1},
-    {&_44c8_s_p9_0,&_44c8_s_p9_1,&_44c8_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_44s_9={
-  {
-    {0},{0,0,&_44c9_s_p1_0},{0,0,&_44c9_s_p2_0},{0,0,&_44c9_s_p3_0},
-    {0,0,&_44c9_s_p4_0},
-    {&_44c9_s_p5_0,&_44c9_s_p5_1},
-    {&_44c9_s_p6_0,&_44c9_s_p6_1},
-    {&_44c9_s_p7_0,&_44c9_s_p7_1},
-    {&_44c9_s_p8_0,&_44c9_s_p8_1},
-    {&_44c9_s_p9_0,&_44c9_s_p9_1,&_44c9_s_p9_2}
-   }
-};
-
-static const vorbis_residue_template _res_44s_n1[]={
-  {2,0,32,  &_residue_44_low,
-   &_huff_book__44cn1_s_short,&_huff_book__44cn1_sm_short,
-   &_resbook_44s_n1,&_resbook_44sm_n1},
-
-  {2,0,32,  &_residue_44_low,
-   &_huff_book__44cn1_s_long,&_huff_book__44cn1_sm_long,
-   &_resbook_44s_n1,&_resbook_44sm_n1}
-};
-static const vorbis_residue_template _res_44s_0[]={
-  {2,0,16,  &_residue_44_low,
-   &_huff_book__44c0_s_short,&_huff_book__44c0_sm_short,
-   &_resbook_44s_0,&_resbook_44sm_0},
-
-  {2,0,32,  &_residue_44_low,
-   &_huff_book__44c0_s_long,&_huff_book__44c0_sm_long,
-   &_resbook_44s_0,&_resbook_44sm_0}
-};
-static const vorbis_residue_template _res_44s_1[]={
-  {2,0,16,  &_residue_44_low,
-   &_huff_book__44c1_s_short,&_huff_book__44c1_sm_short,
-   &_resbook_44s_1,&_resbook_44sm_1},
-
-  {2,0,32,  &_residue_44_low,
-   &_huff_book__44c1_s_long,&_huff_book__44c1_sm_long,
-   &_resbook_44s_1,&_resbook_44sm_1}
-};
-
-static const vorbis_residue_template _res_44s_2[]={
-  {2,0,16,  &_residue_44_mid,
-   &_huff_book__44c2_s_short,&_huff_book__44c2_s_short,
-   &_resbook_44s_2,&_resbook_44s_2},
-
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__44c2_s_long,&_huff_book__44c2_s_long,
-   &_resbook_44s_2,&_resbook_44s_2}
-};
-static const vorbis_residue_template _res_44s_3[]={
-  {2,0,16,  &_residue_44_mid,
-   &_huff_book__44c3_s_short,&_huff_book__44c3_s_short,
-   &_resbook_44s_3,&_resbook_44s_3},
-
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__44c3_s_long,&_huff_book__44c3_s_long,
-   &_resbook_44s_3,&_resbook_44s_3}
-};
-static const vorbis_residue_template _res_44s_4[]={
-  {2,0,16,  &_residue_44_mid,
-   &_huff_book__44c4_s_short,&_huff_book__44c4_s_short,
-   &_resbook_44s_4,&_resbook_44s_4},
-
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__44c4_s_long,&_huff_book__44c4_s_long,
-   &_resbook_44s_4,&_resbook_44s_4}
-};
-static const vorbis_residue_template _res_44s_5[]={
-  {2,0,16,  &_residue_44_mid,
-   &_huff_book__44c5_s_short,&_huff_book__44c5_s_short,
-   &_resbook_44s_5,&_resbook_44s_5},
-
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__44c5_s_long,&_huff_book__44c5_s_long,
-   &_resbook_44s_5,&_resbook_44s_5}
-};
-static const vorbis_residue_template _res_44s_6[]={
-  {2,0,16,  &_residue_44_high,
-   &_huff_book__44c6_s_short,&_huff_book__44c6_s_short,
-   &_resbook_44s_6,&_resbook_44s_6},
-
-  {2,0,32,  &_residue_44_high,
-   &_huff_book__44c6_s_long,&_huff_book__44c6_s_long,
-   &_resbook_44s_6,&_resbook_44s_6}
-};
-static const vorbis_residue_template _res_44s_7[]={
-  {2,0,16,  &_residue_44_high,
-   &_huff_book__44c7_s_short,&_huff_book__44c7_s_short,
-   &_resbook_44s_7,&_resbook_44s_7},
-
-  {2,0,32,  &_residue_44_high,
-   &_huff_book__44c7_s_long,&_huff_book__44c7_s_long,
-   &_resbook_44s_7,&_resbook_44s_7}
-};
-static const vorbis_residue_template _res_44s_8[]={
-  {2,0,16,  &_residue_44_high,
-   &_huff_book__44c8_s_short,&_huff_book__44c8_s_short,
-   &_resbook_44s_8,&_resbook_44s_8},
-
-  {2,0,32,  &_residue_44_high,
-   &_huff_book__44c8_s_long,&_huff_book__44c8_s_long,
-   &_resbook_44s_8,&_resbook_44s_8}
-};
-static const vorbis_residue_template _res_44s_9[]={
-  {2,0,16,  &_residue_44_high,
-   &_huff_book__44c9_s_short,&_huff_book__44c9_s_short,
-   &_resbook_44s_9,&_resbook_44s_9},
-
-  {2,0,32,  &_residue_44_high,
-   &_huff_book__44c9_s_long,&_huff_book__44c9_s_long,
-   &_resbook_44s_9,&_resbook_44s_9}
-};
-
-static const vorbis_mapping_template _mapres_template_44_stereo[]={
-  { _map_nominal, _res_44s_n1 }, /* -1 */
-  { _map_nominal, _res_44s_0 }, /* 0 */
-  { _map_nominal, _res_44s_1 }, /* 1 */
-  { _map_nominal, _res_44s_2 }, /* 2 */
-  { _map_nominal, _res_44s_3 }, /* 3 */
-  { _map_nominal, _res_44s_4 }, /* 4 */
-  { _map_nominal, _res_44s_5 }, /* 5 */
-  { _map_nominal, _res_44s_6 }, /* 6 */
-  { _map_nominal, _res_44s_7 }, /* 7 */
-  { _map_nominal, _res_44s_8 }, /* 8 */
-  { _map_nominal, _res_44s_9 }, /* 9 */
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44p51.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44p51.h
deleted file mode 100644
index 081fe8e..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44p51.h
+++ /dev/null
@@ -1,451 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel residue templates for 32/44.1/48kHz uncoupled
- last mod: $Id$
-
- ********************************************************************/
-
-#include "../../../codec.h"
-#include "../backends.h"
-
-#include "../books/coupled/res_books_51.h"
-
-/***** residue backends *********************************************/
-
-static const vorbis_info_residue0 _residue_44p_lo={
-  0,-1, -1, 7,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8  */
-  {0},
-  {-1},
-  {  0,  1,  2,  7, 17, 31},
-  {  0,  0, 99,  7, 17, 31},
-};
-
-static const vorbis_info_residue0 _residue_44p={
-  0,-1, -1, 8,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8  */
-  {0},
-  {-1},
-  {  0,  1,  1,   2,  7, 17, 31},
-  {  0,  0, 99,  99,  7, 17, 31},
-};
-
-static const vorbis_info_residue0 _residue_44p_hi={
-  0,-1, -1, 8,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8  */
-  {0},
-  {-1},
-  {  0,  1,  2,  4,  7, 17, 31},
-  {  0,  1,  2,  4,  7, 17, 31},
-};
-
-static const vorbis_info_residue0 _residue_44p_lfe={
-  0,-1, -1, 2,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8  */
-  {0},
-  {-1},
-  { 32},
-  { -1}
-};
-
-static const static_bookblock _resbook_44p_n1={
-  {
-    {0},
-    {0,&_44pn1_p1_0},
-
-    {&_44pn1_p2_0,&_44pn1_p2_1,0},
-    {&_44pn1_p3_0,&_44pn1_p3_1,0},
-    {&_44pn1_p4_0,&_44pn1_p4_1,0},
-
-    {&_44pn1_p5_0,&_44pn1_p5_1,&_44pn1_p4_1},
-    {&_44pn1_p6_0,&_44pn1_p6_1,&_44pn1_p6_2},
-   }
-};
-
-static const static_bookblock _resbook_44p_0={
-  {
-    {0},
-    {0,&_44p0_p1_0},
-
-    {&_44p0_p2_0,&_44p0_p2_1,0},
-    {&_44p0_p3_0,&_44p0_p3_1,0},
-    {&_44p0_p4_0,&_44p0_p4_1,0},
-
-    {&_44p0_p5_0,&_44p0_p5_1,&_44p0_p4_1},
-    {&_44p0_p6_0,&_44p0_p6_1,&_44p0_p6_2},
-   }
-};
-
-static const static_bookblock _resbook_44p_1={
-  {
-    {0},
-    {0,&_44p1_p1_0},
-
-    {&_44p1_p2_0,&_44p1_p2_1,0},
-    {&_44p1_p3_0,&_44p1_p3_1,0},
-    {&_44p1_p4_0,&_44p1_p4_1,0},
-
-    {&_44p1_p5_0,&_44p1_p5_1,&_44p1_p4_1},
-    {&_44p1_p6_0,&_44p1_p6_1,&_44p1_p6_2},
-   }
-};
-
-static const static_bookblock _resbook_44p_2={
-  {
-    {0},
-    {0,0,&_44p2_p1_0},
-    {0,&_44p2_p2_0,0},
-
-    {&_44p2_p3_0,&_44p2_p3_1,0},
-    {&_44p2_p4_0,&_44p2_p4_1,0},
-    {&_44p2_p5_0,&_44p2_p5_1,0},
-
-    {&_44p2_p6_0,&_44p2_p6_1,&_44p2_p5_1},
-    {&_44p2_p7_0,&_44p2_p7_1,&_44p2_p7_2,&_44p2_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_3={
-  {
-    {0},
-    {0,0,&_44p3_p1_0},
-    {0,&_44p3_p2_0,0},
-
-    {&_44p3_p3_0,&_44p3_p3_1,0},
-    {&_44p3_p4_0,&_44p3_p4_1,0},
-    {&_44p3_p5_0,&_44p3_p5_1,0},
-
-    {&_44p3_p6_0,&_44p3_p6_1,&_44p3_p5_1},
-    {&_44p3_p7_0,&_44p3_p7_1,&_44p3_p7_2,&_44p3_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_4={
-  {
-    {0},
-    {0,0,&_44p4_p1_0},
-    {0,&_44p4_p2_0,0},
-
-    {&_44p4_p3_0,&_44p4_p3_1,0},
-    {&_44p4_p4_0,&_44p4_p4_1,0},
-    {&_44p4_p5_0,&_44p4_p5_1,0},
-
-    {&_44p4_p6_0,&_44p4_p6_1,&_44p4_p5_1},
-    {&_44p4_p7_0,&_44p4_p7_1,&_44p4_p7_2,&_44p4_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_5={
-  {
-    {0},
-    {0,0,&_44p5_p1_0},
-    {0,&_44p5_p2_0,0},
-
-    {&_44p5_p3_0,&_44p5_p3_1,0},
-    {&_44p5_p4_0,&_44p5_p4_1,0},
-    {&_44p5_p5_0,&_44p5_p5_1,0},
-
-    {&_44p5_p6_0,&_44p5_p6_1,&_44p5_p5_1},
-    {&_44p5_p7_0,&_44p5_p7_1,&_44p5_p7_2,&_44p5_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_6={
-  {
-    {0},
-    {0,0,&_44p6_p1_0},
-    {0,&_44p6_p2_0,0},
-
-    {&_44p6_p3_0,&_44p6_p3_1,0},
-    {&_44p6_p4_0,&_44p6_p4_1,0},
-    {&_44p6_p5_0,&_44p6_p5_1,0},
-
-    {&_44p6_p6_0,&_44p6_p6_1,&_44p6_p5_1},
-    {&_44p6_p7_0,&_44p6_p7_1,&_44p6_p7_2,&_44p6_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_7={
-  {
-    {0},
-    {0,0,&_44p7_p1_0},
-    {0,&_44p7_p2_0,0},
-
-    {&_44p7_p3_0,&_44p7_p3_1,0},
-    {&_44p7_p4_0,&_44p7_p4_1,0},
-    {&_44p7_p5_0,&_44p7_p5_1,0},
-
-    {&_44p7_p6_0,&_44p7_p6_1,&_44p7_p5_1},
-    {&_44p7_p7_0,&_44p7_p7_1,&_44p7_p7_2,&_44p7_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_8={
-  {
-    {0},
-    {0,0,&_44p8_p1_0},
-    {0,&_44p8_p2_0,0},
-
-    {&_44p8_p3_0,&_44p8_p3_1,0},
-    {&_44p8_p4_0,&_44p8_p4_1,0},
-    {&_44p8_p5_0,&_44p8_p5_1,0},
-
-    {&_44p8_p6_0,&_44p8_p6_1,&_44p8_p5_1},
-    {&_44p8_p7_0,&_44p8_p7_1,&_44p8_p7_2,&_44p8_p7_3}
-   }
-};
-static const static_bookblock _resbook_44p_9={
-  {
-    {0},
-    {0,0,&_44p9_p1_0},
-    {0,&_44p9_p2_0,0},
-
-    {&_44p9_p3_0,&_44p9_p3_1,0},
-    {&_44p9_p4_0,&_44p9_p4_1,0},
-    {&_44p9_p5_0,&_44p9_p5_1,0},
-
-    {&_44p9_p6_0,&_44p9_p6_1,&_44p9_p5_1},
-    {&_44p9_p7_0,&_44p9_p7_1,&_44p9_p7_2,&_44p9_p7_3}
-   }
-};
-
-static const static_bookblock _resbook_44p_ln1={
-  {
-    {&_44pn1_l0_0,&_44pn1_l0_1,0},
-    {&_44pn1_l1_0,&_44pn1_p6_1,&_44pn1_p6_2},
-   }
-};
-static const static_bookblock _resbook_44p_l0={
-  {
-    {&_44p0_l0_0,&_44p0_l0_1,0},
-    {&_44p0_l1_0,&_44p0_p6_1,&_44p0_p6_2},
-   }
-};
-static const static_bookblock _resbook_44p_l1={
-  {
-    {&_44p1_l0_0,&_44p1_l0_1,0},
-    {&_44p1_l1_0,&_44p1_p6_1,&_44p1_p6_2},
-   }
-};
-static const static_bookblock _resbook_44p_l2={
-  {
-    {&_44p2_l0_0,&_44p2_l0_1,0},
-    {&_44p2_l1_0,&_44p2_p7_2,&_44p2_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l3={
-  {
-    {&_44p3_l0_0,&_44p3_l0_1,0},
-    {&_44p3_l1_0,&_44p3_p7_2,&_44p3_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l4={
-  {
-    {&_44p4_l0_0,&_44p4_l0_1,0},
-    {&_44p4_l1_0,&_44p4_p7_2,&_44p4_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l5={
-  {
-    {&_44p5_l0_0,&_44p5_l0_1,0},
-    {&_44p5_l1_0,&_44p5_p7_2,&_44p5_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l6={
-  {
-    {&_44p6_l0_0,&_44p6_l0_1,0},
-    {&_44p6_l1_0,&_44p6_p7_2,&_44p6_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l7={
-  {
-    {&_44p7_l0_0,&_44p7_l0_1,0},
-    {&_44p7_l1_0,&_44p7_p7_2,&_44p7_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l8={
-  {
-    {&_44p8_l0_0,&_44p8_l0_1,0},
-    {&_44p8_l1_0,&_44p8_p7_2,&_44p8_p7_3},
-   }
-};
-static const static_bookblock _resbook_44p_l9={
-  {
-    {&_44p9_l0_0,&_44p9_l0_1,0},
-    {&_44p9_l1_0,&_44p9_p7_2,&_44p9_p7_3},
-   }
-};
-
-
-static const vorbis_info_mapping0 _map_nominal_51[2]={
-  {2, {0,0,0,0,0,1}, {0,2}, {0,2}, 4,{0,3,0,0},{2,4,1,3}},
-  {2, {0,0,0,0,0,1}, {1,2}, {1,2}, 4,{0,3,0,0},{2,4,1,3}}
-};
-static const vorbis_info_mapping0 _map_nominal_51u[2]={
-  {2, {0,0,0,0,0,1}, {0,2}, {0,2}, 0,{0},{0}},
-  {2, {0,0,0,0,0,1}, {1,2}, {1,2}, 0,{0},{0}}
-};
-
-static const vorbis_residue_template _res_44p51_n1[]={
-  {2,0,30,  &_residue_44p_lo,
-   &_huff_book__44pn1_short,&_huff_book__44pn1_short,
-   &_resbook_44p_n1,&_resbook_44p_n1},
-
-  {2,0,30,  &_residue_44p_lo,
-   &_huff_book__44pn1_long,&_huff_book__44pn1_long,
-   &_resbook_44p_n1,&_resbook_44p_n1},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44pn1_lfe,&_huff_book__44pn1_lfe,
-   &_resbook_44p_ln1,&_resbook_44p_ln1}
-};
-static const vorbis_residue_template _res_44p51_0[]={
-  {2,0,15,  &_residue_44p_lo,
-   &_huff_book__44p0_short,&_huff_book__44p0_short,
-   &_resbook_44p_0,&_resbook_44p_0},
-
-  {2,0,30,  &_residue_44p_lo,
-   &_huff_book__44p0_long,&_huff_book__44p0_long,
-   &_resbook_44p_0,&_resbook_44p_0},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p0_lfe,&_huff_book__44p0_lfe,
-   &_resbook_44p_l0,&_resbook_44p_l0}
-};
-static const vorbis_residue_template _res_44p51_1[]={
-  {2,0,15,  &_residue_44p_lo,
-   &_huff_book__44p1_short,&_huff_book__44p1_short,
-   &_resbook_44p_1,&_resbook_44p_1},
-
-  {2,0,30,  &_residue_44p_lo,
-   &_huff_book__44p1_long,&_huff_book__44p1_long,
-   &_resbook_44p_1,&_resbook_44p_1},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p1_lfe,&_huff_book__44p1_lfe,
-   &_resbook_44p_l1,&_resbook_44p_l1}
-};
-static const vorbis_residue_template _res_44p51_2[]={
-  {2,0,15,  &_residue_44p,
-   &_huff_book__44p2_short,&_huff_book__44p2_short,
-   &_resbook_44p_2,&_resbook_44p_2},
-
-  {2,0,30,  &_residue_44p,
-   &_huff_book__44p2_long,&_huff_book__44p2_long,
-   &_resbook_44p_2,&_resbook_44p_2},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p2_lfe,&_huff_book__44p2_lfe,
-   &_resbook_44p_l2,&_resbook_44p_l2}
-};
-static const vorbis_residue_template _res_44p51_3[]={
-  {2,0,15,  &_residue_44p,
-   &_huff_book__44p3_short,&_huff_book__44p3_short,
-   &_resbook_44p_3,&_resbook_44p_3},
-
-  {2,0,30,  &_residue_44p,
-   &_huff_book__44p3_long,&_huff_book__44p3_long,
-   &_resbook_44p_3,&_resbook_44p_3},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p3_lfe,&_huff_book__44p3_lfe,
-   &_resbook_44p_l3,&_resbook_44p_l3}
-};
-static const vorbis_residue_template _res_44p51_4[]={
-  {2,0,15,  &_residue_44p,
-   &_huff_book__44p4_short,&_huff_book__44p4_short,
-   &_resbook_44p_4,&_resbook_44p_4},
-
-  {2,0,30,  &_residue_44p,
-   &_huff_book__44p4_long,&_huff_book__44p4_long,
-   &_resbook_44p_4,&_resbook_44p_4},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p4_lfe,&_huff_book__44p4_lfe,
-   &_resbook_44p_l4,&_resbook_44p_l4}
-};
-static const vorbis_residue_template _res_44p51_5[]={
-  {2,0,15,  &_residue_44p_hi,
-   &_huff_book__44p5_short,&_huff_book__44p5_short,
-   &_resbook_44p_5,&_resbook_44p_5},
-
-  {2,0,30,  &_residue_44p_hi,
-   &_huff_book__44p5_long,&_huff_book__44p5_long,
-   &_resbook_44p_5,&_resbook_44p_5},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p5_lfe,&_huff_book__44p5_lfe,
-   &_resbook_44p_l5,&_resbook_44p_l5}
-};
-static const vorbis_residue_template _res_44p51_6[]={
-  {2,0,15,  &_residue_44p_hi,
-   &_huff_book__44p6_short,&_huff_book__44p6_short,
-   &_resbook_44p_6,&_resbook_44p_6},
-
-  {2,0,30,  &_residue_44p_hi,
-   &_huff_book__44p6_long,&_huff_book__44p6_long,
-   &_resbook_44p_6,&_resbook_44p_6},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
-   &_resbook_44p_l6,&_resbook_44p_l6}
-};
-
-
-static const vorbis_residue_template _res_44p51_7[]={
-  {2,0,15,  &_residue_44p_hi,
-   &_huff_book__44p7_short,&_huff_book__44p7_short,
-   &_resbook_44p_7,&_resbook_44p_7},
-
-  {2,0,30,  &_residue_44p_hi,
-   &_huff_book__44p7_long,&_huff_book__44p7_long,
-   &_resbook_44p_7,&_resbook_44p_7},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
-   &_resbook_44p_l6,&_resbook_44p_l6}
-};
-static const vorbis_residue_template _res_44p51_8[]={
-  {2,0,15,  &_residue_44p_hi,
-   &_huff_book__44p8_short,&_huff_book__44p8_short,
-   &_resbook_44p_8,&_resbook_44p_8},
-
-  {2,0,30,  &_residue_44p_hi,
-   &_huff_book__44p8_long,&_huff_book__44p8_long,
-   &_resbook_44p_8,&_resbook_44p_8},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
-   &_resbook_44p_l6,&_resbook_44p_l6}
-};
-static const vorbis_residue_template _res_44p51_9[]={
-  {2,0,15,  &_residue_44p_hi,
-   &_huff_book__44p9_short,&_huff_book__44p9_short,
-   &_resbook_44p_9,&_resbook_44p_9},
-
-  {2,0,30,  &_residue_44p_hi,
-   &_huff_book__44p9_long,&_huff_book__44p9_long,
-   &_resbook_44p_9,&_resbook_44p_9},
-
-  {1,2,6,  &_residue_44p_lfe,
-   &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
-   &_resbook_44p_l6,&_resbook_44p_l6}
-};
-
-static const vorbis_mapping_template _mapres_template_44_51[]={
-  { _map_nominal_51, _res_44p51_n1 }, /* -1 */
-  { _map_nominal_51, _res_44p51_0 }, /* 0 */
-  { _map_nominal_51, _res_44p51_1 }, /* 1 */
-  { _map_nominal_51, _res_44p51_2 }, /* 2 */
-  { _map_nominal_51, _res_44p51_3 }, /* 3 */
-  { _map_nominal_51, _res_44p51_4 }, /* 4 */
-  { _map_nominal_51u, _res_44p51_5 }, /* 5 */
-  { _map_nominal_51u, _res_44p51_6 }, /* 6 */
-  { _map_nominal_51u, _res_44p51_7 }, /* 7 */
-  { _map_nominal_51u, _res_44p51_8 }, /* 8 */
-  { _map_nominal_51u, _res_44p51_9 }, /* 9 */
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h
deleted file mode 100644
index 5b31322..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_44u.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel residue templates for 32/44.1/48kHz uncoupled
- last mod: $Id: residue_44u.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "../../../codec.h"
-#include "../backends.h"
-#include "../books/uncoupled/res_books_uncoupled.h"
-
-/***** residue backends *********************************************/
-
-
-static const vorbis_info_residue0 _residue_44_low_un={
-  0,-1, -1, 8,-1,-1,
-  {0},
-  {-1},
-  {  0,  1,  1,  2,  2,  4, 28},
-  { -1, 25, -1, 45, -1, -1, -1}
-};
-
-static const vorbis_info_residue0 _residue_44_mid_un={
-  0,-1, -1, 10,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8   9 */
-  {0},
-  {-1},
-  {  0,  1,  1,  2,  2,  4,  4, 16, 60},
-  { -1, 30, -1, 50, -1, 80, -1, -1, -1}
-};
-
-static const vorbis_info_residue0 _residue_44_hi_un={
-  0,-1, -1, 10,-1,-1,
-  /* 0   1   2   3   4   5   6   7   8   9 */
-  {0},
-  {-1},
-  {  0,  1,  2,  4,  8, 16, 32, 71,157},
-  { -1, -1, -1, -1, -1, -1, -1, -1, -1}
-};
-
-/* mapping conventions:
-   only one submap (this would change for efficient 5.1 support for example)*/
-/* Four psychoacoustic profiles are used, one for each blocktype */
-static const vorbis_info_mapping0 _map_nominal_u[2]={
-  {1, {0,0,0,0,0,0}, {0}, {0}, 0,{0},{0}},
-  {1, {0,0,0,0,0,0}, {1}, {1}, 0,{0},{0}}
-};
-
-static const static_bookblock _resbook_44u_n1={
-  {
-    {0},
-    {0,0,&_44un1__p1_0},
-    {0,0,&_44un1__p2_0},
-    {0,0,&_44un1__p3_0},
-    {0,0,&_44un1__p4_0},
-    {0,0,&_44un1__p5_0},
-    {&_44un1__p6_0,&_44un1__p6_1},
-    {&_44un1__p7_0,&_44un1__p7_1,&_44un1__p7_2}
-   }
-};
-static const static_bookblock _resbook_44u_0={
-  {
-    {0},
-    {0,0,&_44u0__p1_0},
-    {0,0,&_44u0__p2_0},
-    {0,0,&_44u0__p3_0},
-    {0,0,&_44u0__p4_0},
-    {0,0,&_44u0__p5_0},
-    {&_44u0__p6_0,&_44u0__p6_1},
-    {&_44u0__p7_0,&_44u0__p7_1,&_44u0__p7_2}
-   }
-};
-static const static_bookblock _resbook_44u_1={
-  {
-    {0},
-    {0,0,&_44u1__p1_0},
-    {0,0,&_44u1__p2_0},
-    {0,0,&_44u1__p3_0},
-    {0,0,&_44u1__p4_0},
-    {0,0,&_44u1__p5_0},
-    {&_44u1__p6_0,&_44u1__p6_1},
-    {&_44u1__p7_0,&_44u1__p7_1,&_44u1__p7_2}
-   }
-};
-static const static_bookblock _resbook_44u_2={
-  {
-    {0},
-    {0,0,&_44u2__p1_0},
-    {0,0,&_44u2__p2_0},
-    {0,0,&_44u2__p3_0},
-    {0,0,&_44u2__p4_0},
-    {0,0,&_44u2__p5_0},
-    {&_44u2__p6_0,&_44u2__p6_1},
-    {&_44u2__p7_0,&_44u2__p7_1,&_44u2__p7_2}
-   }
-};
-static const static_bookblock _resbook_44u_3={
-  {
-    {0},
-    {0,0,&_44u3__p1_0},
-    {0,0,&_44u3__p2_0},
-    {0,0,&_44u3__p3_0},
-    {0,0,&_44u3__p4_0},
-    {0,0,&_44u3__p5_0},
-    {&_44u3__p6_0,&_44u3__p6_1},
-    {&_44u3__p7_0,&_44u3__p7_1,&_44u3__p7_2}
-   }
-};
-static const static_bookblock _resbook_44u_4={
-  {
-    {0},
-    {0,0,&_44u4__p1_0},
-    {0,0,&_44u4__p2_0},
-    {0,0,&_44u4__p3_0},
-    {0,0,&_44u4__p4_0},
-    {0,0,&_44u4__p5_0},
-    {&_44u4__p6_0,&_44u4__p6_1},
-    {&_44u4__p7_0,&_44u4__p7_1,&_44u4__p7_2}
-   }
-};
-static const static_bookblock _resbook_44u_5={
-  {
-    {0},
-    {0,0,&_44u5__p1_0},
-    {0,0,&_44u5__p2_0},
-    {0,0,&_44u5__p3_0},
-    {0,0,&_44u5__p4_0},
-    {0,0,&_44u5__p5_0},
-    {0,0,&_44u5__p6_0},
-    {&_44u5__p7_0,&_44u5__p7_1},
-    {&_44u5__p8_0,&_44u5__p8_1},
-    {&_44u5__p9_0,&_44u5__p9_1,&_44u5__p9_2}
-   }
-};
-static const static_bookblock _resbook_44u_6={
-  {
-    {0},
-    {0,0,&_44u6__p1_0},
-    {0,0,&_44u6__p2_0},
-    {0,0,&_44u6__p3_0},
-    {0,0,&_44u6__p4_0},
-    {0,0,&_44u6__p5_0},
-    {0,0,&_44u6__p6_0},
-    {&_44u6__p7_0,&_44u6__p7_1},
-    {&_44u6__p8_0,&_44u6__p8_1},
-    {&_44u6__p9_0,&_44u6__p9_1,&_44u6__p9_2}
-   }
-};
-static const static_bookblock _resbook_44u_7={
-  {
-    {0},
-    {0,0,&_44u7__p1_0},
-    {0,0,&_44u7__p2_0},
-    {0,0,&_44u7__p3_0},
-    {0,0,&_44u7__p4_0},
-    {0,0,&_44u7__p5_0},
-    {0,0,&_44u7__p6_0},
-    {&_44u7__p7_0,&_44u7__p7_1},
-    {&_44u7__p8_0,&_44u7__p8_1},
-    {&_44u7__p9_0,&_44u7__p9_1,&_44u7__p9_2}
-   }
-};
-static const static_bookblock _resbook_44u_8={
-  {
-    {0},
-    {0,0,&_44u8_p1_0},
-    {0,0,&_44u8_p2_0},
-    {0,0,&_44u8_p3_0},
-    {0,0,&_44u8_p4_0},
-    {&_44u8_p5_0,&_44u8_p5_1},
-    {&_44u8_p6_0,&_44u8_p6_1},
-    {&_44u8_p7_0,&_44u8_p7_1},
-    {&_44u8_p8_0,&_44u8_p8_1},
-    {&_44u8_p9_0,&_44u8_p9_1,&_44u8_p9_2}
-   }
-};
-static const static_bookblock _resbook_44u_9={
-  {
-    {0},
-    {0,0,&_44u9_p1_0},
-    {0,0,&_44u9_p2_0},
-    {0,0,&_44u9_p3_0},
-    {0,0,&_44u9_p4_0},
-    {&_44u9_p5_0,&_44u9_p5_1},
-    {&_44u9_p6_0,&_44u9_p6_1},
-    {&_44u9_p7_0,&_44u9_p7_1},
-    {&_44u9_p8_0,&_44u9_p8_1},
-    {&_44u9_p9_0,&_44u9_p9_1,&_44u9_p9_2}
-   }
-};
-
-static const vorbis_residue_template _res_44u_n1[]={
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44un1__short,&_huff_book__44un1__short,
-   &_resbook_44u_n1,&_resbook_44u_n1},
-
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44un1__long,&_huff_book__44un1__long,
-   &_resbook_44u_n1,&_resbook_44u_n1}
-};
-static const vorbis_residue_template _res_44u_0[]={
-  {1,0,16,  &_residue_44_low_un,
-   &_huff_book__44u0__short,&_huff_book__44u0__short,
-   &_resbook_44u_0,&_resbook_44u_0},
-
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44u0__long,&_huff_book__44u0__long,
-   &_resbook_44u_0,&_resbook_44u_0}
-};
-static const vorbis_residue_template _res_44u_1[]={
-  {1,0,16,  &_residue_44_low_un,
-   &_huff_book__44u1__short,&_huff_book__44u1__short,
-   &_resbook_44u_1,&_resbook_44u_1},
-
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44u1__long,&_huff_book__44u1__long,
-   &_resbook_44u_1,&_resbook_44u_1}
-};
-static const vorbis_residue_template _res_44u_2[]={
-  {1,0,16,  &_residue_44_low_un,
-   &_huff_book__44u2__short,&_huff_book__44u2__short,
-   &_resbook_44u_2,&_resbook_44u_2},
-
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44u2__long,&_huff_book__44u2__long,
-   &_resbook_44u_2,&_resbook_44u_2}
-};
-static const vorbis_residue_template _res_44u_3[]={
-  {1,0,16,  &_residue_44_low_un,
-   &_huff_book__44u3__short,&_huff_book__44u3__short,
-   &_resbook_44u_3,&_resbook_44u_3},
-
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44u3__long,&_huff_book__44u3__long,
-   &_resbook_44u_3,&_resbook_44u_3}
-};
-static const vorbis_residue_template _res_44u_4[]={
-  {1,0,16,  &_residue_44_low_un,
-   &_huff_book__44u4__short,&_huff_book__44u4__short,
-   &_resbook_44u_4,&_resbook_44u_4},
-
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__44u4__long,&_huff_book__44u4__long,
-   &_resbook_44u_4,&_resbook_44u_4}
-};
-
-static const vorbis_residue_template _res_44u_5[]={
-  {1,0,16,  &_residue_44_mid_un,
-   &_huff_book__44u5__short,&_huff_book__44u5__short,
-   &_resbook_44u_5,&_resbook_44u_5},
-
-  {1,0,32,  &_residue_44_mid_un,
-   &_huff_book__44u5__long,&_huff_book__44u5__long,
-   &_resbook_44u_5,&_resbook_44u_5}
-};
-
-static const vorbis_residue_template _res_44u_6[]={
-  {1,0,16,  &_residue_44_mid_un,
-   &_huff_book__44u6__short,&_huff_book__44u6__short,
-   &_resbook_44u_6,&_resbook_44u_6},
-
-  {1,0,32,  &_residue_44_mid_un,
-   &_huff_book__44u6__long,&_huff_book__44u6__long,
-   &_resbook_44u_6,&_resbook_44u_6}
-};
-
-static const vorbis_residue_template _res_44u_7[]={
-  {1,0,16,  &_residue_44_mid_un,
-   &_huff_book__44u7__short,&_huff_book__44u7__short,
-   &_resbook_44u_7,&_resbook_44u_7},
-
-  {1,0,32,  &_residue_44_mid_un,
-   &_huff_book__44u7__long,&_huff_book__44u7__long,
-   &_resbook_44u_7,&_resbook_44u_7}
-};
-
-static const vorbis_residue_template _res_44u_8[]={
-  {1,0,16,  &_residue_44_hi_un,
-   &_huff_book__44u8__short,&_huff_book__44u8__short,
-   &_resbook_44u_8,&_resbook_44u_8},
-
-  {1,0,32,  &_residue_44_hi_un,
-   &_huff_book__44u8__long,&_huff_book__44u8__long,
-   &_resbook_44u_8,&_resbook_44u_8}
-};
-static const vorbis_residue_template _res_44u_9[]={
-  {1,0,16,  &_residue_44_hi_un,
-   &_huff_book__44u9__short,&_huff_book__44u9__short,
-   &_resbook_44u_9,&_resbook_44u_9},
-
-  {1,0,32,  &_residue_44_hi_un,
-   &_huff_book__44u9__long,&_huff_book__44u9__long,
-   &_resbook_44u_9,&_resbook_44u_9}
-};
-
-static const vorbis_mapping_template _mapres_template_44_uncoupled[]={
-  { _map_nominal_u, _res_44u_n1 }, /* -1 */
-  { _map_nominal_u, _res_44u_0 }, /* 0 */
-  { _map_nominal_u, _res_44u_1 }, /* 1 */
-  { _map_nominal_u, _res_44u_2 }, /* 2 */
-  { _map_nominal_u, _res_44u_3 }, /* 3 */
-  { _map_nominal_u, _res_44u_4 }, /* 4 */
-  { _map_nominal_u, _res_44u_5 }, /* 5 */
-  { _map_nominal_u, _res_44u_6 }, /* 6 */
-  { _map_nominal_u, _res_44u_7 }, /* 7 */
-  { _map_nominal_u, _res_44u_8 }, /* 8 */
-  { _map_nominal_u, _res_44u_9 }, /* 9 */
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h
deleted file mode 100644
index 2943694..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel residue templates 8/11kHz
- last mod: $Id: residue_8.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "../../../codec.h"
-#include "../backends.h"
-
-/***** residue backends *********************************************/
-
-static const static_bookblock _resbook_8s_0={
-  {
-    {0},
-    {0,0,&_8c0_s_p1_0},
-    {0},
-    {0,0,&_8c0_s_p3_0},
-    {0,0,&_8c0_s_p4_0},
-    {0,0,&_8c0_s_p5_0},
-    {0,0,&_8c0_s_p6_0},
-    {&_8c0_s_p7_0,&_8c0_s_p7_1},
-    {&_8c0_s_p8_0,&_8c0_s_p8_1},
-    {&_8c0_s_p9_0,&_8c0_s_p9_1,&_8c0_s_p9_2}
-   }
-};
-static const static_bookblock _resbook_8s_1={
-  {
-    {0},
-    {0,0,&_8c1_s_p1_0},
-    {0},
-    {0,0,&_8c1_s_p3_0},
-    {0,0,&_8c1_s_p4_0},
-    {0,0,&_8c1_s_p5_0},
-    {0,0,&_8c1_s_p6_0},
-    {&_8c1_s_p7_0,&_8c1_s_p7_1},
-    {&_8c1_s_p8_0,&_8c1_s_p8_1},
-    {&_8c1_s_p9_0,&_8c1_s_p9_1,&_8c1_s_p9_2}
-   }
-};
-
-static const vorbis_residue_template _res_8s_0[]={
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__8c0_s_single,&_huff_book__8c0_s_single,
-   &_resbook_8s_0,&_resbook_8s_0},
-};
-static const vorbis_residue_template _res_8s_1[]={
-  {2,0,32,  &_residue_44_mid,
-   &_huff_book__8c1_s_single,&_huff_book__8c1_s_single,
-   &_resbook_8s_1,&_resbook_8s_1},
-};
-
-static const vorbis_mapping_template _mapres_template_8_stereo[2]={
-  { _map_nominal, _res_8s_0 }, /* 0 */
-  { _map_nominal, _res_8s_1 }, /* 1 */
-};
-
-static const static_bookblock _resbook_8u_0={
-  {
-    {0},
-    {0,0,&_8u0__p1_0},
-    {0,0,&_8u0__p2_0},
-    {0,0,&_8u0__p3_0},
-    {0,0,&_8u0__p4_0},
-    {0,0,&_8u0__p5_0},
-    {&_8u0__p6_0,&_8u0__p6_1},
-    {&_8u0__p7_0,&_8u0__p7_1,&_8u0__p7_2}
-   }
-};
-static const static_bookblock _resbook_8u_1={
-  {
-    {0},
-    {0,0,&_8u1__p1_0},
-    {0,0,&_8u1__p2_0},
-    {0,0,&_8u1__p3_0},
-    {0,0,&_8u1__p4_0},
-    {0,0,&_8u1__p5_0},
-    {0,0,&_8u1__p6_0},
-    {&_8u1__p7_0,&_8u1__p7_1},
-    {&_8u1__p8_0,&_8u1__p8_1},
-    {&_8u1__p9_0,&_8u1__p9_1,&_8u1__p9_2}
-   }
-};
-
-static const vorbis_residue_template _res_8u_0[]={
-  {1,0,32,  &_residue_44_low_un,
-   &_huff_book__8u0__single,&_huff_book__8u0__single,
-   &_resbook_8u_0,&_resbook_8u_0},
-};
-static const vorbis_residue_template _res_8u_1[]={
-  {1,0,32,  &_residue_44_mid_un,
-   &_huff_book__8u1__single,&_huff_book__8u1__single,
-   &_resbook_8u_1,&_resbook_8u_1},
-};
-
-static const vorbis_mapping_template _mapres_template_8_uncoupled[2]={
-  { _map_nominal_u, _res_8u_0 }, /* 0 */
-  { _map_nominal_u, _res_8u_1 }, /* 1 */
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h
deleted file mode 100644
index 6637249..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_11.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 11kHz settings
- last mod: $Id: setup_11.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-#include "psych_11.h"
-
-static const int blocksize_11[2]={
-  512,512
-};
-
-static const int _floor_mapping_11a[]={
-  6,6
-};
-static const int *_floor_mapping_11[]={
-  _floor_mapping_11a
-};
-
-static const double rate_mapping_11[3]={
-  8000.,13000.,44000.,
-};
-
-static const double rate_mapping_11_uncoupled[3]={
-  12000.,20000.,50000.,
-};
-
-static const double quality_mapping_11[3]={
-  -.1,.0,1.
-};
-
-static const ve_setup_data_template ve_setup_11_stereo={
-  2,
-  rate_mapping_11,
-  quality_mapping_11,
-  2,
-  9000,
-  15000,
-
-  blocksize_11,
-  blocksize_11,
-
-  _psy_tone_masteratt_11,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_11,
-  NULL,
-  _vp_tonemask_adj_11,
-
-  _psy_noiseguards_8,
-  _psy_noisebias_11,
-  _psy_noisebias_11,
-  NULL,
-  NULL,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_8_mapping,
-  NULL,
-
-  {_noise_start_8,_noise_start_8},
-  {_noise_part_8,_noise_part_8},
-  _noise_thresh_11,
-
-  _psy_ath_floater_8,
-  _psy_ath_abs_8,
-
-  _psy_lowpass_11,
-
-  _psy_global_44,
-  _global_mapping_8,
-  _psy_stereo_modes_8,
-
-  _floor_books,
-  _floor,
-  1,
-  _floor_mapping_11,
-
-  _mapres_template_8_stereo
-};
-
-static const ve_setup_data_template ve_setup_11_uncoupled={
-  2,
-  rate_mapping_11_uncoupled,
-  quality_mapping_11,
-  -1,
-  9000,
-  15000,
-
-  blocksize_11,
-  blocksize_11,
-
-  _psy_tone_masteratt_11,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_11,
-  NULL,
-  _vp_tonemask_adj_11,
-
-  _psy_noiseguards_8,
-  _psy_noisebias_11,
-  _psy_noisebias_11,
-  NULL,
-  NULL,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_8_mapping,
-  NULL,
-
-  {_noise_start_8,_noise_start_8},
-  {_noise_part_8,_noise_part_8},
-  _noise_thresh_11,
-
-  _psy_ath_floater_8,
-  _psy_ath_abs_8,
-
-  _psy_lowpass_11,
-
-  _psy_global_44,
-  _global_mapping_8,
-  _psy_stereo_modes_8,
-
-  _floor_books,
-  _floor,
-  1,
-  _floor_mapping_11,
-
-  _mapres_template_8_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h
deleted file mode 100644
index 6fec1c2..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_16.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 16kHz settings
- last mod: $Id: setup_16.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-#include "psych_16.h"
-#include "residue_16.h"
-
-static const int blocksize_16_short[3]={
-  1024,512,512
-};
-static const int blocksize_16_long[3]={
-  1024,1024,1024
-};
-
-static const int _floor_mapping_16a[]={
-  9,3,3
-};
-static const int _floor_mapping_16b[]={
-  9,9,9
-};
-static const int *_floor_mapping_16[]={
-  _floor_mapping_16a,
-  _floor_mapping_16b
-};
-
-static const double rate_mapping_16[4]={
-  12000.,20000.,44000.,86000.
-};
-
-static const double rate_mapping_16_uncoupled[4]={
-  16000.,28000.,64000.,100000.
-};
-
-static const double _global_mapping_16[4]={ 1., 2., 3., 4. };
-
-static const double quality_mapping_16[4]={ -.1,.05,.5,1. };
-
-static const double _psy_compand_16_mapping[4]={ 0., .8, 1., 1.};
-
-static const ve_setup_data_template ve_setup_16_stereo={
-  3,
-  rate_mapping_16,
-  quality_mapping_16,
-  2,
-  15000,
-  19000,
-
-  blocksize_16_short,
-  blocksize_16_long,
-
-  _psy_tone_masteratt_16,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-
-  _psy_noiseguards_16,
-  _psy_noisebias_16_impulse,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_16_mapping,
-  _psy_compand_16_mapping,
-
-  {_noise_start_16,_noise_start_16},
-  { _noise_part_16, _noise_part_16},
-  _noise_thresh_16,
-
-  _psy_ath_floater_16,
-  _psy_ath_abs_16,
-
-  _psy_lowpass_16,
-
-  _psy_global_44,
-  _global_mapping_16,
-  _psy_stereo_modes_16,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_16,
-
-  _mapres_template_16_stereo
-};
-
-static const ve_setup_data_template ve_setup_16_uncoupled={
-  3,
-  rate_mapping_16_uncoupled,
-  quality_mapping_16,
-  -1,
-  15000,
-  19000,
-
-  blocksize_16_short,
-  blocksize_16_long,
-
-  _psy_tone_masteratt_16,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-
-  _psy_noiseguards_16,
-  _psy_noisebias_16_impulse,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_16_mapping,
-  _psy_compand_16_mapping,
-
-  {_noise_start_16,_noise_start_16},
-  { _noise_part_16, _noise_part_16},
-  _noise_thresh_16,
-
-  _psy_ath_floater_16,
-  _psy_ath_abs_16,
-
-  _psy_lowpass_16,
-
-  _psy_global_44,
-  _global_mapping_16,
-  _psy_stereo_modes_16,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_16,
-
-  _mapres_template_16_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h
deleted file mode 100644
index c164a9b..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 22kHz settings
- last mod: $Id: setup_22.h 17026 2010-03-25 05:00:27Z xiphmont $
-
- ********************************************************************/
-
-static const double rate_mapping_22[4]={
-  15000.,20000.,44000.,86000.
-};
-
-static const double rate_mapping_22_uncoupled[4]={
-  16000.,28000.,50000.,90000.
-};
-
-static const double _psy_lowpass_22[4]={9.5,11.,30.,99.};
-
-static const ve_setup_data_template ve_setup_22_stereo={
-  3,
-  rate_mapping_22,
-  quality_mapping_16,
-  2,
-  19000,
-  26000,
-
-  blocksize_16_short,
-  blocksize_16_long,
-
-  _psy_tone_masteratt_16,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-
-  _psy_noiseguards_16,
-  _psy_noisebias_16_impulse,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_16_mapping,
-  _psy_compand_16_mapping,
-
-  {_noise_start_16,_noise_start_16},
-  { _noise_part_16, _noise_part_16},
-  _noise_thresh_16,
-
-  _psy_ath_floater_16,
-  _psy_ath_abs_16,
-
-  _psy_lowpass_22,
-
-  _psy_global_44,
-  _global_mapping_16,
-  _psy_stereo_modes_16,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_16,
-
-  _mapres_template_16_stereo
-};
-
-static const ve_setup_data_template ve_setup_22_uncoupled={
-  3,
-  rate_mapping_22_uncoupled,
-  quality_mapping_16,
-  -1,
-  19000,
-  26000,
-
-  blocksize_16_short,
-  blocksize_16_long,
-
-  _psy_tone_masteratt_16,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-  _vp_tonemask_adj_16,
-
-  _psy_noiseguards_16,
-  _psy_noisebias_16_impulse,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16_short,
-  _psy_noisebias_16,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_16_mapping,
-  _psy_compand_16_mapping,
-
-  {_noise_start_16,_noise_start_16},
-  { _noise_part_16, _noise_part_16},
-  _noise_thresh_16,
-
-  _psy_ath_floater_16,
-  _psy_ath_abs_16,
-
-  _psy_lowpass_22,
-
-  _psy_global_44,
-  _global_mapping_16,
-  _psy_stereo_modes_16,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_16,
-
-  _mapres_template_16_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h
deleted file mode 100644
index 301f020..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel settings for 32kHz
- last mod: $Id: setup_32.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-static const double rate_mapping_32[12]={
-  18000.,28000.,35000.,45000.,56000.,60000.,
-  75000.,90000.,100000.,115000.,150000.,190000.,
-};
-
-static const double rate_mapping_32_un[12]={
-  30000.,42000.,52000.,64000.,72000.,78000.,
-  86000.,92000.,110000.,120000.,140000.,190000.,
-};
-
-static const double _psy_lowpass_32[12]={
-  12.3,13.,13.,14.,15.,99.,99.,99.,99.,99.,99.,99.
-};
-
-static const ve_setup_data_template ve_setup_32_stereo={
-  11,
-  rate_mapping_32,
-  quality_mapping_44,
-  2,
-  26000,
-  40000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_32,
-
-  _psy_global_44,
-  _global_mapping_44,
-  _psy_stereo_modes_44,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_44,
-
-  _mapres_template_44_stereo
-};
-
-static const ve_setup_data_template ve_setup_32_uncoupled={
-  11,
-  rate_mapping_32_un,
-  quality_mapping_44,
-  -1,
-  26000,
-  40000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_32,
-
-  _psy_global_44,
-  _global_mapping_44,
-  NULL,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_44,
-
-  _mapres_template_44_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h
deleted file mode 100644
index 45250e0..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel settings for 44.1/48kHz
- last mod: $Id: setup_44.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "floor_all.h"
-#include "residue_44.h"
-#include "psych_44.h"
-
-static const double rate_mapping_44_stereo[12]={
-  22500.,32000.,40000.,48000.,56000.,64000.,
-  80000.,96000.,112000.,128000.,160000.,250001.
-};
-
-static const double quality_mapping_44[12]={
-  -.1,.0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1.0
-};
-
-static const int blocksize_short_44[11]={
-  512,256,256,256,256,256,256,256,256,256,256
-};
-static const int blocksize_long_44[11]={
-  4096,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048
-};
-
-static const double _psy_compand_short_mapping[12]={
-  0.5, 1., 1., 1.3, 1.6, 2., 2., 2., 2., 2., 2., 2.
-};
-static const double _psy_compand_long_mapping[12]={
-  3.5, 4., 4., 4.3, 4.6, 5., 5., 5., 5., 5., 5., 5.
-};
-
-static const double _global_mapping_44[12]={
-  /* 1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.5, 4., 4. */
- 0., 1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.7, 4., 4.
-};
-
-static const int _floor_mapping_44a[11]={
-  1,0,0,2,2,4,5,5,5,5,5
-};
-
-static const int _floor_mapping_44b[11]={
-  8,7,7,7,7,7,7,7,7,7,7
-};
-
-static const int _floor_mapping_44c[11]={
-  10,10,10,10,10,10,10,10,10,10,10
-};
-
-static const int *_floor_mapping_44[]={
-  _floor_mapping_44a,
-  _floor_mapping_44b,
-  _floor_mapping_44c,
-};
-
-static const ve_setup_data_template ve_setup_44_stereo={
-  11,
-  rate_mapping_44_stereo,
-  quality_mapping_44,
-  2,
-  40000,
-  50000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_44,
-
-  _psy_global_44,
-  _global_mapping_44,
-  _psy_stereo_modes_44,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_44,
-
-  _mapres_template_44_stereo
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44p51.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44p51.h
deleted file mode 100644
index a26cee8..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44p51.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel settings for 44.1/48kHz 5.1 surround modes
- last mod: $Id$
-
- ********************************************************************/
-
-#include "residue_44p51.h"
-
-static const double rate_mapping_44p51[12]={
-  14000.,20000.,28000.,38000.,46000.,54000.,
-  75000.,96000.,120000.,140000.,180000.,240001.
-};
-
-static const ve_setup_data_template ve_setup_44_51={
-  11,
-  rate_mapping_44p51,
-  quality_mapping_44,
-  6,
-  40000,
-  70000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_44,
-
-  _psy_global_44,
-  _global_mapping_44,
-  _psy_stereo_modes_44,
-
-  _floor_books,
-  _floor,
-  3,
-  _floor_mapping_44,
-
-  _mapres_template_44_51
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h
deleted file mode 100644
index 7dfdd55..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel settings for 44.1/48kHz uncoupled modes
- last mod: $Id: setup_44u.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "residue_44u.h"
-
-static const double rate_mapping_44_un[12]={
-  32000.,48000.,60000.,70000.,80000.,86000.,
-  96000.,110000.,120000.,140000.,160000.,240001.
-};
-
-static const ve_setup_data_template ve_setup_44_uncoupled={
-  11,
-  rate_mapping_44_un,
-  quality_mapping_44,
-  -1,
-  40000,
-  50000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_44,
-
-  _psy_global_44,
-  _global_mapping_44,
-  _psy_stereo_modes_44,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_44,
-
-  _mapres_template_44_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_8.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_8.h
deleted file mode 100644
index 4e71205..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_8.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: 8kHz settings
- last mod: $Id: setup_8.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-#include "psych_8.h"
-#include "residue_8.h"
-
-static const int blocksize_8[2]={
-  512,512
-};
-
-static const int _floor_mapping_8a[]={
-  6,6
-};
-
-static const int *_floor_mapping_8[]={
-  _floor_mapping_8a
-};
-
-static const double rate_mapping_8[3]={
-  6000.,9000.,32000.,
-};
-
-static const double rate_mapping_8_uncoupled[3]={
-  8000.,14000.,42000.,
-};
-
-static const double quality_mapping_8[3]={
-  -.1,.0,1.
-};
-
-static const double _psy_compand_8_mapping[3]={ 0., 1., 1.};
-
-static const double _global_mapping_8[3]={ 1., 2., 3. };
-
-static const ve_setup_data_template ve_setup_8_stereo={
-  2,
-  rate_mapping_8,
-  quality_mapping_8,
-  2,
-  8000,
-  9000,
-
-  blocksize_8,
-  blocksize_8,
-
-  _psy_tone_masteratt_8,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_8,
-  NULL,
-  _vp_tonemask_adj_8,
-
-  _psy_noiseguards_8,
-  _psy_noisebias_8,
-  _psy_noisebias_8,
-  NULL,
-  NULL,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_8_mapping,
-  NULL,
-
-  {_noise_start_8,_noise_start_8},
-  {_noise_part_8,_noise_part_8},
-  _noise_thresh_5only,
-
-  _psy_ath_floater_8,
-  _psy_ath_abs_8,
-
-  _psy_lowpass_8,
-
-  _psy_global_44,
-  _global_mapping_8,
-  _psy_stereo_modes_8,
-
-  _floor_books,
-  _floor,
-  1,
-  _floor_mapping_8,
-
-  _mapres_template_8_stereo
-};
-
-static const ve_setup_data_template ve_setup_8_uncoupled={
-  2,
-  rate_mapping_8_uncoupled,
-  quality_mapping_8,
-  -1,
-  8000,
-  9000,
-
-  blocksize_8,
-  blocksize_8,
-
-  _psy_tone_masteratt_8,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_8,
-  NULL,
-  _vp_tonemask_adj_8,
-
-  _psy_noiseguards_8,
-  _psy_noisebias_8,
-  _psy_noisebias_8,
-  NULL,
-  NULL,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_8_mapping,
-  NULL,
-
-  {_noise_start_8,_noise_start_8},
-  {_noise_part_8,_noise_part_8},
-  _noise_thresh_5only,
-
-  _psy_ath_floater_8,
-  _psy_ath_abs_8,
-
-  _psy_lowpass_8,
-
-  _psy_global_44,
-  _global_mapping_8,
-  _psy_stereo_modes_8,
-
-  _floor_books,
-  _floor,
-  1,
-  _floor_mapping_8,
-
-  _mapres_template_8_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h
deleted file mode 100644
index be5e2c3..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: catch-all toplevel settings for q modes only
- last mod: $Id: setup_X.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-static const double rate_mapping_X[12]={
-  -1.,-1.,-1.,-1.,-1.,-1.,
-  -1.,-1.,-1.,-1.,-1.,-1.
-};
-
-static const ve_setup_data_template ve_setup_X_stereo={
-  11,
-  rate_mapping_X,
-  quality_mapping_44,
-  2,
-  50000,
-  200000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_44,
-
-  _psy_global_44,
-  _global_mapping_44,
-  _psy_stereo_modes_44,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_44,
-
-  _mapres_template_44_stereo
-};
-
-static const ve_setup_data_template ve_setup_X_uncoupled={
-  11,
-  rate_mapping_X,
-  quality_mapping_44,
-  -1,
-  50000,
-  200000,
-
-  blocksize_short_44,
-  blocksize_long_44,
-
-  _psy_tone_masteratt_44,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_otherblock,
-  _vp_tonemask_adj_longblock,
-  _vp_tonemask_adj_otherblock,
-
-  _psy_noiseguards_44,
-  _psy_noisebias_impulse,
-  _psy_noisebias_padding,
-  _psy_noisebias_trans,
-  _psy_noisebias_long,
-  _psy_noise_suppress,
-
-  _psy_compand_44,
-  _psy_compand_short_mapping,
-  _psy_compand_long_mapping,
-
-  {_noise_start_short_44,_noise_start_long_44},
-  {_noise_part_short_44,_noise_part_long_44},
-  _noise_thresh_44,
-
-  _psy_ath_floater,
-  _psy_ath_abs,
-
-  _psy_lowpass_44,
-
-  _psy_global_44,
-  _global_mapping_44,
-  NULL,
-
-  _floor_books,
-  _floor,
-  2,
-  _floor_mapping_44,
-
-  _mapres_template_44_uncoupled
-};
-
-static const ve_setup_data_template ve_setup_XX_stereo={
-  2,
-  rate_mapping_X,
-  quality_mapping_8,
-  2,
-  0,
-  8000,
-
-  blocksize_8,
-  blocksize_8,
-
-  _psy_tone_masteratt_8,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_8,
-  NULL,
-  _vp_tonemask_adj_8,
-
-  _psy_noiseguards_8,
-  _psy_noisebias_8,
-  _psy_noisebias_8,
-  NULL,
-  NULL,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_8_mapping,
-  NULL,
-
-  {_noise_start_8,_noise_start_8},
-  {_noise_part_8,_noise_part_8},
-  _noise_thresh_5only,
-
-  _psy_ath_floater_8,
-  _psy_ath_abs_8,
-
-  _psy_lowpass_8,
-
-  _psy_global_44,
-  _global_mapping_8,
-  _psy_stereo_modes_8,
-
-  _floor_books,
-  _floor,
-  1,
-  _floor_mapping_8,
-
-  _mapres_template_8_stereo
-};
-
-static const ve_setup_data_template ve_setup_XX_uncoupled={
-  2,
-  rate_mapping_X,
-  quality_mapping_8,
-  -1,
-  0,
-  8000,
-
-  blocksize_8,
-  blocksize_8,
-
-  _psy_tone_masteratt_8,
-  _psy_tone_0dB,
-  _psy_tone_suppress,
-
-  _vp_tonemask_adj_8,
-  NULL,
-  _vp_tonemask_adj_8,
-
-  _psy_noiseguards_8,
-  _psy_noisebias_8,
-  _psy_noisebias_8,
-  NULL,
-  NULL,
-  _psy_noise_suppress,
-
-  _psy_compand_8,
-  _psy_compand_8_mapping,
-  NULL,
-
-  {_noise_start_8,_noise_start_8},
-  {_noise_part_8,_noise_part_8},
-  _noise_thresh_5only,
-
-  _psy_ath_floater_8,
-  _psy_ath_abs_8,
-
-  _psy_lowpass_8,
-
-  _psy_global_44,
-  _global_mapping_8,
-  _psy_stereo_modes_8,
-
-  _floor_books,
-  _floor,
-  1,
-  _floor_mapping_8,
-
-  _mapres_template_8_uncoupled
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h
deleted file mode 100644
index 6217472..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h
+++ /dev/null
@@ -1,186 +0,0 @@
-#ifndef _OS_H
-#define _OS_H
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: #ifdef jail to whip a few platforms into the UNIX ideal.
- last mod: $Id: os.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include "../../os_types.h"
-
-#include "misc.h"
-
-#ifndef _V_IFDEFJAIL_H_
-#  define _V_IFDEFJAIL_H_
-
-#  ifdef __GNUC__
-#    define STIN static __inline__
-#  elif _WIN32
-#    define STIN static __inline
-#  else
-#    define STIN static
-#  endif
-
-#ifdef DJGPP
-#  define rint(x)   (floor((x)+0.5f))
-#endif
-
-#ifndef M_PI
-#  define M_PI (3.1415926536f)
-#endif
-
-#if defined(_WIN32) && !defined(__SYMBIAN32__)
-#  include <malloc.h>
-#  define rint(x)   (floor((x)+0.5f))
-#  define NO_FLOAT_MATH_LIB
-#  define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b))
-#endif
-
-#if defined(__SYMBIAN32__) && defined(__WINS__)
-void *_alloca(size_t size);
-#  define alloca _alloca
-#endif
-
-#ifndef FAST_HYPOT
-#  define FAST_HYPOT hypot
-#endif
-
-#endif
-
-#ifdef HAVE_ALLOCA_H
-#  include <alloca.h>
-#endif
-
-#ifdef USE_MEMORY_H
-#  include <memory.h>
-#endif
-
-#ifndef min
-#  define min(x,y)  ((x)>(y)?(y):(x))
-#endif
-
-#ifndef max
-#  define max(x,y)  ((x)<(y)?(y):(x))
-#endif
-
-
-/* Special i386 GCC implementation */
-#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__)
-#  define VORBIS_FPU_CONTROL
-/* both GCC and MSVC are kinda stupid about rounding/casting to int.
-   Because of encapsulation constraints (GCC can't see inside the asm
-   block and so we end up doing stupid things like a store/load that
-   is collectively a noop), we do it this way */
-
-/* we must set up the fpu before this works!! */
-
-typedef ogg_int16_t vorbis_fpu_control;
-
-static inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
-  ogg_int16_t ret;
-  ogg_int16_t temp = 0;
-  __asm__ __volatile__("fnstcw %0\n\t"
-          "movw %0,%%dx\n\t"
-          "andw $62463,%%dx\n\t"
-          "movw %%dx,%1\n\t"
-          "fldcw %1\n\t":"=m"(ret):"m"(temp): "dx");
-  *fpu=ret;
-}
-
-static inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
-  __asm__ __volatile__("fldcw %0":: "m"(fpu));
-}
-
-/* assumes the FPU is in round mode! */
-static inline int vorbis_ftoi(double f){  /* yes, double!  Otherwise,
-                                             we get extra fst/fld to
-                                             truncate precision */
-  int i;
-  __asm__("fistl %0": "=m"(i) : "t"(f));
-  return(i);
-}
-#endif /* Special i386 GCC implementation */
-
-
-/* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the
- * 64 bit compiler */
-#if defined(_MSC_VER) && !defined(_WIN64) && !defined(_WIN32_WCE)
-#  define VORBIS_FPU_CONTROL
-
-typedef ogg_int16_t vorbis_fpu_control;
-
-static __inline int vorbis_ftoi(double f){
-        int i;
-        __asm{
-                fld f
-                fistp i
-        }
-        return i;
-}
-
-static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
-}
-
-static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
-}
-
-#endif /* Special MSVC 32 bit implementation */
-
-
-/* Optimized code path for x86_64 builds. Uses SSE2 intrinsics. This can be
-   done safely because all x86_64 CPUs supports SSE2. */
-#if (defined(_MSC_VER) && defined(_WIN64)) || (defined(__GNUC__) && defined (__x86_64__))
-#  define VORBIS_FPU_CONTROL
-
-typedef ogg_int16_t vorbis_fpu_control;
-
-#include <emmintrin.h>
-static __inline int vorbis_ftoi(double f){
-        return _mm_cvtsd_si32(_mm_load_sd(&f));
-}
-
-static __inline void vorbis_fpu_setround(vorbis_fpu_control*){
-}
-
-static __inline void vorbis_fpu_restore(vorbis_fpu_control){
-}
-
-#endif /* Special MSVC x64 implementation */
-
-
-/* If no special implementation was found for the current compiler / platform,
-   use the default implementation here: */
-#ifndef VORBIS_FPU_CONTROL
-
-typedef int vorbis_fpu_control;
-
-static int vorbis_ftoi(double f){
-        /* Note: MSVC and GCC (at least on some systems) round towards zero, thus,
-           the floor() call is required to ensure correct roudning of
-           negative numbers */
-        return (int)floor(f+.5);
-}
-
-/* We don't have special code for this compiler/arch, so do it the slow way */
-#  define vorbis_fpu_setround(vorbis_fpu_control) {}
-#  define vorbis_fpu_restore(vorbis_fpu_control) {}
-
-#endif /* default implementation */
-
-#endif /* _OS_H */
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c
deleted file mode 100644
index a60f88f..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.c
+++ /dev/null
@@ -1,1205 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: psychoacoustics not including preecho
- last mod: $Id: psy.c 17569 2010-10-26 17:09:47Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-#include "../../codec.h"
-#include "codec_internal.h"
-
-#include "masking.h"
-#include "psy.h"
-#include "os.h"
-#include "lpc.h"
-#include "smallft.h"
-#include "scales.h"
-#include "misc.h"
-
-#define NEGINF -9999.f
-static const double stereo_threshholds[]={0.0, .5, 1.0, 1.5, 2.5, 4.5, 8.5, 16.5, 9e10};
-static const double stereo_threshholds_limited[]={0.0, .5, 1.0, 1.5, 2.0, 2.5, 4.5, 8.5, 9e10};
-
-vorbis_look_psy_global *_vp_global_look(vorbis_info *vi){
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy_global *gi=&ci->psy_g_param;
-  vorbis_look_psy_global *look=(vorbis_look_psy_global*)_ogg_calloc(1,sizeof(*look));
-
-  look->channels=vi->channels;
-
-  look->ampmax=-9999.;
-  look->gi=gi;
-  return(look);
-}
-
-void _vp_global_free(vorbis_look_psy_global *look){
-  if(look){
-    memset(look,0,sizeof(*look));
-    _ogg_free(look);
-  }
-}
-
-static inline void _vi_gpsy_free(vorbis_info_psy_global *i){
-  if(i){
-    memset(i,0,sizeof(*i));
-    _ogg_free(i);
-  }
-}
-
-void _vi_psy_free(vorbis_info_psy *i){
-  if(i){
-    memset(i,0,sizeof(*i));
-    _ogg_free(i);
-  }
-}
-
-static void min_curve(float *c,
-                       float *c2){
-  int i;
-  for(i=0;i<EHMER_MAX;i++)if(c2[i]<c[i])c[i]=c2[i];
-}
-static void max_curve(float *c,
-                       float *c2){
-  int i;
-  for(i=0;i<EHMER_MAX;i++)if(c2[i]>c[i])c[i]=c2[i];
-}
-
-static void attenuate_curve(float *c,float att){
-  int i;
-  for(i=0;i<EHMER_MAX;i++)
-    c[i]+=att;
-}
-
-static float ***setup_tone_curves(float curveatt_dB[P_BANDS],float binHz,int n,
-                                  float center_boost, float center_decay_rate){
-  int i,j,k,m;
-  float ath[EHMER_MAX];
-  float workc[P_BANDS][P_LEVELS][EHMER_MAX];
-  float athc[P_LEVELS][EHMER_MAX];
-  float *brute_buffer=(float*) alloca(n*sizeof(*brute_buffer));
-
-  float ***ret=(float***) _ogg_malloc(sizeof(*ret)*P_BANDS);
-
-  memset(workc,0,sizeof(workc));
-
-  for(i=0;i<P_BANDS;i++){
-    /* we add back in the ATH to avoid low level curves falling off to
-       -infinity and unnecessarily cutting off high level curves in the
-       curve limiting (last step). */
-
-    /* A half-band's settings must be valid over the whole band, and
-       it's better to mask too little than too much */
-    int ath_offset=i*4;
-    for(j=0;j<EHMER_MAX;j++){
-      float min=999.;
-      for(k=0;k<4;k++)
-        if(j+k+ath_offset<MAX_ATH){
-          if(min>ATH[j+k+ath_offset])min=ATH[j+k+ath_offset];
-        }else{
-          if(min>ATH[MAX_ATH-1])min=ATH[MAX_ATH-1];
-        }
-      ath[j]=min;
-    }
-
-    /* copy curves into working space, replicate the 50dB curve to 30
-       and 40, replicate the 100dB curve to 110 */
-    for(j=0;j<6;j++)
-      memcpy(workc[i][j+2],tonemasks[i][j],EHMER_MAX*sizeof(*tonemasks[i][j]));
-    memcpy(workc[i][0],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0]));
-    memcpy(workc[i][1],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0]));
-
-    /* apply centered curve boost/decay */
-    for(j=0;j<P_LEVELS;j++){
-      for(k=0;k<EHMER_MAX;k++){
-        float adj=center_boost+abs(EHMER_OFFSET-k)*center_decay_rate;
-        if(adj<0. && center_boost>0)adj=0.;
-        if(adj>0. && center_boost<0)adj=0.;
-        workc[i][j][k]+=adj;
-      }
-    }
-
-    /* normalize curves so the driving amplitude is 0dB */
-    /* make temp curves with the ATH overlayed */
-    for(j=0;j<P_LEVELS;j++){
-      attenuate_curve(workc[i][j],curveatt_dB[i]+100.-(j<2?2:j)*10.-P_LEVEL_0);
-      memcpy(athc[j],ath,EHMER_MAX*sizeof(**athc));
-      attenuate_curve(athc[j],+100.-j*10.f-P_LEVEL_0);
-      max_curve(athc[j],workc[i][j]);
-    }
-
-    /* Now limit the louder curves.
-
-       the idea is this: We don't know what the playback attenuation
-       will be; 0dB SL moves every time the user twiddles the volume
-       knob. So that means we have to use a single 'most pessimal' curve
-       for all masking amplitudes, right?  Wrong.  The *loudest* sound
-       can be in (we assume) a range of ...+100dB] SL.  However, sounds
-       20dB down will be in a range ...+80], 40dB down is from ...+60],
-       etc... */
-
-    for(j=1;j<P_LEVELS;j++){
-      min_curve(athc[j],athc[j-1]);
-      min_curve(workc[i][j],athc[j]);
-    }
-  }
-
-  for(i=0;i<P_BANDS;i++){
-    int hi_curve,lo_curve,bin;
-    ret[i]=(float**)_ogg_malloc(sizeof(**ret)*P_LEVELS);
-
-    /* low frequency curves are measured with greater resolution than
-       the MDCT/FFT will actually give us; we want the curve applied
-       to the tone data to be pessimistic and thus apply the minimum
-       masking possible for a given bin.  That means that a single bin
-       could span more than one octave and that the curve will be a
-       composite of multiple octaves.  It also may mean that a single
-       bin may span > an eighth of an octave and that the eighth
-       octave values may also be composited. */
-
-    /* which octave curves will we be compositing? */
-    bin=floor(fromOC(i*.5)/binHz);
-    lo_curve=  ceil(toOC(bin*binHz+1)*2);
-    hi_curve=  floor(toOC((bin+1)*binHz)*2);
-    if(lo_curve>i)lo_curve=i;
-    if(lo_curve<0)lo_curve=0;
-    if(hi_curve>=P_BANDS)hi_curve=P_BANDS-1;
-
-    for(m=0;m<P_LEVELS;m++){
-      ret[i][m]=(float*)_ogg_malloc(sizeof(***ret)*(EHMER_MAX+2));
-
-      for(j=0;j<n;j++)brute_buffer[j]=999.;
-
-      /* render the curve into bins, then pull values back into curve.
-         The point is that any inherent subsampling aliasing results in
-         a safe minimum */
-      for(k=lo_curve;k<=hi_curve;k++){
-        int l=0;
-
-        for(j=0;j<EHMER_MAX;j++){
-          int lo_bin= fromOC(j*.125+k*.5-2.0625)/binHz;
-          int hi_bin= fromOC(j*.125+k*.5-1.9375)/binHz+1;
-
-          if(lo_bin<0)lo_bin=0;
-          if(lo_bin>n)lo_bin=n;
-          if(lo_bin<l)l=lo_bin;
-          if(hi_bin<0)hi_bin=0;
-          if(hi_bin>n)hi_bin=n;
-
-          for(;l<hi_bin && l<n;l++)
-            if(brute_buffer[l]>workc[k][m][j])
-              brute_buffer[l]=workc[k][m][j];
-        }
-
-        for(;l<n;l++)
-          if(brute_buffer[l]>workc[k][m][EHMER_MAX-1])
-            brute_buffer[l]=workc[k][m][EHMER_MAX-1];
-
-      }
-
-      /* be equally paranoid about being valid up to next half ocatve */
-      if(i+1<P_BANDS){
-        int l=0;
-        k=i+1;
-        for(j=0;j<EHMER_MAX;j++){
-          int lo_bin= fromOC(j*.125+i*.5-2.0625)/binHz;
-          int hi_bin= fromOC(j*.125+i*.5-1.9375)/binHz+1;
-
-          if(lo_bin<0)lo_bin=0;
-          if(lo_bin>n)lo_bin=n;
-          if(lo_bin<l)l=lo_bin;
-          if(hi_bin<0)hi_bin=0;
-          if(hi_bin>n)hi_bin=n;
-
-          for(;l<hi_bin && l<n;l++)
-            if(brute_buffer[l]>workc[k][m][j])
-              brute_buffer[l]=workc[k][m][j];
-        }
-
-        for(;l<n;l++)
-          if(brute_buffer[l]>workc[k][m][EHMER_MAX-1])
-            brute_buffer[l]=workc[k][m][EHMER_MAX-1];
-
-      }
-
-
-      for(j=0;j<EHMER_MAX;j++){
-        int bin=fromOC(j*.125+i*.5-2.)/binHz;
-        if(bin<0){
-          ret[i][m][j+2]=-999.;
-        }else{
-          if(bin>=n){
-            ret[i][m][j+2]=-999.;
-          }else{
-            ret[i][m][j+2]=brute_buffer[bin];
-          }
-        }
-      }
-
-      /* add fenceposts */
-      for(j=0;j<EHMER_OFFSET;j++)
-        if(ret[i][m][j+2]>-200.f)break;
-      ret[i][m][0]=j;
-
-      for(j=EHMER_MAX-1;j>EHMER_OFFSET+1;j--)
-        if(ret[i][m][j+2]>-200.f)
-          break;
-      ret[i][m][1]=j;
-
-    }
-  }
-
-  return(ret);
-}
-
-void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
-                  vorbis_info_psy_global *gi,int n,long rate){
-  long i,j,lo=-99,hi=1;
-  long maxoc;
-  memset(p,0,sizeof(*p));
-
-  p->eighth_octave_lines=gi->eighth_octave_lines;
-  p->shiftoc=rint(log(gi->eighth_octave_lines*8.f)/log(2.f))-1;
-
-  p->firstoc=toOC(.25f*rate*.5/n)*(1<<(p->shiftoc+1))-gi->eighth_octave_lines;
-  maxoc=toOC((n+.25f)*rate*.5/n)*(1<<(p->shiftoc+1))+.5f;
-  p->total_octave_lines=maxoc-p->firstoc+1;
-  p->ath=(float*)_ogg_malloc(n*sizeof(*p->ath));
-
-  p->octave=(long*)_ogg_malloc(n*sizeof(*p->octave));
-  p->bark=(long*)_ogg_malloc(n*sizeof(*p->bark));
-  p->vi=vi;
-  p->n=n;
-  p->rate=rate;
-
-  /* AoTuV HF weighting */
-  p->m_val = 1.;
-  if(rate < 26000) p->m_val = 0;
-  else if(rate < 38000) p->m_val = .94;   /* 32kHz */
-  else if(rate > 46000) p->m_val = 1.275; /* 48kHz */
-
-  /* set up the lookups for a given blocksize and sample rate */
-
-  for(i=0,j=0;i<MAX_ATH-1;i++){
-    int endpos=rint(fromOC((i+1)*.125-2.)*2*n/rate);
-    float base=ATH[i];
-    if(j<endpos){
-      float delta=(ATH[i+1]-base)/(endpos-j);
-      for(;j<endpos && j<n;j++){
-        p->ath[j]=base+100.;
-        base+=delta;
-      }
-    }
-  }
-
-  for(;j<n;j++){
-    p->ath[j]=p->ath[j-1];
-  }
-
-  for(i=0;i<n;i++){
-    float bark=toBARK(rate/(2*n)*i);
-
-    for(;lo+vi->noisewindowlomin<i &&
-          toBARK(rate/(2*n)*lo)<(bark-vi->noisewindowlo);lo++);
-
-    for(;hi<=n && (hi<i+vi->noisewindowhimin ||
-          toBARK(rate/(2*n)*hi)<(bark+vi->noisewindowhi));hi++);
-
-    p->bark[i]=((lo-1)<<16)+(hi-1);
-
-  }
-
-  for(i=0;i<n;i++)
-    p->octave[i]=toOC((i+.25f)*.5*rate/n)*(1<<(p->shiftoc+1))+.5f;
-
-  p->tonecurves=setup_tone_curves(vi->toneatt,rate*.5/n,n,
-                                  vi->tone_centerboost,vi->tone_decay);
-
-  /* set up rolling noise median */
-  p->noiseoffset=(float**)_ogg_malloc(P_NOISECURVES*sizeof(*p->noiseoffset));
-  for(i=0;i<P_NOISECURVES;i++)
-    p->noiseoffset[i]=(float*)_ogg_malloc(n*sizeof(**p->noiseoffset));
-
-  for(i=0;i<n;i++){
-    float halfoc=toOC((i+.5)*rate/(2.*n))*2.;
-    int inthalfoc;
-    float del;
-
-    if(halfoc<0)halfoc=0;
-    if(halfoc>=P_BANDS-1)halfoc=P_BANDS-1;
-    inthalfoc=(int)halfoc;
-    del=halfoc-inthalfoc;
-
-    for(j=0;j<P_NOISECURVES;j++)
-      p->noiseoffset[j][i]=
-        p->vi->noiseoff[j][inthalfoc]*(1.-del) +
-        p->vi->noiseoff[j][inthalfoc+1]*del;
-
-  }
-#if 0
-  {
-    static int ls=0;
-    _analysis_output_always("noiseoff0",ls,p->noiseoffset[0],n,1,0,0);
-    _analysis_output_always("noiseoff1",ls,p->noiseoffset[1],n,1,0,0);
-    _analysis_output_always("noiseoff2",ls++,p->noiseoffset[2],n,1,0,0);
-  }
-#endif
-}
-
-void _vp_psy_clear(vorbis_look_psy *p){
-  int i,j;
-  if(p){
-    if(p->ath)_ogg_free(p->ath);
-    if(p->octave)_ogg_free(p->octave);
-    if(p->bark)_ogg_free(p->bark);
-    if(p->tonecurves){
-      for(i=0;i<P_BANDS;i++){
-        for(j=0;j<P_LEVELS;j++){
-          _ogg_free(p->tonecurves[i][j]);
-        }
-        _ogg_free(p->tonecurves[i]);
-      }
-      _ogg_free(p->tonecurves);
-    }
-    if(p->noiseoffset){
-      for(i=0;i<P_NOISECURVES;i++){
-        _ogg_free(p->noiseoffset[i]);
-      }
-      _ogg_free(p->noiseoffset);
-    }
-    memset(p,0,sizeof(*p));
-  }
-}
-
-/* octave/(8*eighth_octave_lines) x scale and dB y scale */
-static void seed_curve(float *seed,
-                       const float **curves,
-                       float amp,
-                       int oc, int n,
-                       int linesper,float dBoffset){
-  int i,post1;
-  int seedptr;
-  const float *posts,*curve;
-
-  int choice=(int)((amp+dBoffset-P_LEVEL_0)*.1f);
-  choice=max(choice,0);
-  choice=min(choice,P_LEVELS-1);
-  posts=curves[choice];
-  curve=posts+2;
-  post1=(int)posts[1];
-  seedptr=oc+(posts[0]-EHMER_OFFSET)*linesper-(linesper>>1);
-
-  for(i=posts[0];i<post1;i++){
-    if(seedptr>0){
-      float lin=amp+curve[i];
-      if(seed[seedptr]<lin)seed[seedptr]=lin;
-    }
-    seedptr+=linesper;
-    if(seedptr>=n)break;
-  }
-}
-
-static void seed_loop(vorbis_look_psy *p,
-                      const float ***curves,
-                      const float *f,
-                      const float *flr,
-                      float *seed,
-                      float specmax){
-  vorbis_info_psy *vi=p->vi;
-  long n=p->n,i;
-  float dBoffset=vi->max_curve_dB-specmax;
-
-  /* prime the working vector with peak values */
-
-  for(i=0;i<n;i++){
-    float max=f[i];
-    long oc=p->octave[i];
-    while(i+1<n && p->octave[i+1]==oc){
-      i++;
-      if(f[i]>max)max=f[i];
-    }
-
-    if(max+6.f>flr[i]){
-      oc=oc>>p->shiftoc;
-
-      if(oc>=P_BANDS)oc=P_BANDS-1;
-      if(oc<0)oc=0;
-
-      seed_curve(seed,
-                 curves[oc],
-                 max,
-                 p->octave[i]-p->firstoc,
-                 p->total_octave_lines,
-                 p->eighth_octave_lines,
-                 dBoffset);
-    }
-  }
-}
-
-static void seed_chase(float *seeds, int linesper, long n){
-  long  *posstack=(long*)alloca(n*sizeof(*posstack));
-  float *ampstack=(float*)alloca(n*sizeof(*ampstack));
-  long   stack=0;
-  long   pos=0;
-  long   i;
-
-  for(i=0;i<n;i++){
-    if(stack<2){
-      posstack[stack]=i;
-      ampstack[stack++]=seeds[i];
-    }else{
-      while(1){
-        if(seeds[i]<ampstack[stack-1]){
-          posstack[stack]=i;
-          ampstack[stack++]=seeds[i];
-          break;
-        }else{
-          if(i<posstack[stack-1]+linesper){
-            if(stack>1 && ampstack[stack-1]<=ampstack[stack-2] &&
-               i<posstack[stack-2]+linesper){
-              /* we completely overlap, making stack-1 irrelevant.  pop it */
-              stack--;
-              continue;
-            }
-          }
-          posstack[stack]=i;
-          ampstack[stack++]=seeds[i];
-          break;
-
-        }
-      }
-    }
-  }
-
-  /* the stack now contains only the positions that are relevant. Scan
-     'em straight through */
-
-  for(i=0;i<stack;i++){
-    long endpos;
-    if(i<stack-1 && ampstack[i+1]>ampstack[i]){
-      endpos=posstack[i+1];
-    }else{
-      endpos=posstack[i]+linesper+1; /* +1 is important, else bin 0 is
-                                        discarded in short frames */
-    }
-    if(endpos>n)endpos=n;
-    for(;pos<endpos;pos++)
-      seeds[pos]=ampstack[i];
-  }
-
-  /* there.  Linear time.  I now remember this was on a problem set I
-     had in Grad Skool... I didn't solve it at the time ;-) */
-
-}
-
-/* bleaugh, this is more complicated than it needs to be */
-#include<stdio.h>
-static void max_seeds(vorbis_look_psy *p,
-                      float *seed,
-                      float *flr){
-  long   n=p->total_octave_lines;
-  int    linesper=p->eighth_octave_lines;
-  long   linpos=0;
-  long   pos;
-
-  seed_chase(seed,linesper,n); /* for masking */
-
-  pos=p->octave[0]-p->firstoc-(linesper>>1);
-
-  while(linpos+1<p->n){
-    float minV=seed[pos];
-    long end=((p->octave[linpos]+p->octave[linpos+1])>>1)-p->firstoc;
-    if(minV>p->vi->tone_abs_limit)minV=p->vi->tone_abs_limit;
-    while(pos+1<=end){
-      pos++;
-      if((seed[pos]>NEGINF && seed[pos]<minV) || minV==NEGINF)
-        minV=seed[pos];
-    }
-
-    end=pos+p->firstoc;
-    for(;linpos<p->n && p->octave[linpos]<=end;linpos++)
-      if(flr[linpos]<minV)flr[linpos]=minV;
-  }
-
-  {
-    float minV=seed[p->total_octave_lines-1];
-    for(;linpos<p->n;linpos++)
-      if(flr[linpos]<minV)flr[linpos]=minV;
-  }
-
-}
-
-static void bark_noise_hybridmp(int n,const long *b,
-                                const float *f,
-                                float *noise,
-                                const float offset,
-                                const int fixed){
-
-  float *N=(float*) alloca(n*sizeof(*N));
-  float *X=(float*) alloca(n*sizeof(*N));
-  float *XX=(float*) alloca(n*sizeof(*N));
-  float *Y=(float*) alloca(n*sizeof(*N));
-  float *XY=(float*) alloca(n*sizeof(*N));
-
-  float tN, tX, tXX, tY, tXY;
-  int i;
-
-  int lo, hi;
-  float R=0.f;
-  float A=0.f;
-  float B=0.f;
-  float D=1.f;
-  float w, x, y;
-
-  tN = tX = tXX = tY = tXY = 0.f;
-
-  y = f[0] + offset;
-  if (y < 1.f) y = 1.f;
-
-  w = y * y * .5;
-
-  tN += w;
-  tX += w;
-  tY += w * y;
-
-  N[0] = tN;
-  X[0] = tX;
-  XX[0] = tXX;
-  Y[0] = tY;
-  XY[0] = tXY;
-
-  for (i = 1, x = 1.f; i < n; i++, x += 1.f) {
-
-    y = f[i] + offset;
-    if (y < 1.f) y = 1.f;
-
-    w = y * y;
-
-    tN += w;
-    tX += w * x;
-    tXX += w * x * x;
-    tY += w * y;
-    tXY += w * x * y;
-
-    N[i] = tN;
-    X[i] = tX;
-    XX[i] = tXX;
-    Y[i] = tY;
-    XY[i] = tXY;
-  }
-
-  for (i = 0, x = 0.f;; i++, x += 1.f) {
-
-    lo = b[i] >> 16;
-    if( lo>=0 ) break;
-    hi = b[i] & 0xffff;
-
-    tN = N[hi] + N[-lo];
-    tX = X[hi] - X[-lo];
-    tXX = XX[hi] + XX[-lo];
-    tY = Y[hi] + Y[-lo];
-    tXY = XY[hi] - XY[-lo];
-
-    A = tY * tXX - tX * tXY;
-    B = tN * tXY - tX * tY;
-    D = tN * tXX - tX * tX;
-    R = (A + x * B) / D;
-    if (R < 0.f)
-      R = 0.f;
-
-    noise[i] = R - offset;
-  }
-
-  for ( ;; i++, x += 1.f) {
-
-    lo = b[i] >> 16;
-    hi = b[i] & 0xffff;
-    if(hi>=n)break;
-
-    tN = N[hi] - N[lo];
-    tX = X[hi] - X[lo];
-    tXX = XX[hi] - XX[lo];
-    tY = Y[hi] - Y[lo];
-    tXY = XY[hi] - XY[lo];
-
-    A = tY * tXX - tX * tXY;
-    B = tN * tXY - tX * tY;
-    D = tN * tXX - tX * tX;
-    R = (A + x * B) / D;
-    if (R < 0.f) R = 0.f;
-
-    noise[i] = R - offset;
-  }
-  for ( ; i < n; i++, x += 1.f) {
-
-    R = (A + x * B) / D;
-    if (R < 0.f) R = 0.f;
-
-    noise[i] = R - offset;
-  }
-
-  if (fixed <= 0) return;
-
-  for (i = 0, x = 0.f;; i++, x += 1.f) {
-    hi = i + fixed / 2;
-    lo = hi - fixed;
-    if(lo>=0)break;
-
-    tN = N[hi] + N[-lo];
-    tX = X[hi] - X[-lo];
-    tXX = XX[hi] + XX[-lo];
-    tY = Y[hi] + Y[-lo];
-    tXY = XY[hi] - XY[-lo];
-
-
-    A = tY * tXX - tX * tXY;
-    B = tN * tXY - tX * tY;
-    D = tN * tXX - tX * tX;
-    R = (A + x * B) / D;
-
-    if (R - offset < noise[i]) noise[i] = R - offset;
-  }
-  for ( ;; i++, x += 1.f) {
-
-    hi = i + fixed / 2;
-    lo = hi - fixed;
-    if(hi>=n)break;
-
-    tN = N[hi] - N[lo];
-    tX = X[hi] - X[lo];
-    tXX = XX[hi] - XX[lo];
-    tY = Y[hi] - Y[lo];
-    tXY = XY[hi] - XY[lo];
-
-    A = tY * tXX - tX * tXY;
-    B = tN * tXY - tX * tY;
-    D = tN * tXX - tX * tX;
-    R = (A + x * B) / D;
-
-    if (R - offset < noise[i]) noise[i] = R - offset;
-  }
-  for ( ; i < n; i++, x += 1.f) {
-    R = (A + x * B) / D;
-    if (R - offset < noise[i]) noise[i] = R - offset;
-  }
-}
-
-void _vp_noisemask(vorbis_look_psy *p,
-                   float *logmdct,
-                   float *logmask){
-
-  int i,n=p->n;
-  float *work=(float*) alloca(n*sizeof(*work));
-
-  bark_noise_hybridmp(n,p->bark,logmdct,logmask,
-                      140.,-1);
-
-  for(i=0;i<n;i++)work[i]=logmdct[i]-logmask[i];
-
-  bark_noise_hybridmp(n,p->bark,work,logmask,0.,
-                      p->vi->noisewindowfixed);
-
-  for(i=0;i<n;i++)work[i]=logmdct[i]-work[i];
-
-#if 0
-  {
-    static int seq=0;
-
-    float work2[n];
-    for(i=0;i<n;i++){
-      work2[i]=logmask[i]+work[i];
-    }
-
-    if(seq&1)
-      _analysis_output("median2R",seq/2,work,n,1,0,0);
-    else
-      _analysis_output("median2L",seq/2,work,n,1,0,0);
-
-    if(seq&1)
-      _analysis_output("envelope2R",seq/2,work2,n,1,0,0);
-    else
-      _analysis_output("envelope2L",seq/2,work2,n,1,0,0);
-    seq++;
-  }
-#endif
-
-  for(i=0;i<n;i++){
-    int dB=logmask[i]+.5;
-    if(dB>=NOISE_COMPAND_LEVELS)dB=NOISE_COMPAND_LEVELS-1;
-    if(dB<0)dB=0;
-    logmask[i]= work[i]+p->vi->noisecompand[dB];
-  }
-
-}
-
-void _vp_tonemask(vorbis_look_psy *p,
-                  float *logfft,
-                  float *logmask,
-                  float global_specmax,
-                  float local_specmax){
-
-  int i,n=p->n;
-
-  float *seed=(float*) alloca(sizeof(*seed)*p->total_octave_lines);
-  float att=local_specmax+p->vi->ath_adjatt;
-  for(i=0;i<p->total_octave_lines;i++)seed[i]=NEGINF;
-
-  /* set the ATH (floating below localmax, not global max by a
-     specified att) */
-  if(att<p->vi->ath_maxatt)att=p->vi->ath_maxatt;
-
-  for(i=0;i<n;i++)
-    logmask[i]=p->ath[i]+att;
-
-  /* tone masking */
-  seed_loop(p,(const float ***)p->tonecurves,logfft,logmask,seed,global_specmax);
-  max_seeds(p,seed,logmask);
-
-}
-
-void _vp_offset_and_mix(vorbis_look_psy *p,
-                        float *noise,
-                        float *tone,
-                        int offset_select,
-                        float *logmask,
-                        float *mdct,
-                        float *logmdct){
-  int i,n=p->n;
-  float de, coeffi, cx;/* AoTuV */
-  float toneatt=p->vi->tone_masteratt[offset_select];
-
-  cx = p->m_val;
-
-  for(i=0;i<n;i++){
-    float val= noise[i]+p->noiseoffset[offset_select][i];
-    if(val>p->vi->noisemaxsupp)val=p->vi->noisemaxsupp;
-    logmask[i]=max(val,tone[i]+toneatt);
-
-
-    /* AoTuV */
-    /** @ M1 **
-        The following codes improve a noise problem.
-        A fundamental idea uses the value of masking and carries out
-        the relative compensation of the MDCT.
-        However, this code is not perfect and all noise problems cannot be solved.
-        by Aoyumi @ 2004/04/18
-    */
-
-    if(offset_select == 1) {
-      coeffi = -17.2;       /* coeffi is a -17.2dB threshold */
-      val = val - logmdct[i];  /* val == mdct line value relative to floor in dB */
-
-      if(val > coeffi){
-        /* mdct value is > -17.2 dB below floor */
-
-        de = 1.0-((val-coeffi)*0.005*cx);
-        /* pro-rated attenuation:
-           -0.00 dB boost if mdct value is -17.2dB (relative to floor)
-           -0.77 dB boost if mdct value is 0dB (relative to floor)
-           -1.64 dB boost if mdct value is +17.2dB (relative to floor)
-           etc... */
-
-        if(de < 0) de = 0.0001;
-      }else
-        /* mdct value is <= -17.2 dB below floor */
-
-        de = 1.0-((val-coeffi)*0.0003*cx);
-      /* pro-rated attenuation:
-         +0.00 dB atten if mdct value is -17.2dB (relative to floor)
-         +0.45 dB atten if mdct value is -34.4dB (relative to floor)
-         etc... */
-
-      mdct[i] *= de;
-
-    }
-  }
-}
-
-float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd){
-  vorbis_info *vi=vd->vi;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy_global *gi=&ci->psy_g_param;
-
-  int n=ci->blocksizes[vd->W]/2;
-  float secs=(float)n/vi->rate;
-
-  amp+=secs*gi->ampmax_att_per_sec;
-  if(amp<-9999)amp=-9999;
-  return(amp);
-}
-
-#if 0
-static float FLOOR1_fromdB_LOOKUP[256]={
-  1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F,
-  1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F,
-  1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F,
-  2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F,
-  2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F,
-  3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F,
-  4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F,
-  6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F,
-  7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F,
-  1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F,
-  1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F,
-  1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F,
-  2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F,
-  2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F,
-  3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F,
-  4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F,
-  5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F,
-  7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F,
-  9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F,
-  1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F,
-  1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F,
-  2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F,
-  2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F,
-  3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F,
-  4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F,
-  5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F,
-  7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F,
-  9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F,
-  0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F,
-  0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F,
-  0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F,
-  0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F,
-  0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F,
-  0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F,
-  0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F,
-  0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F,
-  0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F,
-  0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F,
-  0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F,
-  0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F,
-  0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F,
-  0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F,
-  0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F,
-  0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F,
-  0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F,
-  0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F,
-  0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F,
-  0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F,
-  0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F,
-  0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F,
-  0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F,
-  0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F,
-  0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F,
-  0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F,
-  0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F,
-  0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F,
-  0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F,
-  0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F,
-  0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F,
-  0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F,
-  0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F,
-  0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F,
-  0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F,
-  0.82788260F, 0.88168307F, 0.9389798F, 1.F,
-};
-#endif
-
-/* this is for per-channel noise normalization */
-static int apsort(const void *a, const void *b){
-  float f1=**(float**)a;
-  float f2=**(float**)b;
-  return (f1<f2)-(f1>f2);
-}
-
-static void flag_lossless(int limit, float prepoint, float postpoint, float *mdct,
-                         float *floor, int *flag, int i, int jn){
-  int j;
-  for(j=0;j<jn;j++){
-    float point = j>=limit-i ? postpoint : prepoint;
-    float r = fabs(mdct[j])/floor[j];
-    if(r<point)
-      flag[j]=0;
-    else
-      flag[j]=1;
-  }
-}
-
-/* Overload/Side effect: On input, the *q vector holds either the
-   quantized energy (for elements with the flag set) or the absolute
-   values of the *r vector (for elements with flag unset).  On output,
-   *q holds the quantized energy for all elements */
-static float noise_normalize(vorbis_look_psy *p, int limit, float *r, float *q, float *f, int *flags, float acc, int i, int n, int *out){
-
-  vorbis_info_psy *vi=p->vi;
-  float **sort = (float**)alloca(n*sizeof(*sort));
-  int j,count=0;
-  int start = (vi->normal_p ? vi->normal_start-i : n);
-  if(start>n)start=n;
-
-  /* force classic behavior where only energy in the current band is considered */
-  acc=0.f;
-
-  /* still responsible for populating *out where noise norm not in
-     effect.  There's no need to [re]populate *q in these areas */
-  for(j=0;j<start;j++){
-    if(!flags || !flags[j]){ /* lossless coupling already quantized.
-                                Don't touch; requantizing based on
-                                energy would be incorrect. */
-      float ve = q[j]/f[j];
-      if(r[j]<0)
-        out[j] = -rint(sqrt(ve));
-      else
-        out[j] = rint(sqrt(ve));
-    }
-  }
-
-  /* sort magnitudes for noise norm portion of partition */
-  for(;j<n;j++){
-    if(!flags || !flags[j]){ /* can't noise norm elements that have
-                                already been loslessly coupled; we can
-                                only account for their energy error */
-      float ve = q[j]/f[j];
-      /* Despite all the new, more capable coupling code, for now we
-         implement noise norm as it has been up to this point. Only
-         consider promotions to unit magnitude from 0.  In addition
-         the only energy error counted is quantizations to zero. */
-      /* also-- the original point code only applied noise norm at > pointlimit */
-      if(ve<.25f && (!flags || j>=limit-i)){
-        acc += ve;
-        sort[count++]=q+j; /* q is fabs(r) for unflagged element */
-      }else{
-        /* For now: no acc adjustment for nonzero quantization.  populate *out and q as this value is final. */
-        if(r[j]<0)
-          out[j] = -rint(sqrt(ve));
-        else
-          out[j] = rint(sqrt(ve));
-        q[j] = out[j]*out[j]*f[j];
-      }
-    }/* else{
-        again, no energy adjustment for error in nonzero quant-- for now
-        }*/
-  }
-
-  if(count){
-    /* noise norm to do */
-    qsort(sort,count,sizeof(*sort),apsort);
-    for(j=0;j<count;j++){
-      int k=sort[j]-q;
-      if(acc>=vi->normal_thresh){
-        out[k]=unitnorm(r[k]);
-        acc-=1.f;
-        q[k]=f[k];
-      }else{
-        out[k]=0;
-        q[k]=0.f;
-      }
-    }
-  }
-
-  return acc;
-}
-
-/* Noise normalization, quantization and coupling are not wholly
-   seperable processes in depth>1 coupling. */
-void _vp_couple_quantize_normalize(int blobno,
-                                   vorbis_info_psy_global *g,
-                                   vorbis_look_psy *p,
-                                   vorbis_info_mapping0 *vi,
-                                   float **mdct,
-                                   int   **iwork,
-                                   int    *nonzero,
-                                   int     sliding_lowpass,
-                                   int     ch){
-
-  int i;
-  int n = p->n;
-  int partition=(p->vi->normal_p ? p->vi->normal_partition : 16);
-  int limit = g->coupling_pointlimit[p->vi->blockflag][blobno];
-  float prepoint=stereo_threshholds[g->coupling_prepointamp[blobno]];
-  float postpoint=stereo_threshholds[g->coupling_postpointamp[blobno]];
-  //float de=0.1*p->m_val; /* a blend of the AoTuV M2 and M3 code here and below */
-
-  /* mdct is our raw mdct output, floor not removed. */
-  /* inout passes in the ifloor, passes back quantized result */
-
-  /* unquantized energy (negative indicates amplitude has negative sign) */
-  float **raw = (float**)alloca(ch*sizeof(*raw));
-
-  /* dual pupose; quantized energy (if flag set), othersize fabs(raw) */
-  float **quant = (float**)alloca(ch*sizeof(*quant));
-
-  /* floor energy */
-  float **floor = (float**)alloca(ch*sizeof(*floor));
-
-  /* flags indicating raw/quantized status of elements in raw vector */
-  int   **flag  = (int**)alloca(ch*sizeof(*flag));
-
-  /* non-zero flag working vector */
-  int    *nz    = (int*)alloca(ch*sizeof(*nz));
-
-  /* energy surplus/defecit tracking */
-  float  *acc   = (float*)alloca((ch+vi->coupling_steps)*sizeof(*acc));
-
-  /* The threshold of a stereo is changed with the size of n */
-  if(n > 1000)
-    postpoint=stereo_threshholds_limited[g->coupling_postpointamp[blobno]];
-
-  raw[0]   = (float*)alloca(ch*partition*sizeof(**raw));
-  quant[0] = (float*)alloca(ch*partition*sizeof(**quant));
-  floor[0] = (float*)alloca(ch*partition*sizeof(**floor));
-  flag[0]  = (int*)alloca(ch*partition*sizeof(**flag));
-
-  for(i=1;i<ch;i++){
-    raw[i]   = &raw[0][partition*i];
-    quant[i] = &quant[0][partition*i];
-    floor[i] = &floor[0][partition*i];
-    flag[i]  = &flag[0][partition*i];
-  }
-  for(i=0;i<ch+vi->coupling_steps;i++)
-    acc[i]=0.f;
-
-  for(i=0;i<n;i+=partition){
-    int k,j,jn = partition > n-i ? n-i : partition;
-    int step,track = 0;
-
-    memcpy(nz,nonzero,sizeof(*nz)*ch);
-
-    /* prefill */
-    memset(flag[0],0,ch*partition*sizeof(**flag));
-    for(k=0;k<ch;k++){
-      int *iout = &iwork[k][i];
-      if(nz[k]){
-
-        for(j=0;j<jn;j++)
-          floor[k][j] = FLOOR1_fromdB_LOOKUP[iout[j]];
-
-        flag_lossless(limit,prepoint,postpoint,&mdct[k][i],floor[k],flag[k],i,jn);
-
-        for(j=0;j<jn;j++){
-          quant[k][j] = raw[k][j] = mdct[k][i+j]*mdct[k][i+j];
-          if(mdct[k][i+j]<0.f) raw[k][j]*=-1.f;
-          floor[k][j]*=floor[k][j];
-        }
-
-        acc[track]=noise_normalize(p,limit,raw[k],quant[k],floor[k],NULL,acc[track],i,jn,iout);
-
-      }else{
-        for(j=0;j<jn;j++){
-          floor[k][j] = 1e-10f;
-          raw[k][j] = 0.f;
-          quant[k][j] = 0.f;
-          flag[k][j] = 0;
-          iout[j]=0;
-        }
-        acc[track]=0.f;
-      }
-      track++;
-    }
-
-    /* coupling */
-    for(step=0;step<vi->coupling_steps;step++){
-      int Mi = vi->coupling_mag[step];
-      int Ai = vi->coupling_ang[step];
-      int *iM = &iwork[Mi][i];
-      int *iA = &iwork[Ai][i];
-      float *reM = raw[Mi];
-      float *reA = raw[Ai];
-      float *qeM = quant[Mi];
-      float *qeA = quant[Ai];
-      float *floorM = floor[Mi];
-      float *floorA = floor[Ai];
-      int *fM = flag[Mi];
-      int *fA = flag[Ai];
-
-      if(nz[Mi] || nz[Ai]){
-        nz[Mi] = nz[Ai] = 1;
-
-        for(j=0;j<jn;j++){
-
-          if(j<sliding_lowpass-i){
-            if(fM[j] || fA[j]){
-              /* lossless coupling */
-
-              reM[j] = fabs(reM[j])+fabs(reA[j]);
-              qeM[j] = qeM[j]+qeA[j];
-              fM[j]=fA[j]=1;
-
-              /* couple iM/iA */
-              {
-                int A = iM[j];
-                int B = iA[j];
-
-                if(abs(A)>abs(B)){
-                  iA[j]=(A>0?A-B:B-A);
-                }else{
-                  iA[j]=(B>0?A-B:B-A);
-                  iM[j]=B;
-                }
-
-                /* collapse two equivalent tuples to one */
-                if(iA[j]>=abs(iM[j])*2){
-                  iA[j]= -iA[j];
-                  iM[j]= -iM[j];
-                }
-
-              }
-
-            }else{
-              /* lossy (point) coupling */
-              if(j<limit-i){
-                /* dipole */
-                reM[j] += reA[j];
-                qeM[j] = fabs(reM[j]);
-              }else{
-                /* AoTuV */
-                /** @ M2 **
-                    The boost problem by the combination of noise normalization and point stereo is eased.
-                    However, this is a temporary patch.
-                    by Aoyumi @ 2004/04/18
-                */
-                /*float derate = (1.0 - de*((float)(j-limit+i) / (float)(n-limit)));*/
-                /* elliptical
-                if(reM[j]+reA[j]<0){
-                  reM[j] = - (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate);
-                }else{
-                  reM[j] =   (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate);
-                  }*/
-
-                /* elliptical */
-                if(reM[j]+reA[j]<0){
-                  reM[j] = - (qeM[j] = fabs(reM[j])+fabs(reA[j]));
-                }else{
-                  reM[j] =   (qeM[j] = fabs(reM[j])+fabs(reA[j]));
-                }
-
-
-              }
-              reA[j]=qeA[j]=0.f;
-              fA[j]=1;
-              iA[j]=0;
-            }
-          }
-          floorM[j]=floorA[j]=floorM[j]+floorA[j];
-        }
-        /* normalize the resulting mag vector */
-        acc[track]=noise_normalize(p,limit,raw[Mi],quant[Mi],floor[Mi],flag[Mi],acc[track],i,jn,iM);
-        track++;
-      }
-    }
-  }
-
-  for(i=0;i<vi->coupling_steps;i++){
-    /* make sure coupling a zero and a nonzero channel results in two
-       nonzero channels. */
-    if(nonzero[vi->coupling_mag[i]] ||
-       nonzero[vi->coupling_ang[i]]){
-      nonzero[vi->coupling_mag[i]]=1;
-      nonzero[vi->coupling_ang[i]]=1;
-    }
-  }
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h
deleted file mode 100644
index fd7201f..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/psy.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: random psychoacoustics (not including preecho)
- last mod: $Id: psy.h 16946 2010-03-03 16:12:40Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_PSY_H_
-#define _V_PSY_H_
-#include "smallft.h"
-
-#include "backends.h"
-#include "envelope.h"
-
-#ifndef EHMER_MAX
-#define EHMER_MAX 56
-#endif
-
-/* psychoacoustic setup ********************************************/
-#define P_BANDS 17      /* 62Hz to 16kHz */
-#define P_LEVELS 8      /* 30dB to 100dB */
-#define P_LEVEL_0 30.    /* 30 dB */
-#define P_NOISECURVES 3
-
-#define NOISE_COMPAND_LEVELS 40
-typedef struct vorbis_info_psy{
-  int   blockflag;
-
-  float ath_adjatt;
-  float ath_maxatt;
-
-  float tone_masteratt[P_NOISECURVES];
-  float tone_centerboost;
-  float tone_decay;
-  float tone_abs_limit;
-  float toneatt[P_BANDS];
-
-  int noisemaskp;
-  float noisemaxsupp;
-  float noisewindowlo;
-  float noisewindowhi;
-  int   noisewindowlomin;
-  int   noisewindowhimin;
-  int   noisewindowfixed;
-  float noiseoff[P_NOISECURVES][P_BANDS];
-  float noisecompand[NOISE_COMPAND_LEVELS];
-
-  float max_curve_dB;
-
-  int normal_p;
-  int normal_start;
-  int normal_partition;
-  double normal_thresh;
-} vorbis_info_psy;
-
-typedef struct{
-  int   eighth_octave_lines;
-
-  /* for block long/short tuning; encode only */
-  float preecho_thresh[VE_BANDS];
-  float postecho_thresh[VE_BANDS];
-  float stretch_penalty;
-  float preecho_minenergy;
-
-  float ampmax_att_per_sec;
-
-  /* channel coupling config */
-  int   coupling_pkHz[PACKETBLOBS];
-  int   coupling_pointlimit[2][PACKETBLOBS];
-  int   coupling_prepointamp[PACKETBLOBS];
-  int   coupling_postpointamp[PACKETBLOBS];
-  int   sliding_lowpass[2][PACKETBLOBS];
-
-} vorbis_info_psy_global;
-
-typedef struct {
-  float ampmax;
-  int   channels;
-
-  vorbis_info_psy_global *gi;
-  int   coupling_pointlimit[2][P_NOISECURVES];
-} vorbis_look_psy_global;
-
-
-typedef struct {
-  int n;
-  struct vorbis_info_psy *vi;
-
-  float ***tonecurves;
-  float **noiseoffset;
-
-  float *ath;
-  long  *octave;             /* in n.ocshift format */
-  long  *bark;
-
-  long  firstoc;
-  long  shiftoc;
-  int   eighth_octave_lines; /* power of two, please */
-  int   total_octave_lines;
-  long  rate; /* cache it */
-
-  float m_val; /* Masking compensation value */
-
-} vorbis_look_psy;
-
-extern void   _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
-                           vorbis_info_psy_global *gi,int n,long rate);
-extern void   _vp_psy_clear(vorbis_look_psy *p);
-extern void  *_vi_psy_dup(void *source);
-
-extern void   _vi_psy_free(vorbis_info_psy *i);
-extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i);
-
-extern void _vp_noisemask(vorbis_look_psy *p,
-                          float *logmdct,
-                          float *logmask);
-
-extern void _vp_tonemask(vorbis_look_psy *p,
-                         float *logfft,
-                         float *logmask,
-                         float global_specmax,
-                         float local_specmax);
-
-extern void _vp_offset_and_mix(vorbis_look_psy *p,
-                               float *noise,
-                               float *tone,
-                               int offset_select,
-                               float *logmask,
-                               float *mdct,
-                               float *logmdct);
-
-extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd);
-
-extern void _vp_couple_quantize_normalize(int blobno,
-                                          vorbis_info_psy_global *g,
-                                          vorbis_look_psy *p,
-                                          vorbis_info_mapping0 *vi,
-                                          float **mdct,
-                                          int   **iwork,
-                                          int    *nonzero,
-                                          int     sliding_lowpass,
-                                          int     ch);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.c
deleted file mode 100644
index c783878..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: registry for time, floor, res backends and channel mappings
- last mod: $Id: registry.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "misc.h"
-/* seems like major overkill now; the backend numbers will grow into
-   the infrastructure soon enough */
-
-extern const vorbis_func_floor     floor0_exportbundle;
-extern const vorbis_func_floor     floor1_exportbundle;
-extern const vorbis_func_residue   residue0_exportbundle;
-extern const vorbis_func_residue   residue1_exportbundle;
-extern const vorbis_func_residue   residue2_exportbundle;
-extern const vorbis_func_mapping   mapping0_exportbundle;
-
-const vorbis_func_floor     *const _floor_P[]={
-  &floor0_exportbundle,
-  &floor1_exportbundle,
-};
-
-const vorbis_func_residue   *const _residue_P[]={
-  &residue0_exportbundle,
-  &residue1_exportbundle,
-  &residue2_exportbundle,
-};
-
-const vorbis_func_mapping   *const _mapping_P[]={
-  &mapping0_exportbundle,
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h
deleted file mode 100644
index 3c2497f..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/registry.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: registry for time, floor, res backends and channel mappings
- last mod: $Id: registry.h 15531 2008-11-24 23:50:06Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_REG_H_
-#define _V_REG_H_
-
-#define VI_TRANSFORMB 1
-#define VI_WINDOWB 1
-#define VI_TIMEB 1
-#define VI_FLOORB 2
-#define VI_RESB 3
-#define VI_MAPB 1
-
-extern const vorbis_func_floor     *const _floor_P[];
-extern const vorbis_func_residue   *const _residue_P[];
-extern const vorbis_func_mapping   *const _mapping_P[];
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c
deleted file mode 100644
index 67cfe13..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/res0.c
+++ /dev/null
@@ -1,891 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: residue backend 0, 1 and 2 implementation
- last mod: $Id: res0.c 17556 2010-10-21 18:25:19Z tterribe $
-
- ********************************************************************/
-
-/* Slow, slow, slow, simpleminded and did I mention it was slow?  The
-   encode/decode loops are coded for clarity and performance is not
-   yet even a nagging little idea lurking in the shadows.  Oh and BTW,
-   it's slow. */
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "codebook.h"
-#include "misc.h"
-#include "os.h"
-
-//#define TRAIN_RES 1
-//#define TRAIN_RESAUX 1
-
-#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
-#include <stdio.h>
-#endif
-
-typedef struct {
-  vorbis_info_residue0 *info;
-
-  int         parts;
-  int         stages;
-  codebook   *fullbooks;
-  codebook   *phrasebook;
-  codebook ***partbooks;
-
-  int         partvals;
-  int       **decodemap;
-
-  long      postbits;
-  long      phrasebits;
-  long      frames;
-
-#if defined(TRAIN_RES) || defined(TRAIN_RESAUX)
-  int        train_seq;
-  long      *training_data[8][64];
-  float      training_max[8][64];
-  float      training_min[8][64];
-  float     tmin;
-  float     tmax;
-  int       submap;
-#endif
-
-} vorbis_look_residue0;
-
-static void res0_free_info(vorbis_info_residue *i){
-  vorbis_info_residue0 *info=(vorbis_info_residue0 *)i;
-  if(info){
-    memset(info,0,sizeof(*info));
-    _ogg_free(info);
-  }
-}
-
-static void res0_free_look(vorbis_look_residue *i){
-  int j;
-  if(i){
-
-    vorbis_look_residue0 *look=(vorbis_look_residue0 *)i;
-
-#ifdef TRAIN_RES
-    {
-      int j,k,l;
-      for(j=0;j<look->parts;j++){
-        /*fprintf(stderr,"partition %d: ",j);*/
-        for(k=0;k<8;k++)
-          if(look->training_data[k][j]){
-            char buffer[80];
-            FILE *of;
-            codebook *statebook=look->partbooks[j][k];
-
-            /* long and short into the same bucket by current convention */
-            sprintf(buffer,"res_sub%d_part%d_pass%d.vqd",look->submap,j,k);
-            of=fopen(buffer,"a");
-
-            for(l=0;l<statebook->entries;l++)
-              fprintf(of,"%d:%ld\n",l,look->training_data[k][j][l]);
-
-            fclose(of);
-
-            /*fprintf(stderr,"%d(%.2f|%.2f) ",k,
-              look->training_min[k][j],look->training_max[k][j]);*/
-
-            _ogg_free(look->training_data[k][j]);
-            look->training_data[k][j]=NULL;
-          }
-        /*fprintf(stderr,"\n");*/
-      }
-    }
-    fprintf(stderr,"min/max residue: %g::%g\n",look->tmin,look->tmax);
-
-    /*fprintf(stderr,"residue bit usage %f:%f (%f total)\n",
-            (float)look->phrasebits/look->frames,
-            (float)look->postbits/look->frames,
-            (float)(look->postbits+look->phrasebits)/look->frames);*/
-#endif
-
-
-    /*vorbis_info_residue0 *info=look->info;
-
-    fprintf(stderr,
-            "%ld frames encoded in %ld phrasebits and %ld residue bits "
-            "(%g/frame) \n",look->frames,look->phrasebits,
-            look->resbitsflat,
-            (look->phrasebits+look->resbitsflat)/(float)look->frames);
-
-    for(j=0;j<look->parts;j++){
-      long acc=0;
-      fprintf(stderr,"\t[%d] == ",j);
-      for(k=0;k<look->stages;k++)
-        if((info->secondstages[j]>>k)&1){
-          fprintf(stderr,"%ld,",look->resbits[j][k]);
-          acc+=look->resbits[j][k];
-        }
-
-      fprintf(stderr,":: (%ld vals) %1.2fbits/sample\n",look->resvals[j],
-              acc?(float)acc/(look->resvals[j]*info->grouping):0);
-    }
-    fprintf(stderr,"\n");*/
-
-    for(j=0;j<look->parts;j++)
-      if(look->partbooks[j])_ogg_free(look->partbooks[j]);
-    _ogg_free(look->partbooks);
-    for(j=0;j<look->partvals;j++)
-      _ogg_free(look->decodemap[j]);
-    _ogg_free(look->decodemap);
-
-    memset(look,0,sizeof(*look));
-    _ogg_free(look);
-  }
-}
-
-#if 0
-static int ilog(unsigned int v){
-  int ret=0;
-  while(v){
-    ret++;
-    v>>=1;
-  }
-  return(ret);
-}
-#endif
-
-static int icount(unsigned int v){
-  int ret=0;
-  while(v){
-    ret+=v&1;
-    v>>=1;
-  }
-  return(ret);
-}
-
-
-static void res0_pack(vorbis_info_residue *vr,oggpack_buffer *opb){
-  vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
-  int j,acc=0;
-  oggpack_write(opb,info->begin,24);
-  oggpack_write(opb,info->end,24);
-
-  oggpack_write(opb,info->grouping-1,24);  /* residue vectors to group and
-                                             code with a partitioned book */
-  oggpack_write(opb,info->partitions-1,6); /* possible partition choices */
-  oggpack_write(opb,info->groupbook,8);  /* group huffman book */
-
-  /* secondstages is a bitmask; as encoding progresses pass by pass, a
-     bitmask of one indicates this partition class has bits to write
-     this pass */
-  for(j=0;j<info->partitions;j++){
-    if(ilog(info->secondstages[j])>3){
-      /* yes, this is a minor hack due to not thinking ahead */
-      oggpack_write(opb,info->secondstages[j],3);
-      oggpack_write(opb,1,1);
-      oggpack_write(opb,info->secondstages[j]>>3,5);
-    }else
-      oggpack_write(opb,info->secondstages[j],4); /* trailing zero */
-    acc+=icount(info->secondstages[j]);
-  }
-  for(j=0;j<acc;j++)
-    oggpack_write(opb,info->booklist[j],8);
-
-}
-
-/* vorbis_info is for range checking */
-static vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){
-  int j,acc=0;
-  vorbis_info_residue0 *info=(vorbis_info_residue0*) _ogg_calloc(1,sizeof(*info));
-  codec_setup_info     *ci=(codec_setup_info*) vi->codec_setup;
-
-  info->begin=oggpack_read(opb,24);
-  info->end=oggpack_read(opb,24);
-  info->grouping=oggpack_read(opb,24)+1;
-  info->partitions=oggpack_read(opb,6)+1;
-  info->groupbook=oggpack_read(opb,8);
-
-  /* check for premature EOP */
-  if(info->groupbook<0)goto errout;
-
-  for(j=0;j<info->partitions;j++){
-    int cascade=oggpack_read(opb,3);
-    int cflag=oggpack_read(opb,1);
-    if(cflag<0) goto errout;
-    if(cflag){
-      int c=oggpack_read(opb,5);
-      if(c<0) goto errout;
-      cascade|=(c<<3);
-    }
-    info->secondstages[j]=cascade;
-
-    acc+=icount(cascade);
-  }
-  for(j=0;j<acc;j++){
-    int book=oggpack_read(opb,8);
-    if(book<0) goto errout;
-    info->booklist[j]=book;
-  }
-
-  if(info->groupbook>=ci->books)goto errout;
-  for(j=0;j<acc;j++){
-    if(info->booklist[j]>=ci->books)goto errout;
-    if(ci->book_param[info->booklist[j]]->maptype==0)goto errout;
-  }
-
-  /* verify the phrasebook is not specifying an impossible or
-     inconsistent partitioning scheme. */
-  /* modify the phrasebook ranging check from r16327; an early beta
-     encoder had a bug where it used an oversized phrasebook by
-     accident.  These files should continue to be playable, but don't
-     allow an exploit */
-  {
-    int entries = ci->book_param[info->groupbook]->entries;
-    int dim = ci->book_param[info->groupbook]->dim;
-    int partvals = 1;
-    if (dim<1) goto errout;
-    while(dim>0){
-      partvals *= info->partitions;
-      if(partvals > entries) goto errout;
-      dim--;
-    }
-    info->partvals = partvals;
-  }
-
-  return(info);
- errout:
-  res0_free_info(info);
-  return(NULL);
-}
-
-static vorbis_look_residue *res0_look(vorbis_dsp_state *vd,
-                               vorbis_info_residue *vr){
-  vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
-  vorbis_look_residue0 *look=(vorbis_look_residue0 *)_ogg_calloc(1,sizeof(*look));
-  codec_setup_info     *ci=(codec_setup_info*)vd->vi->codec_setup;
-
-  int j,k,acc=0;
-  int dim;
-  int maxstage=0;
-  look->info=info;
-
-  look->parts=info->partitions;
-  look->fullbooks=ci->fullbooks;
-  look->phrasebook=ci->fullbooks+info->groupbook;
-  dim=look->phrasebook->dim;
-
-  look->partbooks=(codebook***)_ogg_calloc(look->parts,sizeof(*look->partbooks));
-
-  for(j=0;j<look->parts;j++){
-    int stages=ilog(info->secondstages[j]);
-    if(stages){
-      if(stages>maxstage)maxstage=stages;
-      look->partbooks[j]=(codebook**) _ogg_calloc(stages,sizeof(*look->partbooks[j]));
-      for(k=0;k<stages;k++)
-        if(info->secondstages[j]&(1<<k)){
-          look->partbooks[j][k]=ci->fullbooks+info->booklist[acc++];
-#ifdef TRAIN_RES
-          look->training_data[k][j]=_ogg_calloc(look->partbooks[j][k]->entries,
-                                           sizeof(***look->training_data));
-#endif
-        }
-    }
-  }
-
-  look->partvals=1;
-  for(j=0;j<dim;j++)
-      look->partvals*=look->parts;
-
-  look->stages=maxstage;
-  look->decodemap=(int**)_ogg_malloc(look->partvals*sizeof(*look->decodemap));
-  for(j=0;j<look->partvals;j++){
-    long val=j;
-    long mult=look->partvals/look->parts;
-    look->decodemap[j]=(int*)_ogg_malloc(dim*sizeof(*look->decodemap[j]));
-    for(k=0;k<dim;k++){
-      long deco=val/mult;
-      val-=deco*mult;
-      mult/=look->parts;
-      look->decodemap[j][k]=deco;
-    }
-  }
-#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
-  {
-    static int train_seq=0;
-    look->train_seq=train_seq++;
-  }
-#endif
-  return(look);
-}
-
-/* break an abstraction and copy some code for performance purposes */
-static int local_book_besterror(codebook *book,int *a){
-  int dim=book->dim;
-  int i,j,o;
-  int minval=book->minval;
-  int del=book->delta;
-  int qv=book->quantvals;
-  int ze=(qv>>1);
-  int index=0;
-  /* assumes integer/centered encoder codebook maptype 1 no more than dim 8 */
-  int p[8]={0,0,0,0,0,0,0,0};
-
-  if(del!=1){
-    for(i=0,o=dim;i<dim;i++){
-      int v = (a[--o]-minval+(del>>1))/del;
-      int m = (v<ze ? ((ze-v)<<1)-1 : ((v-ze)<<1));
-      index = index*qv+ (m<0?0:(m>=qv?qv-1:m));
-      p[o]=v*del+minval;
-    }
-  }else{
-    for(i=0,o=dim;i<dim;i++){
-      int v = a[--o]-minval;
-      int m = (v<ze ? ((ze-v)<<1)-1 : ((v-ze)<<1));
-      index = index*qv+ (m<0?0:(m>=qv?qv-1:m));
-      p[o]=v*del+minval;
-    }
-  }
-
-  if(book->c->lengthlist[index]<=0){
-    const static_codebook *c=book->c;
-    int best=-1;
-    /* assumes integer/centered encoder codebook maptype 1 no more than dim 8 */
-    int e[8]={0,0,0,0,0,0,0,0};
-    int maxval = book->minval + book->delta*(book->quantvals-1);
-    for(i=0;i<book->entries;i++){
-      if(c->lengthlist[i]>0){
-        int thisx=0;
-        for(j=0;j<dim;j++){
-          int val=(e[j]-a[j]);
-          thisx+=val*val;
-        }
-        if(best==-1 || thisx<best){
-          memcpy(p,e,sizeof(p));
-          best=thisx;
-          index=i;
-        }
-      }
-      /* assumes the value patterning created by the tools in vq/ */
-      j=0;
-      while(e[j]>=maxval)
-        e[j++]=0;
-      if(e[j]>=0)
-        e[j]+=book->delta;
-      e[j]= -e[j];
-    }
-  }
-
-  if(index>-1){
-    for(i=0;i<dim;i++)
-      *a++ -= p[i];
-  }
-
-  return(index);
-}
-
-static int _encodepart(oggpack_buffer *opb,int *vec, int n,
-                       codebook *book,long* /* acc */){
-  int i,bits=0;
-  int dim=book->dim;
-  int step=n/dim;
-
-  for(i=0;i<step;i++){
-    int entry=local_book_besterror(book,vec+i*dim);
-
-#ifdef TRAIN_RES
-    if(entry>=0)
-      acc[entry]++;
-#endif
-
-    bits+=vorbis_book_encode(book,entry,opb);
-
-  }
-
-  return(bits);
-}
-
-static long **_01class(vorbis_block *vb,vorbis_look_residue *vl,
-                       int **in,int ch){
-  long i,j,k;
-  vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
-  vorbis_info_residue0 *info=look->info;
-
-  /* move all this setup out later */
-  int samples_per_partition=info->grouping;
-  int possible_partitions=info->partitions;
-  int n=info->end-info->begin;
-
-  int partvals=n/samples_per_partition;
-  long **partword=(long**)_vorbis_block_alloc(vb,ch*sizeof(*partword));
-  float scale=100.0f/samples_per_partition;
-
-  /* we find the partition type for each partition of each
-     channel.  We'll go back and do the interleaved encoding in a
-     bit.  For now, clarity */
-
-  for(i=0;i<ch;i++){
-    partword[i]=(long*)_vorbis_block_alloc(vb,n/samples_per_partition*sizeof(*partword[i]));
-    memset(partword[i],0,n/samples_per_partition*sizeof(*partword[i]));
-  }
-
-  for(i=0;i<partvals;i++){
-    int offset=i*samples_per_partition+info->begin;
-    for(j=0;j<ch;j++){
-      int max=0;
-      int ent=0;
-      for(k=0;k<samples_per_partition;k++){
-        if(abs(in[j][offset+k])>max)max=abs(in[j][offset+k]);
-        ent+=abs(in[j][offset+k]);
-      }
-      ent*=scale;
-
-      for(k=0;k<possible_partitions-1;k++)
-        if(max<=info->classmetric1[k] &&
-           (info->classmetric2[k]<0 || ent<info->classmetric2[k]))
-          break;
-
-      partword[j][i]=k;
-    }
-  }
-
-#ifdef TRAIN_RESAUX
-  {
-    FILE *of;
-    char buffer[80];
-
-    for(i=0;i<ch;i++){
-      sprintf(buffer,"resaux_%d.vqd",look->train_seq);
-      of=fopen(buffer,"a");
-      for(j=0;j<partvals;j++)
-        fprintf(of,"%ld, ",partword[i][j]);
-      fprintf(of,"\n");
-      fclose(of);
-    }
-  }
-#endif
-  look->frames++;
-
-  return(partword);
-}
-
-/* designed for stereo or other modes where the partition size is an
-   integer multiple of the number of channels encoded in the current
-   submap */
-static long **_2class(vorbis_block *vb,vorbis_look_residue *vl,int **in,
-                      int ch){
-  long i,j,k,l;
-  vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
-  vorbis_info_residue0 *info=look->info;
-
-  /* move all this setup out later */
-  int samples_per_partition=info->grouping;
-  int possible_partitions=info->partitions;
-  int n=info->end-info->begin;
-
-  int partvals=n/samples_per_partition;
-  long **partword=(long**)_vorbis_block_alloc(vb,sizeof(*partword));
-
-#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
-  FILE *of;
-  char buffer[80];
-#endif
-
-  partword[0]=(long*)_vorbis_block_alloc(vb,partvals*sizeof(*partword[0]));
-  memset(partword[0],0,partvals*sizeof(*partword[0]));
-
-  for(i=0,l=info->begin/ch;i<partvals;i++){
-    int magmax=0;
-    int angmax=0;
-    for(j=0;j<samples_per_partition;j+=ch){
-      if(abs(in[0][l])>magmax)magmax=abs(in[0][l]);
-      for(k=1;k<ch;k++)
-        if(abs(in[k][l])>angmax)angmax=abs(in[k][l]);
-      l++;
-    }
-
-    for(j=0;j<possible_partitions-1;j++)
-      if(magmax<=info->classmetric1[j] &&
-         angmax<=info->classmetric2[j])
-        break;
-
-    partword[0][i]=j;
-
-  }
-
-#ifdef TRAIN_RESAUX
-  sprintf(buffer,"resaux_%d.vqd",look->train_seq);
-  of=fopen(buffer,"a");
-  for(i=0;i<partvals;i++)
-    fprintf(of,"%ld, ",partword[0][i]);
-  fprintf(of,"\n");
-  fclose(of);
-#endif
-
-  look->frames++;
-
-  return(partword);
-}
-
-static int _01forward(oggpack_buffer *opb,
-                      vorbis_block*, vorbis_look_residue *vl,
-                      int **in,int ch,
-                      long **partword,
-                      int (*encode)(oggpack_buffer *,int *,int,
-                                    codebook *,long *),
-                      int /* submap */){
-  long i,j,k,s;
-  vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
-  vorbis_info_residue0 *info=look->info;
-
-#ifdef TRAIN_RES
-  look->submap=submap;
-#endif
-
-  /* move all this setup out later */
-  int samples_per_partition=info->grouping;
-  int possible_partitions=info->partitions;
-  int partitions_per_word=look->phrasebook->dim;
-  int n=info->end-info->begin;
-
-  int partvals=n/samples_per_partition;
-  long resbits[128];
-  long resvals[128];
-
-#ifdef TRAIN_RES
-  for(i=0;i<ch;i++)
-    for(j=info->begin;j<info->end;j++){
-      if(in[i][j]>look->tmax)look->tmax=in[i][j];
-      if(in[i][j]<look->tmin)look->tmin=in[i][j];
-    }
-#endif
-
-  memset(resbits,0,sizeof(resbits));
-  memset(resvals,0,sizeof(resvals));
-
-  /* we code the partition words for each channel, then the residual
-     words for a partition per channel until we've written all the
-     residual words for that partition word.  Then write the next
-     partition channel words... */
-
-  for(s=0;s<look->stages;s++){
-
-    for(i=0;i<partvals;){
-
-      /* first we encode a partition codeword for each channel */
-      if(s==0){
-        for(j=0;j<ch;j++){
-          long val=partword[j][i];
-          for(k=1;k<partitions_per_word;k++){
-            val*=possible_partitions;
-            if(i+k<partvals)
-              val+=partword[j][i+k];
-          }
-
-          /* training hack */
-          if(val<look->phrasebook->entries)
-            look->phrasebits+=vorbis_book_encode(look->phrasebook,val,opb);
-#if 0 /*def TRAIN_RES*/
-          else
-            fprintf(stderr,"!");
-#endif
-
-        }
-      }
-
-      /* now we encode interleaved residual values for the partitions */
-      for(k=0;k<partitions_per_word && i<partvals;k++,i++){
-        long offset=i*samples_per_partition+info->begin;
-
-        for(j=0;j<ch;j++){
-          if(s==0)resvals[partword[j][i]]+=samples_per_partition;
-          if(info->secondstages[partword[j][i]]&(1<<s)){
-            codebook *statebook=look->partbooks[partword[j][i]][s];
-            if(statebook){
-              int ret;
-              long *accumulator=NULL;
-
-#ifdef TRAIN_RES
-              accumulator=look->training_data[s][partword[j][i]];
-              {
-                int l;
-                int *samples=in[j]+offset;
-                for(l=0;l<samples_per_partition;l++){
-                  if(samples[l]<look->training_min[s][partword[j][i]])
-                    look->training_min[s][partword[j][i]]=samples[l];
-                  if(samples[l]>look->training_max[s][partword[j][i]])
-                    look->training_max[s][partword[j][i]]=samples[l];
-                }
-              }
-#endif
-
-              ret=encode(opb,in[j]+offset,samples_per_partition,
-                         statebook,accumulator);
-
-              look->postbits+=ret;
-              resbits[partword[j][i]]+=ret;
-            }
-          }
-        }
-      }
-    }
-  }
-
-  /*{
-    long total=0;
-    long totalbits=0;
-    fprintf(stderr,"%d :: ",vb->mode);
-    for(k=0;k<possible_partitions;k++){
-    fprintf(stderr,"%ld/%1.2g, ",resvals[k],(float)resbits[k]/resvals[k]);
-    total+=resvals[k];
-    totalbits+=resbits[k];
-    }
-
-    fprintf(stderr,":: %ld:%1.2g\n",total,(double)totalbits/total);
-    }*/
-
-  return(0);
-}
-
-/* a truncated packet here just means 'stop working'; it's not an error */
-static int _01inverse(vorbis_block *vb,vorbis_look_residue *vl,
-                      float **in,int ch,
-                      long (*decodepart)(codebook *, float *,
-                                         oggpack_buffer *,int)){
-
-  long i,j,k,l,s;
-  vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
-  vorbis_info_residue0 *info=look->info;
-
-  /* move all this setup out later */
-  int samples_per_partition=info->grouping;
-  int partitions_per_word=look->phrasebook->dim;
-  int max=vb->pcmend>>1;
-  int end=(info->end<max?info->end:max);
-  int n=end-info->begin;
-
-  if(n>0){
-    int partvals=n/samples_per_partition;
-    int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
-  int ***partword=(int***)alloca(ch*sizeof(*partword));
-
-    for(j=0;j<ch;j++)
-    partword[j]=(int**)_vorbis_block_alloc(vb,partwords*sizeof(*partword[j]));
-
-    for(s=0;s<look->stages;s++){
-
-      /* each loop decodes on partition codeword containing
-         partitions_per_word partitions */
-      for(i=0,l=0;i<partvals;l++){
-        if(s==0){
-          /* fetch the partition word for each channel */
-          for(j=0;j<ch;j++){
-            int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
-
-            if(temp==-1 || temp>=info->partvals)goto eopbreak;
-            partword[j][l]=look->decodemap[temp];
-            if(partword[j][l]==NULL)goto errout;
-          }
-        }
-
-        /* now we decode residual values for the partitions */
-        for(k=0;k<partitions_per_word && i<partvals;k++,i++)
-          for(j=0;j<ch;j++){
-            long offset=info->begin+i*samples_per_partition;
-            if(info->secondstages[partword[j][l][k]]&(1<<s)){
-              codebook *stagebook=look->partbooks[partword[j][l][k]][s];
-              if(stagebook){
-                if(decodepart(stagebook,in[j]+offset,&vb->opb,
-                              samples_per_partition)==-1)goto eopbreak;
-              }
-            }
-          }
-      }
-    }
-  }
- errout:
- eopbreak:
-  return(0);
-}
-
-static int res0_inverse(vorbis_block *vb,vorbis_look_residue *vl,
-                 float **in,int *nonzero,int ch){
-  int i,used=0;
-  for(i=0;i<ch;i++)
-    if(nonzero[i])
-      in[used++]=in[i];
-  if(used)
-    return(_01inverse(vb,vl,in,used,vorbis_book_decodevs_add));
-  else
-    return(0);
-}
-
-static int res1_forward(oggpack_buffer *opb,vorbis_block *vb,vorbis_look_residue *vl,
-                 int **in,int *nonzero,int ch, long **partword, int submap){
-  int i,used=0;
-  for(i=0;i<ch;i++)
-    if(nonzero[i])
-      in[used++]=in[i];
-
-  if(used){
-    return _01forward(opb,vb,vl,in,used,partword,_encodepart,submap);
-  }else{
-    return(0);
-  }
-}
-
-static long **res1_class(vorbis_block *vb,vorbis_look_residue *vl,
-                  int **in,int *nonzero,int ch){
-  int i,used=0;
-  for(i=0;i<ch;i++)
-    if(nonzero[i])
-      in[used++]=in[i];
-  if(used)
-    return(_01class(vb,vl,in,used));
-  else
-    return(0);
-}
-
-static int res1_inverse(vorbis_block *vb,vorbis_look_residue *vl,
-                 float **in,int *nonzero,int ch){
-  int i,used=0;
-  for(i=0;i<ch;i++)
-    if(nonzero[i])
-      in[used++]=in[i];
-  if(used)
-    return(_01inverse(vb,vl,in,used,vorbis_book_decodev_add));
-  else
-    return(0);
-}
-
-static long **res2_class(vorbis_block *vb,vorbis_look_residue *vl,
-                  int **in,int *nonzero,int ch){
-  int i,used=0;
-  for(i=0;i<ch;i++)
-    if(nonzero[i])used++;
-  if(used)
-    return(_2class(vb,vl,in,ch));
-  else
-    return(0);
-}
-
-/* res2 is slightly more different; all the channels are interleaved
-   into a single vector and encoded. */
-
-static int res2_forward(oggpack_buffer *opb,
-                 vorbis_block *vb,vorbis_look_residue *vl,
-                 int **in,int *nonzero,int ch, long **partword,int submap){
-  long i,j,k,n=vb->pcmend/2,used=0;
-
-  /* don't duplicate the code; use a working vector hack for now and
-     reshape ourselves into a single channel res1 */
-  /* ugly; reallocs for each coupling pass :-( */
-  int *work=(int*)_vorbis_block_alloc(vb,ch*n*sizeof(*work));
-  for(i=0;i<ch;i++){
-    int *pcm=in[i];
-    if(nonzero[i])used++;
-    for(j=0,k=i;j<n;j++,k+=ch)
-      work[k]=pcm[j];
-  }
-
-  if(used){
-    return _01forward(opb,vb,vl,&work,1,partword,_encodepart,submap);
-  }else{
-    return(0);
-  }
-}
-
-/* duplicate code here as speed is somewhat more important */
-static int res2_inverse(vorbis_block *vb,vorbis_look_residue *vl,
-                 float **in,int *nonzero,int ch){
-  long i,k,l,s;
-  vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
-  vorbis_info_residue0 *info=look->info;
-
-  /* move all this setup out later */
-  int samples_per_partition=info->grouping;
-  int partitions_per_word=look->phrasebook->dim;
-  int max=(vb->pcmend*ch)>>1;
-  int end=(info->end<max?info->end:max);
-  int n=end-info->begin;
-
-  if(n>0){
-    int partvals=n/samples_per_partition;
-    int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
-  int **partword=(int**)_vorbis_block_alloc(vb,partwords*sizeof(*partword));
-
-    for(i=0;i<ch;i++)if(nonzero[i])break;
-    if(i==ch)return(0); /* no nonzero vectors */
-
-    for(s=0;s<look->stages;s++){
-      for(i=0,l=0;i<partvals;l++){
-
-        if(s==0){
-          /* fetch the partition word */
-          int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
-          if(temp==-1 || temp>=info->partvals)goto eopbreak;
-          partword[l]=look->decodemap[temp];
-          if(partword[l]==NULL)goto errout;
-        }
-
-        /* now we decode residual values for the partitions */
-        for(k=0;k<partitions_per_word && i<partvals;k++,i++)
-          if(info->secondstages[partword[l][k]]&(1<<s)){
-            codebook *stagebook=look->partbooks[partword[l][k]][s];
-
-            if(stagebook){
-              if(vorbis_book_decodevv_add(stagebook,in,
-                                          i*samples_per_partition+info->begin,ch,
-                                          &vb->opb,samples_per_partition)==-1)
-                goto eopbreak;
-            }
-          }
-      }
-    }
-  }
- errout:
- eopbreak:
-  return(0);
-}
-
-
-const vorbis_func_residue residue0_exportbundle={
-  NULL,
-  &res0_unpack,
-  &res0_look,
-  &res0_free_info,
-  &res0_free_look,
-  NULL,
-  NULL,
-  &res0_inverse
-};
-
-const vorbis_func_residue residue1_exportbundle={
-  &res0_pack,
-  &res0_unpack,
-  &res0_look,
-  &res0_free_info,
-  &res0_free_look,
-  &res1_class,
-  &res1_forward,
-  &res1_inverse
-};
-
-const vorbis_func_residue residue2_exportbundle={
-  &res0_pack,
-  &res0_unpack,
-  &res0_look,
-  &res0_free_info,
-  &res0_free_look,
-  &res2_class,
-  &res2_forward,
-  &res2_inverse
-};
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h
deleted file mode 100644
index 4adfd78..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: linear scale -> dB, Bark and Mel scales
- last mod: $Id: scales.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_SCALES_H_
-#define _V_SCALES_H_
-
-#include <math.h>
-#include "os.h"
-
-#ifdef _MSC_VER
-/* MS Visual Studio doesn't have C99 inline keyword. */
-#define inline __inline
-#endif
-
-/* 20log10(x) */
-#define VORBIS_IEEE_FLOAT32 1
-#ifdef VORBIS_IEEE_FLOAT32
-
-static inline float unitnorm(float x){
-  union {
-    ogg_uint32_t i;
-    float f;
-  } ix;
-  ix.f = x;
-  ix.i = (ix.i & 0x80000000U) | (0x3f800000U);
-  return ix.f;
-}
-
-/* Segher was off (too high) by ~ .3 decibel.  Center the conversion correctly. */
-static inline float todB(const float *x){
-  union {
-    ogg_uint32_t i;
-    float f;
-  } ix;
-  ix.f = *x;
-  ix.i = ix.i&0x7fffffff;
-  return (float)(ix.i * 7.17711438e-7f -764.6161886f);
-}
-
-#define todB_nn(x) todB(x)
-
-#else
-
-static float unitnorm(float x){
-  if(x<0)return(-1.f);
-  return(1.f);
-}
-
-#define todB(x)   (*(x)==0?-400.f:log(*(x)**(x))*4.34294480f)
-#define todB_nn(x)   (*(x)==0.f?-400.f:log(*(x))*8.6858896f)
-
-#endif
-
-#define fromdB(x) (exp((x)*.11512925f))
-
-/* The bark scale equations are approximations, since the original
-   table was somewhat hand rolled.  The below are chosen to have the
-   best possible fit to the rolled tables, thus their somewhat odd
-   appearance (these are more accurate and over a longer range than
-   the oft-quoted bark equations found in the texts I have).  The
-   approximations are valid from 0 - 30kHz (nyquist) or so.
-
-   all f in Hz, z in Bark */
-
-#define toBARK(n)   (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n))
-#define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f)
-#define toMEL(n)    (log(1.f+(n)*.001f)*1442.695f)
-#define fromMEL(m)  (1000.f*exp((m)/1442.695f)-1000.f)
-
-/* Frequency to octave.  We arbitrarily declare 63.5 Hz to be octave
-   0.0 */
-
-#define toOC(n)     (log(n)*1.442695f-5.965784f)
-#define fromOC(o)   (exp(((o)+5.965784f)*.693147f))
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/sharedbook.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/sharedbook.c
deleted file mode 100644
index 2b5e76e..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/sharedbook.c
+++ /dev/null
@@ -1,585 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: basic shared codebook operations
- last mod: $Id: sharedbook.c 17030 2010-03-25 06:52:55Z xiphmont $
-
- ********************************************************************/
-
-#ifdef JUCE_MSVC
- #pragma warning (disable: 4456 4457 4459)
-#endif
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-#include "../../ogg.h"
-#include "os.h"
-#include "misc.h"
-#include "../../codec.h"
-#include "codebook.h"
-#include "scales.h"
-
-/**** pack/unpack helpers ******************************************/
-int _ilog(unsigned int v){
-  int ret=0;
-  while(v){
-    ret++;
-    v>>=1;
-  }
-  return(ret);
-}
-
-/* 32 bit float (not IEEE; nonnormalized mantissa +
-   biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm
-   Why not IEEE?  It's just not that important here. */
-
-#define VQ_FEXP 10
-#define VQ_FMAN 21
-#define VQ_FEXP_BIAS 768 /* bias toward values smaller than 1. */
-
-/* doesn't currently guard under/overflow */
-long _float32_pack(float val){
-  int sign=0;
-  long exp;
-  long mant;
-  if(val<0){
-    sign=0x80000000;
-    val= -val;
-  }
-  exp= floor(log(val)/log(2.f)+.001); //+epsilon
-  mant=rint(ldexp(val,(VQ_FMAN-1)-exp));
-  exp=(exp+VQ_FEXP_BIAS)<<VQ_FMAN;
-
-  return(sign|exp|mant);
-}
-
-float _float32_unpack(long val){
-  double mant=val&0x1fffff;
-  int    sign=val&0x80000000;
-  long   exp =(val&0x7fe00000L)>>VQ_FMAN;
-  if(sign)mant= -mant;
-  return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS));
-}
-
-/* given a list of word lengths, generate a list of codewords.  Works
-   for length ordered or unordered, always assigns the lowest valued
-   codewords first.  Extended to handle unused entries (length 0) */
-static ogg_uint32_t *_make_words(long *l,long n,long sparsecount){
-  long i,j,count=0;
-  ogg_uint32_t marker[33];
-  ogg_uint32_t *r=(ogg_uint32_t*)_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r));
-  memset(marker,0,sizeof(marker));
-
-  for(i=0;i<n;i++){
-    long length=l[i];
-    if(length>0){
-      ogg_uint32_t entry=marker[length];
-
-      /* when we claim a node for an entry, we also claim the nodes
-         below it (pruning off the imagined tree that may have dangled
-         from it) as well as blocking the use of any nodes directly
-         above for leaves */
-
-      /* update ourself */
-      if(length<32 && (entry>>length)){
-        /* error condition; the lengths must specify an overpopulated tree */
-        _ogg_free(r);
-        return(NULL);
-      }
-      r[count++]=entry;
-
-      /* Look to see if the next shorter marker points to the node
-         above. if so, update it and repeat.  */
-      {
-        for(j=length;j>0;j--){
-
-          if(marker[j]&1){
-            /* have to jump branches */
-            if(j==1)
-              marker[1]++;
-            else
-              marker[j]=marker[j-1]<<1;
-            break; /* invariant says next upper marker would already
-                      have been moved if it was on the same path */
-          }
-          marker[j]++;
-        }
-      }
-
-      /* prune the tree; the implicit invariant says all the longer
-         markers were dangling from our just-taken node.  Dangle them
-         from our *new* node. */
-      for(j=length+1;j<33;j++)
-        if((marker[j]>>1) == entry){
-          entry=marker[j];
-          marker[j]=marker[j-1]<<1;
-        }else
-          break;
-    }else
-      if(sparsecount==0)count++;
-  }
-
-  /* sanity check the huffman tree; an underpopulated tree must be
-     rejected. The only exception is the one-node pseudo-nil tree,
-     which appears to be underpopulated because the tree doesn't
-     really exist; there's only one possible 'codeword' or zero bits,
-     but the above tree-gen code doesn't mark that. */
-  if(sparsecount != 1){
-    for(i=1;i<33;i++)
-      if(marker[i] & (0xffffffffUL>>(32-i))){
-	_ogg_free(r);
-	return(NULL);
-      }
-  }
-
-  /* bitreverse the words because our bitwise packer/unpacker is LSb
-     endian */
-  for(i=0,count=0;i<n;i++){
-    ogg_uint32_t temp=0;
-    for(j=0;j<l[i];j++){
-      temp<<=1;
-      temp|=(r[count]>>j)&1;
-    }
-
-    if(sparsecount){
-      if(l[i])
-        r[count++]=temp;
-    }else
-      r[count++]=temp;
-  }
-
-  return(r);
-}
-
-/* there might be a straightforward one-line way to do the below
-   that's portable and totally safe against roundoff, but I haven't
-   thought of it.  Therefore, we opt on the side of caution */
-long _book_maptype1_quantvals(const static_codebook *b){
-  long vals=floor(pow((float)b->entries,1.f/b->dim));
-
-  /* the above *should* be reliable, but we'll not assume that FP is
-     ever reliable when bitstream sync is at stake; verify via integer
-     means that vals really is the greatest value of dim for which
-     vals^b->bim <= b->entries */
-  /* treat the above as an initial guess */
-  while(1){
-    long acc=1;
-    long acc1=1;
-    int i;
-    for(i=0;i<b->dim;i++){
-      acc*=vals;
-      acc1*=vals+1;
-    }
-    if(acc<=b->entries && acc1>b->entries){
-      return(vals);
-    }else{
-      if(acc>b->entries){
-        vals--;
-      }else{
-        vals++;
-      }
-    }
-  }
-}
-
-/* unpack the quantized list of values for encode/decode ***********/
-/* we need to deal with two map types: in map type 1, the values are
-   generated algorithmically (each column of the vector counts through
-   the values in the quant vector). in map type 2, all the values came
-   in in an explicit list.  Both value lists must be unpacked */
-float *_book_unquantize(const static_codebook *b,int n,int *sparsemap){
-  long j,k,count=0;
-  if(b->maptype==1 || b->maptype==2){
-    int quantvals;
-    float mindel=_float32_unpack(b->q_min);
-    float delta=_float32_unpack(b->q_delta);
-    float *r=(float*)_ogg_calloc(n*b->dim,sizeof(*r));
-
-    /* maptype 1 and 2 both use a quantized value vector, but
-       different sizes */
-    switch(b->maptype){
-    case 1:
-      /* most of the time, entries%dimensions == 0, but we need to be
-         well defined.  We define that the possible vales at each
-         scalar is values == entries/dim.  If entries%dim != 0, we'll
-         have 'too few' values (values*dim<entries), which means that
-         we'll have 'left over' entries; left over entries use zeroed
-         values (and are wasted).  So don't generate codebooks like
-         that */
-      quantvals=_book_maptype1_quantvals(b);
-      for(j=0;j<b->entries;j++){
-        if((sparsemap && b->lengthlist[j]) || !sparsemap){
-          float last=0.f;
-          int indexdiv=1;
-          for(k=0;k<b->dim;k++){
-            int index= (j/indexdiv)%quantvals;
-            float val=b->quantlist[index];
-            val=fabs(val)*delta+mindel+last;
-            if(b->q_sequencep)last=val;
-            if(sparsemap)
-              r[sparsemap[count]*b->dim+k]=val;
-            else
-              r[count*b->dim+k]=val;
-            indexdiv*=quantvals;
-          }
-          count++;
-        }
-
-      }
-      break;
-    case 2:
-      for(j=0;j<b->entries;j++){
-        if((sparsemap && b->lengthlist[j]) || !sparsemap){
-          float last=0.f;
-
-          for(k=0;k<b->dim;k++){
-            float val=b->quantlist[j*b->dim+k];
-            val=fabs(val)*delta+mindel+last;
-            if(b->q_sequencep)last=val;
-            if(sparsemap)
-              r[sparsemap[count]*b->dim+k]=val;
-            else
-              r[count*b->dim+k]=val;
-          }
-          count++;
-        }
-      }
-      break;
-    }
-
-    return(r);
-  }
-  return(NULL);
-}
-
-void vorbis_staticbook_destroy(static_codebook *b){
-  if(b->allocedp){
-    if(b->quantlist)_ogg_free(b->quantlist);
-    if(b->lengthlist)_ogg_free(b->lengthlist);
-    memset(b,0,sizeof(*b));
-    _ogg_free(b);
-  } /* otherwise, it is in static memory */
-}
-
-void vorbis_book_clear(codebook *b){
-  /* static book is not cleared; we're likely called on the lookup and
-     the static codebook belongs to the info struct */
-  if(b->valuelist)_ogg_free(b->valuelist);
-  if(b->codelist)_ogg_free(b->codelist);
-
-  if(b->dec_index)_ogg_free(b->dec_index);
-  if(b->dec_codelengths)_ogg_free(b->dec_codelengths);
-  if(b->dec_firsttable)_ogg_free(b->dec_firsttable);
-
-  memset(b,0,sizeof(*b));
-}
-
-int vorbis_book_init_encode(codebook *c,const static_codebook *s){
-
-  memset(c,0,sizeof(*c));
-  c->c=s;
-  c->entries=s->entries;
-  c->used_entries=s->entries;
-  c->dim=s->dim;
-  c->codelist=_make_words(s->lengthlist,s->entries,0);
-  //c->valuelist=_book_unquantize(s,s->entries,NULL);
-  c->quantvals=_book_maptype1_quantvals(s);
-  c->minval=(int)rint(_float32_unpack(s->q_min));
-  c->delta=(int)rint(_float32_unpack(s->q_delta));
-
-  return(0);
-}
-
-#if 0
-static ogg_uint32_t bitreverse(ogg_uint32_t x){
-  x=    ((x>>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL);
-  x=    ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL);
-  x=    ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL);
-  x=    ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL);
-  return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL);
-}
-#endif
-
-static int JUCE_CDECL sort32a(const void *a,const void *b){
-  return ( **(ogg_uint32_t **)a>**(ogg_uint32_t **)b)-
-    ( **(ogg_uint32_t **)a<**(ogg_uint32_t **)b);
-}
-
-/* decode codebook arrangement is more heavily optimized than encode */
-int vorbis_book_init_decode(codebook *c,const static_codebook *s){
-  int i,j,n=0,tabn;
-  int *sortindex;
-  memset(c,0,sizeof(*c));
-
-  /* count actually used entries */
-  for(i=0;i<s->entries;i++)
-    if(s->lengthlist[i]>0)
-      n++;
-
-  c->entries=s->entries;
-  c->used_entries=n;
-  c->dim=s->dim;
-
-  if(n>0){
-
-    /* two different remappings go on here.
-
-    First, we collapse the likely sparse codebook down only to
-    actually represented values/words.  This collapsing needs to be
-    indexed as map-valueless books are used to encode original entry
-    positions as integers.
-
-    Second, we reorder all vectors, including the entry index above,
-    by sorted bitreversed codeword to allow treeless decode. */
-
-    /* perform sort */
-    ogg_uint32_t *codes=_make_words(s->lengthlist,s->entries,c->used_entries);
-    ogg_uint32_t **codep=(ogg_uint32_t**)alloca(sizeof(*codep)*n);
-
-    if(codes==NULL)goto err_out;
-
-    for(i=0;i<n;i++){
-      codes[i]=bitreverse(codes[i]);
-      codep[i]=codes+i;
-    }
-
-    qsort(codep,n,sizeof(*codep),sort32a);
-
-    sortindex=(int*)alloca(n*sizeof(*sortindex));
-    c->codelist=(ogg_uint32_t*)_ogg_malloc(n*sizeof(*c->codelist));
-    /* the index is a reverse index */
-    for(i=0;i<n;i++){
-      int position=codep[i]-codes;
-      sortindex[position]=i;
-    }
-
-    for(i=0;i<n;i++)
-      c->codelist[sortindex[i]]=codes[i];
-    _ogg_free(codes);
-
-
-    c->valuelist=_book_unquantize(s,n,sortindex);
-  c->dec_index=(int*)_ogg_malloc(n*sizeof(*c->dec_index));
-
-    for(n=0,i=0;i<s->entries;i++)
-      if(s->lengthlist[i]>0)
-        c->dec_index[sortindex[n++]]=i;
-
-  c->dec_codelengths=(char*)_ogg_malloc(n*sizeof(*c->dec_codelengths));
-    for(n=0,i=0;i<s->entries;i++)
-      if(s->lengthlist[i]>0)
-        c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
-
-    c->dec_firsttablen=_ilog(c->used_entries)-4; /* this is magic */
-    if(c->dec_firsttablen<5)c->dec_firsttablen=5;
-    if(c->dec_firsttablen>8)c->dec_firsttablen=8;
-
-    tabn=1<<c->dec_firsttablen;
-  c->dec_firsttable=(ogg_uint32_t*)_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
-    c->dec_maxlength=0;
-
-    for(i=0;i<n;i++){
-      if(c->dec_maxlength<c->dec_codelengths[i])
-        c->dec_maxlength=c->dec_codelengths[i];
-      if(c->dec_codelengths[i]<=c->dec_firsttablen){
-        ogg_uint32_t orig=bitreverse(c->codelist[i]);
-        for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
-          c->dec_firsttable[orig|(j<<c->dec_codelengths[i])]=i+1;
-      }
-    }
-
-    /* now fill in 'unused' entries in the firsttable with hi/lo search
-       hints for the non-direct-hits */
-    {
-      ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen);
-      long lo=0,hi=0;
-
-      for(i=0;i<tabn;i++){
-        ogg_uint32_t word=i<<(32-c->dec_firsttablen);
-        if(c->dec_firsttable[bitreverse(word)]==0){
-          while((lo+1)<n && c->codelist[lo+1]<=word)lo++;
-          while(    hi<n && word>=(c->codelist[hi]&mask))hi++;
-
-          /* we only actually have 15 bits per hint to play with here.
-             In order to overflow gracefully (nothing breaks, efficiency
-             just drops), encode as the difference from the extremes. */
-          {
-            unsigned long loval=lo;
-            unsigned long hival=n-hi;
-
-            if(loval>0x7fff)loval=0x7fff;
-            if(hival>0x7fff)hival=0x7fff;
-            c->dec_firsttable[bitreverse(word)]=
-              0x80000000UL | (loval<<15) | hival;
-          }
-        }
-      }
-    }
-  }
-
-  return(0);
- err_out:
-  vorbis_book_clear(c);
-  return(-1);
-}
-
-long vorbis_book_codeword(codebook *book,int entry){
-  if(book->c) /* only use with encode; decode optimizations are
-                 allowed to break this */
-    return book->codelist[entry];
-  return -1;
-}
-
-long vorbis_book_codelen(codebook *book,int entry){
-  if(book->c) /* only use with encode; decode optimizations are
-                 allowed to break this */
-    return book->c->lengthlist[entry];
-  return -1;
-}
-
-#ifdef _V_SELFTEST
-
-/* Unit tests of the dequantizer; this stuff will be OK
-   cross-platform, I simply want to be sure that special mapping cases
-   actually work properly; a bug could go unnoticed for a while */
-
-#include <stdio.h>
-
-/* cases:
-
-   no mapping
-   full, explicit mapping
-   algorithmic mapping
-
-   nonsequential
-   sequential
-*/
-
-static long full_quantlist1[]={0,1,2,3,    4,5,6,7, 8,3,6,1};
-static long partial_quantlist1[]={0,7,2};
-
-/* no mapping */
-static_codebook test1={
-  4,16,
-  NULL,
-  0,
-  0,0,0,0,
-  NULL,
-  0
-};
-static float *test1_result=NULL;
-
-/* linear, full mapping, nonsequential */
-static_codebook test2={
-  4,3,
-  NULL,
-  2,
-  -533200896,1611661312,4,0,
-  full_quantlist1,
-  0
-};
-static float test2_result[]={-3,-2,-1,0, 1,2,3,4, 5,0,3,-2};
-
-/* linear, full mapping, sequential */
-static_codebook test3={
-  4,3,
-  NULL,
-  2,
-  -533200896,1611661312,4,1,
-  full_quantlist1,
-  0
-};
-static float test3_result[]={-3,-5,-6,-6, 1,3,6,10, 5,5,8,6};
-
-/* linear, algorithmic mapping, nonsequential */
-static_codebook test4={
-  3,27,
-  NULL,
-  1,
-  -533200896,1611661312,4,0,
-  partial_quantlist1,
-  0
-};
-static float test4_result[]={-3,-3,-3, 4,-3,-3, -1,-3,-3,
-                              -3, 4,-3, 4, 4,-3, -1, 4,-3,
-                              -3,-1,-3, 4,-1,-3, -1,-1,-3,
-                              -3,-3, 4, 4,-3, 4, -1,-3, 4,
-                              -3, 4, 4, 4, 4, 4, -1, 4, 4,
-                              -3,-1, 4, 4,-1, 4, -1,-1, 4,
-                              -3,-3,-1, 4,-3,-1, -1,-3,-1,
-                              -3, 4,-1, 4, 4,-1, -1, 4,-1,
-                              -3,-1,-1, 4,-1,-1, -1,-1,-1};
-
-/* linear, algorithmic mapping, sequential */
-static_codebook test5={
-  3,27,
-  NULL,
-  1,
-  -533200896,1611661312,4,1,
-  partial_quantlist1,
-  0
-};
-static float test5_result[]={-3,-6,-9, 4, 1,-2, -1,-4,-7,
-                              -3, 1,-2, 4, 8, 5, -1, 3, 0,
-                              -3,-4,-7, 4, 3, 0, -1,-2,-5,
-                              -3,-6,-2, 4, 1, 5, -1,-4, 0,
-                              -3, 1, 5, 4, 8,12, -1, 3, 7,
-                              -3,-4, 0, 4, 3, 7, -1,-2, 2,
-                              -3,-6,-7, 4, 1, 0, -1,-4,-5,
-                              -3, 1, 0, 4, 8, 7, -1, 3, 2,
-                              -3,-4,-5, 4, 3, 2, -1,-2,-3};
-
-void run_test(static_codebook *b,float *comp){
-  float *out=_book_unquantize(b,b->entries,NULL);
-  int i;
-
-  if(comp){
-    if(!out){
-      fprintf(stderr,"_book_unquantize incorrectly returned NULL\n");
-      exit(1);
-    }
-
-    for(i=0;i<b->entries*b->dim;i++)
-      if(fabs(out[i]-comp[i])>.0001){
-        fprintf(stderr,"disagreement in unquantized and reference data:\n"
-                "position %d, %g != %g\n",i,out[i],comp[i]);
-        exit(1);
-      }
-
-  }else{
-    if(out){
-      fprintf(stderr,"_book_unquantize returned a value array: \n"
-              " correct result should have been NULL\n");
-      exit(1);
-    }
-  }
-}
-
-int main(){
-  /* run the nine dequant tests, and compare to the hand-rolled results */
-  fprintf(stderr,"Dequant test 1... ");
-  run_test(&test1,test1_result);
-  fprintf(stderr,"OK\nDequant test 2... ");
-  run_test(&test2,test2_result);
-  fprintf(stderr,"OK\nDequant test 3... ");
-  run_test(&test3,test3_result);
-  fprintf(stderr,"OK\nDequant test 4... ");
-  run_test(&test4,test4_result);
-  fprintf(stderr,"OK\nDequant test 5... ");
-  run_test(&test5,test5_result);
-  fprintf(stderr,"OK\n\n");
-
-  return(0);
-}
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c
deleted file mode 100644
index 03e166a..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c
+++ /dev/null
@@ -1,1255 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: *unnormalized* fft transform
- last mod: $Id: smallft.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-/* FFT implementation from OggSquish, minus cosine transforms,
- * minus all but radix 2/4 case.  In Vorbis we only need this
- * cut-down version.
- *
- * To do more than just power-of-two sized vectors, see the full
- * version I wrote for NetLib.
- *
- * Note that the packing is a little strange; rather than the FFT r/i
- * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1,
- * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the
- * FORTRAN version
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "smallft.h"
-#include "os.h"
-#include "misc.h"
-
-static void drfti1(int n, float *wa, int *ifac){
-  static int ntryh[4] = { 4,2,3,5 };
-  static float tpi = 6.28318530717958648f;
-  float arg,argh,argld,fi;
-  int ntry=0,i,j=-1;
-  int k1, l1, l2, ib;
-  int ld, ii, ip, is, nq, nr;
-  int ido, ipm, nfm1;
-  int nl=n;
-  int nf=0;
-
- L101:
-  j++;
-  if (j < 4)
-    ntry=ntryh[j];
-  else
-    ntry+=2;
-
- L104:
-  nq=nl/ntry;
-  nr=nl-ntry*nq;
-  if (nr!=0) goto L101;
-
-  nf++;
-  ifac[nf+1]=ntry;
-  nl=nq;
-  if(ntry!=2)goto L107;
-  if(nf==1)goto L107;
-
-  for (i=1;i<nf;i++){
-    ib=nf-i+1;
-    ifac[ib+1]=ifac[ib];
-  }
-  ifac[2] = 2;
-
- L107:
-  if(nl!=1)goto L104;
-  ifac[0]=n;
-  ifac[1]=nf;
-  argh=tpi/n;
-  is=0;
-  nfm1=nf-1;
-  l1=1;
-
-  if(nfm1==0)return;
-
-  for (k1=0;k1<nfm1;k1++){
-    ip=ifac[k1+2];
-    ld=0;
-    l2=l1*ip;
-    ido=n/l2;
-    ipm=ip-1;
-
-    for (j=0;j<ipm;j++){
-      ld+=l1;
-      i=is;
-      argld=(float)ld*argh;
-      fi=0.f;
-      for (ii=2;ii<ido;ii+=2){
-        fi+=1.f;
-        arg=fi*argld;
-        wa[i++]=cos(arg);
-        wa[i++]=sin(arg);
-      }
-      is+=ido;
-    }
-    l1=l2;
-  }
-}
-
-static void fdrffti(int n, float *wsave, int *ifac){
-
-  if (n == 1) return;
-  drfti1(n, wsave+n, ifac);
-}
-
-static void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){
-  int i,k;
-  float ti2,tr2;
-  int t0,t1,t2,t3,t4,t5,t6;
-
-  t1=0;
-  t0=(t2=l1*ido);
-  t3=ido<<1;
-  for(k=0;k<l1;k++){
-    ch[t1<<1]=cc[t1]+cc[t2];
-    ch[(t1<<1)+t3-1]=cc[t1]-cc[t2];
-    t1+=ido;
-    t2+=ido;
-  }
-
-  if(ido<2)return;
-  if(ido==2)goto L105;
-
-  t1=0;
-  t2=t0;
-  for(k=0;k<l1;k++){
-    t3=t2;
-    t4=(t1<<1)+(ido<<1);
-    t5=t1;
-    t6=t1+t1;
-    for(i=2;i<ido;i+=2){
-      t3+=2;
-      t4-=2;
-      t5+=2;
-      t6+=2;
-      tr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
-      ti2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
-      ch[t6]=cc[t5]+ti2;
-      ch[t4]=ti2-cc[t5];
-      ch[t6-1]=cc[t5-1]+tr2;
-      ch[t4-1]=cc[t5-1]-tr2;
-    }
-    t1+=ido;
-    t2+=ido;
-  }
-
-  if(ido%2==1)return;
-
- L105:
-  t3=(t2=(t1=ido)-1);
-  t2+=t0;
-  for(k=0;k<l1;k++){
-    ch[t1]=-cc[t2];
-    ch[t1-1]=cc[t3];
-    t1+=ido<<1;
-    t2+=ido;
-    t3+=ido;
-  }
-}
-
-static void dradf4(int ido,int l1,float *cc,float *ch,float *wa1,
-            float *wa2,float *wa3){
-  static float hsqt2 = .70710678118654752f;
-  int i,k,t0,t1,t2,t3,t4,t5,t6;
-  float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
-  t0=l1*ido;
-
-  t1=t0;
-  t4=t1<<1;
-  t2=t1+(t1<<1);
-  t3=0;
-
-  for(k=0;k<l1;k++){
-    tr1=cc[t1]+cc[t2];
-    tr2=cc[t3]+cc[t4];
-
-    ch[t5=t3<<2]=tr1+tr2;
-    ch[(ido<<2)+t5-1]=tr2-tr1;
-    ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4];
-    ch[t5]=cc[t2]-cc[t1];
-
-    t1+=ido;
-    t2+=ido;
-    t3+=ido;
-    t4+=ido;
-  }
-
-  if(ido<2)return;
-  if(ido==2)goto L105;
-
-
-  t1=0;
-  for(k=0;k<l1;k++){
-    t2=t1;
-    t4=t1<<2;
-    t5=(t6=ido<<1)+t4;
-    for(i=2;i<ido;i+=2){
-      t3=(t2+=2);
-      t4+=2;
-      t5-=2;
-
-      t3+=t0;
-      cr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
-      ci2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
-      t3+=t0;
-      cr3=wa2[i-2]*cc[t3-1]+wa2[i-1]*cc[t3];
-      ci3=wa2[i-2]*cc[t3]-wa2[i-1]*cc[t3-1];
-      t3+=t0;
-      cr4=wa3[i-2]*cc[t3-1]+wa3[i-1]*cc[t3];
-      ci4=wa3[i-2]*cc[t3]-wa3[i-1]*cc[t3-1];
-
-      tr1=cr2+cr4;
-      tr4=cr4-cr2;
-      ti1=ci2+ci4;
-      ti4=ci2-ci4;
-
-      ti2=cc[t2]+ci3;
-      ti3=cc[t2]-ci3;
-      tr2=cc[t2-1]+cr3;
-      tr3=cc[t2-1]-cr3;
-
-      ch[t4-1]=tr1+tr2;
-      ch[t4]=ti1+ti2;
-
-      ch[t5-1]=tr3-ti4;
-      ch[t5]=tr4-ti3;
-
-      ch[t4+t6-1]=ti4+tr3;
-      ch[t4+t6]=tr4+ti3;
-
-      ch[t5+t6-1]=tr2-tr1;
-      ch[t5+t6]=ti1-ti2;
-    }
-    t1+=ido;
-  }
-  if(ido&1)return;
-
- L105:
-
-  t2=(t1=t0+ido-1)+(t0<<1);
-  t3=ido<<2;
-  t4=ido;
-  t5=ido<<1;
-  t6=ido;
-
-  for(k=0;k<l1;k++){
-    ti1=-hsqt2*(cc[t1]+cc[t2]);
-    tr1=hsqt2*(cc[t1]-cc[t2]);
-
-    ch[t4-1]=tr1+cc[t6-1];
-    ch[t4+t5-1]=cc[t6-1]-tr1;
-
-    ch[t4]=ti1-cc[t1+t0];
-    ch[t4+t5]=ti1+cc[t1+t0];
-
-    t1+=ido;
-    t2+=ido;
-    t4+=t3;
-    t6+=ido;
-  }
-}
-
-static void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
-                          float *c2,float *ch,float *ch2,float *wa){
-
-  static float tpi=6.283185307179586f;
-  int idij,ipph,i,j,k,l,ic,ik,is;
-  int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
-  float dc2,ai1,ai2,ar1,ar2,ds2;
-  int nbd;
-  float dcp,arg,dsp,ar1h,ar2h;
-  int idp2,ipp2;
-
-  arg=tpi/(float)ip;
-  dcp=cos(arg);
-  dsp=sin(arg);
-  ipph=(ip+1)>>1;
-  ipp2=ip;
-  idp2=ido;
-  nbd=(ido-1)>>1;
-  t0=l1*ido;
-  t10=ip*ido;
-
-  if(ido==1)goto L119;
-  for(ik=0;ik<idl1;ik++)ch2[ik]=c2[ik];
-
-  t1=0;
-  for(j=1;j<ip;j++){
-    t1+=t0;
-    t2=t1;
-    for(k=0;k<l1;k++){
-      ch[t2]=c1[t2];
-      t2+=ido;
-    }
-  }
-
-  is=-ido;
-  t1=0;
-  if(nbd>l1){
-    for(j=1;j<ip;j++){
-      t1+=t0;
-      is+=ido;
-      t2= -ido+t1;
-      for(k=0;k<l1;k++){
-        idij=is-1;
-        t2+=ido;
-        t3=t2;
-        for(i=2;i<ido;i+=2){
-          idij+=2;
-          t3+=2;
-          ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
-          ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
-        }
-      }
-    }
-  }else{
-
-    for(j=1;j<ip;j++){
-      is+=ido;
-      idij=is-1;
-      t1+=t0;
-      t2=t1;
-      for(i=2;i<ido;i+=2){
-        idij+=2;
-        t2+=2;
-        t3=t2;
-        for(k=0;k<l1;k++){
-          ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
-          ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
-          t3+=ido;
-        }
-      }
-    }
-  }
-
-  t1=0;
-  t2=ipp2*t0;
-  if(nbd<l1){
-    for(j=1;j<ipph;j++){
-      t1+=t0;
-      t2-=t0;
-      t3=t1;
-      t4=t2;
-      for(i=2;i<ido;i+=2){
-        t3+=2;
-        t4+=2;
-        t5=t3-ido;
-        t6=t4-ido;
-        for(k=0;k<l1;k++){
-          t5+=ido;
-          t6+=ido;
-          c1[t5-1]=ch[t5-1]+ch[t6-1];
-          c1[t6-1]=ch[t5]-ch[t6];
-          c1[t5]=ch[t5]+ch[t6];
-          c1[t6]=ch[t6-1]-ch[t5-1];
-        }
-      }
-    }
-  }else{
-    for(j=1;j<ipph;j++){
-      t1+=t0;
-      t2-=t0;
-      t3=t1;
-      t4=t2;
-      for(k=0;k<l1;k++){
-        t5=t3;
-        t6=t4;
-        for(i=2;i<ido;i+=2){
-          t5+=2;
-          t6+=2;
-          c1[t5-1]=ch[t5-1]+ch[t6-1];
-          c1[t6-1]=ch[t5]-ch[t6];
-          c1[t5]=ch[t5]+ch[t6];
-          c1[t6]=ch[t6-1]-ch[t5-1];
-        }
-        t3+=ido;
-        t4+=ido;
-      }
-    }
-  }
-
-L119:
-  for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
-
-  t1=0;
-  t2=ipp2*idl1;
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1-ido;
-    t4=t2-ido;
-    for(k=0;k<l1;k++){
-      t3+=ido;
-      t4+=ido;
-      c1[t3]=ch[t3]+ch[t4];
-      c1[t4]=ch[t4]-ch[t3];
-    }
-  }
-
-  ar1=1.f;
-  ai1=0.f;
-  t1=0;
-  t2=ipp2*idl1;
-  t3=(ip-1)*idl1;
-  for(l=1;l<ipph;l++){
-    t1+=idl1;
-    t2-=idl1;
-    ar1h=dcp*ar1-dsp*ai1;
-    ai1=dcp*ai1+dsp*ar1;
-    ar1=ar1h;
-    t4=t1;
-    t5=t2;
-    t6=t3;
-    t7=idl1;
-
-    for(ik=0;ik<idl1;ik++){
-      ch2[t4++]=c2[ik]+ar1*c2[t7++];
-      ch2[t5++]=ai1*c2[t6++];
-    }
-
-    dc2=ar1;
-    ds2=ai1;
-    ar2=ar1;
-    ai2=ai1;
-
-    t4=idl1;
-    t5=(ipp2-1)*idl1;
-    for(j=2;j<ipph;j++){
-      t4+=idl1;
-      t5-=idl1;
-
-      ar2h=dc2*ar2-ds2*ai2;
-      ai2=dc2*ai2+ds2*ar2;
-      ar2=ar2h;
-
-      t6=t1;
-      t7=t2;
-      t8=t4;
-      t9=t5;
-      for(ik=0;ik<idl1;ik++){
-        ch2[t6++]+=ar2*c2[t8++];
-        ch2[t7++]+=ai2*c2[t9++];
-      }
-    }
-  }
-
-  t1=0;
-  for(j=1;j<ipph;j++){
-    t1+=idl1;
-    t2=t1;
-    for(ik=0;ik<idl1;ik++)ch2[ik]+=c2[t2++];
-  }
-
-  if(ido<l1)goto L132;
-
-  t1=0;
-  t2=0;
-  for(k=0;k<l1;k++){
-    t3=t1;
-    t4=t2;
-    for(i=0;i<ido;i++)cc[t4++]=ch[t3++];
-    t1+=ido;
-    t2+=t10;
-  }
-
-  goto L135;
-
- L132:
-  for(i=0;i<ido;i++){
-    t1=i;
-    t2=i;
-    for(k=0;k<l1;k++){
-      cc[t2]=ch[t1];
-      t1+=ido;
-      t2+=t10;
-    }
-  }
-
- L135:
-  t1=0;
-  t2=ido<<1;
-  t3=0;
-  t4=ipp2*t0;
-  for(j=1;j<ipph;j++){
-
-    t1+=t2;
-    t3+=t0;
-    t4-=t0;
-
-    t5=t1;
-    t6=t3;
-    t7=t4;
-
-    for(k=0;k<l1;k++){
-      cc[t5-1]=ch[t6];
-      cc[t5]=ch[t7];
-      t5+=t10;
-      t6+=ido;
-      t7+=ido;
-    }
-  }
-
-  if(ido==1)return;
-  if(nbd<l1)goto L141;
-
-  t1=-ido;
-  t3=0;
-  t4=0;
-  t5=ipp2*t0;
-  for(j=1;j<ipph;j++){
-    t1+=t2;
-    t3+=t2;
-    t4+=t0;
-    t5-=t0;
-    t6=t1;
-    t7=t3;
-    t8=t4;
-    t9=t5;
-    for(k=0;k<l1;k++){
-      for(i=2;i<ido;i+=2){
-        ic=idp2-i;
-        cc[i+t7-1]=ch[i+t8-1]+ch[i+t9-1];
-        cc[ic+t6-1]=ch[i+t8-1]-ch[i+t9-1];
-        cc[i+t7]=ch[i+t8]+ch[i+t9];
-        cc[ic+t6]=ch[i+t9]-ch[i+t8];
-      }
-      t6+=t10;
-      t7+=t10;
-      t8+=ido;
-      t9+=ido;
-    }
-  }
-  return;
-
- L141:
-
-  t1=-ido;
-  t3=0;
-  t4=0;
-  t5=ipp2*t0;
-  for(j=1;j<ipph;j++){
-    t1+=t2;
-    t3+=t2;
-    t4+=t0;
-    t5-=t0;
-    for(i=2;i<ido;i+=2){
-      t6=idp2+t1-i;
-      t7=i+t3;
-      t8=i+t4;
-      t9=i+t5;
-      for(k=0;k<l1;k++){
-        cc[t7-1]=ch[t8-1]+ch[t9-1];
-        cc[t6-1]=ch[t8-1]-ch[t9-1];
-        cc[t7]=ch[t8]+ch[t9];
-        cc[t6]=ch[t9]-ch[t8];
-        t6+=t10;
-        t7+=t10;
-        t8+=ido;
-        t9+=ido;
-      }
-    }
-  }
-}
-
-static void drftf1(int n,float *c,float *ch,float *wa,int *ifac){
-  int i,k1,l1,l2;
-  int na,kh,nf;
-  int ip,iw,ido,idl1,ix2,ix3;
-
-  nf=ifac[1];
-  na=1;
-  l2=n;
-  iw=n;
-
-  for(k1=0;k1<nf;k1++){
-    kh=nf-k1;
-    ip=ifac[kh+1];
-    l1=l2/ip;
-    ido=n/l2;
-    idl1=ido*l1;
-    iw-=(ip-1)*ido;
-    na=1-na;
-
-    if(ip!=4)goto L102;
-
-    ix2=iw+ido;
-    ix3=ix2+ido;
-    if(na!=0)
-      dradf4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
-    else
-      dradf4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
-    goto L110;
-
- L102:
-    if(ip!=2)goto L104;
-    if(na!=0)goto L103;
-
-    dradf2(ido,l1,c,ch,wa+iw-1);
-    goto L110;
-
-  L103:
-    dradf2(ido,l1,ch,c,wa+iw-1);
-    goto L110;
-
-  L104:
-    if(ido==1)na=1-na;
-    if(na!=0)goto L109;
-
-    dradfg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
-    na=1;
-    goto L110;
-
-  L109:
-    dradfg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
-    na=0;
-
-  L110:
-    l2=l1;
-  }
-
-  if(na==1)return;
-
-  for(i=0;i<n;i++)c[i]=ch[i];
-}
-
-static void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){
-  int i,k,t0,t1,t2,t3,t4,t5,t6;
-  float ti2,tr2;
-
-  t0=l1*ido;
-
-  t1=0;
-  t2=0;
-  t3=(ido<<1)-1;
-  for(k=0;k<l1;k++){
-    ch[t1]=cc[t2]+cc[t3+t2];
-    ch[t1+t0]=cc[t2]-cc[t3+t2];
-    t2=(t1+=ido)<<1;
-  }
-
-  if(ido<2)return;
-  if(ido==2)goto L105;
-
-  t1=0;
-  t2=0;
-  for(k=0;k<l1;k++){
-    t3=t1;
-    t5=(t4=t2)+(ido<<1);
-    t6=t0+t1;
-    for(i=2;i<ido;i+=2){
-      t3+=2;
-      t4+=2;
-      t5-=2;
-      t6+=2;
-      ch[t3-1]=cc[t4-1]+cc[t5-1];
-      tr2=cc[t4-1]-cc[t5-1];
-      ch[t3]=cc[t4]-cc[t5];
-      ti2=cc[t4]+cc[t5];
-      ch[t6-1]=wa1[i-2]*tr2-wa1[i-1]*ti2;
-      ch[t6]=wa1[i-2]*ti2+wa1[i-1]*tr2;
-    }
-    t2=(t1+=ido)<<1;
-  }
-
-  if(ido%2==1)return;
-
-L105:
-  t1=ido-1;
-  t2=ido-1;
-  for(k=0;k<l1;k++){
-    ch[t1]=cc[t2]+cc[t2];
-    ch[t1+t0]=-(cc[t2+1]+cc[t2+1]);
-    t1+=ido;
-    t2+=ido<<1;
-  }
-}
-
-static void dradb3(int ido,int l1,float *cc,float *ch,float *wa1,
-                          float *wa2){
-  static float taur = -.5f;
-  static float taui = .8660254037844386f;
-  int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
-  float ci2,ci3,di2,di3,cr2,cr3,dr2,dr3,ti2,tr2;
-  t0=l1*ido;
-
-  t1=0;
-  t2=t0<<1;
-  t3=ido<<1;
-  t4=ido+(ido<<1);
-  t5=0;
-  for(k=0;k<l1;k++){
-    tr2=cc[t3-1]+cc[t3-1];
-    cr2=cc[t5]+(taur*tr2);
-    ch[t1]=cc[t5]+tr2;
-    ci3=taui*(cc[t3]+cc[t3]);
-    ch[t1+t0]=cr2-ci3;
-    ch[t1+t2]=cr2+ci3;
-    t1+=ido;
-    t3+=t4;
-    t5+=t4;
-  }
-
-  if(ido==1)return;
-
-  t1=0;
-  t3=ido<<1;
-  for(k=0;k<l1;k++){
-    t7=t1+(t1<<1);
-    t6=(t5=t7+t3);
-    t8=t1;
-    t10=(t9=t1+t0)+t0;
-
-    for(i=2;i<ido;i+=2){
-      t5+=2;
-      t6-=2;
-      t7+=2;
-      t8+=2;
-      t9+=2;
-      t10+=2;
-      tr2=cc[t5-1]+cc[t6-1];
-      cr2=cc[t7-1]+(taur*tr2);
-      ch[t8-1]=cc[t7-1]+tr2;
-      ti2=cc[t5]-cc[t6];
-      ci2=cc[t7]+(taur*ti2);
-      ch[t8]=cc[t7]+ti2;
-      cr3=taui*(cc[t5-1]-cc[t6-1]);
-      ci3=taui*(cc[t5]+cc[t6]);
-      dr2=cr2-ci3;
-      dr3=cr2+ci3;
-      di2=ci2+cr3;
-      di3=ci2-cr3;
-      ch[t9-1]=wa1[i-2]*dr2-wa1[i-1]*di2;
-      ch[t9]=wa1[i-2]*di2+wa1[i-1]*dr2;
-      ch[t10-1]=wa2[i-2]*dr3-wa2[i-1]*di3;
-      ch[t10]=wa2[i-2]*di3+wa2[i-1]*dr3;
-    }
-    t1+=ido;
-  }
-}
-
-static void dradb4(int ido,int l1,float *cc,float *ch,float *wa1,
-                          float *wa2,float *wa3){
-  static float sqrt2=1.414213562373095f;
-  int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8;
-  float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
-  t0=l1*ido;
-
-  t1=0;
-  t2=ido<<2;
-  t3=0;
-  t6=ido<<1;
-  for(k=0;k<l1;k++){
-    t4=t3+t6;
-    t5=t1;
-    tr3=cc[t4-1]+cc[t4-1];
-    tr4=cc[t4]+cc[t4];
-    tr1=cc[t3]-cc[(t4+=t6)-1];
-    tr2=cc[t3]+cc[t4-1];
-    ch[t5]=tr2+tr3;
-    ch[t5+=t0]=tr1-tr4;
-    ch[t5+=t0]=tr2-tr3;
-    ch[t5+=t0]=tr1+tr4;
-    t1+=ido;
-    t3+=t2;
-  }
-
-  if(ido<2)return;
-  if(ido==2)goto L105;
-
-  t1=0;
-  for(k=0;k<l1;k++){
-    t5=(t4=(t3=(t2=t1<<2)+t6))+t6;
-    t7=t1;
-    for(i=2;i<ido;i+=2){
-      t2+=2;
-      t3+=2;
-      t4-=2;
-      t5-=2;
-      t7+=2;
-      ti1=cc[t2]+cc[t5];
-      ti2=cc[t2]-cc[t5];
-      ti3=cc[t3]-cc[t4];
-      tr4=cc[t3]+cc[t4];
-      tr1=cc[t2-1]-cc[t5-1];
-      tr2=cc[t2-1]+cc[t5-1];
-      ti4=cc[t3-1]-cc[t4-1];
-      tr3=cc[t3-1]+cc[t4-1];
-      ch[t7-1]=tr2+tr3;
-      cr3=tr2-tr3;
-      ch[t7]=ti2+ti3;
-      ci3=ti2-ti3;
-      cr2=tr1-tr4;
-      cr4=tr1+tr4;
-      ci2=ti1+ti4;
-      ci4=ti1-ti4;
-
-      ch[(t8=t7+t0)-1]=wa1[i-2]*cr2-wa1[i-1]*ci2;
-      ch[t8]=wa1[i-2]*ci2+wa1[i-1]*cr2;
-      ch[(t8+=t0)-1]=wa2[i-2]*cr3-wa2[i-1]*ci3;
-      ch[t8]=wa2[i-2]*ci3+wa2[i-1]*cr3;
-      ch[(t8+=t0)-1]=wa3[i-2]*cr4-wa3[i-1]*ci4;
-      ch[t8]=wa3[i-2]*ci4+wa3[i-1]*cr4;
-    }
-    t1+=ido;
-  }
-
-  if(ido%2 == 1)return;
-
- L105:
-
-  t1=ido;
-  t2=ido<<2;
-  t3=ido-1;
-  t4=ido+(ido<<1);
-  for(k=0;k<l1;k++){
-    t5=t3;
-    ti1=cc[t1]+cc[t4];
-    ti2=cc[t4]-cc[t1];
-    tr1=cc[t1-1]-cc[t4-1];
-    tr2=cc[t1-1]+cc[t4-1];
-    ch[t5]=tr2+tr2;
-    ch[t5+=t0]=sqrt2*(tr1-ti1);
-    ch[t5+=t0]=ti2+ti2;
-    ch[t5+=t0]=-sqrt2*(tr1+ti1);
-
-    t3+=ido;
-    t1+=t2;
-    t4+=t2;
-  }
-}
-
-static void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
-            float *c2,float *ch,float *ch2,float *wa){
-  static float tpi=6.283185307179586f;
-  int idij,ipph,i,j,k,l,ik,is,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,
-      t11,t12;
-  float dc2,ai1,ai2,ar1,ar2,ds2;
-  int nbd;
-  float dcp,arg,dsp,ar1h,ar2h;
-  int ipp2;
-
-  t10=ip*ido;
-  t0=l1*ido;
-  arg=tpi/(float)ip;
-  dcp=cos(arg);
-  dsp=sin(arg);
-  nbd=(ido-1)>>1;
-  ipp2=ip;
-  ipph=(ip+1)>>1;
-  if(ido<l1)goto L103;
-
-  t1=0;
-  t2=0;
-  for(k=0;k<l1;k++){
-    t3=t1;
-    t4=t2;
-    for(i=0;i<ido;i++){
-      ch[t3]=cc[t4];
-      t3++;
-      t4++;
-    }
-    t1+=ido;
-    t2+=t10;
-  }
-  goto L106;
-
- L103:
-  t1=0;
-  for(i=0;i<ido;i++){
-    t2=t1;
-    t3=t1;
-    for(k=0;k<l1;k++){
-      ch[t2]=cc[t3];
-      t2+=ido;
-      t3+=t10;
-    }
-    t1++;
-  }
-
- L106:
-  t1=0;
-  t2=ipp2*t0;
-  t7=(t5=ido<<1);
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1;
-    t4=t2;
-    t6=t5;
-    for(k=0;k<l1;k++){
-      ch[t3]=cc[t6-1]+cc[t6-1];
-      ch[t4]=cc[t6]+cc[t6];
-      t3+=ido;
-      t4+=ido;
-      t6+=t10;
-    }
-    t5+=t7;
-  }
-
-  if (ido == 1)goto L116;
-  if(nbd<l1)goto L112;
-
-  t1=0;
-  t2=ipp2*t0;
-  t7=0;
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1;
-    t4=t2;
-
-    t7+=(ido<<1);
-    t8=t7;
-    for(k=0;k<l1;k++){
-      t5=t3;
-      t6=t4;
-      t9=t8;
-      t11=t8;
-      for(i=2;i<ido;i+=2){
-        t5+=2;
-        t6+=2;
-        t9+=2;
-        t11-=2;
-        ch[t5-1]=cc[t9-1]+cc[t11-1];
-        ch[t6-1]=cc[t9-1]-cc[t11-1];
-        ch[t5]=cc[t9]-cc[t11];
-        ch[t6]=cc[t9]+cc[t11];
-      }
-      t3+=ido;
-      t4+=ido;
-      t8+=t10;
-    }
-  }
-  goto L116;
-
- L112:
-  t1=0;
-  t2=ipp2*t0;
-  t7=0;
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1;
-    t4=t2;
-    t7+=(ido<<1);
-    t8=t7;
-    t9=t7;
-    for(i=2;i<ido;i+=2){
-      t3+=2;
-      t4+=2;
-      t8+=2;
-      t9-=2;
-      t5=t3;
-      t6=t4;
-      t11=t8;
-      t12=t9;
-      for(k=0;k<l1;k++){
-        ch[t5-1]=cc[t11-1]+cc[t12-1];
-        ch[t6-1]=cc[t11-1]-cc[t12-1];
-        ch[t5]=cc[t11]-cc[t12];
-        ch[t6]=cc[t11]+cc[t12];
-        t5+=ido;
-        t6+=ido;
-        t11+=t10;
-        t12+=t10;
-      }
-    }
-  }
-
-L116:
-  ar1=1.f;
-  ai1=0.f;
-  t1=0;
-  t9=(t2=ipp2*idl1);
-  t3=(ip-1)*idl1;
-  for(l=1;l<ipph;l++){
-    t1+=idl1;
-    t2-=idl1;
-
-    ar1h=dcp*ar1-dsp*ai1;
-    ai1=dcp*ai1+dsp*ar1;
-    ar1=ar1h;
-    t4=t1;
-    t5=t2;
-    t6=0;
-    t7=idl1;
-    t8=t3;
-    for(ik=0;ik<idl1;ik++){
-      c2[t4++]=ch2[t6++]+ar1*ch2[t7++];
-      c2[t5++]=ai1*ch2[t8++];
-    }
-    dc2=ar1;
-    ds2=ai1;
-    ar2=ar1;
-    ai2=ai1;
-
-    t6=idl1;
-    t7=t9-idl1;
-    for(j=2;j<ipph;j++){
-      t6+=idl1;
-      t7-=idl1;
-      ar2h=dc2*ar2-ds2*ai2;
-      ai2=dc2*ai2+ds2*ar2;
-      ar2=ar2h;
-      t4=t1;
-      t5=t2;
-      t11=t6;
-      t12=t7;
-      for(ik=0;ik<idl1;ik++){
-        c2[t4++]+=ar2*ch2[t11++];
-        c2[t5++]+=ai2*ch2[t12++];
-      }
-    }
-  }
-
-  t1=0;
-  for(j=1;j<ipph;j++){
-    t1+=idl1;
-    t2=t1;
-    for(ik=0;ik<idl1;ik++)ch2[ik]+=ch2[t2++];
-  }
-
-  t1=0;
-  t2=ipp2*t0;
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1;
-    t4=t2;
-    for(k=0;k<l1;k++){
-      ch[t3]=c1[t3]-c1[t4];
-      ch[t4]=c1[t3]+c1[t4];
-      t3+=ido;
-      t4+=ido;
-    }
-  }
-
-  if(ido==1)goto L132;
-  if(nbd<l1)goto L128;
-
-  t1=0;
-  t2=ipp2*t0;
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1;
-    t4=t2;
-    for(k=0;k<l1;k++){
-      t5=t3;
-      t6=t4;
-      for(i=2;i<ido;i+=2){
-        t5+=2;
-        t6+=2;
-        ch[t5-1]=c1[t5-1]-c1[t6];
-        ch[t6-1]=c1[t5-1]+c1[t6];
-        ch[t5]=c1[t5]+c1[t6-1];
-        ch[t6]=c1[t5]-c1[t6-1];
-      }
-      t3+=ido;
-      t4+=ido;
-    }
-  }
-  goto L132;
-
- L128:
-  t1=0;
-  t2=ipp2*t0;
-  for(j=1;j<ipph;j++){
-    t1+=t0;
-    t2-=t0;
-    t3=t1;
-    t4=t2;
-    for(i=2;i<ido;i+=2){
-      t3+=2;
-      t4+=2;
-      t5=t3;
-      t6=t4;
-      for(k=0;k<l1;k++){
-        ch[t5-1]=c1[t5-1]-c1[t6];
-        ch[t6-1]=c1[t5-1]+c1[t6];
-        ch[t5]=c1[t5]+c1[t6-1];
-        ch[t6]=c1[t5]-c1[t6-1];
-        t5+=ido;
-        t6+=ido;
-      }
-    }
-  }
-
-L132:
-  if(ido==1)return;
-
-  for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
-
-  t1=0;
-  for(j=1;j<ip;j++){
-    t2=(t1+=t0);
-    for(k=0;k<l1;k++){
-      c1[t2]=ch[t2];
-      t2+=ido;
-    }
-  }
-
-  if(nbd>l1)goto L139;
-
-  is= -ido-1;
-  t1=0;
-  for(j=1;j<ip;j++){
-    is+=ido;
-    t1+=t0;
-    idij=is;
-    t2=t1;
-    for(i=2;i<ido;i+=2){
-      t2+=2;
-      idij+=2;
-      t3=t2;
-      for(k=0;k<l1;k++){
-        c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
-        c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
-        t3+=ido;
-      }
-    }
-  }
-  return;
-
- L139:
-  is= -ido-1;
-  t1=0;
-  for(j=1;j<ip;j++){
-    is+=ido;
-    t1+=t0;
-    t2=t1;
-    for(k=0;k<l1;k++){
-      idij=is;
-      t3=t2;
-      for(i=2;i<ido;i+=2){
-        idij+=2;
-        t3+=2;
-        c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
-        c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
-      }
-      t2+=ido;
-    }
-  }
-}
-
-static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
-  int i,k1,l1,l2;
-  int na;
-  int nf,ip,iw,ix2,ix3,ido,idl1;
-
-  nf=ifac[1];
-  na=0;
-  l1=1;
-  iw=1;
-
-  for(k1=0;k1<nf;k1++){
-    ip=ifac[k1 + 2];
-    l2=ip*l1;
-    ido=n/l2;
-    idl1=ido*l1;
-    if(ip!=4)goto L103;
-    ix2=iw+ido;
-    ix3=ix2+ido;
-
-    if(na!=0)
-      dradb4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
-    else
-      dradb4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
-    na=1-na;
-    goto L115;
-
-  L103:
-    if(ip!=2)goto L106;
-
-    if(na!=0)
-      dradb2(ido,l1,ch,c,wa+iw-1);
-    else
-      dradb2(ido,l1,c,ch,wa+iw-1);
-    na=1-na;
-    goto L115;
-
-  L106:
-    if(ip!=3)goto L109;
-
-    ix2=iw+ido;
-    if(na!=0)
-      dradb3(ido,l1,ch,c,wa+iw-1,wa+ix2-1);
-    else
-      dradb3(ido,l1,c,ch,wa+iw-1,wa+ix2-1);
-    na=1-na;
-    goto L115;
-
-  L109:
-/*    The radix five case can be translated later..... */
-/*    if(ip!=5)goto L112;
-
-    ix2=iw+ido;
-    ix3=ix2+ido;
-    ix4=ix3+ido;
-    if(na!=0)
-      dradb5(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
-    else
-      dradb5(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
-    na=1-na;
-    goto L115;
-
-  L112:*/
-    if(na!=0)
-      dradbg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
-    else
-      dradbg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
-    if(ido==1)na=1-na;
-
-  L115:
-    l1=l2;
-    iw+=(ip-1)*ido;
-  }
-
-  if(na==0)return;
-
-  for(i=0;i<n;i++)c[i]=ch[i];
-}
-
-void drft_forward(drft_lookup *l,float *data){
-  if(l->n==1)return;
-  drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
-}
-
-void drft_backward(drft_lookup *l,float *data){
-  if (l->n==1)return;
-  drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
-}
-
-void drft_init(drft_lookup *l,int n){
-  l->n=n;
-  l->trigcache=(float*)_ogg_calloc(3*n,sizeof(*l->trigcache));
-  l->splitcache=(int*)_ogg_calloc(32,sizeof(*l->splitcache));
-  fdrffti(n, l->trigcache, l->splitcache);
-}
-
-void drft_clear(drft_lookup *l){
-  if(l){
-    if(l->trigcache)_ogg_free(l->trigcache);
-    if(l->splitcache)_ogg_free(l->splitcache);
-    memset(l,0,sizeof(*l));
-  }
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h
deleted file mode 100644
index 420a6ab..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: fft transform
- last mod: $Id: smallft.h 13293 2007-07-24 00:09:47Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_SMFT_H_
-#define _V_SMFT_H_
-
-#include "../../codec.h"
-
-typedef struct {
-  int n;
-  float *trigcache;
-  int *splitcache;
-} drft_lookup;
-
-extern void drft_forward(drft_lookup *l,float *data);
-extern void drft_backward(drft_lookup *l,float *data);
-extern void drft_init(drft_lookup *l,int n);
-extern void drft_clear(drft_lookup *l);
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/synthesis.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/synthesis.c
deleted file mode 100644
index a9fca68..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/synthesis.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: single-block PCM synthesis
- last mod: $Id: synthesis.c 17474 2010-09-30 03:41:41Z gmaxwell $
-
- ********************************************************************/
-
-#include <stdio.h>
-#include "../../ogg.h"
-#include "../../codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "misc.h"
-#include "os.h"
-
-int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
-  vorbis_dsp_state     *vd= vb ? vb->vd : 0;
-  private_state        *b= vd ? (private_state*)vd->backend_state : 0;
-  vorbis_info          *vi= vd ? vd->vi : 0;
-  codec_setup_info     *ci= vi ? (codec_setup_info*)vi->codec_setup : 0;
-  oggpack_buffer       *opb=vb ? &vb->opb : 0;
-  int                   type,mode,i;
-
-  if (!vd || !b || !vi || !ci || !opb) {
-    return OV_EBADPACKET;
-  }
-
-  /* first things first.  Make sure decode is ready */
-  _vorbis_block_ripcord(vb);
-  oggpack_readinit(opb,op->packet,op->bytes);
-
-  /* Check the packet type */
-  if(oggpack_read(opb,1)!=0){
-    /* Oops.  This is not an audio data packet */
-    return(OV_ENOTAUDIO);
-  }
-
-  /* read our mode and pre/post windowsize */
-  mode=oggpack_read(opb,b->modebits);
-  if(mode==-1){
-    return(OV_EBADPACKET);
-  }
-
-  vb->mode=mode;
-  if(!ci->mode_param[mode]){
-    return(OV_EBADPACKET);
-  }
-
-  vb->W=ci->mode_param[mode]->blockflag;
-  if(vb->W){
-
-    /* this doesn;t get mapped through mode selection as it's used
-       only for window selection */
-    vb->lW=oggpack_read(opb,1);
-    vb->nW=oggpack_read(opb,1);
-    if(vb->nW==-1){
-      return(OV_EBADPACKET);
-    }
-  }else{
-    vb->lW=0;
-    vb->nW=0;
-  }
-
-  /* more setup */
-  vb->granulepos=op->granulepos;
-  vb->sequence=op->packetno;
-  vb->eofflag=op->e_o_s;
-
-  /* alloc pcm passback storage */
-  vb->pcmend=ci->blocksizes[vb->W];
-  vb->pcm=(float**)_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
-  for(i=0;i<vi->channels;i++)
-    vb->pcm[i]=(float*)_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
-
-  /* unpack_header enforces range checking */
-  type=ci->map_type[ci->mode_param[mode]->mapping];
-
-  return(_mapping_P[type]->inverse(vb,ci->map_param[ci->mode_param[mode]->
-                                                   mapping]));
-}
-
-/* used to track pcm position without actually performing decode.
-   Useful for sequential 'fast forward' */
-int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op){
-  vorbis_dsp_state     *vd=vb->vd;
-  private_state        *b=(private_state*)vd->backend_state;
-  vorbis_info          *vi=vd->vi;
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  oggpack_buffer       *opb=&vb->opb;
-  int                   mode;
-
-  /* first things first.  Make sure decode is ready */
-  _vorbis_block_ripcord(vb);
-  oggpack_readinit(opb,op->packet,op->bytes);
-
-  /* Check the packet type */
-  if(oggpack_read(opb,1)!=0){
-    /* Oops.  This is not an audio data packet */
-    return(OV_ENOTAUDIO);
-  }
-
-  /* read our mode and pre/post windowsize */
-  mode=oggpack_read(opb,b->modebits);
-  if(mode==-1)return(OV_EBADPACKET);
-
-  vb->mode=mode;
-  if(!ci->mode_param[mode]){
-    return(OV_EBADPACKET);
-  }
-
-  vb->W=ci->mode_param[mode]->blockflag;
-  if(vb->W){
-    vb->lW=oggpack_read(opb,1);
-    vb->nW=oggpack_read(opb,1);
-    if(vb->nW==-1)   return(OV_EBADPACKET);
-  }else{
-    vb->lW=0;
-    vb->nW=0;
-  }
-
-  /* more setup */
-  vb->granulepos=op->granulepos;
-  vb->sequence=op->packetno;
-  vb->eofflag=op->e_o_s;
-
-  /* no pcm */
-  vb->pcmend=0;
-  vb->pcm=NULL;
-
-  return(0);
-}
-
-long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  oggpack_buffer       opb;
-  int                  mode;
-
-  oggpack_readinit(&opb,op->packet,op->bytes);
-
-  /* Check the packet type */
-  if(oggpack_read(&opb,1)!=0){
-    /* Oops.  This is not an audio data packet */
-    return(OV_ENOTAUDIO);
-  }
-
-  {
-    int modebits=0;
-    int v=ci->modes;
-    while(v>1){
-      modebits++;
-      v>>=1;
-    }
-
-    /* read our mode and pre/post windowsize */
-    mode=oggpack_read(&opb,modebits);
-  }
-  if(mode==-1)return(OV_EBADPACKET);
-  return(ci->blocksizes[ci->mode_param[mode]->blockflag]);
-}
-
-int vorbis_synthesis_halfrate(vorbis_info *vi,int flag){
-  /* set / clear half-sample-rate mode */
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-
-  /* right now, our MDCT can't handle < 64 sample windows. */
-  if(ci->blocksizes[0]<=64 && flag)return -1;
-  ci->halfrate_flag=(flag?1:0);
-  return 0;
-}
-
-int vorbis_synthesis_halfrate_p(vorbis_info *vi){
-  codec_setup_info     *ci=(codec_setup_info*)vi->codec_setup;
-  return ci->halfrate_flag;
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c
deleted file mode 100644
index 4c5e55d..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c
+++ /dev/null
@@ -1,1215 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: simple programmatic interface for encoder mode setup
- last mod: $Id: vorbisenc.c 17028 2010-03-25 05:22:15Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "../../codec.h"
-#include "../../vorbisenc.h"
-
-#include "codec_internal.h"
-
-#include "os.h"
-#include "misc.h"
-
-/* careful with this; it's using static array sizing to make managing
-   all the modes a little less annoying.  If we use a residue backend
-   with > 12 partition types, or a different division of iteration,
-   this needs to be updated. */
-typedef struct {
-  const static_codebook *books[12][4];
-} static_bookblock;
-
-typedef struct {
-  int res_type;
-  int limit_type; /* 0 lowpass limited, 1 point stereo limited */
-  int grouping;
-  const vorbis_info_residue0 *res;
-  const static_codebook  *book_aux;
-  const static_codebook  *book_aux_managed;
-  const static_bookblock *books_base;
-  const static_bookblock *books_base_managed;
-} vorbis_residue_template;
-
-typedef struct {
-  const vorbis_info_mapping0    *map;
-  const vorbis_residue_template *res;
-} vorbis_mapping_template;
-
-typedef struct vp_adjblock{
-  int block[P_BANDS];
-} vp_adjblock;
-
-typedef struct {
-  int data[NOISE_COMPAND_LEVELS];
-} compandblock;
-
-/* high level configuration information for setting things up
-   step-by-step with the detailed vorbis_encode_ctl interface.
-   There's a fair amount of redundancy such that interactive setup
-   does not directly deal with any vorbis_info or codec_setup_info
-   initialization; it's all stored (until full init) in this highlevel
-   setup, then flushed out to the real codec setup structs later. */
-
-typedef struct {
-  int att[P_NOISECURVES];
-  float boost;
-  float decay;
-} att3;
-typedef struct { int data[P_NOISECURVES]; } adj3;
-
-typedef struct {
-  int   pre[PACKETBLOBS];
-  int   post[PACKETBLOBS];
-  float kHz[PACKETBLOBS];
-  float lowpasskHz[PACKETBLOBS];
-} adj_stereo;
-
-typedef struct {
-  int lo;
-  int hi;
-  int fixed;
-} noiseguard;
-typedef struct {
-  int data[P_NOISECURVES][17];
-} noise3;
-
-typedef struct {
-  int      mappings;
-  const double  *rate_mapping;
-  const double  *quality_mapping;
-  int      coupling_restriction;
-  long     samplerate_min_restriction;
-  long     samplerate_max_restriction;
-
-
-  const int     *blocksize_short;
-  const int     *blocksize_long;
-
-  const att3    *psy_tone_masteratt;
-  const int     *psy_tone_0dB;
-  const int     *psy_tone_dBsuppress;
-
-  const vp_adjblock *psy_tone_adj_impulse;
-  const vp_adjblock *psy_tone_adj_long;
-  const vp_adjblock *psy_tone_adj_other;
-
-  const noiseguard  *psy_noiseguards;
-  const noise3      *psy_noise_bias_impulse;
-  const noise3      *psy_noise_bias_padding;
-  const noise3      *psy_noise_bias_trans;
-  const noise3      *psy_noise_bias_long;
-  const int         *psy_noise_dBsuppress;
-
-  const compandblock  *psy_noise_compand;
-  const double        *psy_noise_compand_short_mapping;
-  const double        *psy_noise_compand_long_mapping;
-
-  const int      *psy_noise_normal_start[2];
-  const int      *psy_noise_normal_partition[2];
-  const double   *psy_noise_normal_thresh;
-
-  const int      *psy_ath_float;
-  const int      *psy_ath_abs;
-
-  const double   *psy_lowpass;
-
-  const vorbis_info_psy_global *global_params;
-  const double     *global_mapping;
-  const adj_stereo *stereo_modes;
-
-  const static_codebook *const *const * floor_books;
-  const vorbis_info_floor1 *floor_params;
-  int floor_mappings;
-  const int **floor_mapping_list;
-
-  const vorbis_mapping_template *maps;
-} ve_setup_data_template;
-
-/* a few static coder conventions */
-static const vorbis_info_mode _mode_template[2]={
-  {0,0,0,0},
-  {1,0,0,1}
-};
-
-static const vorbis_info_mapping0 _map_nominal[2]={
-  {1, {0,0}, {0}, {0}, 1,{0},{1}},
-  {1, {0,0}, {1}, {1}, 1,{0},{1}}
-};
-
-#include "modes/setup_44.h"
-#include "modes/setup_44u.h"
-#include "modes/setup_44p51.h"
-#include "modes/setup_32.h"
-#include "modes/setup_8.h"
-#include "modes/setup_11.h"
-#include "modes/setup_16.h"
-#include "modes/setup_22.h"
-#include "modes/setup_X.h"
-
-static const ve_setup_data_template *const setup_list[]={
-  &ve_setup_44_stereo,
-  &ve_setup_44_51,
-  &ve_setup_44_uncoupled,
-
-  &ve_setup_32_stereo,
-  &ve_setup_32_uncoupled,
-
-  &ve_setup_22_stereo,
-  &ve_setup_22_uncoupled,
-  &ve_setup_16_stereo,
-  &ve_setup_16_uncoupled,
-
-  &ve_setup_11_stereo,
-  &ve_setup_11_uncoupled,
-  &ve_setup_8_stereo,
-  &ve_setup_8_uncoupled,
-
-  &ve_setup_X_stereo,
-  &ve_setup_X_uncoupled,
-  &ve_setup_XX_stereo,
-  &ve_setup_XX_uncoupled,
-  0
-};
-
-static void vorbis_encode_floor_setup(vorbis_info *vi,int s,
-                                     const static_codebook *const *const *const books,
-                                     const vorbis_info_floor1 *in,
-                                     const int *x){
-  int i,k,is=s;
-  vorbis_info_floor1 *f=(vorbis_info_floor1*) _ogg_calloc(1,sizeof(*f));
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-
-  memcpy(f,in+x[is],sizeof(*f));
-
-  /* books */
-  {
-    int partitions=f->partitions;
-    int maxclass=-1;
-    int maxbook=-1;
-    for(i=0;i<partitions;i++)
-      if(f->partitionclass[i]>maxclass)maxclass=f->partitionclass[i];
-    for(i=0;i<=maxclass;i++){
-      if(f->class_book[i]>maxbook)maxbook=f->class_book[i];
-      f->class_book[i]+=ci->books;
-      for(k=0;k<(1<<f->class_subs[i]);k++){
-        if(f->class_subbook[i][k]>maxbook)maxbook=f->class_subbook[i][k];
-        if(f->class_subbook[i][k]>=0)f->class_subbook[i][k]+=ci->books;
-      }
-    }
-
-    for(i=0;i<=maxbook;i++)
-      ci->book_param[ci->books++]=(static_codebook *)books[x[is]][i];
-  }
-
-  /* for now, we're only using floor 1 */
-  ci->floor_type[ci->floors]=1;
-  ci->floor_param[ci->floors]=f;
-  ci->floors++;
-
-  return;
-}
-
-static void vorbis_encode_global_psych_setup(vorbis_info *vi,double s,
-                                            const vorbis_info_psy_global *in,
-                                            const double *x){
-  int i,is=s;
-  double ds=s-is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy_global *g=&ci->psy_g_param;
-
-  memcpy(g,in+(int)x[is],sizeof(*g));
-
-  ds=x[is]*(1.-ds)+x[is+1]*ds;
-  is=(int)ds;
-  ds-=is;
-  if(ds==0 && is>0){
-    is--;
-    ds=1.;
-  }
-
-  /* interpolate the trigger threshholds */
-  for(i=0;i<4;i++){
-    g->preecho_thresh[i]=in[is].preecho_thresh[i]*(1.-ds)+in[is+1].preecho_thresh[i]*ds;
-    g->postecho_thresh[i]=in[is].postecho_thresh[i]*(1.-ds)+in[is+1].postecho_thresh[i]*ds;
-  }
-  g->ampmax_att_per_sec=ci->hi.amplitude_track_dBpersec;
-  return;
-}
-
-static void vorbis_encode_global_stereo(vorbis_info *vi,
-                                        const highlevel_encode_setup *const hi,
-                                        const adj_stereo *p){
-  float s=hi->stereo_point_setting;
-  int i,is=s;
-  double ds=s-is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy_global *g=&ci->psy_g_param;
-
-  if(p){
-    memcpy(g->coupling_prepointamp,p[is].pre,sizeof(*p[is].pre)*PACKETBLOBS);
-    memcpy(g->coupling_postpointamp,p[is].post,sizeof(*p[is].post)*PACKETBLOBS);
-
-    if(hi->managed){
-      /* interpolate the kHz threshholds */
-      for(i=0;i<PACKETBLOBS;i++){
-        float kHz=p[is].kHz[i]*(1.-ds)+p[is+1].kHz[i]*ds;
-        g->coupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
-        g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
-        g->coupling_pkHz[i]=kHz;
-
-        kHz=p[is].lowpasskHz[i]*(1.-ds)+p[is+1].lowpasskHz[i]*ds;
-        g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
-        g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
-
-      }
-    }else{
-      float kHz=p[is].kHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].kHz[PACKETBLOBS/2]*ds;
-      for(i=0;i<PACKETBLOBS;i++){
-        g->coupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
-        g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
-        g->coupling_pkHz[i]=kHz;
-      }
-
-      kHz=p[is].lowpasskHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].lowpasskHz[PACKETBLOBS/2]*ds;
-      for(i=0;i<PACKETBLOBS;i++){
-        g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
-        g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
-      }
-    }
-  }else{
-    for(i=0;i<PACKETBLOBS;i++){
-      g->sliding_lowpass[0][i]=ci->blocksizes[0];
-      g->sliding_lowpass[1][i]=ci->blocksizes[1];
-    }
-  }
-  return;
-}
-
-static void vorbis_encode_psyset_setup(vorbis_info *vi,double s,
-                                       const int *nn_start,
-                                       const int *nn_partition,
-                                       const double *nn_thresh,
-                                       int block){
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy *p=ci->psy_param[block];
-  highlevel_encode_setup *hi=&ci->hi;
-  int is=s;
-
-  if(block>=ci->psys)
-    ci->psys=block+1;
-  if(!p){
-    p=(vorbis_info_psy*)_ogg_calloc(1,sizeof(*p));
-    ci->psy_param[block]=p;
-  }
-
-  memcpy(p,&_psy_info_template,sizeof(*p));
-  p->blockflag=block>>1;
-
-  if(hi->noise_normalize_p){
-    p->normal_p=1;
-    p->normal_start=nn_start[is];
-    p->normal_partition=nn_partition[is];
-    p->normal_thresh=nn_thresh[is];
-  }
-
-  return;
-}
-
-static void vorbis_encode_tonemask_setup(vorbis_info *vi,double s,int block,
-                                         const att3 *att,
-                                         const int  *max,
-                                         const vp_adjblock *in){
-  int i,is=s;
-  double ds=s-is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy *p=ci->psy_param[block];
-
-  /* 0 and 2 are only used by bitmanagement, but there's no harm to always
-     filling the values in here */
-  p->tone_masteratt[0]=att[is].att[0]*(1.-ds)+att[is+1].att[0]*ds;
-  p->tone_masteratt[1]=att[is].att[1]*(1.-ds)+att[is+1].att[1]*ds;
-  p->tone_masteratt[2]=att[is].att[2]*(1.-ds)+att[is+1].att[2]*ds;
-  p->tone_centerboost=att[is].boost*(1.-ds)+att[is+1].boost*ds;
-  p->tone_decay=att[is].decay*(1.-ds)+att[is+1].decay*ds;
-
-  p->max_curve_dB=max[is]*(1.-ds)+max[is+1]*ds;
-
-  for(i=0;i<P_BANDS;i++)
-    p->toneatt[i]=in[is].block[i]*(1.-ds)+in[is+1].block[i]*ds;
-  return;
-}
-
-
-static void vorbis_encode_compand_setup(vorbis_info *vi,double s,int block,
-                                        const compandblock *in,
-                                        const double *x){
-  int i,is=s;
-  double ds=s-is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy *p=ci->psy_param[block];
-
-  ds=x[is]*(1.-ds)+x[is+1]*ds;
-  is=(int)ds;
-  ds-=is;
-  if(ds==0 && is>0){
-    is--;
-    ds=1.;
-  }
-
-  /* interpolate the compander settings */
-  for(i=0;i<NOISE_COMPAND_LEVELS;i++)
-    p->noisecompand[i]=in[is].data[i]*(1.-ds)+in[is+1].data[i]*ds;
-  return;
-}
-
-static void vorbis_encode_peak_setup(vorbis_info *vi,double s,int block,
-                                    const int *suppress){
-  int is=s;
-  double ds=s-is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy *p=ci->psy_param[block];
-
-  p->tone_abs_limit=suppress[is]*(1.-ds)+suppress[is+1]*ds;
-
-  return;
-}
-
-static void vorbis_encode_noisebias_setup(vorbis_info *vi,double s,int block,
-                                         const int *suppress,
-                                         const noise3 *in,
-                                         const noiseguard *guard,
-                                         double userbias){
-  int i,is=s,j;
-  double ds=s-is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy *p=ci->psy_param[block];
-
-  p->noisemaxsupp=suppress[is]*(1.-ds)+suppress[is+1]*ds;
-  p->noisewindowlomin=guard[block].lo;
-  p->noisewindowhimin=guard[block].hi;
-  p->noisewindowfixed=guard[block].fixed;
-
-  for(j=0;j<P_NOISECURVES;j++)
-    for(i=0;i<P_BANDS;i++)
-      p->noiseoff[j][i]=in[is].data[j][i]*(1.-ds)+in[is+1].data[j][i]*ds;
-
-  /* impulse blocks may take a user specified bias to boost the
-     nominal/high noise encoding depth */
-  for(j=0;j<P_NOISECURVES;j++){
-    float min=p->noiseoff[j][0]+6; /* the lowest it can go */
-    for(i=0;i<P_BANDS;i++){
-      p->noiseoff[j][i]+=userbias;
-      if(p->noiseoff[j][i]<min)p->noiseoff[j][i]=min;
-    }
-  }
-
-  return;
-}
-
-static void vorbis_encode_ath_setup(vorbis_info *vi,int block){
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  vorbis_info_psy *p=ci->psy_param[block];
-
-  p->ath_adjatt=ci->hi.ath_floating_dB;
-  p->ath_maxatt=ci->hi.ath_absolute_dB;
-  return;
-}
-
-
-static int book_dup_or_new(codec_setup_info *ci,const static_codebook *book){
-  int i;
-  for(i=0;i<ci->books;i++)
-    if(ci->book_param[i]==book)return(i);
-
-  return(ci->books++);
-}
-
-static void vorbis_encode_blocksize_setup(vorbis_info *vi,double s,
-                                         const int *shortb,const int *longb){
-
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  int is=s;
-
-  int blockshort=shortb[is];
-  int blocklong=longb[is];
-  ci->blocksizes[0]=blockshort;
-  ci->blocksizes[1]=blocklong;
-
-}
-
-static void vorbis_encode_residue_setup(vorbis_info *vi,
-                                        int number, int block,
-                                        const vorbis_residue_template *res){
-
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  int i;
-
-  vorbis_info_residue0 *r=(vorbis_info_residue0*)(ci->residue_param[number]=
-    (vorbis_info_residue0*)_ogg_malloc(sizeof(*r)));
-
-  memcpy(r,res->res,sizeof(*r));
-  if(ci->residues<=number)ci->residues=number+1;
-
-  r->grouping=res->grouping;
-  ci->residue_type[number]=res->res_type;
-
-  /* fill in all the books */
-  {
-    int booklist=0,k;
-
-    if(ci->hi.managed){
-      for(i=0;i<r->partitions;i++)
-        for(k=0;k<4;k++)
-          if(res->books_base_managed->books[i][k])
-            r->secondstages[i]|=(1<<k);
-
-      r->groupbook=book_dup_or_new(ci,res->book_aux_managed);
-      ci->book_param[r->groupbook]=(static_codebook *)res->book_aux_managed;
-
-      for(i=0;i<r->partitions;i++){
-        for(k=0;k<4;k++){
-          if(res->books_base_managed->books[i][k]){
-            int bookid=book_dup_or_new(ci,res->books_base_managed->books[i][k]);
-            r->booklist[booklist++]=bookid;
-            ci->book_param[bookid]=(static_codebook *)res->books_base_managed->books[i][k];
-          }
-        }
-      }
-
-    }else{
-
-      for(i=0;i<r->partitions;i++)
-        for(k=0;k<4;k++)
-          if(res->books_base->books[i][k])
-            r->secondstages[i]|=(1<<k);
-
-      r->groupbook=book_dup_or_new(ci,res->book_aux);
-      ci->book_param[r->groupbook]=(static_codebook *)res->book_aux;
-
-      for(i=0;i<r->partitions;i++){
-        for(k=0;k<4;k++){
-          if(res->books_base->books[i][k]){
-            int bookid=book_dup_or_new(ci,res->books_base->books[i][k]);
-            r->booklist[booklist++]=bookid;
-            ci->book_param[bookid]=(static_codebook *)res->books_base->books[i][k];
-          }
-        }
-      }
-    }
-  }
-
-  /* lowpass setup/pointlimit */
-  {
-    double freq=ci->hi.lowpass_kHz*1000.;
-    vorbis_info_floor1 *f=(vorbis_info_floor1*)ci->floor_param[block]; /* by convention */
-    double nyq=vi->rate/2.;
-    long blocksize=ci->blocksizes[block]>>1;
-
-    /* lowpass needs to be set in the floor and the residue. */
-    if(freq>nyq)freq=nyq;
-    /* in the floor, the granularity can be very fine; it doesn't alter
-       the encoding structure, only the samples used to fit the floor
-       approximation */
-    f->n=freq/nyq*blocksize;
-
-    /* this res may by limited by the maximum pointlimit of the mode,
-       not the lowpass. the floor is always lowpass limited. */
-    switch(res->limit_type){
-    case 1: /* point stereo limited */
-      if(ci->hi.managed)
-        freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS-1]*1000.;
-      else
-        freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS/2]*1000.;
-      if(freq>nyq)freq=nyq;
-      break;
-    case 2: /* LFE channel; lowpass at ~ 250Hz */
-      freq=250;
-      break;
-    default:
-      /* already set */
-      break;
-    }
-
-    /* in the residue, we're constrained, physically, by partition
-       boundaries.  We still lowpass 'wherever', but we have to round up
-       here to next boundary, or the vorbis spec will round it *down* to
-       previous boundary in encode/decode */
-    if(ci->residue_type[number]==2){
-      /* residue 2 bundles together multiple channels; used by stereo
-         and surround.  Count the channels in use */
-      /* Multiple maps/submaps can point to the same residue.  In the case
-         of residue 2, they all better have the same number of
-         channels/samples. */
-      int j,k,ch=0;
-      for(i=0;i<ci->maps&&ch==0;i++){
-        vorbis_info_mapping0 *mi=(vorbis_info_mapping0 *)ci->map_param[i];
-        for(j=0;j<mi->submaps && ch==0;j++)
-          if(mi->residuesubmap[j]==number) /* we found a submap referencing theis residue backend */
-            for(k=0;k<vi->channels;k++)
-              if(mi->chmuxlist[k]==j) /* this channel belongs to the submap */
-                ch++;
-      }
-
-      r->end=(int)((freq/nyq*blocksize*ch)/r->grouping+.9)* /* round up only if we're well past */
-        r->grouping;
-      /* the blocksize and grouping may disagree at the end */
-      if(r->end>blocksize*ch)r->end=blocksize*ch/r->grouping*r->grouping;
-
-    }else{
-
-      r->end=(int)((freq/nyq*blocksize)/r->grouping+.9)* /* round up only if we're well past */
-        r->grouping;
-      /* the blocksize and grouping may disagree at the end */
-      if(r->end>blocksize)r->end=blocksize/r->grouping*r->grouping;
-
-    }
-
-    if(r->end==0)r->end=r->grouping; /* LFE channel */
-
-  }
-}
-
-/* we assume two maps in this encoder */
-static void vorbis_encode_map_n_res_setup(vorbis_info *vi,double s,
-                                          const vorbis_mapping_template *maps){
-
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  int i,j,is=s,modes=2;
-  const vorbis_info_mapping0 *map=maps[is].map;
-  const vorbis_info_mode *mode=_mode_template;
-  const vorbis_residue_template *res=maps[is].res;
-
-  if(ci->blocksizes[0]==ci->blocksizes[1])modes=1;
-
-  for(i=0;i<modes;i++){
-
-    ci->map_param[i]=_ogg_calloc(1,sizeof(*map));
-    ci->mode_param[i]=(vorbis_info_mode*)_ogg_calloc(1,sizeof(*mode));
-
-    memcpy(ci->mode_param[i],mode+i,sizeof(*_mode_template));
-    if(i>=ci->modes)ci->modes=i+1;
-
-    ci->map_type[i]=0;
-    memcpy(ci->map_param[i],map+i,sizeof(*map));
-    if(i>=ci->maps)ci->maps=i+1;
-
-    for(j=0;j<map[i].submaps;j++)
-      vorbis_encode_residue_setup(vi,map[i].residuesubmap[j],i
-                                  ,res+map[i].residuesubmap[j]);
-  }
-}
-
-static double setting_to_approx_bitrate(vorbis_info *vi){
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  highlevel_encode_setup *hi=&ci->hi;
-  ve_setup_data_template *setup=(ve_setup_data_template *)hi->setup;
-  int is=hi->base_setting;
-  double ds=hi->base_setting-is;
-  int ch=vi->channels;
-  const double *r=setup->rate_mapping;
-
-  if(r==NULL)
-    return(-1);
-
-  return((r[is]*(1.-ds)+r[is+1]*ds)*ch);
-}
-
-static const void *get_setup_template(long ch,long srate,
-                                      double req,int q_or_bitrate,
-                                      double *base_setting){
-  int i=0,j;
-  if(q_or_bitrate)req/=ch;
-
-  while(setup_list[i]){
-    if(setup_list[i]->coupling_restriction==-1 ||
-       setup_list[i]->coupling_restriction==ch){
-      if(srate>=setup_list[i]->samplerate_min_restriction &&
-         srate<=setup_list[i]->samplerate_max_restriction){
-        int mappings=setup_list[i]->mappings;
-        const double *map=(q_or_bitrate?
-                     setup_list[i]->rate_mapping:
-                     setup_list[i]->quality_mapping);
-
-        /* the template matches.  Does the requested quality mode
-           fall within this template's modes? */
-        if(req<map[0]){++i;continue;}
-        if(req>map[setup_list[i]->mappings]){++i;continue;}
-        for(j=0;j<mappings;j++)
-          if(req>=map[j] && req<map[j+1])break;
-        /* an all-points match */
-        if(j==mappings)
-          *base_setting=j-.001;
-        else{
-          float low=map[j];
-          float high=map[j+1];
-          float del=(req-low)/(high-low);
-          *base_setting=j+del;
-        }
-
-        return(setup_list[i]);
-      }
-    }
-    i++;
-  }
-
-  return NULL;
-}
-
-/* encoders will need to use vorbis_info_init beforehand and call
-   vorbis_info clear when all done */
-
-/* two interfaces; this, more detailed one, and later a convenience
-   layer on top */
-
-/* the final setup call */
-int vorbis_encode_setup_init(vorbis_info *vi){
-  int i,i0=0,singleblock=0;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  ve_setup_data_template *setup=NULL;
-  highlevel_encode_setup *hi=&ci->hi;
-
-  if(ci==NULL)return(OV_EINVAL);
-  if(!hi->impulse_block_p)i0=1;
-
-  /* too low/high an ATH floater is nonsensical, but doesn't break anything */
-  if(hi->ath_floating_dB>-80)hi->ath_floating_dB=-80;
-  if(hi->ath_floating_dB<-200)hi->ath_floating_dB=-200;
-
-  /* again, bound this to avoid the app shooting itself int he foot
-     too badly */
-  if(hi->amplitude_track_dBpersec>0.)hi->amplitude_track_dBpersec=0.;
-  if(hi->amplitude_track_dBpersec<-99999.)hi->amplitude_track_dBpersec=-99999.;
-
-  /* get the appropriate setup template; matches the fetch in previous
-     stages */
-  setup=(ve_setup_data_template *)hi->setup;
-  if(setup==NULL)return(OV_EINVAL);
-
-  hi->set_in_stone=1;
-  /* choose block sizes from configured sizes as well as paying
-     attention to long_block_p and short_block_p.  If the configured
-     short and long blocks are the same length, we set long_block_p
-     and unset short_block_p */
-  vorbis_encode_blocksize_setup(vi,hi->base_setting,
-                                setup->blocksize_short,
-                                setup->blocksize_long);
-  if(ci->blocksizes[0]==ci->blocksizes[1])singleblock=1;
-
-  /* floor setup; choose proper floor params.  Allocated on the floor
-     stack in order; if we alloc only a single long floor, it's 0 */
-  for(i=0;i<setup->floor_mappings;i++)
-    vorbis_encode_floor_setup(vi,hi->base_setting,
-                              setup->floor_books,
-                              setup->floor_params,
-                              setup->floor_mapping_list[i]);
-
-  /* setup of [mostly] short block detection and stereo*/
-  vorbis_encode_global_psych_setup(vi,hi->trigger_setting,
-                                   setup->global_params,
-                                   setup->global_mapping);
-  vorbis_encode_global_stereo(vi,hi,setup->stereo_modes);
-
-  /* basic psych setup and noise normalization */
-  vorbis_encode_psyset_setup(vi,hi->base_setting,
-                             setup->psy_noise_normal_start[0],
-                             setup->psy_noise_normal_partition[0],
-                             setup->psy_noise_normal_thresh,
-                             0);
-  vorbis_encode_psyset_setup(vi,hi->base_setting,
-                             setup->psy_noise_normal_start[0],
-                             setup->psy_noise_normal_partition[0],
-                             setup->psy_noise_normal_thresh,
-                             1);
-  if(!singleblock){
-    vorbis_encode_psyset_setup(vi,hi->base_setting,
-                               setup->psy_noise_normal_start[1],
-                               setup->psy_noise_normal_partition[1],
-                                    setup->psy_noise_normal_thresh,
-                               2);
-    vorbis_encode_psyset_setup(vi,hi->base_setting,
-                               setup->psy_noise_normal_start[1],
-                               setup->psy_noise_normal_partition[1],
-                               setup->psy_noise_normal_thresh,
-                               3);
-  }
-
-  /* tone masking setup */
-  vorbis_encode_tonemask_setup(vi,hi->block[i0].tone_mask_setting,0,
-                               setup->psy_tone_masteratt,
-                               setup->psy_tone_0dB,
-                               setup->psy_tone_adj_impulse);
-  vorbis_encode_tonemask_setup(vi,hi->block[1].tone_mask_setting,1,
-                               setup->psy_tone_masteratt,
-                               setup->psy_tone_0dB,
-                               setup->psy_tone_adj_other);
-  if(!singleblock){
-    vorbis_encode_tonemask_setup(vi,hi->block[2].tone_mask_setting,2,
-                                 setup->psy_tone_masteratt,
-                                 setup->psy_tone_0dB,
-                                 setup->psy_tone_adj_other);
-    vorbis_encode_tonemask_setup(vi,hi->block[3].tone_mask_setting,3,
-                                 setup->psy_tone_masteratt,
-                                 setup->psy_tone_0dB,
-                                 setup->psy_tone_adj_long);
-  }
-
-  /* noise companding setup */
-  vorbis_encode_compand_setup(vi,hi->block[i0].noise_compand_setting,0,
-                              setup->psy_noise_compand,
-                              setup->psy_noise_compand_short_mapping);
-  vorbis_encode_compand_setup(vi,hi->block[1].noise_compand_setting,1,
-                              setup->psy_noise_compand,
-                              setup->psy_noise_compand_short_mapping);
-  if(!singleblock){
-    vorbis_encode_compand_setup(vi,hi->block[2].noise_compand_setting,2,
-                                setup->psy_noise_compand,
-                                setup->psy_noise_compand_long_mapping);
-    vorbis_encode_compand_setup(vi,hi->block[3].noise_compand_setting,3,
-                                setup->psy_noise_compand,
-                                setup->psy_noise_compand_long_mapping);
-  }
-
-  /* peak guarding setup  */
-  vorbis_encode_peak_setup(vi,hi->block[i0].tone_peaklimit_setting,0,
-                           setup->psy_tone_dBsuppress);
-  vorbis_encode_peak_setup(vi,hi->block[1].tone_peaklimit_setting,1,
-                           setup->psy_tone_dBsuppress);
-  if(!singleblock){
-    vorbis_encode_peak_setup(vi,hi->block[2].tone_peaklimit_setting,2,
-                             setup->psy_tone_dBsuppress);
-    vorbis_encode_peak_setup(vi,hi->block[3].tone_peaklimit_setting,3,
-                             setup->psy_tone_dBsuppress);
-  }
-
-  /* noise bias setup */
-  vorbis_encode_noisebias_setup(vi,hi->block[i0].noise_bias_setting,0,
-                                setup->psy_noise_dBsuppress,
-                                setup->psy_noise_bias_impulse,
-                                setup->psy_noiseguards,
-                                (i0==0?hi->impulse_noisetune:0.));
-  vorbis_encode_noisebias_setup(vi,hi->block[1].noise_bias_setting,1,
-                                setup->psy_noise_dBsuppress,
-                                setup->psy_noise_bias_padding,
-                                setup->psy_noiseguards,0.);
-  if(!singleblock){
-    vorbis_encode_noisebias_setup(vi,hi->block[2].noise_bias_setting,2,
-                                  setup->psy_noise_dBsuppress,
-                                  setup->psy_noise_bias_trans,
-                                  setup->psy_noiseguards,0.);
-    vorbis_encode_noisebias_setup(vi,hi->block[3].noise_bias_setting,3,
-                                  setup->psy_noise_dBsuppress,
-                                  setup->psy_noise_bias_long,
-                                  setup->psy_noiseguards,0.);
-  }
-
-  vorbis_encode_ath_setup(vi,0);
-  vorbis_encode_ath_setup(vi,1);
-  if(!singleblock){
-    vorbis_encode_ath_setup(vi,2);
-    vorbis_encode_ath_setup(vi,3);
-  }
-
-  vorbis_encode_map_n_res_setup(vi,hi->base_setting,setup->maps);
-
-  /* set bitrate readonlies and management */
-  if(hi->bitrate_av>0)
-    vi->bitrate_nominal=hi->bitrate_av;
-  else{
-    vi->bitrate_nominal=setting_to_approx_bitrate(vi);
-  }
-
-  vi->bitrate_lower=hi->bitrate_min;
-  vi->bitrate_upper=hi->bitrate_max;
-  if(hi->bitrate_av)
-    vi->bitrate_window=(double)hi->bitrate_reservoir/hi->bitrate_av;
-  else
-    vi->bitrate_window=0.;
-
-  if(hi->managed){
-    ci->bi.avg_rate=hi->bitrate_av;
-    ci->bi.min_rate=hi->bitrate_min;
-    ci->bi.max_rate=hi->bitrate_max;
-
-    ci->bi.reservoir_bits=hi->bitrate_reservoir;
-    ci->bi.reservoir_bias=
-      hi->bitrate_reservoir_bias;
-
-    ci->bi.slew_damp=hi->bitrate_av_damp;
-
-  }
-
-  return(0);
-
-}
-
-static void vorbis_encode_setup_setting(vorbis_info *vi,
-                                       long  channels,
-                                       long  rate){
-  int i,is;
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  highlevel_encode_setup *hi=&ci->hi;
-  const ve_setup_data_template *setup=(ve_setup_data_template*)hi->setup;
-  double ds;
-
-  vi->version=0;
-  vi->channels=channels;
-  vi->rate=rate;
-
-  hi->impulse_block_p=1;
-  hi->noise_normalize_p=1;
-
-  is=hi->base_setting;
-  ds=hi->base_setting-is;
-
-  hi->stereo_point_setting=hi->base_setting;
-
-  if(!hi->lowpass_altered)
-    hi->lowpass_kHz=
-      setup->psy_lowpass[is]*(1.-ds)+setup->psy_lowpass[is+1]*ds;
-
-  hi->ath_floating_dB=setup->psy_ath_float[is]*(1.-ds)+
-    setup->psy_ath_float[is+1]*ds;
-  hi->ath_absolute_dB=setup->psy_ath_abs[is]*(1.-ds)+
-    setup->psy_ath_abs[is+1]*ds;
-
-  hi->amplitude_track_dBpersec=-6.;
-  hi->trigger_setting=hi->base_setting;
-
-  for(i=0;i<4;i++){
-    hi->block[i].tone_mask_setting=hi->base_setting;
-    hi->block[i].tone_peaklimit_setting=hi->base_setting;
-    hi->block[i].noise_bias_setting=hi->base_setting;
-    hi->block[i].noise_compand_setting=hi->base_setting;
-  }
-}
-
-int vorbis_encode_setup_vbr(vorbis_info *vi,
-                            long  channels,
-                            long  rate,
-                            float quality){
-  codec_setup_info *ci=(codec_setup_info*) vi->codec_setup;
-  highlevel_encode_setup *hi=&ci->hi;
-
-  quality+=.0000001;
-  if(quality>=1.)quality=.9999;
-
-  hi->req=quality;
-  hi->setup=get_setup_template(channels,rate,quality,0,&hi->base_setting);
-  if(!hi->setup)return OV_EIMPL;
-
-  vorbis_encode_setup_setting(vi,channels,rate);
-  hi->managed=0;
-  hi->coupling_p=1;
-
-  return 0;
-}
-
-int vorbis_encode_init_vbr(vorbis_info *vi,
-                           long channels,
-                           long rate,
-
-                           float base_quality /* 0. to 1. */
-                           ){
-  int ret=0;
-
-  ret=vorbis_encode_setup_vbr(vi,channels,rate,base_quality);
-
-  if(ret){
-    vorbis_info_clear(vi);
-    return ret;
-  }
-  ret=vorbis_encode_setup_init(vi);
-  if(ret)
-    vorbis_info_clear(vi);
-  return(ret);
-}
-
-int vorbis_encode_setup_managed(vorbis_info *vi,
-                                long channels,
-                                long rate,
-
-                                long max_bitrate,
-                                long nominal_bitrate,
-                                long min_bitrate){
-
-  codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-  highlevel_encode_setup *hi=&ci->hi;
-  double tnominal=nominal_bitrate;
-
-  if(nominal_bitrate<=0.){
-    if(max_bitrate>0.){
-      if(min_bitrate>0.)
-        nominal_bitrate=(max_bitrate+min_bitrate)*.5;
-      else
-        nominal_bitrate=max_bitrate*.875;
-    }else{
-      if(min_bitrate>0.){
-        nominal_bitrate=min_bitrate;
-      }else{
-        return(OV_EINVAL);
-      }
-    }
-  }
-
-  hi->req=nominal_bitrate;
-  hi->setup=get_setup_template(channels,rate,nominal_bitrate,1,&hi->base_setting);
-  if(!hi->setup)return OV_EIMPL;
-
-  vorbis_encode_setup_setting(vi,channels,rate);
-
-  /* initialize management with sane defaults */
-  hi->coupling_p=1;
-  hi->managed=1;
-  hi->bitrate_min=min_bitrate;
-  hi->bitrate_max=max_bitrate;
-  hi->bitrate_av=tnominal;
-  hi->bitrate_av_damp=1.5f; /* full range in no less than 1.5 second */
-  hi->bitrate_reservoir=nominal_bitrate*2;
-  hi->bitrate_reservoir_bias=.1; /* bias toward hoarding bits */
-
-  return(0);
-
-}
-
-int vorbis_encode_init(vorbis_info *vi,
-                       long channels,
-                       long rate,
-
-                       long max_bitrate,
-                       long nominal_bitrate,
-                       long min_bitrate){
-
-  int ret=vorbis_encode_setup_managed(vi,channels,rate,
-                                      max_bitrate,
-                                      nominal_bitrate,
-                                      min_bitrate);
-  if(ret){
-    vorbis_info_clear(vi);
-    return(ret);
-  }
-
-  ret=vorbis_encode_setup_init(vi);
-  if(ret)
-    vorbis_info_clear(vi);
-  return(ret);
-}
-
-int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){
-  if(vi){
-    codec_setup_info *ci=(codec_setup_info*)vi->codec_setup;
-    highlevel_encode_setup *hi=&ci->hi;
-    int setp=(number&0xf); /* a read request has a low nibble of 0 */
-
-    if(setp && hi->set_in_stone)return(OV_EINVAL);
-
-    switch(number){
-
-    /* now deprecated *****************/
-    case OV_ECTL_RATEMANAGE_GET:
-      {
-
-        struct ovectl_ratemanage_arg *ai=
-          (struct ovectl_ratemanage_arg *)arg;
-
-        ai->management_active=hi->managed;
-        ai->bitrate_hard_window=ai->bitrate_av_window=
-          (double)hi->bitrate_reservoir/vi->rate;
-        ai->bitrate_av_window_center=1.;
-        ai->bitrate_hard_min=hi->bitrate_min;
-        ai->bitrate_hard_max=hi->bitrate_max;
-        ai->bitrate_av_lo=hi->bitrate_av;
-        ai->bitrate_av_hi=hi->bitrate_av;
-
-      }
-      return(0);
-
-    /* now deprecated *****************/
-    case OV_ECTL_RATEMANAGE_SET:
-      {
-        struct ovectl_ratemanage_arg *ai=
-          (struct ovectl_ratemanage_arg *)arg;
-        if(ai==NULL){
-          hi->managed=0;
-        }else{
-          hi->managed=ai->management_active;
-          vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_AVG,arg);
-          vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_HARD,arg);
-        }
-      }
-      return 0;
-
-    /* now deprecated *****************/
-    case OV_ECTL_RATEMANAGE_AVG:
-      {
-        struct ovectl_ratemanage_arg *ai=
-          (struct ovectl_ratemanage_arg *)arg;
-        if(ai==NULL){
-          hi->bitrate_av=0;
-        }else{
-          hi->bitrate_av=(ai->bitrate_av_lo+ai->bitrate_av_hi)*.5;
-        }
-      }
-      return(0);
-    /* now deprecated *****************/
-    case OV_ECTL_RATEMANAGE_HARD:
-      {
-        struct ovectl_ratemanage_arg *ai=
-          (struct ovectl_ratemanage_arg *)arg;
-        if(ai==NULL){
-          hi->bitrate_min=0;
-          hi->bitrate_max=0;
-        }else{
-          hi->bitrate_min=ai->bitrate_hard_min;
-          hi->bitrate_max=ai->bitrate_hard_max;
-          hi->bitrate_reservoir=ai->bitrate_hard_window*
-            (hi->bitrate_max+hi->bitrate_min)*.5;
-        }
-        if(hi->bitrate_reservoir<128.)
-          hi->bitrate_reservoir=128.;
-      }
-      return(0);
-
-      /* replacement ratemanage interface */
-    case OV_ECTL_RATEMANAGE2_GET:
-      {
-        struct ovectl_ratemanage2_arg *ai=
-          (struct ovectl_ratemanage2_arg *)arg;
-        if(ai==NULL)return OV_EINVAL;
-
-        ai->management_active=hi->managed;
-        ai->bitrate_limit_min_kbps=hi->bitrate_min/1000;
-        ai->bitrate_limit_max_kbps=hi->bitrate_max/1000;
-        ai->bitrate_average_kbps=hi->bitrate_av/1000;
-        ai->bitrate_average_damping=hi->bitrate_av_damp;
-        ai->bitrate_limit_reservoir_bits=hi->bitrate_reservoir;
-        ai->bitrate_limit_reservoir_bias=hi->bitrate_reservoir_bias;
-      }
-      return (0);
-    case OV_ECTL_RATEMANAGE2_SET:
-      {
-        struct ovectl_ratemanage2_arg *ai=
-          (struct ovectl_ratemanage2_arg *)arg;
-        if(ai==NULL){
-          hi->managed=0;
-        }else{
-          /* sanity check; only catch invariant violations */
-          if(ai->bitrate_limit_min_kbps>0 &&
-             ai->bitrate_average_kbps>0 &&
-             ai->bitrate_limit_min_kbps>ai->bitrate_average_kbps)
-            return OV_EINVAL;
-
-          if(ai->bitrate_limit_max_kbps>0 &&
-             ai->bitrate_average_kbps>0 &&
-             ai->bitrate_limit_max_kbps<ai->bitrate_average_kbps)
-            return OV_EINVAL;
-
-          if(ai->bitrate_limit_min_kbps>0 &&
-             ai->bitrate_limit_max_kbps>0 &&
-             ai->bitrate_limit_min_kbps>ai->bitrate_limit_max_kbps)
-            return OV_EINVAL;
-
-          if(ai->bitrate_average_damping <= 0.)
-            return OV_EINVAL;
-
-          if(ai->bitrate_limit_reservoir_bits < 0)
-            return OV_EINVAL;
-
-          if(ai->bitrate_limit_reservoir_bias < 0.)
-            return OV_EINVAL;
-
-          if(ai->bitrate_limit_reservoir_bias > 1.)
-            return OV_EINVAL;
-
-          hi->managed=ai->management_active;
-          hi->bitrate_min=ai->bitrate_limit_min_kbps * 1000;
-          hi->bitrate_max=ai->bitrate_limit_max_kbps * 1000;
-          hi->bitrate_av=ai->bitrate_average_kbps * 1000;
-          hi->bitrate_av_damp=ai->bitrate_average_damping;
-          hi->bitrate_reservoir=ai->bitrate_limit_reservoir_bits;
-          hi->bitrate_reservoir_bias=ai->bitrate_limit_reservoir_bias;
-        }
-      }
-      return 0;
-
-    case OV_ECTL_LOWPASS_GET:
-      {
-        double *farg=(double *)arg;
-        *farg=hi->lowpass_kHz;
-      }
-      return(0);
-    case OV_ECTL_LOWPASS_SET:
-      {
-        double *farg=(double *)arg;
-        hi->lowpass_kHz=*farg;
-
-        if(hi->lowpass_kHz<2.)hi->lowpass_kHz=2.;
-        if(hi->lowpass_kHz>99.)hi->lowpass_kHz=99.;
-        hi->lowpass_altered=1;
-      }
-      return(0);
-    case OV_ECTL_IBLOCK_GET:
-      {
-        double *farg=(double *)arg;
-        *farg=hi->impulse_noisetune;
-      }
-      return(0);
-    case OV_ECTL_IBLOCK_SET:
-      {
-        double *farg=(double *)arg;
-        hi->impulse_noisetune=*farg;
-
-        if(hi->impulse_noisetune>0.)hi->impulse_noisetune=0.;
-        if(hi->impulse_noisetune<-15.)hi->impulse_noisetune=-15.;
-      }
-      return(0);
-    case OV_ECTL_COUPLING_GET:
-      {
-        int *iarg=(int *)arg;
-        *iarg=hi->coupling_p;
-      }
-      return(0);
-    case OV_ECTL_COUPLING_SET:
-      {
-        const void *new_template;
-        double new_base=0.;
-        int *iarg=(int *)arg;
-        hi->coupling_p=((*iarg)!=0);
-
-        /* Fetching a new template can alter the base_setting, which
-           many other parameters are based on.  Right now, the only
-           parameter drawn from the base_setting that can be altered
-           by an encctl is the lowpass, so that is explictly flagged
-           to not be overwritten when we fetch a new template and
-           recompute the dependant settings */
-        new_template = get_setup_template(hi->coupling_p?vi->channels:-1,
-                                          vi->rate,
-                                          hi->req,
-                                          hi->managed,
-                                          &new_base);
-        if(!hi->setup)return OV_EIMPL;
-        hi->setup=new_template;
-        hi->base_setting=new_base;
-        vorbis_encode_setup_setting(vi,vi->channels,vi->rate);
-      }
-      return(0);
-    }
-    return(OV_EIMPL);
-  }
-  return(OV_EINVAL);
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c
deleted file mode 100644
index 83af2e8..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c
+++ /dev/null
@@ -1,2342 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.c 17573 2010-10-27 14:53:59Z xiphmont $
-
- ********************************************************************/
-
-#ifdef JUCE_MSVC
- #pragma warning (disable: 4456 4457 4459)
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <math.h>
-
-#include "../../codec.h"
-#include "../../vorbisfile.h"
-
-#include "os.h"
-#include "misc.h"
-
-/* A 'chained bitstream' is a Vorbis bitstream that contains more than
-   one logical bitstream arranged end to end (the only form of Ogg
-   multiplexing allowed in a Vorbis bitstream; grouping [parallel
-   multiplexing] is not allowed in Vorbis) */
-
-/* A Vorbis file can be played beginning to end (streamed) without
-   worrying ahead of time about chaining (see decoder_example.c).  If
-   we have the whole file, however, and want random access
-   (seeking/scrubbing) or desire to know the total length/time of a
-   file, we need to account for the possibility of chaining. */
-
-/* We can handle things a number of ways; we can determine the entire
-   bitstream structure right off the bat, or find pieces on demand.
-   This example determines and caches structure for the entire
-   bitstream, but builds a virtual decoder on the fly when moving
-   between links in the chain. */
-
-/* There are also different ways to implement seeking.  Enough
-   information exists in an Ogg bitstream to seek to
-   sample-granularity positions in the output.  Or, one can seek by
-   picking some portion of the stream roughly in the desired area if
-   we only want coarse navigation through the stream. */
-
-/*************************************************************************
- * Many, many internal helpers.  The intention is not to be confusing;
- * rampant duplication and monolithic function implementation would be
- * harder to understand anyway.  The high level functions are last.  Begin
- * grokking near the end of the file */
-
-/* read a little more data from the file/pipe into the ogg_sync framer
-*/
-#define CHUNKSIZE 65536 /* greater-than-page-size granularity seeking */
-#define READSIZE 2048 /* a smaller read size is needed for low-rate streaming. */
-
-static long _get_data(OggVorbis_File *vf){
-  errno=0;
-  if(!(vf->callbacks.read_func))return(-1);
-  if(vf->datasource){
-    char *buffer=ogg_sync_buffer(&vf->oy,READSIZE);
-    long bytes=(vf->callbacks.read_func)(buffer,1,READSIZE,vf->datasource);
-    if(bytes>0)ogg_sync_wrote(&vf->oy,bytes);
-    if(bytes==0 && errno)return(-1);
-    return(bytes);
-  }else
-    return(0);
-}
-
-/* save a tiny smidge of verbosity to make the code more readable */
-static int _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){
-  if(vf->datasource){
-    if(!(vf->callbacks.seek_func)||
-       (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET) == -1)
-      return OV_EREAD;
-    vf->offset=offset;
-    ogg_sync_reset(&vf->oy);
-  }else{
-    /* shouldn't happen unless someone writes a broken callback */
-    return OV_EFAULT;
-  }
-  return 0;
-}
-
-/* The read/seek functions track absolute position within the stream */
-
-/* from the head of the stream, get the next page.  boundary specifies
-   if the function is allowed to fetch more data from the stream (and
-   how much) or only use internally buffered data.
-
-   boundary: -1) unbounded search
-              0) read no additional data; use cached only
-              n) search for a new page beginning for n bytes
-
-   return:   <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD)
-              n) found a page at absolute offset n */
-
-static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og,
-                                  ogg_int64_t boundary){
-  if(boundary>0)boundary+=vf->offset;
-  while(1){
-    long more;
-
-    if(boundary>0 && vf->offset>=boundary)return(OV_FALSE);
-    more=ogg_sync_pageseek(&vf->oy,og);
-
-    if(more<0){
-      /* skipped n bytes */
-      vf->offset-=more;
-    }else{
-      if(more==0){
-        /* send more paramedics */
-        if(!boundary)return(OV_FALSE);
-        {
-          long ret=_get_data(vf);
-          if(ret==0)return(OV_EOF);
-          if(ret<0)return(OV_EREAD);
-        }
-      }else{
-        /* got a page.  Return the offset at the page beginning,
-           advance the internal offset past the page end */
-        ogg_int64_t ret=vf->offset;
-        vf->offset+=more;
-        return(ret);
-
-      }
-    }
-  }
-}
-
-/* find the latest page beginning before the current stream cursor
-   position. Much dirtier than the above as Ogg doesn't have any
-   backward search linkage.  no 'readp' as it will certainly have to
-   read. */
-/* returns offset or OV_EREAD, OV_FAULT */
-static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){
-  ogg_int64_t begin=vf->offset;
-  ogg_int64_t end=begin;
-  ogg_int64_t ret;
-  ogg_int64_t offset=-1;
-
-  while(offset==-1){
-    begin-=CHUNKSIZE;
-    if(begin<0)
-      begin=0;
-
-    ret=_seek_helper(vf,begin);
-    if(ret)return(ret);
-
-    while(vf->offset<end){
-      memset(og,0,sizeof(*og));
-      ret=_get_next_page(vf,og,end-vf->offset);
-      if(ret==OV_EREAD)return(OV_EREAD);
-      if(ret<0){
-        break;
-      }else{
-        offset=ret;
-      }
-    }
-  }
-
-  /* In a fully compliant, non-multiplexed stream, we'll still be
-     holding the last page.  In multiplexed (or noncompliant streams),
-     we will probably have to re-read the last page we saw */
-  if(og->header_len==0){
-    ret=_seek_helper(vf,offset);
-    if(ret)return(ret);
-
-    ret=_get_next_page(vf,og,CHUNKSIZE);
-    if(ret<0)
-      /* this shouldn't be possible */
-      return(OV_EFAULT);
-  }
-
-  return(offset);
-}
-
-static void _add_serialno(ogg_page *og,long **serialno_list, int *n){
-  long s = ogg_page_serialno(og);
-  (*n)++;
-
-  if(*serialno_list){
-    *serialno_list = (long*)_ogg_realloc(*serialno_list, sizeof(**serialno_list)*(*n));
-  }else{
-    *serialno_list = (long*)_ogg_malloc(sizeof(**serialno_list));
-  }
-
-  (*serialno_list)[(*n)-1] = s;
-}
-
-/* returns nonzero if found */
-static int _lookup_serialno(long s, long *serialno_list, int n){
-  if(serialno_list){
-    while(n--){
-      if(*serialno_list == s) return 1;
-      serialno_list++;
-    }
-  }
-  return 0;
-}
-
-static int _lookup_page_serialno(ogg_page *og, long *serialno_list, int n){
-  long s = ogg_page_serialno(og);
-  return _lookup_serialno(s,serialno_list,n);
-}
-
-/* performs the same search as _get_prev_page, but prefers pages of
-   the specified serial number. If a page of the specified serialno is
-   spotted during the seek-back-and-read-forward, it will return the
-   info of last page of the matching serial number instead of the very
-   last page.  If no page of the specified serialno is seen, it will
-   return the info of last page and alter *serialno.  */
-static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf,
-                                         long *serial_list, int serial_n,
-                                         int *serialno, ogg_int64_t *granpos){
-  ogg_page og;
-  ogg_int64_t begin=vf->offset;
-  ogg_int64_t end=begin;
-  ogg_int64_t ret;
-
-  ogg_int64_t prefoffset=-1;
-  ogg_int64_t offset=-1;
-  ogg_int64_t ret_serialno=-1;
-  ogg_int64_t ret_gran=-1;
-
-  while(offset==-1){
-    begin-=CHUNKSIZE;
-    if(begin<0)
-      begin=0;
-
-    ret=_seek_helper(vf,begin);
-    if(ret)return(ret);
-
-    while(vf->offset<end){
-      ret=_get_next_page(vf,&og,end-vf->offset);
-      if(ret==OV_EREAD)return(OV_EREAD);
-      if(ret<0){
-        break;
-      }else{
-        ret_serialno=ogg_page_serialno(&og);
-        ret_gran=ogg_page_granulepos(&og);
-        offset=ret;
-
-        if(ret_serialno == *serialno){
-          prefoffset=ret;
-          *granpos=ret_gran;
-        }
-
-        if(!_lookup_serialno(ret_serialno,serial_list,serial_n)){
-          /* we fell off the end of the link, which means we seeked
-             back too far and shouldn't have been looking in that link
-             to begin with.  If we found the preferred serial number,
-             forget that we saw it. */
-          prefoffset=-1;
-        }
-      }
-    }
-  }
-
-  /* we're not interested in the page... just the serialno and granpos. */
-  if(prefoffset>=0)return(prefoffset);
-
-  *serialno = ret_serialno;
-  *granpos = ret_gran;
-  return(offset);
-
-}
-
-/* uses the local ogg_stream storage in vf; this is important for
-   non-streaming input sources */
-static int _fetch_headers(OggVorbis_File *vf,vorbis_info *vi,vorbis_comment *vc,
-                          long **serialno_list, int *serialno_n,
-                          ogg_page *og_ptr){
-  ogg_page og;
-  ogg_packet op;
-  int i,ret;
-  int allbos=0;
-
-  if(!og_ptr){
-    ogg_int64_t llret=_get_next_page(vf,&og,CHUNKSIZE);
-    if(llret==OV_EREAD)return(OV_EREAD);
-    if(llret<0)return(OV_ENOTVORBIS);
-    og_ptr=&og;
-  }
-
-  vorbis_info_init(vi);
-  vorbis_comment_init(vc);
-  vf->ready_state=OPENED;
-
-  /* extract the serialnos of all BOS pages + the first set of vorbis
-     headers we see in the link */
-
-  while(ogg_page_bos(og_ptr)){
-    if(serialno_list){
-      if(_lookup_page_serialno(og_ptr,*serialno_list,*serialno_n)){
-        /* a dupe serialnumber in an initial header packet set == invalid stream */
-        if(*serialno_list)_ogg_free(*serialno_list);
-        *serialno_list=0;
-        *serialno_n=0;
-        ret=OV_EBADHEADER;
-        goto bail_header;
-      }
-
-      _add_serialno(og_ptr,serialno_list,serialno_n);
-    }
-
-    if(vf->ready_state<STREAMSET){
-      /* we don't have a vorbis stream in this link yet, so begin
-         prospective stream setup. We need a stream to get packets */
-      ogg_stream_reset_serialno(&vf->os,ogg_page_serialno(og_ptr));
-      ogg_stream_pagein(&vf->os,og_ptr);
-
-      if(ogg_stream_packetout(&vf->os,&op) > 0 &&
-         vorbis_synthesis_idheader(&op)){
-        /* vorbis header; continue setup */
-        vf->ready_state=STREAMSET;
-        if((ret=vorbis_synthesis_headerin(vi,vc,&op))){
-          ret=OV_EBADHEADER;
-          goto bail_header;
-        }
-      }
-    }
-
-    /* get next page */
-    {
-      ogg_int64_t llret=_get_next_page(vf,og_ptr,CHUNKSIZE);
-      if(llret==OV_EREAD){
-        ret=OV_EREAD;
-        goto bail_header;
-      }
-      if(llret<0){
-        ret=OV_ENOTVORBIS;
-        goto bail_header;
-      }
-
-      /* if this page also belongs to our vorbis stream, submit it and break */
-      if(vf->ready_state==STREAMSET &&
-         vf->os.serialno == ogg_page_serialno(og_ptr)){
-        ogg_stream_pagein(&vf->os,og_ptr);
-        break;
-      }
-    }
-  }
-
-  if(vf->ready_state!=STREAMSET){
-    ret = OV_ENOTVORBIS;
-    goto bail_header;
-  }
-
-  while(1){
-
-    i=0;
-    while(i<2){ /* get a page loop */
-
-      while(i<2){ /* get a packet loop */
-
-        int result=ogg_stream_packetout(&vf->os,&op);
-        if(result==0)break;
-        if(result==-1){
-          ret=OV_EBADHEADER;
-          goto bail_header;
-        }
-
-        if((ret=vorbis_synthesis_headerin(vi,vc,&op)))
-          goto bail_header;
-
-        i++;
-      }
-
-      while(i<2){
-        if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){
-          ret=OV_EBADHEADER;
-          goto bail_header;
-        }
-
-        /* if this page belongs to the correct stream, go parse it */
-        if(vf->os.serialno == ogg_page_serialno(og_ptr)){
-          ogg_stream_pagein(&vf->os,og_ptr);
-          break;
-        }
-
-        /* if we never see the final vorbis headers before the link
-           ends, abort */
-        if(ogg_page_bos(og_ptr)){
-          if(allbos){
-            ret = OV_EBADHEADER;
-            goto bail_header;
-          }else
-            allbos=1;
-        }
-
-        /* otherwise, keep looking */
-      }
-    }
-
-    return 0;
-  }
-
- bail_header:
-  vorbis_info_clear(vi);
-  vorbis_comment_clear(vc);
-  vf->ready_state=OPENED;
-
-  return ret;
-}
-
-/* Starting from current cursor position, get initial PCM offset of
-   next page.  Consumes the page in the process without decoding
-   audio, however this is only called during stream parsing upon
-   seekable open. */
-static ogg_int64_t _initial_pcmoffset(OggVorbis_File *vf, vorbis_info *vi){
-  ogg_page    og;
-  ogg_int64_t accumulated=0;
-  long        lastblock=-1;
-  int         result;
-  int         serialno = vf->os.serialno;
-
-  while(1){
-    ogg_packet op;
-    if(_get_next_page(vf,&og,-1)<0)
-      break; /* should not be possible unless the file is truncated/mangled */
-
-    if(ogg_page_bos(&og)) break;
-    if(ogg_page_serialno(&og)!=serialno) continue;
-
-    /* count blocksizes of all frames in the page */
-    ogg_stream_pagein(&vf->os,&og);
-    while((result=ogg_stream_packetout(&vf->os,&op))){
-      if(result>0){ /* ignore holes */
-        long thisblock=vorbis_packet_blocksize(vi,&op);
-        if(lastblock!=-1)
-          accumulated+=(lastblock+thisblock)>>2;
-        lastblock=thisblock;
-      }
-    }
-
-    if(ogg_page_granulepos(&og)!=-1){
-      /* pcm offset of last packet on the first audio page */
-      accumulated= ogg_page_granulepos(&og)-accumulated;
-      break;
-    }
-  }
-
-  /* less than zero?  Either a corrupt file or a stream with samples
-     trimmed off the beginning, a normal occurrence; in both cases set
-     the offset to zero */
-  if(accumulated<0)accumulated=0;
-
-  return accumulated;
-}
-
-/* finds each bitstream link one at a time using a bisection search
-   (has to begin by knowing the offset of the lb's initial page).
-   Recurses for each link so it can alloc the link storage after
-   finding them all, then unroll and fill the cache at the same time */
-static int _bisect_forward_serialno(OggVorbis_File *vf,
-                                    ogg_int64_t begin,
-                                    ogg_int64_t searched,
-                                    ogg_int64_t end,
-                                    ogg_int64_t endgran,
-                                    int endserial,
-                                    long *currentno_list,
-                                    int  currentnos,
-                                    long m){
-  ogg_int64_t pcmoffset;
-  ogg_int64_t dataoffset=searched;
-  ogg_int64_t endsearched=end;
-  ogg_int64_t next=end;
-  ogg_int64_t searchgran=-1;
-  ogg_page og;
-  ogg_int64_t ret,last;
-  int serialno = vf->os.serialno;
-
-  /* invariants:
-     we have the headers and serialnos for the link beginning at 'begin'
-     we have the offset and granpos of the last page in the file (potentially
-       not a page we care about)
-  */
-
-  /* Is the last page in our list of current serialnumbers? */
-  if(_lookup_serialno(endserial,currentno_list,currentnos)){
-
-    /* last page is in the starting serialno list, so we've bisected
-       down to (or just started with) a single link.  Now we need to
-       find the last vorbis page belonging to the first vorbis stream
-       for this link. */
-
-    while(endserial != serialno){
-      endserial = serialno;
-      vf->offset=_get_prev_page_serial(vf,currentno_list,currentnos,&endserial,&endgran);
-    }
-
-    vf->links=m+1;
-    if(vf->offsets)_ogg_free(vf->offsets);
-    if(vf->serialnos)_ogg_free(vf->serialnos);
-    if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
-
-    vf->offsets=(ogg_int64_t*)_ogg_malloc((vf->links+1)*sizeof(*vf->offsets));
-    vf->vi=(vorbis_info*)_ogg_realloc(vf->vi,vf->links*sizeof(*vf->vi));
-    vf->vc=(vorbis_comment*)_ogg_realloc(vf->vc,vf->links*sizeof(*vf->vc));
-    vf->serialnos=(long*)_ogg_malloc(vf->links*sizeof(*vf->serialnos));
-    vf->dataoffsets=(ogg_int64_t*)_ogg_malloc(vf->links*sizeof(*vf->dataoffsets));
-    vf->pcmlengths=(ogg_int64_t*)_ogg_malloc(vf->links*2*sizeof(*vf->pcmlengths));
-
-    vf->offsets[m+1]=end;
-    vf->offsets[m]=begin;
-    vf->pcmlengths[m*2+1]=(endgran<0?0:endgran);
-
-  }else{
-
-    long *next_serialno_list=NULL;
-    int next_serialnos=0;
-    vorbis_info vi;
-    vorbis_comment vc;
-
-    /* the below guards against garbage seperating the last and
-       first pages of two links. */
-    while(searched<endsearched){
-      ogg_int64_t bisect;
-
-      if(endsearched-searched<CHUNKSIZE){
-        bisect=searched;
-      }else{
-        bisect=(searched+endsearched)/2;
-      }
-
-      if(bisect != vf->offset){
-        ret=_seek_helper(vf,bisect);
-        if(ret)return(ret);
-      }
-
-      last=_get_next_page(vf,&og,-1);
-      if(last==OV_EREAD)return(OV_EREAD);
-      if(last<0 || !_lookup_page_serialno(&og,currentno_list,currentnos)){
-        endsearched=bisect;
-        if(last>=0)next=last;
-      }else{
-        searched=vf->offset;
-      }
-    }
-
-    /* Bisection point found */
-
-    /* for the time being, fetch end PCM offset the simple way */
-    {
-      int testserial = serialno+1;
-      vf->offset = next;
-      while(testserial != serialno){
-        testserial = serialno;
-        vf->offset=_get_prev_page_serial(vf,currentno_list,currentnos,&testserial,&searchgran);
-      }
-    }
-
-    if(vf->offset!=next){
-      ret=_seek_helper(vf,next);
-      if(ret)return(ret);
-    }
-
-    ret=_fetch_headers(vf,&vi,&vc,&next_serialno_list,&next_serialnos,NULL);
-    if(ret)return(ret);
-    serialno = vf->os.serialno;
-    dataoffset = vf->offset;
-
-    /* this will consume a page, however the next bistection always
-       starts with a raw seek */
-    pcmoffset = _initial_pcmoffset(vf,&vi);
-
-    ret=_bisect_forward_serialno(vf,next,vf->offset,end,endgran,endserial,
-                                 next_serialno_list,next_serialnos,m+1);
-    if(ret)return(ret);
-
-    if(next_serialno_list)_ogg_free(next_serialno_list);
-
-    vf->offsets[m+1]=next;
-    vf->serialnos[m+1]=serialno;
-    vf->dataoffsets[m+1]=dataoffset;
-
-    vf->vi[m+1]=vi;
-    vf->vc[m+1]=vc;
-
-    vf->pcmlengths[m*2+1]=searchgran;
-    vf->pcmlengths[m*2+2]=pcmoffset;
-    vf->pcmlengths[m*2+3]-=pcmoffset;
-    if(vf->pcmlengths[m*2+3]<0)vf->pcmlengths[m*2+3]=0;
-  }
-  return(0);
-}
-
-static int _make_decode_ready(OggVorbis_File *vf){
-  if(vf->ready_state>STREAMSET)return 0;
-  if(vf->ready_state<STREAMSET)return OV_EFAULT;
-  if(vf->seekable){
-    if(vorbis_synthesis_init(&vf->vd,vf->vi+vf->current_link))
-      return OV_EBADLINK;
-  }else{
-    if(vorbis_synthesis_init(&vf->vd,vf->vi))
-      return OV_EBADLINK;
-  }
-  vorbis_block_init(&vf->vd,&vf->vb);
-  vf->ready_state=INITSET;
-  vf->bittrack=0.f;
-  vf->samptrack=0.f;
-  return 0;
-}
-
-static int _open_seekable2(OggVorbis_File *vf){
-  ogg_int64_t dataoffset=vf->dataoffsets[0],end,endgran=-1;
-  int endserial=vf->os.serialno;
-  int serialno=vf->os.serialno;
-
-  /* we're partially open and have a first link header state in
-     storage in vf */
-
-  /* fetch initial PCM offset */
-  ogg_int64_t pcmoffset = _initial_pcmoffset(vf,vf->vi);
-
-  /* we can seek, so set out learning all about this file */
-  if(vf->callbacks.seek_func && vf->callbacks.tell_func){
-    (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END);
-    vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource);
-  }else{
-    vf->offset=vf->end=-1;
-  }
-
-  /* If seek_func is implemented, tell_func must also be implemented */
-  if(vf->end==-1) return(OV_EINVAL);
-
-  /* Get the offset of the last page of the physical bitstream, or, if
-     we're lucky the last vorbis page of this link as most OggVorbis
-     files will contain a single logical bitstream */
-  end=_get_prev_page_serial(vf,vf->serialnos+2,vf->serialnos[1],&endserial,&endgran);
-  if(end<0)return(end);
-
-  /* now determine bitstream structure recursively */
-  if(_bisect_forward_serialno(vf,0,dataoffset,vf->offset,endgran,endserial,
-                              vf->serialnos+2,vf->serialnos[1],0)<0)return(OV_EREAD);
-
-  vf->offsets[0]=0;
-  vf->serialnos[0]=serialno;
-  vf->dataoffsets[0]=dataoffset;
-  vf->pcmlengths[0]=pcmoffset;
-  vf->pcmlengths[1]-=pcmoffset;
-  if(vf->pcmlengths[1]<0)vf->pcmlengths[1]=0;
-
-  return(ov_raw_seek(vf,dataoffset));
-}
-
-/* clear out the current logical bitstream decoder */
-static void _decode_clear(OggVorbis_File *vf){
-  vorbis_dsp_clear(&vf->vd);
-  vorbis_block_clear(&vf->vb);
-  vf->ready_state=OPENED;
-}
-
-/* fetch and process a packet.  Handles the case where we're at a
-   bitstream boundary and dumps the decoding machine.  If the decoding
-   machine is unloaded, it loads it.  It also keeps pcm_offset up to
-   date (seek and read both use this.  seek uses a special hack with
-   readp).
-
-   return: <0) error, OV_HOLE (lost packet) or OV_EOF
-            0) need more data (only if readp==0)
-            1) got a packet
-*/
-
-static int _fetch_and_process_packet(OggVorbis_File *vf,
-                                     ogg_packet *op_in,
-                                     int readp,
-                                     int spanp){
-  ogg_page og;
-
-  /* handle one packet.  Try to fetch it from current stream state */
-  /* extract packets from page */
-  while(1){
-
-    if(vf->ready_state==STREAMSET){
-      int ret=_make_decode_ready(vf);
-      if(ret<0)return ret;
-    }
-
-    /* process a packet if we can. */
-
-    if(vf->ready_state==INITSET){
-      int hs=vorbis_synthesis_halfrate_p(vf->vi);
-
-      while(1) {
-              ogg_packet op;
-              ogg_packet *op_ptr=(op_in?op_in:&op);
-        int result=ogg_stream_packetout(&vf->os,op_ptr);
-        ogg_int64_t granulepos;
-
-        op_in=NULL;
-        if(result==-1)return(OV_HOLE); /* hole in the data. */
-        if(result>0){
-          /* got a packet.  process it */
-          granulepos=op_ptr->granulepos;
-          if(!vorbis_synthesis(&vf->vb,op_ptr)){ /* lazy check for lazy
-                                                    header handling.  The
-                                                    header packets aren't
-                                                    audio, so if/when we
-                                                    submit them,
-                                                    vorbis_synthesis will
-                                                    reject them */
-
-            /* suck in the synthesis data and track bitrate */
-            {
-              int oldsamples=vorbis_synthesis_pcmout(&vf->vd,NULL);
-              /* for proper use of libvorbis within libvorbisfile,
-                 oldsamples will always be zero. */
-              if(oldsamples)return(OV_EFAULT);
-
-              vorbis_synthesis_blockin(&vf->vd,&vf->vb);
-              vf->samptrack+=(vorbis_synthesis_pcmout(&vf->vd,NULL)<<hs);
-              vf->bittrack+=op_ptr->bytes*8;
-            }
-
-            /* update the pcm offset. */
-            if(granulepos!=-1 && !op_ptr->e_o_s){
-              int link=(vf->seekable?vf->current_link:0);
-              int i,samples;
-
-              /* this packet has a pcm_offset on it (the last packet
-                 completed on a page carries the offset) After processing
-                 (above), we know the pcm position of the *last* sample
-                 ready to be returned. Find the offset of the *first*
-
-                 As an aside, this trick is inaccurate if we begin
-                 reading anew right at the last page; the end-of-stream
-                 granulepos declares the last frame in the stream, and the
-                 last packet of the last page may be a partial frame.
-                 So, we need a previous granulepos from an in-sequence page
-                 to have a reference point.  Thus the !op_ptr->e_o_s clause
-                 above */
-
-              if(vf->seekable && link>0)
-                granulepos-=vf->pcmlengths[link*2];
-              if(granulepos<0)granulepos=0; /* actually, this
-                                               shouldn't be possible
-                                               here unless the stream
-                                               is very broken */
-
-              samples=(vorbis_synthesis_pcmout(&vf->vd,NULL)<<hs);
-
-              granulepos-=samples;
-              for(i=0;i<link;i++)
-                granulepos+=vf->pcmlengths[i*2+1];
-              vf->pcm_offset=granulepos;
-            }
-            return(1);
-          }
-        }
-        else
-          break;
-      }
-    }
-
-    if(vf->ready_state>=OPENED){
-      ogg_int64_t ret;
-
-      while(1){
-        /* the loop is not strictly necessary, but there's no sense in
-           doing the extra checks of the larger loop for the common
-           case in a multiplexed bistream where the page is simply
-           part of a different logical bitstream; keep reading until
-           we get one with the correct serialno */
-
-        if(!readp)return(0);
-        if((ret=_get_next_page(vf,&og,-1))<0){
-          return(OV_EOF); /* eof. leave unitialized */
-        }
-
-        /* bitrate tracking; add the header's bytes here, the body bytes
-           are done by packet above */
-        vf->bittrack+=og.header_len*8;
-
-        if(vf->ready_state==INITSET){
-          if(vf->current_serialno!=ogg_page_serialno(&og)){
-
-            /* two possibilities:
-               1) our decoding just traversed a bitstream boundary
-               2) another stream is multiplexed into this logical section */
-
-            if(ogg_page_bos(&og)){
-              /* boundary case */
-              if(!spanp)
-                return(OV_EOF);
-
-              _decode_clear(vf);
-
-              if(!vf->seekable){
-                vorbis_info_clear(vf->vi);
-                vorbis_comment_clear(vf->vc);
-              }
-              break;
-
-            }else
-              continue; /* possibility #2 */
-          }
-        }
-
-        break;
-      }
-    }
-
-    /* Do we need to load a new machine before submitting the page? */
-    /* This is different in the seekable and non-seekable cases.
-
-       In the seekable case, we already have all the header
-       information loaded and cached; we just initialize the machine
-       with it and continue on our merry way.
-
-       In the non-seekable (streaming) case, we'll only be at a
-       boundary if we just left the previous logical bitstream and
-       we're now nominally at the header of the next bitstream
-    */
-
-    if(vf->ready_state!=INITSET){
-      int link;
-
-      if(vf->ready_state<STREAMSET){
-        if(vf->seekable){
-          long serialno = ogg_page_serialno(&og);
-
-          /* match the serialno to bitstream section.  We use this rather than
-             offset positions to avoid problems near logical bitstream
-             boundaries */
-
-          for(link=0;link<vf->links;link++)
-            if(vf->serialnos[link]==serialno)break;
-
-          if(link==vf->links) continue; /* not the desired Vorbis
-                                           bitstream section; keep
-                                           trying */
-
-          vf->current_serialno=serialno;
-          vf->current_link=link;
-
-          ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
-          vf->ready_state=STREAMSET;
-
-        }else{
-          /* we're streaming */
-          /* fetch the three header packets, build the info struct */
-
-          int ret=_fetch_headers(vf,vf->vi,vf->vc,NULL,NULL,&og);
-          if(ret)return(ret);
-          vf->current_serialno=vf->os.serialno;
-          vf->current_link++;
-          //link=0;
-        }
-      }
-    }
-
-    /* the buffered page is the data we want, and we're ready for it;
-       add it to the stream state */
-    ogg_stream_pagein(&vf->os,&og);
-
-  }
-}
-
-/* if, eg, 64 bit stdio is configured by default, this will build with
-   fseek64 */
-static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){
-  if(f==NULL)return(-1);
-  return fseek(f,off,whence);
-}
-
-static int _ov_open1(void *f,OggVorbis_File *vf,const char *initial,
-                     long ibytes, ov_callbacks callbacks){
-  int offsettest=((f && callbacks.seek_func)?callbacks.seek_func(f,0,SEEK_CUR):-1);
-  long *serialno_list=NULL;
-  int serialno_list_size=0;
-  int ret;
-
-  memset(vf,0,sizeof(*vf));
-  vf->datasource=f;
-  vf->callbacks = callbacks;
-
-  /* init the framing state */
-  ogg_sync_init(&vf->oy);
-
-  /* perhaps some data was previously read into a buffer for testing
-     against other stream types.  Allow initialization from this
-     previously read data (especially as we may be reading from a
-     non-seekable stream) */
-  if(initial){
-    char *buffer=ogg_sync_buffer(&vf->oy,ibytes);
-    memcpy(buffer,initial,ibytes);
-    ogg_sync_wrote(&vf->oy,ibytes);
-  }
-
-  /* can we seek? Stevens suggests the seek test was portable */
-  if(offsettest!=-1)vf->seekable=1;
-
-  /* No seeking yet; Set up a 'single' (current) logical bitstream
-     entry for partial open */
-  vf->links=1;
-  vf->vi=(vorbis_info*) _ogg_calloc(vf->links,sizeof(*vf->vi));
-  vf->vc=(vorbis_comment*) _ogg_calloc(vf->links,sizeof(*vf->vc));
-  ogg_stream_init(&vf->os,-1); /* fill in the serialno later */
-
-  /* Fetch all BOS pages, store the vorbis header and all seen serial
-     numbers, load subsequent vorbis setup headers */
-  if((ret=_fetch_headers(vf,vf->vi,vf->vc,&serialno_list,&serialno_list_size,NULL))<0){
-    vf->datasource=NULL;
-    ov_clear(vf);
-  }else{
-    /* serial number list for first link needs to be held somewhere
-       for second stage of seekable stream open; this saves having to
-       seek/reread first link's serialnumber data then. */
-    vf->serialnos=(long*)_ogg_calloc(serialno_list_size+2,sizeof(*vf->serialnos));
-    vf->serialnos[0]=vf->current_serialno=vf->os.serialno;
-    vf->serialnos[1]=serialno_list_size;
-    memcpy(vf->serialnos+2,serialno_list,serialno_list_size*sizeof(*vf->serialnos));
-
-    vf->offsets=(ogg_int64_t*)_ogg_calloc(1,sizeof(*vf->offsets));
-    vf->dataoffsets=(ogg_int64_t*)_ogg_calloc(1,sizeof(*vf->dataoffsets));
-    vf->offsets[0]=0;
-    vf->dataoffsets[0]=vf->offset;
-
-    vf->ready_state=PARTOPEN;
-  }
-  if(serialno_list)_ogg_free(serialno_list);
-  return(ret);
-}
-
-static int _ov_open2(OggVorbis_File *vf){
-  if(vf->ready_state != PARTOPEN) return OV_EINVAL;
-  vf->ready_state=OPENED;
-  if(vf->seekable){
-    int ret=_open_seekable2(vf);
-    if(ret){
-      vf->datasource=NULL;
-      ov_clear(vf);
-    }
-    return(ret);
-  }else
-    vf->ready_state=STREAMSET;
-
-  return 0;
-}
-
-
-/* clear out the OggVorbis_File struct */
-int ov_clear(OggVorbis_File *vf){
-  if(vf){
-    vorbis_block_clear(&vf->vb);
-    vorbis_dsp_clear(&vf->vd);
-    ogg_stream_clear(&vf->os);
-
-    if(vf->vi && vf->links){
-      int i;
-      for(i=0;i<vf->links;i++){
-        vorbis_info_clear(vf->vi+i);
-        vorbis_comment_clear(vf->vc+i);
-      }
-      _ogg_free(vf->vi);
-      _ogg_free(vf->vc);
-    }
-    if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
-    if(vf->pcmlengths)_ogg_free(vf->pcmlengths);
-    if(vf->serialnos)_ogg_free(vf->serialnos);
-    if(vf->offsets)_ogg_free(vf->offsets);
-    ogg_sync_clear(&vf->oy);
-    if(vf->datasource && vf->callbacks.close_func)
-      (vf->callbacks.close_func)(vf->datasource);
-    memset(vf,0,sizeof(*vf));
-  }
-#ifdef DEBUG_LEAKS
-  _VDBG_dump();
-#endif
-  return(0);
-}
-
-/* inspects the OggVorbis file and finds/documents all the logical
-   bitstreams contained in it.  Tries to be tolerant of logical
-   bitstream sections that are truncated/woogie.
-
-   return: -1) error
-            0) OK
-*/
-
-int ov_open_callbacks(void *f,OggVorbis_File *vf,
-    const char *initial,long ibytes,ov_callbacks callbacks){
-  int ret=_ov_open1(f,vf,initial,ibytes,callbacks);
-  if(ret)return ret;
-  return _ov_open2(vf);
-}
-
-int ov_open(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes){
-  ov_callbacks callbacks = {
-    (size_t (*)(void *, size_t, size_t, void *))  fread,
-    (int (*)(void *, ogg_int64_t, int))              _fseek64_wrap,
-    (int (*)(void *))                             fclose,
-    (long (*)(void *))                            ftell
-  };
-
-  return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks);
-}
-
-int ov_fopen(const char *path,OggVorbis_File *vf){
-  int ret;
-  FILE *f = fopen(path,"rb");
-  if(!f) return -1;
-
-  ret = ov_open(f,vf,NULL,0);
-  if(ret) fclose(f);
-  return ret;
-}
-
-
-/* cheap hack for game usage where downsampling is desirable; there's
-   no need for SRC as we can just do it cheaply in libvorbis. */
-
-int ov_halfrate(OggVorbis_File *vf,int flag){
-  int i;
-  if(vf->vi==NULL)return OV_EINVAL;
-  if(vf->ready_state>STREAMSET){
-    /* clear out stream state; dumping the decode machine is needed to
-       reinit the MDCT lookups. */
-    vorbis_dsp_clear(&vf->vd);
-    vorbis_block_clear(&vf->vb);
-    vf->ready_state=STREAMSET;
-    if(vf->pcm_offset>=0){
-      ogg_int64_t pos=vf->pcm_offset;
-      vf->pcm_offset=-1; /* make sure the pos is dumped if unseekable */
-      ov_pcm_seek(vf,pos);
-    }
-  }
-
-  for(i=0;i<vf->links;i++){
-    if(vorbis_synthesis_halfrate(vf->vi+i,flag)){
-      if(flag) ov_halfrate(vf,0);
-      return OV_EINVAL;
-    }
-  }
-  return 0;
-}
-
-int ov_halfrate_p(OggVorbis_File *vf){
-  if(vf->vi==NULL)return OV_EINVAL;
-  return vorbis_synthesis_halfrate_p(vf->vi);
-}
-
-/* Only partially open the vorbis file; test for Vorbisness, and load
-   the headers for the first chain.  Do not seek (although test for
-   seekability).  Use ov_test_open to finish opening the file, else
-   ov_clear to close/free it. Same return codes as open. */
-
-int ov_test_callbacks(void *f,OggVorbis_File *vf,
-    const char *initial,long ibytes,ov_callbacks callbacks)
-{
-  return _ov_open1(f,vf,initial,ibytes,callbacks);
-}
-
-int ov_test(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes){
-  ov_callbacks callbacks = {
-    (size_t (*)(void *, size_t, size_t, void *))  fread,
-    (int (*)(void *, ogg_int64_t, int))              _fseek64_wrap,
-    (int (*)(void *))                             fclose,
-    (long (*)(void *))                            ftell
-  };
-
-  return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks);
-}
-
-int ov_test_open(OggVorbis_File *vf){
-  if(vf->ready_state!=PARTOPEN)return(OV_EINVAL);
-  return _ov_open2(vf);
-}
-
-/* How many logical bitstreams in this physical bitstream? */
-long ov_streams(OggVorbis_File *vf){
-  return vf->links;
-}
-
-/* Is the FILE * associated with vf seekable? */
-long ov_seekable(OggVorbis_File *vf){
-  return vf->seekable;
-}
-
-/* returns the bitrate for a given logical bitstream or the entire
-   physical bitstream.  If the file is open for random access, it will
-   find the *actual* average bitrate.  If the file is streaming, it
-   returns the nominal bitrate (if set) else the average of the
-   upper/lower bounds (if set) else -1 (unset).
-
-   If you want the actual bitrate field settings, get them from the
-   vorbis_info structs */
-
-long ov_bitrate(OggVorbis_File *vf,int i){
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(i>=vf->links)return(OV_EINVAL);
-  if(!vf->seekable && i!=0)return(ov_bitrate(vf,0));
-  if(i<0){
-    ogg_int64_t bits=0;
-    int i;
-    float br;
-    for(i=0;i<vf->links;i++)
-      bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8;
-    /* This once read: return(rint(bits/ov_time_total(vf,-1)));
-     * gcc 3.x on x86 miscompiled this at optimisation level 2 and above,
-     * so this is slightly transformed to make it work.
-     */
-    br = bits/ov_time_total(vf,-1);
-    return(rint(br));
-  }else{
-    if(vf->seekable){
-      /* return the actual bitrate */
-      return(rint((vf->offsets[i+1]-vf->dataoffsets[i])*8/ov_time_total(vf,i)));
-    }else{
-      /* return nominal if set */
-      if(vf->vi[i].bitrate_nominal>0){
-        return vf->vi[i].bitrate_nominal;
-      }else{
-        if(vf->vi[i].bitrate_upper>0){
-          if(vf->vi[i].bitrate_lower>0){
-            return (vf->vi[i].bitrate_upper+vf->vi[i].bitrate_lower)/2;
-          }else{
-            return vf->vi[i].bitrate_upper;
-          }
-        }
-        return(OV_FALSE);
-      }
-    }
-  }
-}
-
-/* returns the actual bitrate since last call.  returns -1 if no
-   additional data to offer since last call (or at beginning of stream),
-   EINVAL if stream is only partially open
-*/
-long ov_bitrate_instant(OggVorbis_File *vf){
-  int link=(vf->seekable?vf->current_link:0);
-  long ret;
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(vf->samptrack==0)return(OV_FALSE);
-  ret=vf->bittrack/vf->samptrack*vf->vi[link].rate+.5;
-  vf->bittrack=0.f;
-  vf->samptrack=0.f;
-  return(ret);
-}
-
-/* Guess */
-long ov_serialnumber(OggVorbis_File *vf,int i){
-  if(i>=vf->links)return(ov_serialnumber(vf,vf->links-1));
-  if(!vf->seekable && i>=0)return(ov_serialnumber(vf,-1));
-  if(i<0){
-    return(vf->current_serialno);
-  }else{
-    return(vf->serialnos[i]);
-  }
-}
-
-/* returns: total raw (compressed) length of content if i==-1
-            raw (compressed) length of that logical bitstream for i==0 to n
-            OV_EINVAL if the stream is not seekable (we can't know the length)
-            or if stream is only partially open
-*/
-ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
-  if(i<0){
-    ogg_int64_t acc=0;
-    int i;
-    for(i=0;i<vf->links;i++)
-      acc+=ov_raw_total(vf,i);
-    return(acc);
-  }else{
-    return(vf->offsets[i+1]-vf->offsets[i]);
-  }
-}
-
-/* returns: total PCM length (samples) of content if i==-1 PCM length
-            (samples) of that logical bitstream for i==0 to n
-            OV_EINVAL if the stream is not seekable (we can't know the
-            length) or only partially open
-*/
-ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
-  if(i<0){
-    ogg_int64_t acc=0;
-    int i;
-    for(i=0;i<vf->links;i++)
-      acc+=ov_pcm_total(vf,i);
-    return(acc);
-  }else{
-    return(vf->pcmlengths[i*2+1]);
-  }
-}
-
-/* returns: total seconds of content if i==-1
-            seconds in that logical bitstream for i==0 to n
-            OV_EINVAL if the stream is not seekable (we can't know the
-            length) or only partially open
-*/
-double ov_time_total(OggVorbis_File *vf,int i){
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
-  if(i<0){
-    double acc=0;
-    int i;
-    for(i=0;i<vf->links;i++)
-      acc+=ov_time_total(vf,i);
-    return(acc);
-  }else{
-    return((double)(vf->pcmlengths[i*2+1])/vf->vi[i].rate);
-  }
-}
-
-/* seek to an offset relative to the *compressed* data. This also
-   scans packets to update the PCM cursor. It will cross a logical
-   bitstream boundary, but only if it can't get any packets out of the
-   tail of the bitstream we seek to (so no surprises).
-
-   returns zero on success, nonzero on failure */
-
-int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
-  ogg_stream_state work_os;
-  int ret;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable)
-    return(OV_ENOSEEK); /* don't dump machine if we can't seek */
-
-  if(pos<0 || pos>vf->end)return(OV_EINVAL);
-
-  /* is the seek position outside our current link [if any]? */
-  if(vf->ready_state>=STREAMSET){
-    if(pos<vf->offsets[vf->current_link] || pos>=vf->offsets[vf->current_link+1])
-      _decode_clear(vf); /* clear out stream state */
-  }
-
-  /* don't yet clear out decoding machine (if it's initialized), in
-     the case we're in the same link.  Restart the decode lapping, and
-     let _fetch_and_process_packet deal with a potential bitstream
-     boundary */
-  vf->pcm_offset=-1;
-  ogg_stream_reset_serialno(&vf->os,
-                            vf->current_serialno); /* must set serialno */
-  vorbis_synthesis_restart(&vf->vd);
-
-  ret=_seek_helper(vf,pos);
-  if(ret)goto seek_error;
-
-  /* we need to make sure the pcm_offset is set, but we don't want to
-     advance the raw cursor past good packets just to get to the first
-     with a granulepos.  That's not equivalent behavior to beginning
-     decoding as immediately after the seek position as possible.
-
-     So, a hack.  We use two stream states; a local scratch state and
-     the shared vf->os stream state.  We use the local state to
-     scan, and the shared state as a buffer for later decode.
-
-     Unfortuantely, on the last page we still advance to last packet
-     because the granulepos on the last page is not necessarily on a
-     packet boundary, and we need to make sure the granpos is
-     correct.
-  */
-
-  {
-    ogg_page og;
-    ogg_packet op;
-    int lastblock=0;
-    int accblock=0;
-    int thisblock=0;
-    int lastflag=0;
-    int firstflag=0;
-    ogg_int64_t pagepos=-1;
-
-    ogg_stream_init(&work_os,vf->current_serialno); /* get the memory ready */
-    ogg_stream_reset(&work_os); /* eliminate the spurious OV_HOLE
-                                   return from not necessarily
-                                   starting from the beginning */
-
-    while(1){
-      if(vf->ready_state>=STREAMSET){
-        /* snarf/scan a packet if we can */
-        int result=ogg_stream_packetout(&work_os,&op);
-
-        if(result>0){
-
-          if(vf->vi[vf->current_link].codec_setup){
-            thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
-            if(thisblock<0){
-              ogg_stream_packetout(&vf->os,NULL);
-              thisblock=0;
-            }else{
-
-              /* We can't get a guaranteed correct pcm position out of the
-                 last page in a stream because it might have a 'short'
-                 granpos, which can only be detected in the presence of a
-                 preceding page.  However, if the last page is also the first
-                 page, the granpos rules of a first page take precedence.  Not
-                 only that, but for first==last, the EOS page must be treated
-                 as if its a normal first page for the stream to open/play. */
-              if(lastflag && !firstflag)
-                ogg_stream_packetout(&vf->os,NULL);
-              else
-                if(lastblock)accblock+=(lastblock+thisblock)>>2;
-            }
-
-            if(op.granulepos!=-1){
-              int i,link=vf->current_link;
-              ogg_int64_t granulepos=op.granulepos-vf->pcmlengths[link*2];
-              if(granulepos<0)granulepos=0;
-
-              for(i=0;i<link;i++)
-                granulepos+=vf->pcmlengths[i*2+1];
-              vf->pcm_offset=granulepos-accblock;
-              if(vf->pcm_offset<0)vf->pcm_offset=0;
-              break;
-            }
-            lastblock=thisblock;
-            continue;
-          }else
-            ogg_stream_packetout(&vf->os,NULL);
-        }
-      }
-
-      if(!lastblock){
-        pagepos=_get_next_page(vf,&og,-1);
-        if(pagepos<0){
-          vf->pcm_offset=ov_pcm_total(vf,-1);
-          break;
-        }
-      }else{
-        /* huh?  Bogus stream with packets but no granulepos */
-        vf->pcm_offset=-1;
-        break;
-      }
-
-      /* has our decoding just traversed a bitstream boundary? */
-      if(vf->ready_state>=STREAMSET){
-        if(vf->current_serialno!=ogg_page_serialno(&og)){
-
-          /* two possibilities:
-             1) our decoding just traversed a bitstream boundary
-             2) another stream is multiplexed into this logical section? */
-
-          if(ogg_page_bos(&og)){
-            /* we traversed */
-            _decode_clear(vf); /* clear out stream state */
-            ogg_stream_clear(&work_os);
-          } /* else, do nothing; next loop will scoop another page */
-        }
-      }
-
-      if(vf->ready_state<STREAMSET){
-        int link;
-        long serialno = ogg_page_serialno(&og);
-
-        for(link=0;link<vf->links;link++)
-          if(vf->serialnos[link]==serialno)break;
-
-        if(link==vf->links) continue; /* not the desired Vorbis
-                                         bitstream section; keep
-                                         trying */
-        vf->current_link=link;
-        vf->current_serialno=serialno;
-        ogg_stream_reset_serialno(&vf->os,serialno);
-        ogg_stream_reset_serialno(&work_os,serialno);
-        vf->ready_state=STREAMSET;
-        firstflag=(pagepos<=vf->dataoffsets[link]);
-      }
-
-      ogg_stream_pagein(&vf->os,&og);
-      ogg_stream_pagein(&work_os,&og);
-      lastflag=ogg_page_eos(&og);
-
-    }
-  }
-
-  ogg_stream_clear(&work_os);
-  vf->bittrack=0.f;
-  vf->samptrack=0.f;
-  return(0);
-
- seek_error:
-  /* dump the machine so we're in a known state */
-  vf->pcm_offset=-1;
-  ogg_stream_clear(&work_os);
-  _decode_clear(vf);
-  return OV_EBADLINK;
-}
-
-/* Page granularity seek (faster than sample granularity because we
-   don't do the last bit of decode to find a specific sample).
-
-   Seek to the last [granule marked] page preceding the specified pos
-   location, such that decoding past the returned point will quickly
-   arrive at the requested position. */
-int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
-  int link=-1;
-  ogg_int64_t result=0;
-  ogg_int64_t total=ov_pcm_total(vf,-1);
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable)return(OV_ENOSEEK);
-
-  if(pos<0 || pos>total)return(OV_EINVAL);
-
-  /* which bitstream section does this pcm offset occur in? */
-  for(link=vf->links-1;link>=0;link--){
-    total-=vf->pcmlengths[link*2+1];
-    if(pos>=total)break;
-  }
-
-  /* search within the logical bitstream for the page with the highest
-     pcm_pos preceding (or equal to) pos.  There is a danger here;
-     missing pages or incorrect frame number information in the
-     bitstream could make our task impossible.  Account for that (it
-     would be an error condition) */
-
-  /* new search algorithm by HB (Nicholas Vinen) */
-  {
-    ogg_int64_t end=vf->offsets[link+1];
-    ogg_int64_t begin=vf->offsets[link];
-    ogg_int64_t begintime = vf->pcmlengths[link*2];
-    ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime;
-    ogg_int64_t target=pos-total+begintime;
-    ogg_int64_t best=begin;
-
-    ogg_page og;
-    while(begin<end){
-      ogg_int64_t bisect;
-
-      if(end-begin<CHUNKSIZE){
-        bisect=begin;
-      }else{
-        /* take a (pretty decent) guess. */
-        bisect=begin +
-          (ogg_int64_t)((double)(target-begintime)*(end-begin)/(endtime-begintime))
-          - CHUNKSIZE;
-        if(bisect<begin+CHUNKSIZE)
-          bisect=begin;
-      }
-
-      if(bisect!=vf->offset){
-        result=_seek_helper(vf,bisect);
-        if(result) goto seek_error;
-      }
-
-      while(begin<end){
-        result=_get_next_page(vf,&og,end-vf->offset);
-        if(result==OV_EREAD) goto seek_error;
-        if(result<0){
-          if(bisect<=begin+1)
-            end=begin; /* found it */
-          else{
-            if(bisect==0) goto seek_error;
-            bisect-=CHUNKSIZE;
-            if(bisect<=begin)bisect=begin+1;
-            result=_seek_helper(vf,bisect);
-            if(result) goto seek_error;
-          }
-        }else{
-          ogg_int64_t granulepos;
-
-          if(ogg_page_serialno(&og)!=vf->serialnos[link])
-            continue;
-
-          granulepos=ogg_page_granulepos(&og);
-          if(granulepos==-1)continue;
-
-          if(granulepos<target){
-            best=result;  /* raw offset of packet with granulepos */
-            begin=vf->offset; /* raw offset of next page */
-            begintime=granulepos;
-
-            if(target-begintime>44100)break;
-            bisect=begin; /* *not* begin + 1 */
-          }else{
-            if(bisect<=begin+1)
-              end=begin;  /* found it */
-            else{
-              if(end==vf->offset){ /* we're pretty close - we'd be stuck in */
-                end=result;
-                bisect-=CHUNKSIZE; /* an endless loop otherwise. */
-                if(bisect<=begin)bisect=begin+1;
-                result=_seek_helper(vf,bisect);
-                if(result) goto seek_error;
-              }else{
-                end=bisect;
-                endtime=granulepos;
-                break;
-              }
-            }
-          }
-        }
-      }
-    }
-
-    /* found our page. seek to it, update pcm offset. Easier case than
-       raw_seek, don't keep packets preceding granulepos. */
-    {
-      ogg_page og;
-      ogg_packet op;
-
-      /* seek */
-      result=_seek_helper(vf,best);
-      vf->pcm_offset=-1;
-      if(result) goto seek_error;
-      result=_get_next_page(vf,&og,-1);
-      if(result<0) goto seek_error;
-
-      if(link!=vf->current_link){
-        /* Different link; dump entire decode machine */
-        _decode_clear(vf);
-
-        vf->current_link=link;
-        vf->current_serialno=vf->serialnos[link];
-        vf->ready_state=STREAMSET;
-
-      }else{
-        vorbis_synthesis_restart(&vf->vd);
-      }
-
-      ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
-      ogg_stream_pagein(&vf->os,&og);
-
-      /* pull out all but last packet; the one with granulepos */
-      while(1){
-        result=ogg_stream_packetpeek(&vf->os,&op);
-        if(result==0){
-          /* !!! the packet finishing this page originated on a
-             preceding page. Keep fetching previous pages until we
-             get one with a granulepos or without the 'continued' flag
-             set.  Then just use raw_seek for simplicity. */
-
-          result=_seek_helper(vf,best);
-          if(result<0) goto seek_error;
-
-          while(1){
-            result=_get_prev_page(vf,&og);
-            if(result<0) goto seek_error;
-            if(ogg_page_serialno(&og)==vf->current_serialno &&
-               (ogg_page_granulepos(&og)>-1 ||
-                !ogg_page_continued(&og))){
-              return ov_raw_seek(vf,result);
-            }
-            vf->offset=result;
-          }
-        }
-        if(result<0){
-          result = OV_EBADPACKET;
-          goto seek_error;
-        }
-        if(op.granulepos!=-1){
-          vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
-          if(vf->pcm_offset<0)vf->pcm_offset=0;
-          vf->pcm_offset+=total;
-          break;
-        }else
-          result=ogg_stream_packetout(&vf->os,NULL);
-          (void) result;
-      }
-    }
-  }
-
-  /* verify result */
-  if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){
-    result=OV_EFAULT;
-    goto seek_error;
-  }
-  vf->bittrack=0.f;
-  vf->samptrack=0.f;
-  return(0);
-
- seek_error:
-  /* dump machine so we're in a known state */
-  vf->pcm_offset=-1;
-  _decode_clear(vf);
-  return (int)result;
-}
-
-/* seek to a sample offset relative to the decompressed pcm stream
-   returns zero on success, nonzero on failure */
-
-int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){
-  int thisblock,lastblock=0;
-  int ret=ov_pcm_seek_page(vf,pos);
-  if(ret<0)return(ret);
-  if((ret=_make_decode_ready(vf)))return ret;
-
-  /* discard leading packets we don't need for the lapping of the
-     position we want; don't decode them */
-
-  while(1){
-    ogg_packet op;
-    ogg_page og;
-
-    int ret=ogg_stream_packetpeek(&vf->os,&op);
-    if(ret>0){
-      thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
-      if(thisblock<0){
-        ogg_stream_packetout(&vf->os,NULL);
-        continue; /* non audio packet */
-      }
-      if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2;
-
-      if(vf->pcm_offset+((thisblock+
-                          vorbis_info_blocksize(vf->vi,1))>>2)>=pos)break;
-
-      /* remove the packet from packet queue and track its granulepos */
-      ogg_stream_packetout(&vf->os,NULL);
-      vorbis_synthesis_trackonly(&vf->vb,&op);  /* set up a vb with
-                                                   only tracking, no
-                                                   pcm_decode */
-      vorbis_synthesis_blockin(&vf->vd,&vf->vb);
-
-      /* end of logical stream case is hard, especially with exact
-         length positioning. */
-
-      if(op.granulepos>-1){
-        int i;
-        /* always believe the stream markers */
-        vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
-        if(vf->pcm_offset<0)vf->pcm_offset=0;
-        for(i=0;i<vf->current_link;i++)
-          vf->pcm_offset+=vf->pcmlengths[i*2+1];
-      }
-
-      lastblock=thisblock;
-
-    }else{
-      if(ret<0 && ret!=OV_HOLE)break;
-
-      /* suck in a new page */
-      if(_get_next_page(vf,&og,-1)<0)break;
-      if(ogg_page_bos(&og))_decode_clear(vf);
-
-      if(vf->ready_state<STREAMSET){
-        long serialno=ogg_page_serialno(&og);
-        int link;
-
-        for(link=0;link<vf->links;link++)
-          if(vf->serialnos[link]==serialno)break;
-        if(link==vf->links) continue;
-        vf->current_link=link;
-
-        vf->ready_state=STREAMSET;
-        vf->current_serialno=ogg_page_serialno(&og);
-        ogg_stream_reset_serialno(&vf->os,serialno);
-        ret=_make_decode_ready(vf);
-        if(ret)return ret;
-        lastblock=0;
-      }
-
-      ogg_stream_pagein(&vf->os,&og);
-    }
-  }
-
-  vf->bittrack=0.f;
-  vf->samptrack=0.f;
-  /* discard samples until we reach the desired position. Crossing a
-     logical bitstream boundary with abandon is OK. */
-  {
-    /* note that halfrate could be set differently in each link, but
-       vorbisfile encoforces all links are set or unset */
-    int hs=vorbis_synthesis_halfrate_p(vf->vi);
-    while(vf->pcm_offset<((pos>>hs)<<hs)){
-      ogg_int64_t target=(pos-vf->pcm_offset)>>hs;
-      long samples=vorbis_synthesis_pcmout(&vf->vd,NULL);
-
-      if(samples>target)samples=target;
-      vorbis_synthesis_read(&vf->vd,samples);
-      vf->pcm_offset+=samples<<hs;
-
-      if(samples<target)
-        if(_fetch_and_process_packet(vf,NULL,1,1)<=0)
-          vf->pcm_offset=ov_pcm_total(vf,-1); /* eof */
-    }
-  }
-  return 0;
-}
-
-/* seek to a playback time relative to the decompressed pcm stream
-   returns zero on success, nonzero on failure */
-int ov_time_seek(OggVorbis_File *vf,double seconds){
-  /* translate time to PCM position and call ov_pcm_seek */
-
-  int link=-1;
-  ogg_int64_t pcm_total=0;
-  double time_total=0.;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable)return(OV_ENOSEEK);
-  if(seconds<0)return(OV_EINVAL);
-
-  /* which bitstream section does this time offset occur in? */
-  for(link=0;link<vf->links;link++){
-    double addsec = ov_time_total(vf,link);
-    if(seconds<time_total+addsec)break;
-    time_total+=addsec;
-    pcm_total+=vf->pcmlengths[link*2+1];
-  }
-
-  if(link==vf->links)return(OV_EINVAL);
-
-  /* enough information to convert time offset to pcm offset */
-  {
-    ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate;
-    return(ov_pcm_seek(vf,target));
-  }
-}
-
-/* page-granularity version of ov_time_seek
-   returns zero on success, nonzero on failure */
-int ov_time_seek_page(OggVorbis_File *vf,double seconds){
-  /* translate time to PCM position and call ov_pcm_seek */
-
-  int link=-1;
-  ogg_int64_t pcm_total=0;
-  double time_total=0.;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(!vf->seekable)return(OV_ENOSEEK);
-  if(seconds<0)return(OV_EINVAL);
-
-  /* which bitstream section does this time offset occur in? */
-  for(link=0;link<vf->links;link++){
-    double addsec = ov_time_total(vf,link);
-    if(seconds<time_total+addsec)break;
-    time_total+=addsec;
-    pcm_total+=vf->pcmlengths[link*2+1];
-  }
-
-  if(link==vf->links)return(OV_EINVAL);
-
-  /* enough information to convert time offset to pcm offset */
-  {
-    ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate;
-    return(ov_pcm_seek_page(vf,target));
-  }
-}
-
-/* tell the current stream offset cursor.  Note that seek followed by
-   tell will likely not give the set offset due to caching */
-ogg_int64_t ov_raw_tell(OggVorbis_File *vf){
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  return(vf->offset);
-}
-
-/* return PCM offset (sample) of next PCM sample to be read */
-ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  return(vf->pcm_offset);
-}
-
-/* return time offset (seconds) of next PCM sample to be read */
-double ov_time_tell(OggVorbis_File *vf){
-  int link=0;
-  ogg_int64_t pcm_total=0;
-  double time_total=0.f;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  if(vf->seekable){
-    pcm_total=ov_pcm_total(vf,-1);
-    time_total=ov_time_total(vf,-1);
-
-    /* which bitstream section does this time offset occur in? */
-    for(link=vf->links-1;link>=0;link--){
-      pcm_total-=vf->pcmlengths[link*2+1];
-      time_total-=ov_time_total(vf,link);
-      if(vf->pcm_offset>=pcm_total)break;
-    }
-  }
-
-  return((double)time_total+(double)(vf->pcm_offset-pcm_total)/vf->vi[link].rate);
-}
-
-/*  link:   -1) return the vorbis_info struct for the bitstream section
-                currently being decoded
-           0-n) to request information for a specific bitstream section
-
-    In the case of a non-seekable bitstream, any call returns the
-    current bitstream.  NULL in the case that the machine is not
-    initialized */
-
-vorbis_info *ov_info(OggVorbis_File *vf,int link){
-  if(vf->seekable){
-    if(link<0)
-      if(vf->ready_state>=STREAMSET)
-        return vf->vi+vf->current_link;
-      else
-      return vf->vi;
-    else
-      if(link>=vf->links)
-        return NULL;
-      else
-        return vf->vi+link;
-  }else{
-    return vf->vi;
-  }
-}
-
-/* grr, strong typing, grr, no templates/inheritence, grr */
-vorbis_comment *ov_comment(OggVorbis_File *vf,int link){
-  if(vf->seekable){
-    if(link<0)
-      if(vf->ready_state>=STREAMSET)
-        return vf->vc+vf->current_link;
-      else
-        return vf->vc;
-    else
-      if(link>=vf->links)
-        return NULL;
-      else
-        return vf->vc+link;
-  }else{
-    return vf->vc;
-  }
-}
-
-static int host_is_big_endian() {
-  ogg_int32_t pattern = 0xfeedface; /* deadbeef */
-  unsigned char *bytewise = (unsigned char *)&pattern;
-  if (bytewise[0] == 0xfe) return 1;
-  return 0;
-}
-
-/* up to this point, everything could more or less hide the multiple
-   logical bitstream nature of chaining from the toplevel application
-   if the toplevel application didn't particularly care.  However, at
-   the point that we actually read audio back, the multiple-section
-   nature must surface: Multiple bitstream sections do not necessarily
-   have to have the same number of channels or sampling rate.
-
-   ov_read returns the sequential logical bitstream number currently
-   being decoded along with the PCM data in order that the toplevel
-   application can take action on channel/sample rate changes.  This
-   number will be incremented even for streamed (non-seekable) streams
-   (for seekable streams, it represents the actual logical bitstream
-   index within the physical bitstream.  Note that the accessor
-   functions above are aware of this dichotomy).
-
-   ov_read_filter is exactly the same as ov_read except that it processes
-   the decoded audio data through a filter before packing it into the
-   requested format. This gives greater accuracy than applying a filter
-   after the audio has been converted into integral PCM.
-
-   input values: buffer) a buffer to hold packed PCM data for return
-                 length) the byte length requested to be placed into buffer
-                 bigendianp) should the data be packed LSB first (0) or
-                             MSB first (1)
-                 word) word size for output.  currently 1 (byte) or
-                       2 (16 bit short)
-
-   return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
-                   0) EOF
-                   n) number of bytes of PCM actually returned.  The
-                   below works on a packet-by-packet basis, so the
-                   return length is not related to the 'length' passed
-                   in, just guaranteed to fit.
-
-            *section) set to the logical bitstream number */
-
-long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
-                    int bigendianp,int word,int sgned,int *bitstream,
-                    void (*filter)(float **pcm,long channels,long samples,void *filter_param),void *filter_param){
-  int i,j;
-  int host_endian = host_is_big_endian();
-  int hs;
-
-  float **pcm;
-  long samples;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-
-  while(1){
-    if(vf->ready_state==INITSET){
-      samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
-      if(samples)break;
-    }
-
-    /* suck in another packet */
-    {
-      int ret=_fetch_and_process_packet(vf,NULL,1,1);
-      if(ret==OV_EOF)
-        return(0);
-      if(ret<=0)
-        return(ret);
-    }
-
-  }
-
-  if(samples>0){
-
-    /* yay! proceed to pack data into the byte buffer */
-
-    long channels=ov_info(vf,-1)->channels;
-    long bytespersample=word * channels;
-    vorbis_fpu_control fpu;
-    (void) fpu;
-    if(samples>length/bytespersample)samples=length/bytespersample;
-
-    if(samples <= 0)
-      return OV_EINVAL;
-
-    /* Here. */
-    if(filter)
-      filter(pcm,channels,samples,filter_param);
-
-    /* a tight loop to pack each size */
-    {
-      int val;
-      if(word==1){
-        int off=(sgned?0:128);
-        vorbis_fpu_setround(&fpu);
-        for(j=0;j<samples;j++)
-          for(i=0;i<channels;i++){
-            val=vorbis_ftoi(pcm[i][j]*128.f);
-            if(val>127)val=127;
-            else if(val<-128)val=-128;
-            *buffer++=val+off;
-          }
-        vorbis_fpu_restore(fpu);
-      }else{
-        int off=(sgned?0:32768);
-
-        if(host_endian==bigendianp){
-          if(sgned){
-
-            vorbis_fpu_setround(&fpu);
-            for(i=0;i<channels;i++) { /* It's faster in this order */
-              float *src=pcm[i];
-              short *dest=((short *)buffer)+i;
-              for(j=0;j<samples;j++) {
-                val=vorbis_ftoi(src[j]*32768.f);
-                if(val>32767)val=32767;
-                else if(val<-32768)val=-32768;
-                *dest=val;
-                dest+=channels;
-              }
-            }
-            vorbis_fpu_restore(fpu);
-
-          }else{
-
-            vorbis_fpu_setround(&fpu);
-            for(i=0;i<channels;i++) {
-              float *src=pcm[i];
-              short *dest=((short *)buffer)+i;
-              for(j=0;j<samples;j++) {
-                val=vorbis_ftoi(src[j]*32768.f);
-                if(val>32767)val=32767;
-                else if(val<-32768)val=-32768;
-                *dest=val+off;
-                dest+=channels;
-              }
-            }
-            vorbis_fpu_restore(fpu);
-
-          }
-        }else if(bigendianp){
-
-          vorbis_fpu_setround(&fpu);
-          for(j=0;j<samples;j++)
-            for(i=0;i<channels;i++){
-              val=vorbis_ftoi(pcm[i][j]*32768.f);
-              if(val>32767)val=32767;
-              else if(val<-32768)val=-32768;
-              val+=off;
-              *buffer++=(val>>8);
-              *buffer++=(val&0xff);
-            }
-          vorbis_fpu_restore(fpu);
-
-        }else{
-          int val;
-          vorbis_fpu_setround(&fpu);
-          for(j=0;j<samples;j++)
-            for(i=0;i<channels;i++){
-              val=vorbis_ftoi(pcm[i][j]*32768.f);
-              if(val>32767)val=32767;
-              else if(val<-32768)val=-32768;
-              val+=off;
-              *buffer++=(val&0xff);
-              *buffer++=(val>>8);
-                  }
-          vorbis_fpu_restore(fpu);
-
-        }
-      }
-    }
-
-    vorbis_synthesis_read(&vf->vd,samples);
-    hs=vorbis_synthesis_halfrate_p(vf->vi);
-    vf->pcm_offset+=(samples<<hs);
-    if(bitstream)*bitstream=vf->current_link;
-    return(samples*bytespersample);
-  }else{
-    return(samples);
-  }
-}
-
-long ov_read(OggVorbis_File *vf,char *buffer,int length,
-             int bigendianp,int word,int sgned,int *bitstream){
-  return ov_read_filter(vf, buffer, length, bigendianp, word, sgned, bitstream, NULL, NULL);
-}
-
-/* input values: pcm_channels) a float vector per channel of output
-                 length) the sample length being read by the app
-
-   return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
-                   0) EOF
-                   n) number of samples of PCM actually returned.  The
-                   below works on a packet-by-packet basis, so the
-                   return length is not related to the 'length' passed
-                   in, just guaranteed to fit.
-
-            *section) set to the logical bitstream number */
-
-
-
-long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int length,
-                   int *bitstream){
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-
-  while(1){
-    if(vf->ready_state==INITSET){
-      float **pcm;
-      long samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
-      if(samples){
-        int hs=vorbis_synthesis_halfrate_p(vf->vi);
-        if(pcm_channels)*pcm_channels=pcm;
-        if(samples>length)samples=length;
-        vorbis_synthesis_read(&vf->vd,samples);
-        vf->pcm_offset+=samples<<hs;
-        if(bitstream)*bitstream=vf->current_link;
-        return samples;
-
-      }
-    }
-
-    /* suck in another packet */
-    {
-      int ret=_fetch_and_process_packet(vf,NULL,1,1);
-      if(ret==OV_EOF)return(0);
-      if(ret<=0)return(ret);
-    }
-
-  }
-}
-
-extern float *vorbis_window(vorbis_dsp_state *v,int W);
-
-static void _ov_splice(float **pcm,float **lappcm,
-                       int n1, int n2,
-                       int ch1, int ch2,
-                       float *w1, float *w2){
-  int i,j;
-  float *w=w1;
-  int n=n1;
-
-  if(n1>n2){
-    n=n2;
-    w=w2;
-  }
-
-  /* splice */
-  for(j=0;j<ch1 && j<ch2;j++){
-    float *s=lappcm[j];
-    float *d=pcm[j];
-
-    for(i=0;i<n;i++){
-      float wd=w[i]*w[i];
-      float ws=1.-wd;
-      d[i]=d[i]*wd + s[i]*ws;
-    }
-  }
-  /* window from zero */
-  for(;j<ch2;j++){
-    float *d=pcm[j];
-    for(i=0;i<n;i++){
-      float wd=w[i]*w[i];
-      d[i]=d[i]*wd;
-    }
-  }
-
-}
-
-/* make sure vf is INITSET */
-static int _ov_initset(OggVorbis_File *vf){
-  while(1){
-    if(vf->ready_state==INITSET)break;
-    /* suck in another packet */
-    {
-      int ret=_fetch_and_process_packet(vf,NULL,1,0);
-      if(ret<0 && ret!=OV_HOLE)return(ret);
-    }
-  }
-  return 0;
-}
-
-/* make sure vf is INITSET and that we have a primed buffer; if
-   we're crosslapping at a stream section boundary, this also makes
-   sure we're sanity checking against the right stream information */
-static int _ov_initprime(OggVorbis_File *vf){
-  vorbis_dsp_state *vd=&vf->vd;
-  while(1){
-    if(vf->ready_state==INITSET)
-      if(vorbis_synthesis_pcmout(vd,NULL))break;
-
-    /* suck in another packet */
-    {
-      int ret=_fetch_and_process_packet(vf,NULL,1,0);
-      if(ret<0 && ret!=OV_HOLE)return(ret);
-    }
-  }
-  return 0;
-}
-
-/* grab enough data for lapping from vf; this may be in the form of
-   unreturned, already-decoded pcm, remaining PCM we will need to
-   decode, or synthetic postextrapolation from last packets. */
-static void _ov_getlap(OggVorbis_File *vf,vorbis_info *vi,vorbis_dsp_state *vd,
-                       float **lappcm,int lapsize){
-  int lapcount=0,i;
-  float **pcm;
-
-  /* try first to decode the lapping data */
-  while(lapcount<lapsize){
-    int samples=vorbis_synthesis_pcmout(vd,&pcm);
-    if(samples){
-      if(samples>lapsize-lapcount)samples=lapsize-lapcount;
-      for(i=0;i<vi->channels;i++)
-        memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples);
-      lapcount+=samples;
-      vorbis_synthesis_read(vd,samples);
-    }else{
-    /* suck in another packet */
-      int ret=_fetch_and_process_packet(vf,NULL,1,0); /* do *not* span */
-      if(ret==OV_EOF)break;
-    }
-  }
-  if(lapcount<lapsize){
-    /* failed to get lapping data from normal decode; pry it from the
-       postextrapolation buffering, or the second half of the MDCT
-       from the last packet */
-    int samples=vorbis_synthesis_lapout(&vf->vd,&pcm);
-    if(samples==0){
-      for(i=0;i<vi->channels;i++)
-        memset(lappcm[i]+lapcount,0,sizeof(**pcm)*lapsize-lapcount);
-      lapcount=lapsize;
-    }else{
-      if(samples>lapsize-lapcount)samples=lapsize-lapcount;
-      for(i=0;i<vi->channels;i++)
-        memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples);
-      lapcount+=samples;
-    }
-
-    (void) lapcount;
-  }
-}
-
-/* this sets up crosslapping of a sample by using trailing data from
-   sample 1 and lapping it into the windowing buffer of sample 2 */
-int ov_crosslap(OggVorbis_File *vf1, OggVorbis_File *vf2){
-  vorbis_info *vi1,*vi2;
-  float **lappcm;
-  float **pcm;
-  float *w1,*w2;
-  int n1,n2,i,ret,hs1,hs2;
-
-  if(vf1==vf2)return(0); /* degenerate case */
-  if(vf1->ready_state<OPENED)return(OV_EINVAL);
-  if(vf2->ready_state<OPENED)return(OV_EINVAL);
-
-  /* the relevant overlap buffers must be pre-checked and pre-primed
-     before looking at settings in the event that priming would cross
-     a bitstream boundary.  So, do it now */
-
-  ret=_ov_initset(vf1);
-  if(ret)return(ret);
-  ret=_ov_initprime(vf2);
-  if(ret)return(ret);
-
-  vi1=ov_info(vf1,-1);
-  vi2=ov_info(vf2,-1);
-  hs1=ov_halfrate_p(vf1);
-  hs2=ov_halfrate_p(vf2);
-
-  lappcm=(float**) alloca(sizeof(*lappcm)*vi1->channels);
-  n1=vorbis_info_blocksize(vi1,0)>>(1+hs1);
-  n2=vorbis_info_blocksize(vi2,0)>>(1+hs2);
-  w1=vorbis_window(&vf1->vd,0);
-  w2=vorbis_window(&vf2->vd,0);
-
-  for(i=0;i<vi1->channels;i++)
-    lappcm[i]=(float*) alloca(sizeof(**lappcm)*n1);
-
-  _ov_getlap(vf1,vi1,&vf1->vd,lappcm,n1);
-
-  /* have a lapping buffer from vf1; now to splice it into the lapping
-     buffer of vf2 */
-  /* consolidate and expose the buffer. */
-  vorbis_synthesis_lapout(&vf2->vd,&pcm);
-
-#if 0
-  _analysis_output_always("pcmL",0,pcm[0],n1*2,0,0,0);
-  _analysis_output_always("pcmR",0,pcm[1],n1*2,0,0,0);
-#endif
-
-  /* splice */
-  _ov_splice(pcm,lappcm,n1,n2,vi1->channels,vi2->channels,w1,w2);
-
-  /* done */
-  return(0);
-}
-
-static int _ov_64_seek_lap(OggVorbis_File *vf,ogg_int64_t pos,
-                           int (*localseek)(OggVorbis_File *,ogg_int64_t)){
-  vorbis_info *vi;
-  float **lappcm;
-  float **pcm;
-  float *w1,*w2;
-  int n1,n2,ch1,ch2,hs;
-  int i,ret;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  ret=_ov_initset(vf);
-  if(ret)return(ret);
-  vi=ov_info(vf,-1);
-  hs=ov_halfrate_p(vf);
-
-  ch1=vi->channels;
-  n1=vorbis_info_blocksize(vi,0)>>(1+hs);
-  w1=vorbis_window(&vf->vd,0);  /* window arrays from libvorbis are
-                                   persistent; even if the decode state
-                                   from this link gets dumped, this
-                                   window array continues to exist */
-
-  lappcm=(float**) alloca(sizeof(*lappcm)*ch1);
-  for(i=0;i<ch1;i++)
-    lappcm[i]=(float*) alloca(sizeof(**lappcm)*n1);
-  _ov_getlap(vf,vi,&vf->vd,lappcm,n1);
-
-  /* have lapping data; seek and prime the buffer */
-  ret=localseek(vf,pos);
-  if(ret)return ret;
-  ret=_ov_initprime(vf);
-  if(ret)return(ret);
-
- /* Guard against cross-link changes; they're perfectly legal */
-  vi=ov_info(vf,-1);
-  ch2=vi->channels;
-  n2=vorbis_info_blocksize(vi,0)>>(1+hs);
-  w2=vorbis_window(&vf->vd,0);
-
-  /* consolidate and expose the buffer. */
-  vorbis_synthesis_lapout(&vf->vd,&pcm);
-
-  /* splice */
-  _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2);
-
-  /* done */
-  return(0);
-}
-
-int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
-  return _ov_64_seek_lap(vf,pos,ov_raw_seek);
-}
-
-int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
-  return _ov_64_seek_lap(vf,pos,ov_pcm_seek);
-}
-
-int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos){
-  return _ov_64_seek_lap(vf,pos,ov_pcm_seek_page);
-}
-
-static int _ov_d_seek_lap(OggVorbis_File *vf,double pos,
-                           int (*localseek)(OggVorbis_File *,double)){
-  vorbis_info *vi;
-  float **lappcm;
-  float **pcm;
-  float *w1,*w2;
-  int n1,n2,ch1,ch2,hs;
-  int i,ret;
-
-  if(vf->ready_state<OPENED)return(OV_EINVAL);
-  ret=_ov_initset(vf);
-  if(ret)return(ret);
-  vi=ov_info(vf,-1);
-  hs=ov_halfrate_p(vf);
-
-  ch1=vi->channels;
-  n1=vorbis_info_blocksize(vi,0)>>(1+hs);
-  w1=vorbis_window(&vf->vd,0);  /* window arrays from libvorbis are
-                                   persistent; even if the decode state
-                                   from this link gets dumped, this
-                                   window array continues to exist */
-
-  lappcm=(float**) alloca(sizeof(*lappcm)*ch1);
-  for(i=0;i<ch1;i++)
-    lappcm[i]=(float*) alloca(sizeof(**lappcm)*n1);
-  _ov_getlap(vf,vi,&vf->vd,lappcm,n1);
-
-  /* have lapping data; seek and prime the buffer */
-  ret=localseek(vf,pos);
-  if(ret)return ret;
-  ret=_ov_initprime(vf);
-  if(ret)return(ret);
-
- /* Guard against cross-link changes; they're perfectly legal */
-  vi=ov_info(vf,-1);
-  ch2=vi->channels;
-  n2=vorbis_info_blocksize(vi,0)>>(1+hs);
-  w2=vorbis_window(&vf->vd,0);
-
-  /* consolidate and expose the buffer. */
-  vorbis_synthesis_lapout(&vf->vd,&pcm);
-
-  /* splice */
-  _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2);
-
-  /* done */
-  return(0);
-}
-
-int ov_time_seek_lap(OggVorbis_File *vf,double pos){
-  return _ov_d_seek_lap(vf,pos,ov_time_seek);
-}
-
-int ov_time_seek_page_lap(OggVorbis_File *vf,double pos){
-  return _ov_d_seek_lap(vf,pos,ov_time_seek_page);
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c
deleted file mode 100644
index 0dfe3f9..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.c
+++ /dev/null
@@ -1,2135 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: window functions
- last mod: $Id: window.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <math.h>
-#include "os.h"
-#include "misc.h"
-
-static float vwin64[32] = {
-  0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F,
-  0.0753351908F, 0.1115073077F, 0.1539457973F, 0.2020557475F,
-  0.2551056759F, 0.3122276645F, 0.3724270287F, 0.4346027792F,
-  0.4975789974F, 0.5601459521F, 0.6211085051F, 0.6793382689F,
-  0.7338252629F, 0.7837245849F, 0.8283939355F, 0.8674186656F,
-  0.9006222429F, 0.9280614787F, 0.9500073081F, 0.9669131782F,
-  0.9793740220F, 0.9880792941F, 0.9937636139F, 0.9971582668F,
-  0.9989462667F, 0.9997230082F, 0.9999638688F, 0.9999995525F,
-};
-
-static float vwin128[64] = {
-  0.0002365472F, 0.0021280687F, 0.0059065254F, 0.0115626550F,
-  0.0190823442F, 0.0284463735F, 0.0396300935F, 0.0526030430F,
-  0.0673285281F, 0.0837631763F, 0.1018564887F, 0.1215504095F,
-  0.1427789367F, 0.1654677960F, 0.1895342001F, 0.2148867160F,
-  0.2414252576F, 0.2690412240F, 0.2976177952F, 0.3270303960F,
-  0.3571473350F, 0.3878306189F, 0.4189369387F, 0.4503188188F,
-  0.4818259135F, 0.5133064334F, 0.5446086751F, 0.5755826278F,
-  0.6060816248F, 0.6359640047F, 0.6650947483F, 0.6933470543F,
-  0.7206038179F, 0.7467589810F, 0.7717187213F, 0.7954024542F,
-  0.8177436264F, 0.8386902831F, 0.8582053981F, 0.8762669622F,
-  0.8928678298F, 0.9080153310F, 0.9217306608F, 0.9340480615F,
-  0.9450138200F, 0.9546851041F, 0.9631286621F, 0.9704194171F,
-  0.9766389810F, 0.9818741197F, 0.9862151938F, 0.9897546035F,
-  0.9925852598F, 0.9947991032F, 0.9964856900F, 0.9977308602F,
-  0.9986155015F, 0.9992144193F, 0.9995953200F, 0.9998179155F,
-  0.9999331503F, 0.9999825563F, 0.9999977357F, 0.9999999720F,
-};
-
-static float vwin256[128] = {
-  0.0000591390F, 0.0005321979F, 0.0014780301F, 0.0028960636F,
-  0.0047854363F, 0.0071449926F, 0.0099732775F, 0.0132685298F,
-  0.0170286741F, 0.0212513119F, 0.0259337111F, 0.0310727950F,
-  0.0366651302F, 0.0427069140F, 0.0491939614F, 0.0561216907F,
-  0.0634851102F, 0.0712788035F, 0.0794969160F, 0.0881331402F,
-  0.0971807028F, 0.1066323515F, 0.1164803426F, 0.1267164297F,
-  0.1373318534F, 0.1483173323F, 0.1596630553F, 0.1713586755F,
-  0.1833933062F, 0.1957555184F, 0.2084333404F, 0.2214142599F,
-  0.2346852280F, 0.2482326664F, 0.2620424757F, 0.2761000481F,
-  0.2903902813F, 0.3048975959F, 0.3196059553F, 0.3344988887F,
-  0.3495595160F, 0.3647705766F, 0.3801144597F, 0.3955732382F,
-  0.4111287047F, 0.4267624093F, 0.4424557009F, 0.4581897696F,
-  0.4739456913F, 0.4897044744F, 0.5054471075F, 0.5211546088F,
-  0.5368080763F, 0.5523887395F, 0.5678780103F, 0.5832575361F,
-  0.5985092508F, 0.6136154277F, 0.6285587300F, 0.6433222619F,
-  0.6578896175F, 0.6722449294F, 0.6863729144F, 0.7002589187F,
-  0.7138889597F, 0.7272497662F, 0.7403288154F, 0.7531143679F,
-  0.7655954985F, 0.7777621249F, 0.7896050322F, 0.8011158947F,
-  0.8122872932F, 0.8231127294F, 0.8335866365F, 0.8437043850F,
-  0.8534622861F, 0.8628575905F, 0.8718884835F, 0.8805540765F,
-  0.8888543947F, 0.8967903616F, 0.9043637797F, 0.9115773078F,
-  0.9184344360F, 0.9249394562F, 0.9310974312F, 0.9369141608F,
-  0.9423961446F, 0.9475505439F, 0.9523851406F, 0.9569082947F,
-  0.9611289005F, 0.9650563408F, 0.9687004405F, 0.9720714191F,
-  0.9751798427F, 0.9780365753F, 0.9806527301F, 0.9830396204F,
-  0.9852087111F, 0.9871715701F, 0.9889398207F, 0.9905250941F,
-  0.9919389832F, 0.9931929973F, 0.9942985174F, 0.9952667537F,
-  0.9961087037F, 0.9968351119F, 0.9974564312F, 0.9979827858F,
-  0.9984239359F, 0.9987892441F, 0.9990876435F, 0.9993276081F,
-  0.9995171241F, 0.9996636648F, 0.9997741654F, 0.9998550016F,
-  0.9999119692F, 0.9999502656F, 0.9999744742F, 0.9999885497F,
-  0.9999958064F, 0.9999989077F, 0.9999998584F, 0.9999999983F,
-};
-
-static float vwin512[256] = {
-  0.0000147849F, 0.0001330607F, 0.0003695946F, 0.0007243509F,
-  0.0011972759F, 0.0017882983F, 0.0024973285F, 0.0033242588F,
-  0.0042689632F, 0.0053312973F, 0.0065110982F, 0.0078081841F,
-  0.0092223540F, 0.0107533880F, 0.0124010466F, 0.0141650703F,
-  0.0160451800F, 0.0180410758F, 0.0201524373F, 0.0223789233F,
-  0.0247201710F, 0.0271757958F, 0.0297453914F, 0.0324285286F,
-  0.0352247556F, 0.0381335972F, 0.0411545545F, 0.0442871045F,
-  0.0475306997F, 0.0508847676F, 0.0543487103F, 0.0579219038F,
-  0.0616036982F, 0.0653934164F, 0.0692903546F, 0.0732937809F,
-  0.0774029356F, 0.0816170305F, 0.0859352485F, 0.0903567428F,
-  0.0948806375F, 0.0995060259F, 0.1042319712F, 0.1090575056F,
-  0.1139816300F, 0.1190033137F, 0.1241214941F, 0.1293350764F,
-  0.1346429333F, 0.1400439046F, 0.1455367974F, 0.1511203852F,
-  0.1567934083F, 0.1625545735F, 0.1684025537F, 0.1743359881F,
-  0.1803534820F, 0.1864536069F, 0.1926349000F, 0.1988958650F,
-  0.2052349715F, 0.2116506555F, 0.2181413191F, 0.2247053313F,
-  0.2313410275F, 0.2380467105F, 0.2448206500F, 0.2516610835F,
-  0.2585662164F, 0.2655342226F, 0.2725632448F, 0.2796513950F,
-  0.2867967551F, 0.2939973773F, 0.3012512852F, 0.3085564739F,
-  0.3159109111F, 0.3233125375F, 0.3307592680F, 0.3382489922F,
-  0.3457795756F, 0.3533488602F, 0.3609546657F, 0.3685947904F,
-  0.3762670121F, 0.3839690896F, 0.3916987634F, 0.3994537572F,
-  0.4072317788F, 0.4150305215F, 0.4228476653F, 0.4306808783F,
-  0.4385278181F, 0.4463861329F, 0.4542534630F, 0.4621274424F,
-  0.4700057001F, 0.4778858615F, 0.4857655502F, 0.4936423891F,
-  0.5015140023F, 0.5093780165F, 0.5172320626F, 0.5250737772F,
-  0.5329008043F, 0.5407107971F, 0.5485014192F, 0.5562703465F,
-  0.5640152688F, 0.5717338914F, 0.5794239366F, 0.5870831457F,
-  0.5947092801F, 0.6023001235F, 0.6098534829F, 0.6173671907F,
-  0.6248391059F, 0.6322671161F, 0.6396491384F, 0.6469831217F,
-  0.6542670475F, 0.6614989319F, 0.6686768267F, 0.6757988210F,
-  0.6828630426F, 0.6898676592F, 0.6968108799F, 0.7036909564F,
-  0.7105061843F, 0.7172549043F, 0.7239355032F, 0.7305464154F,
-  0.7370861235F, 0.7435531598F, 0.7499461068F, 0.7562635986F,
-  0.7625043214F, 0.7686670148F, 0.7747504721F, 0.7807535410F,
-  0.7866751247F, 0.7925141825F, 0.7982697296F, 0.8039408387F,
-  0.8095266395F, 0.8150263196F, 0.8204391248F, 0.8257643590F,
-  0.8310013848F, 0.8361496236F, 0.8412085555F, 0.8461777194F,
-  0.8510567129F, 0.8558451924F, 0.8605428730F, 0.8651495278F,
-  0.8696649882F, 0.8740891432F, 0.8784219392F, 0.8826633797F,
-  0.8868135244F, 0.8908724888F, 0.8948404441F, 0.8987176157F,
-  0.9025042831F, 0.9062007791F, 0.9098074886F, 0.9133248482F,
-  0.9167533451F, 0.9200935163F, 0.9233459472F, 0.9265112712F,
-  0.9295901680F, 0.9325833632F, 0.9354916263F, 0.9383157705F,
-  0.9410566504F, 0.9437151618F, 0.9462922398F, 0.9487888576F,
-  0.9512060252F, 0.9535447882F, 0.9558062262F, 0.9579914516F,
-  0.9601016078F, 0.9621378683F, 0.9641014348F, 0.9659935361F,
-  0.9678154261F, 0.9695683830F, 0.9712537071F, 0.9728727198F,
-  0.9744267618F, 0.9759171916F, 0.9773453842F, 0.9787127293F,
-  0.9800206298F, 0.9812705006F, 0.9824637665F, 0.9836018613F,
-  0.9846862258F, 0.9857183066F, 0.9866995544F, 0.9876314227F,
-  0.9885153662F, 0.9893528393F, 0.9901452948F, 0.9908941823F,
-  0.9916009470F, 0.9922670279F, 0.9928938570F, 0.9934828574F,
-  0.9940354423F, 0.9945530133F, 0.9950369595F, 0.9954886562F,
-  0.9959094633F, 0.9963007242F, 0.9966637649F, 0.9969998925F,
-  0.9973103939F, 0.9975965351F, 0.9978595598F, 0.9981006885F,
-  0.9983211172F, 0.9985220166F, 0.9987045311F, 0.9988697776F,
-  0.9990188449F, 0.9991527924F, 0.9992726499F, 0.9993794157F,
-  0.9994740570F, 0.9995575079F, 0.9996306699F, 0.9996944099F,
-  0.9997495605F, 0.9997969190F, 0.9998372465F, 0.9998712678F,
-  0.9998996704F, 0.9999231041F, 0.9999421807F, 0.9999574732F,
-  0.9999695157F, 0.9999788026F, 0.9999857885F, 0.9999908879F,
-  0.9999944746F, 0.9999968817F, 0.9999984010F, 0.9999992833F,
-  0.9999997377F, 0.9999999317F, 0.9999999911F, 0.9999999999F,
-};
-
-static float vwin1024[512] = {
-  0.0000036962F, 0.0000332659F, 0.0000924041F, 0.0001811086F,
-  0.0002993761F, 0.0004472021F, 0.0006245811F, 0.0008315063F,
-  0.0010679699F, 0.0013339631F, 0.0016294757F, 0.0019544965F,
-  0.0023090133F, 0.0026930125F, 0.0031064797F, 0.0035493989F,
-  0.0040217533F, 0.0045235250F, 0.0050546946F, 0.0056152418F,
-  0.0062051451F, 0.0068243817F, 0.0074729278F, 0.0081507582F,
-  0.0088578466F, 0.0095941655F, 0.0103596863F, 0.0111543789F,
-  0.0119782122F, 0.0128311538F, 0.0137131701F, 0.0146242260F,
-  0.0155642855F, 0.0165333111F, 0.0175312640F, 0.0185581042F,
-  0.0196137903F, 0.0206982797F, 0.0218115284F, 0.0229534910F,
-  0.0241241208F, 0.0253233698F, 0.0265511886F, 0.0278075263F,
-  0.0290923308F, 0.0304055484F, 0.0317471241F, 0.0331170013F,
-  0.0345151222F, 0.0359414274F, 0.0373958560F, 0.0388783456F,
-  0.0403888325F, 0.0419272511F, 0.0434935347F, 0.0450876148F,
-  0.0467094213F, 0.0483588828F, 0.0500359261F, 0.0517404765F,
-  0.0534724575F, 0.0552317913F, 0.0570183983F, 0.0588321971F,
-  0.0606731048F, 0.0625410369F, 0.0644359070F, 0.0663576272F,
-  0.0683061077F, 0.0702812571F, 0.0722829821F, 0.0743111878F,
-  0.0763657775F, 0.0784466526F, 0.0805537129F, 0.0826868561F,
-  0.0848459782F, 0.0870309736F, 0.0892417345F, 0.0914781514F,
-  0.0937401128F, 0.0960275056F, 0.0983402145F, 0.1006781223F,
-  0.1030411101F, 0.1054290568F, 0.1078418397F, 0.1102793336F,
-  0.1127414119F, 0.1152279457F, 0.1177388042F, 0.1202738544F,
-  0.1228329618F, 0.1254159892F, 0.1280227980F, 0.1306532471F,
-  0.1333071937F, 0.1359844927F, 0.1386849970F, 0.1414085575F,
-  0.1441550230F, 0.1469242403F, 0.1497160539F, 0.1525303063F,
-  0.1553668381F, 0.1582254875F, 0.1611060909F, 0.1640084822F,
-  0.1669324936F, 0.1698779549F, 0.1728446939F, 0.1758325362F,
-  0.1788413055F, 0.1818708232F, 0.1849209084F, 0.1879913785F,
-  0.1910820485F, 0.1941927312F, 0.1973232376F, 0.2004733764F,
-  0.2036429541F, 0.2068317752F, 0.2100396421F, 0.2132663552F,
-  0.2165117125F, 0.2197755102F, 0.2230575422F, 0.2263576007F,
-  0.2296754753F, 0.2330109540F, 0.2363638225F, 0.2397338646F,
-  0.2431208619F, 0.2465245941F, 0.2499448389F, 0.2533813719F,
-  0.2568339669F, 0.2603023956F, 0.2637864277F, 0.2672858312F,
-  0.2708003718F, 0.2743298135F, 0.2778739186F, 0.2814324472F,
-  0.2850051576F, 0.2885918065F, 0.2921921485F, 0.2958059366F,
-  0.2994329219F, 0.3030728538F, 0.3067254799F, 0.3103905462F,
-  0.3140677969F, 0.3177569747F, 0.3214578205F, 0.3251700736F,
-  0.3288934718F, 0.3326277513F, 0.3363726468F, 0.3401278914F,
-  0.3438932168F, 0.3476683533F, 0.3514530297F, 0.3552469734F,
-  0.3590499106F, 0.3628615659F, 0.3666816630F, 0.3705099239F,
-  0.3743460698F, 0.3781898204F, 0.3820408945F, 0.3858990095F,
-  0.3897638820F, 0.3936352274F, 0.3975127601F, 0.4013961936F,
-  0.4052852405F, 0.4091796123F, 0.4130790198F, 0.4169831732F,
-  0.4208917815F, 0.4248045534F, 0.4287211965F, 0.4326414181F,
-  0.4365649248F, 0.4404914225F, 0.4444206167F, 0.4483522125F,
-  0.4522859146F, 0.4562214270F, 0.4601584538F, 0.4640966984F,
-  0.4680358644F, 0.4719756548F, 0.4759157726F, 0.4798559209F,
-  0.4837958024F, 0.4877351199F, 0.4916735765F, 0.4956108751F,
-  0.4995467188F, 0.5034808109F, 0.5074128550F, 0.5113425550F,
-  0.5152696149F, 0.5191937395F, 0.5231146336F, 0.5270320028F,
-  0.5309455530F, 0.5348549910F, 0.5387600239F, 0.5426603597F,
-  0.5465557070F, 0.5504457754F, 0.5543302752F, 0.5582089175F,
-  0.5620814145F, 0.5659474793F, 0.5698068262F, 0.5736591704F,
-  0.5775042283F, 0.5813417176F, 0.5851713571F, 0.5889928670F,
-  0.5928059689F, 0.5966103856F, 0.6004058415F, 0.6041920626F,
-  0.6079687761F, 0.6117357113F, 0.6154925986F, 0.6192391705F,
-  0.6229751612F, 0.6267003064F, 0.6304143441F, 0.6341170137F,
-  0.6378080569F, 0.6414872173F, 0.6451542405F, 0.6488088741F,
-  0.6524508681F, 0.6560799742F, 0.6596959469F, 0.6632985424F,
-  0.6668875197F, 0.6704626398F, 0.6740236662F, 0.6775703649F,
-  0.6811025043F, 0.6846198554F, 0.6881221916F, 0.6916092892F,
-  0.6950809269F, 0.6985368861F, 0.7019769510F, 0.7054009085F,
-  0.7088085484F, 0.7121996632F, 0.7155740484F, 0.7189315023F,
-  0.7222718263F, 0.7255948245F, 0.7289003043F, 0.7321880760F,
-  0.7354579530F, 0.7387097518F, 0.7419432921F, 0.7451583966F,
-  0.7483548915F, 0.7515326059F, 0.7546913723F, 0.7578310265F,
-  0.7609514077F, 0.7640523581F, 0.7671337237F, 0.7701953535F,
-  0.7732371001F, 0.7762588195F, 0.7792603711F, 0.7822416178F,
-  0.7852024259F, 0.7881426654F, 0.7910622097F, 0.7939609356F,
-  0.7968387237F, 0.7996954579F, 0.8025310261F, 0.8053453193F,
-  0.8081382324F, 0.8109096638F, 0.8136595156F, 0.8163876936F,
-  0.8190941071F, 0.8217786690F, 0.8244412960F, 0.8270819086F,
-  0.8297004305F, 0.8322967896F, 0.8348709171F, 0.8374227481F,
-  0.8399522213F, 0.8424592789F, 0.8449438672F, 0.8474059356F,
-  0.8498454378F, 0.8522623306F, 0.8546565748F, 0.8570281348F,
-  0.8593769787F, 0.8617030779F, 0.8640064080F, 0.8662869477F,
-  0.8685446796F, 0.8707795899F, 0.8729916682F, 0.8751809079F,
-  0.8773473059F, 0.8794908626F, 0.8816115819F, 0.8837094713F,
-  0.8857845418F, 0.8878368079F, 0.8898662874F, 0.8918730019F,
-  0.8938569760F, 0.8958182380F, 0.8977568194F, 0.8996727552F,
-  0.9015660837F, 0.9034368465F, 0.9052850885F, 0.9071108577F,
-  0.9089142057F, 0.9106951869F, 0.9124538591F, 0.9141902832F,
-  0.9159045233F, 0.9175966464F, 0.9192667228F, 0.9209148257F,
-  0.9225410313F, 0.9241454187F, 0.9257280701F, 0.9272890704F,
-  0.9288285075F, 0.9303464720F, 0.9318430576F, 0.9333183603F,
-  0.9347724792F, 0.9362055158F, 0.9376175745F, 0.9390087622F,
-  0.9403791881F, 0.9417289644F, 0.9430582055F, 0.9443670283F,
-  0.9456555521F, 0.9469238986F, 0.9481721917F, 0.9494005577F,
-  0.9506091252F, 0.9517980248F, 0.9529673894F, 0.9541173540F,
-  0.9552480557F, 0.9563596334F, 0.9574522282F, 0.9585259830F,
-  0.9595810428F, 0.9606175542F, 0.9616356656F, 0.9626355274F,
-  0.9636172915F, 0.9645811114F, 0.9655271425F, 0.9664555414F,
-  0.9673664664F, 0.9682600774F, 0.9691365355F, 0.9699960034F,
-  0.9708386448F, 0.9716646250F, 0.9724741103F, 0.9732672685F,
-  0.9740442683F, 0.9748052795F, 0.9755504729F, 0.9762800205F,
-  0.9769940950F, 0.9776928703F, 0.9783765210F, 0.9790452223F,
-  0.9796991504F, 0.9803384823F, 0.9809633954F, 0.9815740679F,
-  0.9821706784F, 0.9827534063F, 0.9833224312F, 0.9838779332F,
-  0.9844200928F, 0.9849490910F, 0.9854651087F, 0.9859683274F,
-  0.9864589286F, 0.9869370940F, 0.9874030054F, 0.9878568447F,
-  0.9882987937F, 0.9887290343F, 0.9891477481F, 0.9895551169F,
-  0.9899513220F, 0.9903365446F, 0.9907109658F, 0.9910747662F,
-  0.9914281260F, 0.9917712252F, 0.9921042433F, 0.9924273593F,
-  0.9927407516F, 0.9930445982F, 0.9933390763F, 0.9936243626F,
-  0.9939006331F, 0.9941680631F, 0.9944268269F, 0.9946770982F,
-  0.9949190498F, 0.9951528537F, 0.9953786808F, 0.9955967011F,
-  0.9958070836F, 0.9960099963F, 0.9962056061F, 0.9963940787F,
-  0.9965755786F, 0.9967502693F, 0.9969183129F, 0.9970798704F,
-  0.9972351013F, 0.9973841640F, 0.9975272151F, 0.9976644103F,
-  0.9977959036F, 0.9979218476F, 0.9980423932F, 0.9981576901F,
-  0.9982678862F, 0.9983731278F, 0.9984735596F, 0.9985693247F,
-  0.9986605645F, 0.9987474186F, 0.9988300248F, 0.9989085193F,
-  0.9989830364F, 0.9990537085F, 0.9991206662F, 0.9991840382F,
-  0.9992439513F, 0.9993005303F, 0.9993538982F, 0.9994041757F,
-  0.9994514817F, 0.9994959330F, 0.9995376444F, 0.9995767286F,
-  0.9996132960F, 0.9996474550F, 0.9996793121F, 0.9997089710F,
-  0.9997365339F, 0.9997621003F, 0.9997857677F, 0.9998076311F,
-  0.9998277836F, 0.9998463156F, 0.9998633155F, 0.9998788692F,
-  0.9998930603F, 0.9999059701F, 0.9999176774F, 0.9999282586F,
-  0.9999377880F, 0.9999463370F, 0.9999539749F, 0.9999607685F,
-  0.9999667820F, 0.9999720773F, 0.9999767136F, 0.9999807479F,
-  0.9999842344F, 0.9999872249F, 0.9999897688F, 0.9999919127F,
-  0.9999937009F, 0.9999951749F, 0.9999963738F, 0.9999973342F,
-  0.9999980900F, 0.9999986724F, 0.9999991103F, 0.9999994297F,
-  0.9999996543F, 0.9999998049F, 0.9999999000F, 0.9999999552F,
-  0.9999999836F, 0.9999999957F, 0.9999999994F, 1.0000000000F,
-};
-
-static float vwin2048[1024] = {
-  0.0000009241F, 0.0000083165F, 0.0000231014F, 0.0000452785F,
-  0.0000748476F, 0.0001118085F, 0.0001561608F, 0.0002079041F,
-  0.0002670379F, 0.0003335617F, 0.0004074748F, 0.0004887765F,
-  0.0005774661F, 0.0006735427F, 0.0007770054F, 0.0008878533F,
-  0.0010060853F, 0.0011317002F, 0.0012646969F, 0.0014050742F,
-  0.0015528307F, 0.0017079650F, 0.0018704756F, 0.0020403610F,
-  0.0022176196F, 0.0024022497F, 0.0025942495F, 0.0027936173F,
-  0.0030003511F, 0.0032144490F, 0.0034359088F, 0.0036647286F,
-  0.0039009061F, 0.0041444391F, 0.0043953253F, 0.0046535621F,
-  0.0049191472F, 0.0051920781F, 0.0054723520F, 0.0057599664F,
-  0.0060549184F, 0.0063572052F, 0.0066668239F, 0.0069837715F,
-  0.0073080449F, 0.0076396410F, 0.0079785566F, 0.0083247884F,
-  0.0086783330F, 0.0090391871F, 0.0094073470F, 0.0097828092F,
-  0.0101655700F, 0.0105556258F, 0.0109529726F, 0.0113576065F,
-  0.0117695237F, 0.0121887200F, 0.0126151913F, 0.0130489335F,
-  0.0134899422F, 0.0139382130F, 0.0143937415F, 0.0148565233F,
-  0.0153265536F, 0.0158038279F, 0.0162883413F, 0.0167800889F,
-  0.0172790660F, 0.0177852675F, 0.0182986882F, 0.0188193231F,
-  0.0193471668F, 0.0198822141F, 0.0204244594F, 0.0209738974F,
-  0.0215305225F, 0.0220943289F, 0.0226653109F, 0.0232434627F,
-  0.0238287784F, 0.0244212519F, 0.0250208772F, 0.0256276481F,
-  0.0262415582F, 0.0268626014F, 0.0274907711F, 0.0281260608F,
-  0.0287684638F, 0.0294179736F, 0.0300745833F, 0.0307382859F,
-  0.0314090747F, 0.0320869424F, 0.0327718819F, 0.0334638860F,
-  0.0341629474F, 0.0348690586F, 0.0355822122F, 0.0363024004F,
-  0.0370296157F, 0.0377638502F, 0.0385050960F, 0.0392533451F,
-  0.0400085896F, 0.0407708211F, 0.0415400315F, 0.0423162123F,
-  0.0430993552F, 0.0438894515F, 0.0446864926F, 0.0454904698F,
-  0.0463013742F, 0.0471191969F, 0.0479439288F, 0.0487755607F,
-  0.0496140836F, 0.0504594879F, 0.0513117642F, 0.0521709031F,
-  0.0530368949F, 0.0539097297F, 0.0547893979F, 0.0556758894F,
-  0.0565691941F, 0.0574693019F, 0.0583762026F, 0.0592898858F,
-  0.0602103410F, 0.0611375576F, 0.0620715250F, 0.0630122324F,
-  0.0639596688F, 0.0649138234F, 0.0658746848F, 0.0668422421F,
-  0.0678164838F, 0.0687973985F, 0.0697849746F, 0.0707792005F,
-  0.0717800645F, 0.0727875547F, 0.0738016591F, 0.0748223656F,
-  0.0758496620F, 0.0768835359F, 0.0779239751F, 0.0789709668F,
-  0.0800244985F, 0.0810845574F, 0.0821511306F, 0.0832242052F,
-  0.0843037679F, 0.0853898056F, 0.0864823050F, 0.0875812525F,
-  0.0886866347F, 0.0897984378F, 0.0909166480F, 0.0920412513F,
-  0.0931722338F, 0.0943095813F, 0.0954532795F, 0.0966033140F,
-  0.0977596702F, 0.0989223336F, 0.1000912894F, 0.1012665227F,
-  0.1024480185F, 0.1036357616F, 0.1048297369F, 0.1060299290F,
-  0.1072363224F, 0.1084489014F, 0.1096676504F, 0.1108925534F,
-  0.1121235946F, 0.1133607577F, 0.1146040267F, 0.1158533850F,
-  0.1171088163F, 0.1183703040F, 0.1196378312F, 0.1209113812F,
-  0.1221909370F, 0.1234764815F, 0.1247679974F, 0.1260654674F,
-  0.1273688740F, 0.1286781995F, 0.1299934263F, 0.1313145365F,
-  0.1326415121F, 0.1339743349F, 0.1353129866F, 0.1366574490F,
-  0.1380077035F, 0.1393637315F, 0.1407255141F, 0.1420930325F,
-  0.1434662677F, 0.1448452004F, 0.1462298115F, 0.1476200814F,
-  0.1490159906F, 0.1504175195F, 0.1518246482F, 0.1532373569F,
-  0.1546556253F, 0.1560794333F, 0.1575087606F, 0.1589435866F,
-  0.1603838909F, 0.1618296526F, 0.1632808509F, 0.1647374648F,
-  0.1661994731F, 0.1676668546F, 0.1691395880F, 0.1706176516F,
-  0.1721010238F, 0.1735896829F, 0.1750836068F, 0.1765827736F,
-  0.1780871610F, 0.1795967468F, 0.1811115084F, 0.1826314234F,
-  0.1841564689F, 0.1856866221F, 0.1872218600F, 0.1887621595F,
-  0.1903074974F, 0.1918578503F, 0.1934131947F, 0.1949735068F,
-  0.1965387630F, 0.1981089393F, 0.1996840117F, 0.2012639560F,
-  0.2028487479F, 0.2044383630F, 0.2060327766F, 0.2076319642F,
-  0.2092359007F, 0.2108445614F, 0.2124579211F, 0.2140759545F,
-  0.2156986364F, 0.2173259411F, 0.2189578432F, 0.2205943168F,
-  0.2222353361F, 0.2238808751F, 0.2255309076F, 0.2271854073F,
-  0.2288443480F, 0.2305077030F, 0.2321754457F, 0.2338475493F,
-  0.2355239869F, 0.2372047315F, 0.2388897560F, 0.2405790329F,
-  0.2422725350F, 0.2439702347F, 0.2456721043F, 0.2473781159F,
-  0.2490882418F, 0.2508024539F, 0.2525207240F, 0.2542430237F,
-  0.2559693248F, 0.2576995986F, 0.2594338166F, 0.2611719498F,
-  0.2629139695F, 0.2646598466F, 0.2664095520F, 0.2681630564F,
-  0.2699203304F, 0.2716813445F, 0.2734460691F, 0.2752144744F,
-  0.2769865307F, 0.2787622079F, 0.2805414760F, 0.2823243047F,
-  0.2841106637F, 0.2859005227F, 0.2876938509F, 0.2894906179F,
-  0.2912907928F, 0.2930943447F, 0.2949012426F, 0.2967114554F,
-  0.2985249520F, 0.3003417009F, 0.3021616708F, 0.3039848301F,
-  0.3058111471F, 0.3076405901F, 0.3094731273F, 0.3113087266F,
-  0.3131473560F, 0.3149889833F, 0.3168335762F, 0.3186811024F,
-  0.3205315294F, 0.3223848245F, 0.3242409552F, 0.3260998886F,
-  0.3279615918F, 0.3298260319F, 0.3316931758F, 0.3335629903F,
-  0.3354354423F, 0.3373104982F, 0.3391881247F, 0.3410682882F,
-  0.3429509551F, 0.3448360917F, 0.3467236642F, 0.3486136387F,
-  0.3505059811F, 0.3524006575F, 0.3542976336F, 0.3561968753F,
-  0.3580983482F, 0.3600020179F, 0.3619078499F, 0.3638158096F,
-  0.3657258625F, 0.3676379737F, 0.3695521086F, 0.3714682321F,
-  0.3733863094F, 0.3753063055F, 0.3772281852F, 0.3791519134F,
-  0.3810774548F, 0.3830047742F, 0.3849338362F, 0.3868646053F,
-  0.3887970459F, 0.3907311227F, 0.3926667998F, 0.3946040417F,
-  0.3965428125F, 0.3984830765F, 0.4004247978F, 0.4023679403F,
-  0.4043124683F, 0.4062583455F, 0.4082055359F, 0.4101540034F,
-  0.4121037117F, 0.4140546246F, 0.4160067058F, 0.4179599190F,
-  0.4199142277F, 0.4218695956F, 0.4238259861F, 0.4257833627F,
-  0.4277416888F, 0.4297009279F, 0.4316610433F, 0.4336219983F,
-  0.4355837562F, 0.4375462803F, 0.4395095337F, 0.4414734797F,
-  0.4434380815F, 0.4454033021F, 0.4473691046F, 0.4493354521F,
-  0.4513023078F, 0.4532696345F, 0.4552373954F, 0.4572055533F,
-  0.4591740713F, 0.4611429123F, 0.4631120393F, 0.4650814151F,
-  0.4670510028F, 0.4690207650F, 0.4709906649F, 0.4729606651F,
-  0.4749307287F, 0.4769008185F, 0.4788708972F, 0.4808409279F,
-  0.4828108732F, 0.4847806962F, 0.4867503597F, 0.4887198264F,
-  0.4906890593F, 0.4926580213F, 0.4946266753F, 0.4965949840F,
-  0.4985629105F, 0.5005304176F, 0.5024974683F, 0.5044640255F,
-  0.5064300522F, 0.5083955114F, 0.5103603659F, 0.5123245790F,
-  0.5142881136F, 0.5162509328F, 0.5182129997F, 0.5201742774F,
-  0.5221347290F, 0.5240943178F, 0.5260530070F, 0.5280107598F,
-  0.5299675395F, 0.5319233095F, 0.5338780330F, 0.5358316736F,
-  0.5377841946F, 0.5397355596F, 0.5416857320F, 0.5436346755F,
-  0.5455823538F, 0.5475287304F, 0.5494737691F, 0.5514174337F,
-  0.5533596881F, 0.5553004962F, 0.5572398218F, 0.5591776291F,
-  0.5611138821F, 0.5630485449F, 0.5649815818F, 0.5669129570F,
-  0.5688426349F, 0.5707705799F, 0.5726967564F, 0.5746211290F,
-  0.5765436624F, 0.5784643212F, 0.5803830702F, 0.5822998743F,
-  0.5842146984F, 0.5861275076F, 0.5880382669F, 0.5899469416F,
-  0.5918534968F, 0.5937578981F, 0.5956601107F, 0.5975601004F,
-  0.5994578326F, 0.6013532732F, 0.6032463880F, 0.6051371429F,
-  0.6070255039F, 0.6089114372F, 0.6107949090F, 0.6126758856F,
-  0.6145543334F, 0.6164302191F, 0.6183035092F, 0.6201741706F,
-  0.6220421700F, 0.6239074745F, 0.6257700513F, 0.6276298674F,
-  0.6294868903F, 0.6313410873F, 0.6331924262F, 0.6350408745F,
-  0.6368864001F, 0.6387289710F, 0.6405685552F, 0.6424051209F,
-  0.6442386364F, 0.6460690702F, 0.6478963910F, 0.6497205673F,
-  0.6515415682F, 0.6533593625F, 0.6551739194F, 0.6569852082F,
-  0.6587931984F, 0.6605978593F, 0.6623991609F, 0.6641970728F,
-  0.6659915652F, 0.6677826081F, 0.6695701718F, 0.6713542268F,
-  0.6731347437F, 0.6749116932F, 0.6766850461F, 0.6784547736F,
-  0.6802208469F, 0.6819832374F, 0.6837419164F, 0.6854968559F,
-  0.6872480275F, 0.6889954034F, 0.6907389556F, 0.6924786566F,
-  0.6942144788F, 0.6959463950F, 0.6976743780F, 0.6993984008F,
-  0.7011184365F, 0.7028344587F, 0.7045464407F, 0.7062543564F,
-  0.7079581796F, 0.7096578844F, 0.7113534450F, 0.7130448359F,
-  0.7147320316F, 0.7164150070F, 0.7180937371F, 0.7197681970F,
-  0.7214383620F, 0.7231042077F, 0.7247657098F, 0.7264228443F,
-  0.7280755871F, 0.7297239147F, 0.7313678035F, 0.7330072301F,
-  0.7346421715F, 0.7362726046F, 0.7378985069F, 0.7395198556F,
-  0.7411366285F, 0.7427488034F, 0.7443563584F, 0.7459592717F,
-  0.7475575218F, 0.7491510873F, 0.7507399471F, 0.7523240803F,
-  0.7539034661F, 0.7554780839F, 0.7570479136F, 0.7586129349F,
-  0.7601731279F, 0.7617284730F, 0.7632789506F, 0.7648245416F,
-  0.7663652267F, 0.7679009872F, 0.7694318044F, 0.7709576599F,
-  0.7724785354F, 0.7739944130F, 0.7755052749F, 0.7770111035F,
-  0.7785118815F, 0.7800075916F, 0.7814982170F, 0.7829837410F,
-  0.7844641472F, 0.7859394191F, 0.7874095408F, 0.7888744965F,
-  0.7903342706F, 0.7917888476F, 0.7932382124F, 0.7946823501F,
-  0.7961212460F, 0.7975548855F, 0.7989832544F, 0.8004063386F,
-  0.8018241244F, 0.8032365981F, 0.8046437463F, 0.8060455560F,
-  0.8074420141F, 0.8088331080F, 0.8102188253F, 0.8115991536F,
-  0.8129740810F, 0.8143435957F, 0.8157076861F, 0.8170663409F,
-  0.8184195489F, 0.8197672994F, 0.8211095817F, 0.8224463853F,
-  0.8237777001F, 0.8251035161F, 0.8264238235F, 0.8277386129F,
-  0.8290478750F, 0.8303516008F, 0.8316497814F, 0.8329424083F,
-  0.8342294731F, 0.8355109677F, 0.8367868841F, 0.8380572148F,
-  0.8393219523F, 0.8405810893F, 0.8418346190F, 0.8430825345F,
-  0.8443248294F, 0.8455614974F, 0.8467925323F, 0.8480179285F,
-  0.8492376802F, 0.8504517822F, 0.8516602292F, 0.8528630164F,
-  0.8540601391F, 0.8552515928F, 0.8564373733F, 0.8576174766F,
-  0.8587918990F, 0.8599606368F, 0.8611236868F, 0.8622810460F,
-  0.8634327113F, 0.8645786802F, 0.8657189504F, 0.8668535195F,
-  0.8679823857F, 0.8691055472F, 0.8702230025F, 0.8713347503F,
-  0.8724407896F, 0.8735411194F, 0.8746357394F, 0.8757246489F,
-  0.8768078479F, 0.8778853364F, 0.8789571146F, 0.8800231832F,
-  0.8810835427F, 0.8821381942F, 0.8831871387F, 0.8842303777F,
-  0.8852679127F, 0.8862997456F, 0.8873258784F, 0.8883463132F,
-  0.8893610527F, 0.8903700994F, 0.8913734562F, 0.8923711263F,
-  0.8933631129F, 0.8943494196F, 0.8953300500F, 0.8963050083F,
-  0.8972742985F, 0.8982379249F, 0.8991958922F, 0.9001482052F,
-  0.9010948688F, 0.9020358883F, 0.9029712690F, 0.9039010165F,
-  0.9048251367F, 0.9057436357F, 0.9066565195F, 0.9075637946F,
-  0.9084654678F, 0.9093615456F, 0.9102520353F, 0.9111369440F,
-  0.9120162792F, 0.9128900484F, 0.9137582595F, 0.9146209204F,
-  0.9154780394F, 0.9163296248F, 0.9171756853F, 0.9180162296F,
-  0.9188512667F, 0.9196808057F, 0.9205048559F, 0.9213234270F,
-  0.9221365285F, 0.9229441704F, 0.9237463629F, 0.9245431160F,
-  0.9253344404F, 0.9261203465F, 0.9269008453F, 0.9276759477F,
-  0.9284456648F, 0.9292100080F, 0.9299689889F, 0.9307226190F,
-  0.9314709103F, 0.9322138747F, 0.9329515245F, 0.9336838721F,
-  0.9344109300F, 0.9351327108F, 0.9358492275F, 0.9365604931F,
-  0.9372665208F, 0.9379673239F, 0.9386629160F, 0.9393533107F,
-  0.9400385220F, 0.9407185637F, 0.9413934501F, 0.9420631954F,
-  0.9427278141F, 0.9433873208F, 0.9440417304F, 0.9446910576F,
-  0.9453353176F, 0.9459745255F, 0.9466086968F, 0.9472378469F,
-  0.9478619915F, 0.9484811463F, 0.9490953274F, 0.9497045506F,
-  0.9503088323F, 0.9509081888F, 0.9515026365F, 0.9520921921F,
-  0.9526768723F, 0.9532566940F, 0.9538316742F, 0.9544018300F,
-  0.9549671786F, 0.9555277375F, 0.9560835241F, 0.9566345562F,
-  0.9571808513F, 0.9577224275F, 0.9582593027F, 0.9587914949F,
-  0.9593190225F, 0.9598419038F, 0.9603601571F, 0.9608738012F,
-  0.9613828546F, 0.9618873361F, 0.9623872646F, 0.9628826591F,
-  0.9633735388F, 0.9638599227F, 0.9643418303F, 0.9648192808F,
-  0.9652922939F, 0.9657608890F, 0.9662250860F, 0.9666849046F,
-  0.9671403646F, 0.9675914861F, 0.9680382891F, 0.9684807937F,
-  0.9689190202F, 0.9693529890F, 0.9697827203F, 0.9702082347F,
-  0.9706295529F, 0.9710466953F, 0.9714596828F, 0.9718685362F,
-  0.9722732762F, 0.9726739240F, 0.9730705005F, 0.9734630267F,
-  0.9738515239F, 0.9742360134F, 0.9746165163F, 0.9749930540F,
-  0.9753656481F, 0.9757343198F, 0.9760990909F, 0.9764599829F,
-  0.9768170175F, 0.9771702164F, 0.9775196013F, 0.9778651941F,
-  0.9782070167F, 0.9785450909F, 0.9788794388F, 0.9792100824F,
-  0.9795370437F, 0.9798603449F, 0.9801800080F, 0.9804960554F,
-  0.9808085092F, 0.9811173916F, 0.9814227251F, 0.9817245318F,
-  0.9820228343F, 0.9823176549F, 0.9826090160F, 0.9828969402F,
-  0.9831814498F, 0.9834625674F, 0.9837403156F, 0.9840147169F,
-  0.9842857939F, 0.9845535692F, 0.9848180654F, 0.9850793052F,
-  0.9853373113F, 0.9855921062F, 0.9858437127F, 0.9860921535F,
-  0.9863374512F, 0.9865796287F, 0.9868187085F, 0.9870547136F,
-  0.9872876664F, 0.9875175899F, 0.9877445067F, 0.9879684396F,
-  0.9881894112F, 0.9884074444F, 0.9886225619F, 0.9888347863F,
-  0.9890441404F, 0.9892506468F, 0.9894543284F, 0.9896552077F,
-  0.9898533074F, 0.9900486502F, 0.9902412587F, 0.9904311555F,
-  0.9906183633F, 0.9908029045F, 0.9909848019F, 0.9911640779F,
-  0.9913407550F, 0.9915148557F, 0.9916864025F, 0.9918554179F,
-  0.9920219241F, 0.9921859437F, 0.9923474989F, 0.9925066120F,
-  0.9926633054F, 0.9928176012F, 0.9929695218F, 0.9931190891F,
-  0.9932663254F, 0.9934112527F, 0.9935538932F, 0.9936942686F,
-  0.9938324012F, 0.9939683126F, 0.9941020248F, 0.9942335597F,
-  0.9943629388F, 0.9944901841F, 0.9946153170F, 0.9947383593F,
-  0.9948593325F, 0.9949782579F, 0.9950951572F, 0.9952100516F,
-  0.9953229625F, 0.9954339111F, 0.9955429186F, 0.9956500062F,
-  0.9957551948F, 0.9958585056F, 0.9959599593F, 0.9960595769F,
-  0.9961573792F, 0.9962533869F, 0.9963476206F, 0.9964401009F,
-  0.9965308483F, 0.9966198833F, 0.9967072261F, 0.9967928971F,
-  0.9968769164F, 0.9969593041F, 0.9970400804F, 0.9971192651F,
-  0.9971968781F, 0.9972729391F, 0.9973474680F, 0.9974204842F,
-  0.9974920074F, 0.9975620569F, 0.9976306521F, 0.9976978122F,
-  0.9977635565F, 0.9978279039F, 0.9978908736F, 0.9979524842F,
-  0.9980127547F, 0.9980717037F, 0.9981293499F, 0.9981857116F,
-  0.9982408073F, 0.9982946554F, 0.9983472739F, 0.9983986810F,
-  0.9984488947F, 0.9984979328F, 0.9985458132F, 0.9985925534F,
-  0.9986381711F, 0.9986826838F, 0.9987261086F, 0.9987684630F,
-  0.9988097640F, 0.9988500286F, 0.9988892738F, 0.9989275163F,
-  0.9989647727F, 0.9990010597F, 0.9990363938F, 0.9990707911F,
-  0.9991042679F, 0.9991368404F, 0.9991685244F, 0.9991993358F,
-  0.9992292905F, 0.9992584038F, 0.9992866914F, 0.9993141686F,
-  0.9993408506F, 0.9993667526F, 0.9993918895F, 0.9994162761F,
-  0.9994399273F, 0.9994628576F, 0.9994850815F, 0.9995066133F,
-  0.9995274672F, 0.9995476574F, 0.9995671978F, 0.9995861021F,
-  0.9996043841F, 0.9996220573F, 0.9996391352F, 0.9996556310F,
-  0.9996715579F, 0.9996869288F, 0.9997017568F, 0.9997160543F,
-  0.9997298342F, 0.9997431088F, 0.9997558905F, 0.9997681914F,
-  0.9997800236F, 0.9997913990F, 0.9998023292F, 0.9998128261F,
-  0.9998229009F, 0.9998325650F, 0.9998418296F, 0.9998507058F,
-  0.9998592044F, 0.9998673362F, 0.9998751117F, 0.9998825415F,
-  0.9998896358F, 0.9998964047F, 0.9999028584F, 0.9999090066F,
-  0.9999148590F, 0.9999204253F, 0.9999257148F, 0.9999307368F,
-  0.9999355003F, 0.9999400144F, 0.9999442878F, 0.9999483293F,
-  0.9999521472F, 0.9999557499F, 0.9999591457F, 0.9999623426F,
-  0.9999653483F, 0.9999681708F, 0.9999708175F, 0.9999732959F,
-  0.9999756132F, 0.9999777765F, 0.9999797928F, 0.9999816688F,
-  0.9999834113F, 0.9999850266F, 0.9999865211F, 0.9999879009F,
-  0.9999891721F, 0.9999903405F, 0.9999914118F, 0.9999923914F,
-  0.9999932849F, 0.9999940972F, 0.9999948336F, 0.9999954989F,
-  0.9999960978F, 0.9999966349F, 0.9999971146F, 0.9999975411F,
-  0.9999979185F, 0.9999982507F, 0.9999985414F, 0.9999987944F,
-  0.9999990129F, 0.9999992003F, 0.9999993596F, 0.9999994939F,
-  0.9999996059F, 0.9999996981F, 0.9999997732F, 0.9999998333F,
-  0.9999998805F, 0.9999999170F, 0.9999999444F, 0.9999999643F,
-  0.9999999784F, 0.9999999878F, 0.9999999937F, 0.9999999972F,
-  0.9999999990F, 0.9999999997F, 1.0000000000F, 1.0000000000F,
-};
-
-static float vwin4096[2048] = {
-  0.0000002310F, 0.0000020791F, 0.0000057754F, 0.0000113197F,
-  0.0000187121F, 0.0000279526F, 0.0000390412F, 0.0000519777F,
-  0.0000667623F, 0.0000833949F, 0.0001018753F, 0.0001222036F,
-  0.0001443798F, 0.0001684037F, 0.0001942754F, 0.0002219947F,
-  0.0002515616F, 0.0002829761F, 0.0003162380F, 0.0003513472F,
-  0.0003883038F, 0.0004271076F, 0.0004677584F, 0.0005102563F,
-  0.0005546011F, 0.0006007928F, 0.0006488311F, 0.0006987160F,
-  0.0007504474F, 0.0008040251F, 0.0008594490F, 0.0009167191F,
-  0.0009758351F, 0.0010367969F, 0.0010996044F, 0.0011642574F,
-  0.0012307558F, 0.0012990994F, 0.0013692880F, 0.0014413216F,
-  0.0015151998F, 0.0015909226F, 0.0016684898F, 0.0017479011F,
-  0.0018291565F, 0.0019122556F, 0.0019971983F, 0.0020839845F,
-  0.0021726138F, 0.0022630861F, 0.0023554012F, 0.0024495588F,
-  0.0025455588F, 0.0026434008F, 0.0027430847F, 0.0028446103F,
-  0.0029479772F, 0.0030531853F, 0.0031602342F, 0.0032691238F,
-  0.0033798538F, 0.0034924239F, 0.0036068338F, 0.0037230833F,
-  0.0038411721F, 0.0039610999F, 0.0040828664F, 0.0042064714F,
-  0.0043319145F, 0.0044591954F, 0.0045883139F, 0.0047192696F,
-  0.0048520622F, 0.0049866914F, 0.0051231569F, 0.0052614583F,
-  0.0054015953F, 0.0055435676F, 0.0056873748F, 0.0058330166F,
-  0.0059804926F, 0.0061298026F, 0.0062809460F, 0.0064339226F,
-  0.0065887320F, 0.0067453738F, 0.0069038476F, 0.0070641531F,
-  0.0072262899F, 0.0073902575F, 0.0075560556F, 0.0077236838F,
-  0.0078931417F, 0.0080644288F, 0.0082375447F, 0.0084124891F,
-  0.0085892615F, 0.0087678614F, 0.0089482885F, 0.0091305422F,
-  0.0093146223F, 0.0095005281F, 0.0096882592F, 0.0098778153F,
-  0.0100691958F, 0.0102624002F, 0.0104574281F, 0.0106542791F,
-  0.0108529525F, 0.0110534480F, 0.0112557651F, 0.0114599032F,
-  0.0116658618F, 0.0118736405F, 0.0120832387F, 0.0122946560F,
-  0.0125078917F, 0.0127229454F, 0.0129398166F, 0.0131585046F,
-  0.0133790090F, 0.0136013292F, 0.0138254647F, 0.0140514149F,
-  0.0142791792F, 0.0145087572F, 0.0147401481F, 0.0149733515F,
-  0.0152083667F, 0.0154451932F, 0.0156838304F, 0.0159242777F,
-  0.0161665345F, 0.0164106001F, 0.0166564741F, 0.0169041557F,
-  0.0171536443F, 0.0174049393F, 0.0176580401F, 0.0179129461F,
-  0.0181696565F, 0.0184281708F, 0.0186884883F, 0.0189506084F,
-  0.0192145303F, 0.0194802535F, 0.0197477772F, 0.0200171008F,
-  0.0202882236F, 0.0205611449F, 0.0208358639F, 0.0211123801F,
-  0.0213906927F, 0.0216708011F, 0.0219527043F, 0.0222364019F,
-  0.0225218930F, 0.0228091769F, 0.0230982529F, 0.0233891203F,
-  0.0236817782F, 0.0239762259F, 0.0242724628F, 0.0245704880F,
-  0.0248703007F, 0.0251719002F, 0.0254752858F, 0.0257804565F,
-  0.0260874117F, 0.0263961506F, 0.0267066722F, 0.0270189760F,
-  0.0273330609F, 0.0276489263F, 0.0279665712F, 0.0282859949F,
-  0.0286071966F, 0.0289301753F, 0.0292549303F, 0.0295814607F,
-  0.0299097656F, 0.0302398442F, 0.0305716957F, 0.0309053191F,
-  0.0312407135F, 0.0315778782F, 0.0319168122F, 0.0322575145F,
-  0.0325999844F, 0.0329442209F, 0.0332902231F, 0.0336379900F,
-  0.0339875208F, 0.0343388146F, 0.0346918703F, 0.0350466871F,
-  0.0354032640F, 0.0357616000F, 0.0361216943F, 0.0364835458F,
-  0.0368471535F, 0.0372125166F, 0.0375796339F, 0.0379485046F,
-  0.0383191276F, 0.0386915020F, 0.0390656267F, 0.0394415008F,
-  0.0398191231F, 0.0401984927F, 0.0405796086F, 0.0409624698F,
-  0.0413470751F, 0.0417334235F, 0.0421215141F, 0.0425113457F,
-  0.0429029172F, 0.0432962277F, 0.0436912760F, 0.0440880610F,
-  0.0444865817F, 0.0448868370F, 0.0452888257F, 0.0456925468F,
-  0.0460979992F, 0.0465051816F, 0.0469140931F, 0.0473247325F,
-  0.0477370986F, 0.0481511902F, 0.0485670064F, 0.0489845458F,
-  0.0494038074F, 0.0498247899F, 0.0502474922F, 0.0506719131F,
-  0.0510980514F, 0.0515259060F, 0.0519554756F, 0.0523867590F,
-  0.0528197550F, 0.0532544624F, 0.0536908800F, 0.0541290066F,
-  0.0545688408F, 0.0550103815F, 0.0554536274F, 0.0558985772F,
-  0.0563452297F, 0.0567935837F, 0.0572436377F, 0.0576953907F,
-  0.0581488412F, 0.0586039880F, 0.0590608297F, 0.0595193651F,
-  0.0599795929F, 0.0604415117F, 0.0609051202F, 0.0613704170F,
-  0.0618374009F, 0.0623060704F, 0.0627764243F, 0.0632484611F,
-  0.0637221795F, 0.0641975781F, 0.0646746555F, 0.0651534104F,
-  0.0656338413F, 0.0661159469F, 0.0665997257F, 0.0670851763F,
-  0.0675722973F, 0.0680610873F, 0.0685515448F, 0.0690436684F,
-  0.0695374567F, 0.0700329081F, 0.0705300213F, 0.0710287947F,
-  0.0715292269F, 0.0720313163F, 0.0725350616F, 0.0730404612F,
-  0.0735475136F, 0.0740562172F, 0.0745665707F, 0.0750785723F,
-  0.0755922207F, 0.0761075143F, 0.0766244515F, 0.0771430307F,
-  0.0776632505F, 0.0781851092F, 0.0787086052F, 0.0792337371F,
-  0.0797605032F, 0.0802889018F, 0.0808189315F, 0.0813505905F,
-  0.0818838773F, 0.0824187903F, 0.0829553277F, 0.0834934881F,
-  0.0840332697F, 0.0845746708F, 0.0851176899F, 0.0856623252F,
-  0.0862085751F, 0.0867564379F, 0.0873059119F, 0.0878569954F,
-  0.0884096867F, 0.0889639840F, 0.0895198858F, 0.0900773902F,
-  0.0906364955F, 0.0911972000F, 0.0917595019F, 0.0923233995F,
-  0.0928888909F, 0.0934559745F, 0.0940246485F, 0.0945949110F,
-  0.0951667604F, 0.0957401946F, 0.0963152121F, 0.0968918109F,
-  0.0974699893F, 0.0980497454F, 0.0986310773F, 0.0992139832F,
-  0.0997984614F, 0.1003845098F, 0.1009721267F, 0.1015613101F,
-  0.1021520582F, 0.1027443692F, 0.1033382410F, 0.1039336718F,
-  0.1045306597F, 0.1051292027F, 0.1057292990F, 0.1063309466F,
-  0.1069341435F, 0.1075388878F, 0.1081451776F, 0.1087530108F,
-  0.1093623856F, 0.1099732998F, 0.1105857516F, 0.1111997389F,
-  0.1118152597F, 0.1124323121F, 0.1130508939F, 0.1136710032F,
-  0.1142926379F, 0.1149157960F, 0.1155404755F, 0.1161666742F,
-  0.1167943901F, 0.1174236211F, 0.1180543652F, 0.1186866202F,
-  0.1193203841F, 0.1199556548F, 0.1205924300F, 0.1212307078F,
-  0.1218704860F, 0.1225117624F, 0.1231545349F, 0.1237988013F,
-  0.1244445596F, 0.1250918074F, 0.1257405427F, 0.1263907632F,
-  0.1270424667F, 0.1276956512F, 0.1283503142F, 0.1290064537F,
-  0.1296640674F, 0.1303231530F, 0.1309837084F, 0.1316457312F,
-  0.1323092193F, 0.1329741703F, 0.1336405820F, 0.1343084520F,
-  0.1349777782F, 0.1356485582F, 0.1363207897F, 0.1369944704F,
-  0.1376695979F, 0.1383461700F, 0.1390241842F, 0.1397036384F,
-  0.1403845300F, 0.1410668567F, 0.1417506162F, 0.1424358061F,
-  0.1431224240F, 0.1438104674F, 0.1444999341F, 0.1451908216F,
-  0.1458831274F, 0.1465768492F, 0.1472719844F, 0.1479685308F,
-  0.1486664857F, 0.1493658468F, 0.1500666115F, 0.1507687775F,
-  0.1514723422F, 0.1521773031F, 0.1528836577F, 0.1535914035F,
-  0.1543005380F, 0.1550110587F, 0.1557229631F, 0.1564362485F,
-  0.1571509124F, 0.1578669524F, 0.1585843657F, 0.1593031499F,
-  0.1600233024F, 0.1607448205F, 0.1614677017F, 0.1621919433F,
-  0.1629175428F, 0.1636444975F, 0.1643728047F, 0.1651024619F,
-  0.1658334665F, 0.1665658156F, 0.1672995067F, 0.1680345371F,
-  0.1687709041F, 0.1695086050F, 0.1702476372F, 0.1709879978F,
-  0.1717296843F, 0.1724726938F, 0.1732170237F, 0.1739626711F,
-  0.1747096335F, 0.1754579079F, 0.1762074916F, 0.1769583819F,
-  0.1777105760F, 0.1784640710F, 0.1792188642F, 0.1799749529F,
-  0.1807323340F, 0.1814910049F, 0.1822509628F, 0.1830122046F,
-  0.1837747277F, 0.1845385292F, 0.1853036062F, 0.1860699558F,
-  0.1868375751F, 0.1876064613F, 0.1883766114F, 0.1891480226F,
-  0.1899206919F, 0.1906946164F, 0.1914697932F, 0.1922462194F,
-  0.1930238919F, 0.1938028079F, 0.1945829643F, 0.1953643583F,
-  0.1961469868F, 0.1969308468F, 0.1977159353F, 0.1985022494F,
-  0.1992897859F, 0.2000785420F, 0.2008685145F, 0.2016597005F,
-  0.2024520968F, 0.2032457005F, 0.2040405084F, 0.2048365175F,
-  0.2056337247F, 0.2064321269F, 0.2072317211F, 0.2080325041F,
-  0.2088344727F, 0.2096376240F, 0.2104419547F, 0.2112474618F,
-  0.2120541420F, 0.2128619923F, 0.2136710094F, 0.2144811902F,
-  0.2152925315F, 0.2161050301F, 0.2169186829F, 0.2177334866F,
-  0.2185494381F, 0.2193665340F, 0.2201847712F, 0.2210041465F,
-  0.2218246565F, 0.2226462981F, 0.2234690680F, 0.2242929629F,
-  0.2251179796F, 0.2259441147F, 0.2267713650F, 0.2275997272F,
-  0.2284291979F, 0.2292597739F, 0.2300914518F, 0.2309242283F,
-  0.2317581001F, 0.2325930638F, 0.2334291160F, 0.2342662534F,
-  0.2351044727F, 0.2359437703F, 0.2367841431F, 0.2376255875F,
-  0.2384681001F, 0.2393116776F, 0.2401563165F, 0.2410020134F,
-  0.2418487649F, 0.2426965675F, 0.2435454178F, 0.2443953122F,
-  0.2452462474F, 0.2460982199F, 0.2469512262F, 0.2478052628F,
-  0.2486603262F, 0.2495164129F, 0.2503735194F, 0.2512316421F,
-  0.2520907776F, 0.2529509222F, 0.2538120726F, 0.2546742250F,
-  0.2555373760F, 0.2564015219F, 0.2572666593F, 0.2581327845F,
-  0.2589998939F, 0.2598679840F, 0.2607370510F, 0.2616070916F,
-  0.2624781019F, 0.2633500783F, 0.2642230173F, 0.2650969152F,
-  0.2659717684F, 0.2668475731F, 0.2677243257F, 0.2686020226F,
-  0.2694806601F, 0.2703602344F, 0.2712407419F, 0.2721221789F,
-  0.2730045417F, 0.2738878265F, 0.2747720297F, 0.2756571474F,
-  0.2765431760F, 0.2774301117F, 0.2783179508F, 0.2792066895F,
-  0.2800963240F, 0.2809868505F, 0.2818782654F, 0.2827705647F,
-  0.2836637447F, 0.2845578016F, 0.2854527315F, 0.2863485307F,
-  0.2872451953F, 0.2881427215F, 0.2890411055F, 0.2899403433F,
-  0.2908404312F, 0.2917413654F, 0.2926431418F, 0.2935457567F,
-  0.2944492061F, 0.2953534863F, 0.2962585932F, 0.2971645230F,
-  0.2980712717F, 0.2989788356F, 0.2998872105F, 0.3007963927F,
-  0.3017063781F, 0.3026171629F, 0.3035287430F, 0.3044411145F,
-  0.3053542736F, 0.3062682161F, 0.3071829381F, 0.3080984356F,
-  0.3090147047F, 0.3099317413F, 0.3108495414F, 0.3117681011F,
-  0.3126874163F, 0.3136074830F, 0.3145282972F, 0.3154498548F,
-  0.3163721517F, 0.3172951841F, 0.3182189477F, 0.3191434385F,
-  0.3200686525F, 0.3209945856F, 0.3219212336F, 0.3228485927F,
-  0.3237766585F, 0.3247054271F, 0.3256348943F, 0.3265650560F,
-  0.3274959081F, 0.3284274465F, 0.3293596671F, 0.3302925657F,
-  0.3312261382F, 0.3321603804F, 0.3330952882F, 0.3340308574F,
-  0.3349670838F, 0.3359039634F, 0.3368414919F, 0.3377796651F,
-  0.3387184789F, 0.3396579290F, 0.3405980113F, 0.3415387216F,
-  0.3424800556F, 0.3434220091F, 0.3443645779F, 0.3453077578F,
-  0.3462515446F, 0.3471959340F, 0.3481409217F, 0.3490865036F,
-  0.3500326754F, 0.3509794328F, 0.3519267715F, 0.3528746873F,
-  0.3538231759F, 0.3547722330F, 0.3557218544F, 0.3566720357F,
-  0.3576227727F, 0.3585740610F, 0.3595258964F, 0.3604782745F,
-  0.3614311910F, 0.3623846417F, 0.3633386221F, 0.3642931280F,
-  0.3652481549F, 0.3662036987F, 0.3671597548F, 0.3681163191F,
-  0.3690733870F, 0.3700309544F, 0.3709890167F, 0.3719475696F,
-  0.3729066089F, 0.3738661299F, 0.3748261285F, 0.3757866002F,
-  0.3767475406F, 0.3777089453F, 0.3786708100F, 0.3796331302F,
-  0.3805959014F, 0.3815591194F, 0.3825227796F, 0.3834868777F,
-  0.3844514093F, 0.3854163698F, 0.3863817549F, 0.3873475601F,
-  0.3883137810F, 0.3892804131F, 0.3902474521F, 0.3912148933F,
-  0.3921827325F, 0.3931509650F, 0.3941195865F, 0.3950885925F,
-  0.3960579785F, 0.3970277400F, 0.3979978725F, 0.3989683716F,
-  0.3999392328F, 0.4009104516F, 0.4018820234F, 0.4028539438F,
-  0.4038262084F, 0.4047988125F, 0.4057717516F, 0.4067450214F,
-  0.4077186172F, 0.4086925345F, 0.4096667688F, 0.4106413155F,
-  0.4116161703F, 0.4125913284F, 0.4135667854F, 0.4145425368F,
-  0.4155185780F, 0.4164949044F, 0.4174715116F, 0.4184483949F,
-  0.4194255498F, 0.4204029718F, 0.4213806563F, 0.4223585987F,
-  0.4233367946F, 0.4243152392F, 0.4252939281F, 0.4262728566F,
-  0.4272520202F, 0.4282314144F, 0.4292110345F, 0.4301908760F,
-  0.4311709343F, 0.4321512047F, 0.4331316828F, 0.4341123639F,
-  0.4350932435F, 0.4360743168F, 0.4370555794F, 0.4380370267F,
-  0.4390186540F, 0.4400004567F, 0.4409824303F, 0.4419645701F,
-  0.4429468716F, 0.4439293300F, 0.4449119409F, 0.4458946996F,
-  0.4468776014F, 0.4478606418F, 0.4488438162F, 0.4498271199F,
-  0.4508105483F, 0.4517940967F, 0.4527777607F, 0.4537615355F,
-  0.4547454165F, 0.4557293991F, 0.4567134786F, 0.4576976505F,
-  0.4586819101F, 0.4596662527F, 0.4606506738F, 0.4616351687F,
-  0.4626197328F, 0.4636043614F, 0.4645890499F, 0.4655737936F,
-  0.4665585880F, 0.4675434284F, 0.4685283101F, 0.4695132286F,
-  0.4704981791F, 0.4714831570F, 0.4724681577F, 0.4734531766F,
-  0.4744382089F, 0.4754232501F, 0.4764082956F, 0.4773933406F,
-  0.4783783806F, 0.4793634108F, 0.4803484267F, 0.4813334237F,
-  0.4823183969F, 0.4833033419F, 0.4842882540F, 0.4852731285F,
-  0.4862579608F, 0.4872427462F, 0.4882274802F, 0.4892121580F,
-  0.4901967751F, 0.4911813267F, 0.4921658083F, 0.4931502151F,
-  0.4941345427F, 0.4951187863F, 0.4961029412F, 0.4970870029F,
-  0.4980709667F, 0.4990548280F, 0.5000385822F, 0.5010222245F,
-  0.5020057505F, 0.5029891553F, 0.5039724345F, 0.5049555834F,
-  0.5059385973F, 0.5069214716F, 0.5079042018F, 0.5088867831F,
-  0.5098692110F, 0.5108514808F, 0.5118335879F, 0.5128155277F,
-  0.5137972956F, 0.5147788869F, 0.5157602971F, 0.5167415215F,
-  0.5177225555F, 0.5187033945F, 0.5196840339F, 0.5206644692F,
-  0.5216446956F, 0.5226247086F, 0.5236045035F, 0.5245840759F,
-  0.5255634211F, 0.5265425344F, 0.5275214114F, 0.5285000474F,
-  0.5294784378F, 0.5304565781F, 0.5314344637F, 0.5324120899F,
-  0.5333894522F, 0.5343665461F, 0.5353433670F, 0.5363199102F,
-  0.5372961713F, 0.5382721457F, 0.5392478287F, 0.5402232159F,
-  0.5411983027F, 0.5421730845F, 0.5431475569F, 0.5441217151F,
-  0.5450955548F, 0.5460690714F, 0.5470422602F, 0.5480151169F,
-  0.5489876368F, 0.5499598155F, 0.5509316484F, 0.5519031310F,
-  0.5528742587F, 0.5538450271F, 0.5548154317F, 0.5557854680F,
-  0.5567551314F, 0.5577244174F, 0.5586933216F, 0.5596618395F,
-  0.5606299665F, 0.5615976983F, 0.5625650302F, 0.5635319580F,
-  0.5644984770F, 0.5654645828F, 0.5664302709F, 0.5673955370F,
-  0.5683603765F, 0.5693247850F, 0.5702887580F, 0.5712522912F,
-  0.5722153800F, 0.5731780200F, 0.5741402069F, 0.5751019362F,
-  0.5760632034F, 0.5770240042F, 0.5779843341F, 0.5789441889F,
-  0.5799035639F, 0.5808624549F, 0.5818208575F, 0.5827787673F,
-  0.5837361800F, 0.5846930910F, 0.5856494961F, 0.5866053910F,
-  0.5875607712F, 0.5885156324F, 0.5894699703F, 0.5904237804F,
-  0.5913770586F, 0.5923298004F, 0.5932820016F, 0.5942336578F,
-  0.5951847646F, 0.5961353179F, 0.5970853132F, 0.5980347464F,
-  0.5989836131F, 0.5999319090F, 0.6008796298F, 0.6018267713F,
-  0.6027733292F, 0.6037192993F, 0.6046646773F, 0.6056094589F,
-  0.6065536400F, 0.6074972162F, 0.6084401833F, 0.6093825372F,
-  0.6103242736F, 0.6112653884F, 0.6122058772F, 0.6131457359F,
-  0.6140849604F, 0.6150235464F, 0.6159614897F, 0.6168987862F,
-  0.6178354318F, 0.6187714223F, 0.6197067535F, 0.6206414213F,
-  0.6215754215F, 0.6225087501F, 0.6234414028F, 0.6243733757F,
-  0.6253046646F, 0.6262352654F, 0.6271651739F, 0.6280943862F,
-  0.6290228982F, 0.6299507057F, 0.6308778048F, 0.6318041913F,
-  0.6327298612F, 0.6336548105F, 0.6345790352F, 0.6355025312F,
-  0.6364252945F, 0.6373473211F, 0.6382686070F, 0.6391891483F,
-  0.6401089409F, 0.6410279808F, 0.6419462642F, 0.6428637869F,
-  0.6437805452F, 0.6446965350F, 0.6456117524F, 0.6465261935F,
-  0.6474398544F, 0.6483527311F, 0.6492648197F, 0.6501761165F,
-  0.6510866174F, 0.6519963186F, 0.6529052162F, 0.6538133064F,
-  0.6547205854F, 0.6556270492F, 0.6565326941F, 0.6574375162F,
-  0.6583415117F, 0.6592446769F, 0.6601470079F, 0.6610485009F,
-  0.6619491521F, 0.6628489578F, 0.6637479143F, 0.6646460177F,
-  0.6655432643F, 0.6664396505F, 0.6673351724F, 0.6682298264F,
-  0.6691236087F, 0.6700165157F, 0.6709085436F, 0.6717996889F,
-  0.6726899478F, 0.6735793167F, 0.6744677918F, 0.6753553697F,
-  0.6762420466F, 0.6771278190F, 0.6780126832F, 0.6788966357F,
-  0.6797796728F, 0.6806617909F, 0.6815429866F, 0.6824232562F,
-  0.6833025961F, 0.6841810030F, 0.6850584731F, 0.6859350031F,
-  0.6868105894F, 0.6876852284F, 0.6885589168F, 0.6894316510F,
-  0.6903034275F, 0.6911742430F, 0.6920440939F, 0.6929129769F,
-  0.6937808884F, 0.6946478251F, 0.6955137837F, 0.6963787606F,
-  0.6972427525F, 0.6981057560F, 0.6989677678F, 0.6998287845F,
-  0.7006888028F, 0.7015478194F, 0.7024058309F, 0.7032628340F,
-  0.7041188254F, 0.7049738019F, 0.7058277601F, 0.7066806969F,
-  0.7075326089F, 0.7083834929F, 0.7092333457F, 0.7100821640F,
-  0.7109299447F, 0.7117766846F, 0.7126223804F, 0.7134670291F,
-  0.7143106273F, 0.7151531721F, 0.7159946602F, 0.7168350885F,
-  0.7176744539F, 0.7185127534F, 0.7193499837F, 0.7201861418F,
-  0.7210212247F, 0.7218552293F, 0.7226881526F, 0.7235199914F,
-  0.7243507428F, 0.7251804039F, 0.7260089715F, 0.7268364426F,
-  0.7276628144F, 0.7284880839F, 0.7293122481F, 0.7301353040F,
-  0.7309572487F, 0.7317780794F, 0.7325977930F, 0.7334163868F,
-  0.7342338579F, 0.7350502033F, 0.7358654202F, 0.7366795059F,
-  0.7374924573F, 0.7383042718F, 0.7391149465F, 0.7399244787F,
-  0.7407328655F, 0.7415401041F, 0.7423461920F, 0.7431511261F,
-  0.7439549040F, 0.7447575227F, 0.7455589797F, 0.7463592723F,
-  0.7471583976F, 0.7479563532F, 0.7487531363F, 0.7495487443F,
-  0.7503431745F, 0.7511364244F, 0.7519284913F, 0.7527193726F,
-  0.7535090658F, 0.7542975683F, 0.7550848776F, 0.7558709910F,
-  0.7566559062F, 0.7574396205F, 0.7582221314F, 0.7590034366F,
-  0.7597835334F, 0.7605624194F, 0.7613400923F, 0.7621165495F,
-  0.7628917886F, 0.7636658072F, 0.7644386030F, 0.7652101735F,
-  0.7659805164F, 0.7667496292F, 0.7675175098F, 0.7682841556F,
-  0.7690495645F, 0.7698137341F, 0.7705766622F, 0.7713383463F,
-  0.7720987844F, 0.7728579741F, 0.7736159132F, 0.7743725994F,
-  0.7751280306F, 0.7758822046F, 0.7766351192F, 0.7773867722F,
-  0.7781371614F, 0.7788862848F, 0.7796341401F, 0.7803807253F,
-  0.7811260383F, 0.7818700769F, 0.7826128392F, 0.7833543230F,
-  0.7840945263F, 0.7848334471F, 0.7855710833F, 0.7863074330F,
-  0.7870424941F, 0.7877762647F, 0.7885087428F, 0.7892399264F,
-  0.7899698137F, 0.7906984026F, 0.7914256914F, 0.7921516780F,
-  0.7928763607F, 0.7935997375F, 0.7943218065F, 0.7950425661F,
-  0.7957620142F, 0.7964801492F, 0.7971969692F, 0.7979124724F,
-  0.7986266570F, 0.7993395214F, 0.8000510638F, 0.8007612823F,
-  0.8014701754F, 0.8021777413F, 0.8028839784F, 0.8035888849F,
-  0.8042924592F, 0.8049946997F, 0.8056956048F, 0.8063951727F,
-  0.8070934020F, 0.8077902910F, 0.8084858381F, 0.8091800419F,
-  0.8098729007F, 0.8105644130F, 0.8112545774F, 0.8119433922F,
-  0.8126308561F, 0.8133169676F, 0.8140017251F, 0.8146851272F,
-  0.8153671726F, 0.8160478598F, 0.8167271874F, 0.8174051539F,
-  0.8180817582F, 0.8187569986F, 0.8194308741F, 0.8201033831F,
-  0.8207745244F, 0.8214442966F, 0.8221126986F, 0.8227797290F,
-  0.8234453865F, 0.8241096700F, 0.8247725781F, 0.8254341097F,
-  0.8260942636F, 0.8267530385F, 0.8274104334F, 0.8280664470F,
-  0.8287210782F, 0.8293743259F, 0.8300261889F, 0.8306766662F,
-  0.8313257566F, 0.8319734591F, 0.8326197727F, 0.8332646963F,
-  0.8339082288F, 0.8345503692F, 0.8351911167F, 0.8358304700F,
-  0.8364684284F, 0.8371049907F, 0.8377401562F, 0.8383739238F,
-  0.8390062927F, 0.8396372618F, 0.8402668305F, 0.8408949977F,
-  0.8415217626F, 0.8421471245F, 0.8427710823F, 0.8433936354F,
-  0.8440147830F, 0.8446345242F, 0.8452528582F, 0.8458697844F,
-  0.8464853020F, 0.8470994102F, 0.8477121084F, 0.8483233958F,
-  0.8489332718F, 0.8495417356F, 0.8501487866F, 0.8507544243F,
-  0.8513586479F, 0.8519614568F, 0.8525628505F, 0.8531628283F,
-  0.8537613897F, 0.8543585341F, 0.8549542611F, 0.8555485699F,
-  0.8561414603F, 0.8567329315F, 0.8573229832F, 0.8579116149F,
-  0.8584988262F, 0.8590846165F, 0.8596689855F, 0.8602519327F,
-  0.8608334577F, 0.8614135603F, 0.8619922399F, 0.8625694962F,
-  0.8631453289F, 0.8637197377F, 0.8642927222F, 0.8648642821F,
-  0.8654344172F, 0.8660031272F, 0.8665704118F, 0.8671362708F,
-  0.8677007039F, 0.8682637109F, 0.8688252917F, 0.8693854460F,
-  0.8699441737F, 0.8705014745F, 0.8710573485F, 0.8716117953F,
-  0.8721648150F, 0.8727164073F, 0.8732665723F, 0.8738153098F,
-  0.8743626197F, 0.8749085021F, 0.8754529569F, 0.8759959840F,
-  0.8765375835F, 0.8770777553F, 0.8776164996F, 0.8781538162F,
-  0.8786897054F, 0.8792241670F, 0.8797572013F, 0.8802888082F,
-  0.8808189880F, 0.8813477407F, 0.8818750664F, 0.8824009653F,
-  0.8829254375F, 0.8834484833F, 0.8839701028F, 0.8844902961F,
-  0.8850090636F, 0.8855264054F, 0.8860423218F, 0.8865568131F,
-  0.8870698794F, 0.8875815212F, 0.8880917386F, 0.8886005319F,
-  0.8891079016F, 0.8896138479F, 0.8901183712F, 0.8906214719F,
-  0.8911231503F, 0.8916234067F, 0.8921222417F, 0.8926196556F,
-  0.8931156489F, 0.8936102219F, 0.8941033752F, 0.8945951092F,
-  0.8950854244F, 0.8955743212F, 0.8960618003F, 0.8965478621F,
-  0.8970325071F, 0.8975157359F, 0.8979975490F, 0.8984779471F,
-  0.8989569307F, 0.8994345004F, 0.8999106568F, 0.9003854005F,
-  0.9008587323F, 0.9013306526F, 0.9018011623F, 0.9022702619F,
-  0.9027379521F, 0.9032042337F, 0.9036691074F, 0.9041325739F,
-  0.9045946339F, 0.9050552882F, 0.9055145376F, 0.9059723828F,
-  0.9064288246F, 0.9068838638F, 0.9073375013F, 0.9077897379F,
-  0.9082405743F, 0.9086900115F, 0.9091380503F, 0.9095846917F,
-  0.9100299364F, 0.9104737854F, 0.9109162397F, 0.9113573001F,
-  0.9117969675F, 0.9122352430F, 0.9126721275F, 0.9131076219F,
-  0.9135417273F, 0.9139744447F, 0.9144057750F, 0.9148357194F,
-  0.9152642787F, 0.9156914542F, 0.9161172468F, 0.9165416576F,
-  0.9169646877F, 0.9173863382F, 0.9178066102F, 0.9182255048F,
-  0.9186430232F, 0.9190591665F, 0.9194739359F, 0.9198873324F,
-  0.9202993574F, 0.9207100120F, 0.9211192973F, 0.9215272147F,
-  0.9219337653F, 0.9223389504F, 0.9227427713F, 0.9231452290F,
-  0.9235463251F, 0.9239460607F, 0.9243444371F, 0.9247414557F,
-  0.9251371177F, 0.9255314245F, 0.9259243774F, 0.9263159778F,
-  0.9267062270F, 0.9270951264F, 0.9274826774F, 0.9278688814F,
-  0.9282537398F, 0.9286372540F, 0.9290194254F, 0.9294002555F,
-  0.9297797458F, 0.9301578976F, 0.9305347125F, 0.9309101919F,
-  0.9312843373F, 0.9316571503F, 0.9320286323F, 0.9323987849F,
-  0.9327676097F, 0.9331351080F, 0.9335012816F, 0.9338661320F,
-  0.9342296607F, 0.9345918694F, 0.9349527596F, 0.9353123330F,
-  0.9356705911F, 0.9360275357F, 0.9363831683F, 0.9367374905F,
-  0.9370905042F, 0.9374422108F, 0.9377926122F, 0.9381417099F,
-  0.9384895057F, 0.9388360014F, 0.9391811985F, 0.9395250989F,
-  0.9398677043F, 0.9402090165F, 0.9405490371F, 0.9408877680F,
-  0.9412252110F, 0.9415613678F, 0.9418962402F, 0.9422298301F,
-  0.9425621392F, 0.9428931695F, 0.9432229226F, 0.9435514005F,
-  0.9438786050F, 0.9442045381F, 0.9445292014F, 0.9448525971F,
-  0.9451747268F, 0.9454955926F, 0.9458151963F, 0.9461335399F,
-  0.9464506253F, 0.9467664545F, 0.9470810293F, 0.9473943517F,
-  0.9477064238F, 0.9480172474F, 0.9483268246F, 0.9486351573F,
-  0.9489422475F, 0.9492480973F, 0.9495527087F, 0.9498560837F,
-  0.9501582243F, 0.9504591325F, 0.9507588105F, 0.9510572603F,
-  0.9513544839F, 0.9516504834F, 0.9519452609F, 0.9522388186F,
-  0.9525311584F, 0.9528222826F, 0.9531121932F, 0.9534008923F,
-  0.9536883821F, 0.9539746647F, 0.9542597424F, 0.9545436171F,
-  0.9548262912F, 0.9551077667F, 0.9553880459F, 0.9556671309F,
-  0.9559450239F, 0.9562217272F, 0.9564972429F, 0.9567715733F,
-  0.9570447206F, 0.9573166871F, 0.9575874749F, 0.9578570863F,
-  0.9581255236F, 0.9583927890F, 0.9586588849F, 0.9589238134F,
-  0.9591875769F, 0.9594501777F, 0.9597116180F, 0.9599719003F,
-  0.9602310267F, 0.9604889995F, 0.9607458213F, 0.9610014942F,
-  0.9612560206F, 0.9615094028F, 0.9617616433F, 0.9620127443F,
-  0.9622627083F, 0.9625115376F, 0.9627592345F, 0.9630058016F,
-  0.9632512411F, 0.9634955555F, 0.9637387471F, 0.9639808185F,
-  0.9642217720F, 0.9644616100F, 0.9647003349F, 0.9649379493F,
-  0.9651744556F, 0.9654098561F, 0.9656441534F, 0.9658773499F,
-  0.9661094480F, 0.9663404504F, 0.9665703593F, 0.9667991774F,
-  0.9670269071F, 0.9672535509F, 0.9674791114F, 0.9677035909F,
-  0.9679269921F, 0.9681493174F, 0.9683705694F, 0.9685907506F,
-  0.9688098636F, 0.9690279108F, 0.9692448948F, 0.9694608182F,
-  0.9696756836F, 0.9698894934F, 0.9701022503F, 0.9703139569F,
-  0.9705246156F, 0.9707342291F, 0.9709428000F, 0.9711503309F,
-  0.9713568243F, 0.9715622829F, 0.9717667093F, 0.9719701060F,
-  0.9721724757F, 0.9723738210F, 0.9725741446F, 0.9727734490F,
-  0.9729717369F, 0.9731690109F, 0.9733652737F, 0.9735605279F,
-  0.9737547762F, 0.9739480212F, 0.9741402656F, 0.9743315120F,
-  0.9745217631F, 0.9747110216F, 0.9748992901F, 0.9750865714F,
-  0.9752728681F, 0.9754581829F, 0.9756425184F, 0.9758258775F,
-  0.9760082627F, 0.9761896768F, 0.9763701224F, 0.9765496024F,
-  0.9767281193F, 0.9769056760F, 0.9770822751F, 0.9772579193F,
-  0.9774326114F, 0.9776063542F, 0.9777791502F, 0.9779510023F,
-  0.9781219133F, 0.9782918858F, 0.9784609226F, 0.9786290264F,
-  0.9787962000F, 0.9789624461F, 0.9791277676F, 0.9792921671F,
-  0.9794556474F, 0.9796182113F, 0.9797798615F, 0.9799406009F,
-  0.9801004321F, 0.9802593580F, 0.9804173813F, 0.9805745049F,
-  0.9807307314F, 0.9808860637F, 0.9810405046F, 0.9811940568F,
-  0.9813467232F, 0.9814985065F, 0.9816494095F, 0.9817994351F,
-  0.9819485860F, 0.9820968650F, 0.9822442750F, 0.9823908186F,
-  0.9825364988F, 0.9826813184F, 0.9828252801F, 0.9829683868F,
-  0.9831106413F, 0.9832520463F, 0.9833926048F, 0.9835323195F,
-  0.9836711932F, 0.9838092288F, 0.9839464291F, 0.9840827969F,
-  0.9842183351F, 0.9843530464F, 0.9844869337F, 0.9846199998F,
-  0.9847522475F, 0.9848836798F, 0.9850142993F, 0.9851441090F,
-  0.9852731117F, 0.9854013101F, 0.9855287073F, 0.9856553058F,
-  0.9857811087F, 0.9859061188F, 0.9860303388F, 0.9861537717F,
-  0.9862764202F, 0.9863982872F, 0.9865193756F, 0.9866396882F,
-  0.9867592277F, 0.9868779972F, 0.9869959993F, 0.9871132370F,
-  0.9872297131F, 0.9873454304F, 0.9874603918F, 0.9875746001F,
-  0.9876880581F, 0.9878007688F, 0.9879127348F, 0.9880239592F,
-  0.9881344447F, 0.9882441941F, 0.9883532104F, 0.9884614962F,
-  0.9885690546F, 0.9886758883F, 0.9887820001F, 0.9888873930F,
-  0.9889920697F, 0.9890960331F, 0.9891992859F, 0.9893018312F,
-  0.9894036716F, 0.9895048100F, 0.9896052493F, 0.9897049923F,
-  0.9898040418F, 0.9899024006F, 0.9900000717F, 0.9900970577F,
-  0.9901933616F, 0.9902889862F, 0.9903839343F, 0.9904782087F,
-  0.9905718122F, 0.9906647477F, 0.9907570180F, 0.9908486259F,
-  0.9909395742F, 0.9910298658F, 0.9911195034F, 0.9912084899F,
-  0.9912968281F, 0.9913845208F, 0.9914715708F, 0.9915579810F,
-  0.9916437540F, 0.9917288928F, 0.9918134001F, 0.9918972788F,
-  0.9919805316F, 0.9920631613F, 0.9921451707F, 0.9922265626F,
-  0.9923073399F, 0.9923875052F, 0.9924670615F, 0.9925460114F,
-  0.9926243577F, 0.9927021033F, 0.9927792508F, 0.9928558032F,
-  0.9929317631F, 0.9930071333F, 0.9930819167F, 0.9931561158F,
-  0.9932297337F, 0.9933027728F, 0.9933752362F, 0.9934471264F,
-  0.9935184462F, 0.9935891985F, 0.9936593859F, 0.9937290112F,
-  0.9937980771F, 0.9938665864F, 0.9939345418F, 0.9940019460F,
-  0.9940688018F, 0.9941351118F, 0.9942008789F, 0.9942661057F,
-  0.9943307950F, 0.9943949494F, 0.9944585717F, 0.9945216645F,
-  0.9945842307F, 0.9946462728F, 0.9947077936F, 0.9947687957F,
-  0.9948292820F, 0.9948892550F, 0.9949487174F, 0.9950076719F,
-  0.9950661212F, 0.9951240679F, 0.9951815148F, 0.9952384645F,
-  0.9952949196F, 0.9953508828F, 0.9954063568F, 0.9954613442F,
-  0.9955158476F, 0.9955698697F, 0.9956234132F, 0.9956764806F,
-  0.9957290746F, 0.9957811978F, 0.9958328528F, 0.9958840423F,
-  0.9959347688F, 0.9959850351F, 0.9960348435F, 0.9960841969F,
-  0.9961330977F, 0.9961815486F, 0.9962295521F, 0.9962771108F,
-  0.9963242274F, 0.9963709043F, 0.9964171441F, 0.9964629494F,
-  0.9965083228F, 0.9965532668F, 0.9965977840F, 0.9966418768F,
-  0.9966855479F, 0.9967287998F, 0.9967716350F, 0.9968140559F,
-  0.9968560653F, 0.9968976655F, 0.9969388591F, 0.9969796485F,
-  0.9970200363F, 0.9970600250F, 0.9970996170F, 0.9971388149F,
-  0.9971776211F, 0.9972160380F, 0.9972540683F, 0.9972917142F,
-  0.9973289783F, 0.9973658631F, 0.9974023709F, 0.9974385042F,
-  0.9974742655F, 0.9975096571F, 0.9975446816F, 0.9975793413F,
-  0.9976136386F, 0.9976475759F, 0.9976811557F, 0.9977143803F,
-  0.9977472521F, 0.9977797736F, 0.9978119470F, 0.9978437748F,
-  0.9978752593F, 0.9979064029F, 0.9979372079F, 0.9979676768F,
-  0.9979978117F, 0.9980276151F, 0.9980570893F, 0.9980862367F,
-  0.9981150595F, 0.9981435600F, 0.9981717406F, 0.9981996035F,
-  0.9982271511F, 0.9982543856F, 0.9982813093F, 0.9983079246F,
-  0.9983342336F, 0.9983602386F, 0.9983859418F, 0.9984113456F,
-  0.9984364522F, 0.9984612638F, 0.9984857825F, 0.9985100108F,
-  0.9985339507F, 0.9985576044F, 0.9985809743F, 0.9986040624F,
-  0.9986268710F, 0.9986494022F, 0.9986716583F, 0.9986936413F,
-  0.9987153535F, 0.9987367969F, 0.9987579738F, 0.9987788864F,
-  0.9987995366F, 0.9988199267F, 0.9988400587F, 0.9988599348F,
-  0.9988795572F, 0.9988989278F, 0.9989180487F, 0.9989369222F,
-  0.9989555501F, 0.9989739347F, 0.9989920780F, 0.9990099820F,
-  0.9990276487F, 0.9990450803F, 0.9990622787F, 0.9990792460F,
-  0.9990959841F, 0.9991124952F, 0.9991287812F, 0.9991448440F,
-  0.9991606858F, 0.9991763084F, 0.9991917139F, 0.9992069042F,
-  0.9992218813F, 0.9992366471F, 0.9992512035F, 0.9992655525F,
-  0.9992796961F, 0.9992936361F, 0.9993073744F, 0.9993209131F,
-  0.9993342538F, 0.9993473987F, 0.9993603494F, 0.9993731080F,
-  0.9993856762F, 0.9993980559F, 0.9994102490F, 0.9994222573F,
-  0.9994340827F, 0.9994457269F, 0.9994571918F, 0.9994684793F,
-  0.9994795910F, 0.9994905288F, 0.9995012945F, 0.9995118898F,
-  0.9995223165F, 0.9995325765F, 0.9995426713F, 0.9995526029F,
-  0.9995623728F, 0.9995719829F, 0.9995814349F, 0.9995907304F,
-  0.9995998712F, 0.9996088590F, 0.9996176954F, 0.9996263821F,
-  0.9996349208F, 0.9996433132F, 0.9996515609F, 0.9996596656F,
-  0.9996676288F, 0.9996754522F, 0.9996831375F, 0.9996906862F,
-  0.9996981000F, 0.9997053804F, 0.9997125290F, 0.9997195474F,
-  0.9997264371F, 0.9997331998F, 0.9997398369F, 0.9997463500F,
-  0.9997527406F, 0.9997590103F, 0.9997651606F, 0.9997711930F,
-  0.9997771089F, 0.9997829098F, 0.9997885973F, 0.9997941728F,
-  0.9997996378F, 0.9998049936F, 0.9998102419F, 0.9998153839F,
-  0.9998204211F, 0.9998253550F, 0.9998301868F, 0.9998349182F,
-  0.9998395503F, 0.9998440847F, 0.9998485226F, 0.9998528654F,
-  0.9998571146F, 0.9998612713F, 0.9998653370F, 0.9998693130F,
-  0.9998732007F, 0.9998770012F, 0.9998807159F, 0.9998843461F,
-  0.9998878931F, 0.9998913581F, 0.9998947424F, 0.9998980473F,
-  0.9999012740F, 0.9999044237F, 0.9999074976F, 0.9999104971F,
-  0.9999134231F, 0.9999162771F, 0.9999190601F, 0.9999217733F,
-  0.9999244179F, 0.9999269950F, 0.9999295058F, 0.9999319515F,
-  0.9999343332F, 0.9999366519F, 0.9999389088F, 0.9999411050F,
-  0.9999432416F, 0.9999453196F, 0.9999473402F, 0.9999493044F,
-  0.9999512132F, 0.9999530677F, 0.9999548690F, 0.9999566180F,
-  0.9999583157F, 0.9999599633F, 0.9999615616F, 0.9999631116F,
-  0.9999646144F, 0.9999660709F, 0.9999674820F, 0.9999688487F,
-  0.9999701719F, 0.9999714526F, 0.9999726917F, 0.9999738900F,
-  0.9999750486F, 0.9999761682F, 0.9999772497F, 0.9999782941F,
-  0.9999793021F, 0.9999802747F, 0.9999812126F, 0.9999821167F,
-  0.9999829878F, 0.9999838268F, 0.9999846343F, 0.9999854113F,
-  0.9999861584F, 0.9999868765F, 0.9999875664F, 0.9999882287F,
-  0.9999888642F, 0.9999894736F, 0.9999900577F, 0.9999906172F,
-  0.9999911528F, 0.9999916651F, 0.9999921548F, 0.9999926227F,
-  0.9999930693F, 0.9999934954F, 0.9999939015F, 0.9999942883F,
-  0.9999946564F, 0.9999950064F, 0.9999953390F, 0.9999956547F,
-  0.9999959541F, 0.9999962377F, 0.9999965062F, 0.9999967601F,
-  0.9999969998F, 0.9999972260F, 0.9999974392F, 0.9999976399F,
-  0.9999978285F, 0.9999980056F, 0.9999981716F, 0.9999983271F,
-  0.9999984724F, 0.9999986081F, 0.9999987345F, 0.9999988521F,
-  0.9999989613F, 0.9999990625F, 0.9999991562F, 0.9999992426F,
-  0.9999993223F, 0.9999993954F, 0.9999994625F, 0.9999995239F,
-  0.9999995798F, 0.9999996307F, 0.9999996768F, 0.9999997184F,
-  0.9999997559F, 0.9999997895F, 0.9999998195F, 0.9999998462F,
-  0.9999998698F, 0.9999998906F, 0.9999999088F, 0.9999999246F,
-  0.9999999383F, 0.9999999500F, 0.9999999600F, 0.9999999684F,
-  0.9999999754F, 0.9999999811F, 0.9999999858F, 0.9999999896F,
-  0.9999999925F, 0.9999999948F, 0.9999999965F, 0.9999999978F,
-  0.9999999986F, 0.9999999992F, 0.9999999996F, 0.9999999998F,
-  0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F,
-};
-
-static float vwin8192[4096] = {
-  0.0000000578F, 0.0000005198F, 0.0000014438F, 0.0000028299F,
-  0.0000046780F, 0.0000069882F, 0.0000097604F, 0.0000129945F,
-  0.0000166908F, 0.0000208490F, 0.0000254692F, 0.0000305515F,
-  0.0000360958F, 0.0000421021F, 0.0000485704F, 0.0000555006F,
-  0.0000628929F, 0.0000707472F, 0.0000790635F, 0.0000878417F,
-  0.0000970820F, 0.0001067842F, 0.0001169483F, 0.0001275744F,
-  0.0001386625F, 0.0001502126F, 0.0001622245F, 0.0001746984F,
-  0.0001876343F, 0.0002010320F, 0.0002148917F, 0.0002292132F,
-  0.0002439967F, 0.0002592421F, 0.0002749493F, 0.0002911184F,
-  0.0003077493F, 0.0003248421F, 0.0003423967F, 0.0003604132F,
-  0.0003788915F, 0.0003978316F, 0.0004172335F, 0.0004370971F,
-  0.0004574226F, 0.0004782098F, 0.0004994587F, 0.0005211694F,
-  0.0005433418F, 0.0005659759F, 0.0005890717F, 0.0006126292F,
-  0.0006366484F, 0.0006611292F, 0.0006860716F, 0.0007114757F,
-  0.0007373414F, 0.0007636687F, 0.0007904576F, 0.0008177080F,
-  0.0008454200F, 0.0008735935F, 0.0009022285F, 0.0009313250F,
-  0.0009608830F, 0.0009909025F, 0.0010213834F, 0.0010523257F,
-  0.0010837295F, 0.0011155946F, 0.0011479211F, 0.0011807090F,
-  0.0012139582F, 0.0012476687F, 0.0012818405F, 0.0013164736F,
-  0.0013515679F, 0.0013871235F, 0.0014231402F, 0.0014596182F,
-  0.0014965573F, 0.0015339576F, 0.0015718190F, 0.0016101415F,
-  0.0016489251F, 0.0016881698F, 0.0017278754F, 0.0017680421F,
-  0.0018086698F, 0.0018497584F, 0.0018913080F, 0.0019333185F,
-  0.0019757898F, 0.0020187221F, 0.0020621151F, 0.0021059690F,
-  0.0021502837F, 0.0021950591F, 0.0022402953F, 0.0022859921F,
-  0.0023321497F, 0.0023787679F, 0.0024258467F, 0.0024733861F,
-  0.0025213861F, 0.0025698466F, 0.0026187676F, 0.0026681491F,
-  0.0027179911F, 0.0027682935F, 0.0028190562F, 0.0028702794F,
-  0.0029219628F, 0.0029741066F, 0.0030267107F, 0.0030797749F,
-  0.0031332994F, 0.0031872841F, 0.0032417289F, 0.0032966338F,
-  0.0033519988F, 0.0034078238F, 0.0034641089F, 0.0035208539F,
-  0.0035780589F, 0.0036357237F, 0.0036938485F, 0.0037524331F,
-  0.0038114775F, 0.0038709817F, 0.0039309456F, 0.0039913692F,
-  0.0040522524F, 0.0041135953F, 0.0041753978F, 0.0042376599F,
-  0.0043003814F, 0.0043635624F, 0.0044272029F, 0.0044913028F,
-  0.0045558620F, 0.0046208806F, 0.0046863585F, 0.0047522955F,
-  0.0048186919F, 0.0048855473F, 0.0049528619F, 0.0050206356F,
-  0.0050888684F, 0.0051575601F, 0.0052267108F, 0.0052963204F,
-  0.0053663890F, 0.0054369163F, 0.0055079025F, 0.0055793474F,
-  0.0056512510F, 0.0057236133F, 0.0057964342F, 0.0058697137F,
-  0.0059434517F, 0.0060176482F, 0.0060923032F, 0.0061674166F,
-  0.0062429883F, 0.0063190183F, 0.0063955066F, 0.0064724532F,
-  0.0065498579F, 0.0066277207F, 0.0067060416F, 0.0067848205F,
-  0.0068640575F, 0.0069437523F, 0.0070239051F, 0.0071045157F,
-  0.0071855840F, 0.0072671102F, 0.0073490940F, 0.0074315355F,
-  0.0075144345F, 0.0075977911F, 0.0076816052F, 0.0077658768F,
-  0.0078506057F, 0.0079357920F, 0.0080214355F, 0.0081075363F,
-  0.0081940943F, 0.0082811094F, 0.0083685816F, 0.0084565108F,
-  0.0085448970F, 0.0086337401F, 0.0087230401F, 0.0088127969F,
-  0.0089030104F, 0.0089936807F, 0.0090848076F, 0.0091763911F,
-  0.0092684311F, 0.0093609276F, 0.0094538805F, 0.0095472898F,
-  0.0096411554F, 0.0097354772F, 0.0098302552F, 0.0099254894F,
-  0.0100211796F, 0.0101173259F, 0.0102139281F, 0.0103109863F,
-  0.0104085002F, 0.0105064700F, 0.0106048955F, 0.0107037766F,
-  0.0108031133F, 0.0109029056F, 0.0110031534F, 0.0111038565F,
-  0.0112050151F, 0.0113066289F, 0.0114086980F, 0.0115112222F,
-  0.0116142015F, 0.0117176359F, 0.0118215252F, 0.0119258695F,
-  0.0120306686F, 0.0121359225F, 0.0122416312F, 0.0123477944F,
-  0.0124544123F, 0.0125614847F, 0.0126690116F, 0.0127769928F,
-  0.0128854284F, 0.0129943182F, 0.0131036623F, 0.0132134604F,
-  0.0133237126F, 0.0134344188F, 0.0135455790F, 0.0136571929F,
-  0.0137692607F, 0.0138817821F, 0.0139947572F, 0.0141081859F,
-  0.0142220681F, 0.0143364037F, 0.0144511927F, 0.0145664350F,
-  0.0146821304F, 0.0147982791F, 0.0149148808F, 0.0150319355F,
-  0.0151494431F, 0.0152674036F, 0.0153858168F, 0.0155046828F,
-  0.0156240014F, 0.0157437726F, 0.0158639962F, 0.0159846723F,
-  0.0161058007F, 0.0162273814F, 0.0163494142F, 0.0164718991F,
-  0.0165948361F, 0.0167182250F, 0.0168420658F, 0.0169663584F,
-  0.0170911027F, 0.0172162987F, 0.0173419462F, 0.0174680452F,
-  0.0175945956F, 0.0177215974F, 0.0178490504F, 0.0179769545F,
-  0.0181053098F, 0.0182341160F, 0.0183633732F, 0.0184930812F,
-  0.0186232399F, 0.0187538494F, 0.0188849094F, 0.0190164200F,
-  0.0191483809F, 0.0192807923F, 0.0194136539F, 0.0195469656F,
-  0.0196807275F, 0.0198149394F, 0.0199496012F, 0.0200847128F,
-  0.0202202742F, 0.0203562853F, 0.0204927460F, 0.0206296561F,
-  0.0207670157F, 0.0209048245F, 0.0210430826F, 0.0211817899F,
-  0.0213209462F, 0.0214605515F, 0.0216006057F, 0.0217411086F,
-  0.0218820603F, 0.0220234605F, 0.0221653093F, 0.0223076066F,
-  0.0224503521F, 0.0225935459F, 0.0227371879F, 0.0228812779F,
-  0.0230258160F, 0.0231708018F, 0.0233162355F, 0.0234621169F,
-  0.0236084459F, 0.0237552224F, 0.0239024462F, 0.0240501175F,
-  0.0241982359F, 0.0243468015F, 0.0244958141F, 0.0246452736F,
-  0.0247951800F, 0.0249455331F, 0.0250963329F, 0.0252475792F,
-  0.0253992720F, 0.0255514111F, 0.0257039965F, 0.0258570281F,
-  0.0260105057F, 0.0261644293F, 0.0263187987F, 0.0264736139F,
-  0.0266288747F, 0.0267845811F, 0.0269407330F, 0.0270973302F,
-  0.0272543727F, 0.0274118604F, 0.0275697930F, 0.0277281707F,
-  0.0278869932F, 0.0280462604F, 0.0282059723F, 0.0283661287F,
-  0.0285267295F, 0.0286877747F, 0.0288492641F, 0.0290111976F,
-  0.0291735751F, 0.0293363965F, 0.0294996617F, 0.0296633706F,
-  0.0298275231F, 0.0299921190F, 0.0301571583F, 0.0303226409F,
-  0.0304885667F, 0.0306549354F, 0.0308217472F, 0.0309890017F,
-  0.0311566989F, 0.0313248388F, 0.0314934211F, 0.0316624459F,
-  0.0318319128F, 0.0320018220F, 0.0321721732F, 0.0323429663F,
-  0.0325142013F, 0.0326858779F, 0.0328579962F, 0.0330305559F,
-  0.0332035570F, 0.0333769994F, 0.0335508829F, 0.0337252074F,
-  0.0338999728F, 0.0340751790F, 0.0342508259F, 0.0344269134F,
-  0.0346034412F, 0.0347804094F, 0.0349578178F, 0.0351356663F,
-  0.0353139548F, 0.0354926831F, 0.0356718511F, 0.0358514588F,
-  0.0360315059F, 0.0362119924F, 0.0363929182F, 0.0365742831F,
-  0.0367560870F, 0.0369383297F, 0.0371210113F, 0.0373041315F,
-  0.0374876902F, 0.0376716873F, 0.0378561226F, 0.0380409961F,
-  0.0382263077F, 0.0384120571F, 0.0385982443F, 0.0387848691F,
-  0.0389719315F, 0.0391594313F, 0.0393473683F, 0.0395357425F,
-  0.0397245537F, 0.0399138017F, 0.0401034866F, 0.0402936080F,
-  0.0404841660F, 0.0406751603F, 0.0408665909F, 0.0410584576F,
-  0.0412507603F, 0.0414434988F, 0.0416366731F, 0.0418302829F,
-  0.0420243282F, 0.0422188088F, 0.0424137246F, 0.0426090755F,
-  0.0428048613F, 0.0430010819F, 0.0431977371F, 0.0433948269F,
-  0.0435923511F, 0.0437903095F, 0.0439887020F, 0.0441875285F,
-  0.0443867889F, 0.0445864830F, 0.0447866106F, 0.0449871717F,
-  0.0451881661F, 0.0453895936F, 0.0455914542F, 0.0457937477F,
-  0.0459964738F, 0.0461996326F, 0.0464032239F, 0.0466072475F,
-  0.0468117032F, 0.0470165910F, 0.0472219107F, 0.0474276622F,
-  0.0476338452F, 0.0478404597F, 0.0480475056F, 0.0482549827F,
-  0.0484628907F, 0.0486712297F, 0.0488799994F, 0.0490891998F,
-  0.0492988306F, 0.0495088917F, 0.0497193830F, 0.0499303043F,
-  0.0501416554F, 0.0503534363F, 0.0505656468F, 0.0507782867F,
-  0.0509913559F, 0.0512048542F, 0.0514187815F, 0.0516331376F,
-  0.0518479225F, 0.0520631358F, 0.0522787775F, 0.0524948475F,
-  0.0527113455F, 0.0529282715F, 0.0531456252F, 0.0533634066F,
-  0.0535816154F, 0.0538002515F, 0.0540193148F, 0.0542388051F,
-  0.0544587222F, 0.0546790660F, 0.0548998364F, 0.0551210331F,
-  0.0553426561F, 0.0555647051F, 0.0557871801F, 0.0560100807F,
-  0.0562334070F, 0.0564571587F, 0.0566813357F, 0.0569059378F,
-  0.0571309649F, 0.0573564168F, 0.0575822933F, 0.0578085942F,
-  0.0580353195F, 0.0582624689F, 0.0584900423F, 0.0587180396F,
-  0.0589464605F, 0.0591753049F, 0.0594045726F, 0.0596342635F,
-  0.0598643774F, 0.0600949141F, 0.0603258735F, 0.0605572555F,
-  0.0607890597F, 0.0610212862F, 0.0612539346F, 0.0614870049F,
-  0.0617204968F, 0.0619544103F, 0.0621887451F, 0.0624235010F,
-  0.0626586780F, 0.0628942758F, 0.0631302942F, 0.0633667331F,
-  0.0636035923F, 0.0638408717F, 0.0640785710F, 0.0643166901F,
-  0.0645552288F, 0.0647941870F, 0.0650335645F, 0.0652733610F,
-  0.0655135765F, 0.0657542108F, 0.0659952636F, 0.0662367348F,
-  0.0664786242F, 0.0667209316F, 0.0669636570F, 0.0672068000F,
-  0.0674503605F, 0.0676943384F, 0.0679387334F, 0.0681835454F,
-  0.0684287742F, 0.0686744196F, 0.0689204814F, 0.0691669595F,
-  0.0694138536F, 0.0696611637F, 0.0699088894F, 0.0701570307F,
-  0.0704055873F, 0.0706545590F, 0.0709039458F, 0.0711537473F,
-  0.0714039634F, 0.0716545939F, 0.0719056387F, 0.0721570975F,
-  0.0724089702F, 0.0726612565F, 0.0729139563F, 0.0731670694F,
-  0.0734205956F, 0.0736745347F, 0.0739288866F, 0.0741836510F,
-  0.0744388277F, 0.0746944166F, 0.0749504175F, 0.0752068301F,
-  0.0754636543F, 0.0757208899F, 0.0759785367F, 0.0762365946F,
-  0.0764950632F, 0.0767539424F, 0.0770132320F, 0.0772729319F,
-  0.0775330418F, 0.0777935616F, 0.0780544909F, 0.0783158298F,
-  0.0785775778F, 0.0788397349F, 0.0791023009F, 0.0793652755F,
-  0.0796286585F, 0.0798924498F, 0.0801566492F, 0.0804212564F,
-  0.0806862712F, 0.0809516935F, 0.0812175231F, 0.0814837597F,
-  0.0817504031F, 0.0820174532F, 0.0822849097F, 0.0825527724F,
-  0.0828210412F, 0.0830897158F, 0.0833587960F, 0.0836282816F,
-  0.0838981724F, 0.0841684682F, 0.0844391688F, 0.0847102740F,
-  0.0849817835F, 0.0852536973F, 0.0855260150F, 0.0857987364F,
-  0.0860718614F, 0.0863453897F, 0.0866193211F, 0.0868936554F,
-  0.0871683924F, 0.0874435319F, 0.0877190737F, 0.0879950175F,
-  0.0882713632F, 0.0885481105F, 0.0888252592F, 0.0891028091F,
-  0.0893807600F, 0.0896591117F, 0.0899378639F, 0.0902170165F,
-  0.0904965692F, 0.0907765218F, 0.0910568740F, 0.0913376258F,
-  0.0916187767F, 0.0919003268F, 0.0921822756F, 0.0924646230F,
-  0.0927473687F, 0.0930305126F, 0.0933140545F, 0.0935979940F,
-  0.0938823310F, 0.0941670653F, 0.0944521966F, 0.0947377247F,
-  0.0950236494F, 0.0953099704F, 0.0955966876F, 0.0958838007F,
-  0.0961713094F, 0.0964592136F, 0.0967475131F, 0.0970362075F,
-  0.0973252967F, 0.0976147805F, 0.0979046585F, 0.0981949307F,
-  0.0984855967F, 0.0987766563F, 0.0990681093F, 0.0993599555F,
-  0.0996521945F, 0.0999448263F, 0.1002378506F, 0.1005312671F,
-  0.1008250755F, 0.1011192757F, 0.1014138675F, 0.1017088505F,
-  0.1020042246F, 0.1022999895F, 0.1025961450F, 0.1028926909F,
-  0.1031896268F, 0.1034869526F, 0.1037846680F, 0.1040827729F,
-  0.1043812668F, 0.1046801497F, 0.1049794213F, 0.1052790813F,
-  0.1055791294F, 0.1058795656F, 0.1061803894F, 0.1064816006F,
-  0.1067831991F, 0.1070851846F, 0.1073875568F, 0.1076903155F,
-  0.1079934604F, 0.1082969913F, 0.1086009079F, 0.1089052101F,
-  0.1092098975F, 0.1095149699F, 0.1098204270F, 0.1101262687F,
-  0.1104324946F, 0.1107391045F, 0.1110460982F, 0.1113534754F,
-  0.1116612359F, 0.1119693793F, 0.1122779055F, 0.1125868142F,
-  0.1128961052F, 0.1132057781F, 0.1135158328F, 0.1138262690F,
-  0.1141370863F, 0.1144482847F, 0.1147598638F, 0.1150718233F,
-  0.1153841631F, 0.1156968828F, 0.1160099822F, 0.1163234610F,
-  0.1166373190F, 0.1169515559F, 0.1172661714F, 0.1175811654F,
-  0.1178965374F, 0.1182122874F, 0.1185284149F, 0.1188449198F,
-  0.1191618018F, 0.1194790606F, 0.1197966960F, 0.1201147076F,
-  0.1204330953F, 0.1207518587F, 0.1210709976F, 0.1213905118F,
-  0.1217104009F, 0.1220306647F, 0.1223513029F, 0.1226723153F,
-  0.1229937016F, 0.1233154615F, 0.1236375948F, 0.1239601011F,
-  0.1242829803F, 0.1246062319F, 0.1249298559F, 0.1252538518F,
-  0.1255782195F, 0.1259029586F, 0.1262280689F, 0.1265535501F,
-  0.1268794019F, 0.1272056241F, 0.1275322163F, 0.1278591784F,
-  0.1281865099F, 0.1285142108F, 0.1288422805F, 0.1291707190F,
-  0.1294995259F, 0.1298287009F, 0.1301582437F, 0.1304881542F,
-  0.1308184319F, 0.1311490766F, 0.1314800881F, 0.1318114660F,
-  0.1321432100F, 0.1324753200F, 0.1328077955F, 0.1331406364F,
-  0.1334738422F, 0.1338074129F, 0.1341413479F, 0.1344756472F,
-  0.1348103103F, 0.1351453370F, 0.1354807270F, 0.1358164801F,
-  0.1361525959F, 0.1364890741F, 0.1368259145F, 0.1371631167F,
-  0.1375006805F, 0.1378386056F, 0.1381768917F, 0.1385155384F,
-  0.1388545456F, 0.1391939129F, 0.1395336400F, 0.1398737266F,
-  0.1402141724F, 0.1405549772F, 0.1408961406F, 0.1412376623F,
-  0.1415795421F, 0.1419217797F, 0.1422643746F, 0.1426073268F,
-  0.1429506358F, 0.1432943013F, 0.1436383231F, 0.1439827008F,
-  0.1443274342F, 0.1446725229F, 0.1450179667F, 0.1453637652F,
-  0.1457099181F, 0.1460564252F, 0.1464032861F, 0.1467505006F,
-  0.1470980682F, 0.1474459888F, 0.1477942620F, 0.1481428875F,
-  0.1484918651F, 0.1488411942F, 0.1491908748F, 0.1495409065F,
-  0.1498912889F, 0.1502420218F, 0.1505931048F, 0.1509445376F,
-  0.1512963200F, 0.1516484516F, 0.1520009321F, 0.1523537612F,
-  0.1527069385F, 0.1530604638F, 0.1534143368F, 0.1537685571F,
-  0.1541231244F, 0.1544780384F, 0.1548332987F, 0.1551889052F,
-  0.1555448574F, 0.1559011550F, 0.1562577978F, 0.1566147853F,
-  0.1569721173F, 0.1573297935F, 0.1576878135F, 0.1580461771F,
-  0.1584048838F, 0.1587639334F, 0.1591233255F, 0.1594830599F,
-  0.1598431361F, 0.1602035540F, 0.1605643131F, 0.1609254131F,
-  0.1612868537F, 0.1616486346F, 0.1620107555F, 0.1623732160F,
-  0.1627360158F, 0.1630991545F, 0.1634626319F, 0.1638264476F,
-  0.1641906013F, 0.1645550926F, 0.1649199212F, 0.1652850869F,
-  0.1656505892F, 0.1660164278F, 0.1663826024F, 0.1667491127F,
-  0.1671159583F, 0.1674831388F, 0.1678506541F, 0.1682185036F,
-  0.1685866872F, 0.1689552044F, 0.1693240549F, 0.1696932384F,
-  0.1700627545F, 0.1704326029F, 0.1708027833F, 0.1711732952F,
-  0.1715441385F, 0.1719153127F, 0.1722868175F, 0.1726586526F,
-  0.1730308176F, 0.1734033121F, 0.1737761359F, 0.1741492886F,
-  0.1745227698F, 0.1748965792F, 0.1752707164F, 0.1756451812F,
-  0.1760199731F, 0.1763950918F, 0.1767705370F, 0.1771463083F,
-  0.1775224054F, 0.1778988279F, 0.1782755754F, 0.1786526477F,
-  0.1790300444F, 0.1794077651F, 0.1797858094F, 0.1801641771F,
-  0.1805428677F, 0.1809218810F, 0.1813012165F, 0.1816808739F,
-  0.1820608528F, 0.1824411530F, 0.1828217739F, 0.1832027154F,
-  0.1835839770F, 0.1839655584F, 0.1843474592F, 0.1847296790F,
-  0.1851122175F, 0.1854950744F, 0.1858782492F, 0.1862617417F,
-  0.1866455514F, 0.1870296780F, 0.1874141211F, 0.1877988804F,
-  0.1881839555F, 0.1885693461F, 0.1889550517F, 0.1893410721F,
-  0.1897274068F, 0.1901140555F, 0.1905010178F, 0.1908882933F,
-  0.1912758818F, 0.1916637828F, 0.1920519959F, 0.1924405208F,
-  0.1928293571F, 0.1932185044F, 0.1936079625F, 0.1939977308F,
-  0.1943878091F, 0.1947781969F, 0.1951688939F, 0.1955598998F,
-  0.1959512141F, 0.1963428364F, 0.1967347665F, 0.1971270038F,
-  0.1975195482F, 0.1979123990F, 0.1983055561F, 0.1986990190F,
-  0.1990927873F, 0.1994868607F, 0.1998812388F, 0.2002759212F,
-  0.2006709075F, 0.2010661974F, 0.2014617904F, 0.2018576862F,
-  0.2022538844F, 0.2026503847F, 0.2030471865F, 0.2034442897F,
-  0.2038416937F, 0.2042393982F, 0.2046374028F, 0.2050357071F,
-  0.2054343107F, 0.2058332133F, 0.2062324145F, 0.2066319138F,
-  0.2070317110F, 0.2074318055F, 0.2078321970F, 0.2082328852F,
-  0.2086338696F, 0.2090351498F, 0.2094367255F, 0.2098385962F,
-  0.2102407617F, 0.2106432213F, 0.2110459749F, 0.2114490220F,
-  0.2118523621F, 0.2122559950F, 0.2126599202F, 0.2130641373F,
-  0.2134686459F, 0.2138734456F, 0.2142785361F, 0.2146839168F,
-  0.2150895875F, 0.2154955478F, 0.2159017972F, 0.2163083353F,
-  0.2167151617F, 0.2171222761F, 0.2175296780F, 0.2179373670F,
-  0.2183453428F, 0.2187536049F, 0.2191621529F, 0.2195709864F,
-  0.2199801051F, 0.2203895085F, 0.2207991961F, 0.2212091677F,
-  0.2216194228F, 0.2220299610F, 0.2224407818F, 0.2228518850F,
-  0.2232632699F, 0.2236749364F, 0.2240868839F, 0.2244991121F,
-  0.2249116204F, 0.2253244086F, 0.2257374763F, 0.2261508229F,
-  0.2265644481F, 0.2269783514F, 0.2273925326F, 0.2278069911F,
-  0.2282217265F, 0.2286367384F, 0.2290520265F, 0.2294675902F,
-  0.2298834292F, 0.2302995431F, 0.2307159314F, 0.2311325937F,
-  0.2315495297F, 0.2319667388F, 0.2323842207F, 0.2328019749F,
-  0.2332200011F, 0.2336382988F, 0.2340568675F, 0.2344757070F,
-  0.2348948166F, 0.2353141961F, 0.2357338450F, 0.2361537629F,
-  0.2365739493F, 0.2369944038F, 0.2374151261F, 0.2378361156F,
-  0.2382573720F, 0.2386788948F, 0.2391006836F, 0.2395227380F,
-  0.2399450575F, 0.2403676417F, 0.2407904902F, 0.2412136026F,
-  0.2416369783F, 0.2420606171F, 0.2424845185F, 0.2429086820F,
-  0.2433331072F, 0.2437577936F, 0.2441827409F, 0.2446079486F,
-  0.2450334163F, 0.2454591435F, 0.2458851298F, 0.2463113747F,
-  0.2467378779F, 0.2471646389F, 0.2475916573F, 0.2480189325F,
-  0.2484464643F, 0.2488742521F, 0.2493022955F, 0.2497305940F,
-  0.2501591473F, 0.2505879549F, 0.2510170163F, 0.2514463311F,
-  0.2518758989F, 0.2523057193F, 0.2527357916F, 0.2531661157F,
-  0.2535966909F, 0.2540275169F, 0.2544585931F, 0.2548899193F,
-  0.2553214948F, 0.2557533193F, 0.2561853924F, 0.2566177135F,
-  0.2570502822F, 0.2574830981F, 0.2579161608F, 0.2583494697F,
-  0.2587830245F, 0.2592168246F, 0.2596508697F, 0.2600851593F,
-  0.2605196929F, 0.2609544701F, 0.2613894904F, 0.2618247534F,
-  0.2622602586F, 0.2626960055F, 0.2631319938F, 0.2635682230F,
-  0.2640046925F, 0.2644414021F, 0.2648783511F, 0.2653155391F,
-  0.2657529657F, 0.2661906305F, 0.2666285329F, 0.2670666725F,
-  0.2675050489F, 0.2679436616F, 0.2683825101F, 0.2688215940F,
-  0.2692609127F, 0.2697004660F, 0.2701402532F, 0.2705802739F,
-  0.2710205278F, 0.2714610142F, 0.2719017327F, 0.2723426830F,
-  0.2727838644F, 0.2732252766F, 0.2736669191F, 0.2741087914F,
-  0.2745508930F, 0.2749932235F, 0.2754357824F, 0.2758785693F,
-  0.2763215837F, 0.2767648251F, 0.2772082930F, 0.2776519870F,
-  0.2780959066F, 0.2785400513F, 0.2789844207F, 0.2794290143F,
-  0.2798738316F, 0.2803188722F, 0.2807641355F, 0.2812096211F,
-  0.2816553286F, 0.2821012574F, 0.2825474071F, 0.2829937773F,
-  0.2834403673F, 0.2838871768F, 0.2843342053F, 0.2847814523F,
-  0.2852289174F, 0.2856765999F, 0.2861244996F, 0.2865726159F,
-  0.2870209482F, 0.2874694962F, 0.2879182594F, 0.2883672372F,
-  0.2888164293F, 0.2892658350F, 0.2897154540F, 0.2901652858F,
-  0.2906153298F, 0.2910655856F, 0.2915160527F, 0.2919667306F,
-  0.2924176189F, 0.2928687171F, 0.2933200246F, 0.2937715409F,
-  0.2942232657F, 0.2946751984F, 0.2951273386F, 0.2955796856F,
-  0.2960322391F, 0.2964849986F, 0.2969379636F, 0.2973911335F,
-  0.2978445080F, 0.2982980864F, 0.2987518684F, 0.2992058534F,
-  0.2996600409F, 0.3001144305F, 0.3005690217F, 0.3010238139F,
-  0.3014788067F, 0.3019339995F, 0.3023893920F, 0.3028449835F,
-  0.3033007736F, 0.3037567618F, 0.3042129477F, 0.3046693306F,
-  0.3051259102F, 0.3055826859F, 0.3060396572F, 0.3064968236F,
-  0.3069541847F, 0.3074117399F, 0.3078694887F, 0.3083274307F,
-  0.3087855653F, 0.3092438920F, 0.3097024104F, 0.3101611199F,
-  0.3106200200F, 0.3110791103F, 0.3115383902F, 0.3119978592F,
-  0.3124575169F, 0.3129173627F, 0.3133773961F, 0.3138376166F,
-  0.3142980238F, 0.3147586170F, 0.3152193959F, 0.3156803598F,
-  0.3161415084F, 0.3166028410F, 0.3170643573F, 0.3175260566F,
-  0.3179879384F, 0.3184500023F, 0.3189122478F, 0.3193746743F,
-  0.3198372814F, 0.3203000685F, 0.3207630351F, 0.3212261807F,
-  0.3216895048F, 0.3221530069F, 0.3226166865F, 0.3230805430F,
-  0.3235445760F, 0.3240087849F, 0.3244731693F, 0.3249377285F,
-  0.3254024622F, 0.3258673698F, 0.3263324507F, 0.3267977045F,
-  0.3272631306F, 0.3277287286F, 0.3281944978F, 0.3286604379F,
-  0.3291265482F, 0.3295928284F, 0.3300592777F, 0.3305258958F,
-  0.3309926821F, 0.3314596361F, 0.3319267573F, 0.3323940451F,
-  0.3328614990F, 0.3333291186F, 0.3337969033F, 0.3342648525F,
-  0.3347329658F, 0.3352012427F, 0.3356696825F, 0.3361382849F,
-  0.3366070492F, 0.3370759749F, 0.3375450616F, 0.3380143087F,
-  0.3384837156F, 0.3389532819F, 0.3394230071F, 0.3398928905F,
-  0.3403629317F, 0.3408331302F, 0.3413034854F, 0.3417739967F,
-  0.3422446638F, 0.3427154860F, 0.3431864628F, 0.3436575938F,
-  0.3441288782F, 0.3446003158F, 0.3450719058F, 0.3455436478F,
-  0.3460155412F, 0.3464875856F, 0.3469597804F, 0.3474321250F,
-  0.3479046189F, 0.3483772617F, 0.3488500527F, 0.3493229914F,
-  0.3497960774F, 0.3502693100F, 0.3507426887F, 0.3512162131F,
-  0.3516898825F, 0.3521636965F, 0.3526376545F, 0.3531117559F,
-  0.3535860003F, 0.3540603870F, 0.3545349157F, 0.3550095856F,
-  0.3554843964F, 0.3559593474F, 0.3564344381F, 0.3569096680F,
-  0.3573850366F, 0.3578605432F, 0.3583361875F, 0.3588119687F,
-  0.3592878865F, 0.3597639402F, 0.3602401293F, 0.3607164533F,
-  0.3611929117F, 0.3616695038F, 0.3621462292F, 0.3626230873F,
-  0.3631000776F, 0.3635771995F, 0.3640544525F, 0.3645318360F,
-  0.3650093496F, 0.3654869926F, 0.3659647645F, 0.3664426648F,
-  0.3669206930F, 0.3673988484F, 0.3678771306F, 0.3683555390F,
-  0.3688340731F, 0.3693127322F, 0.3697915160F, 0.3702704237F,
-  0.3707494549F, 0.3712286091F, 0.3717078857F, 0.3721872840F,
-  0.3726668037F, 0.3731464441F, 0.3736262047F, 0.3741060850F,
-  0.3745860843F, 0.3750662023F, 0.3755464382F, 0.3760267915F,
-  0.3765072618F, 0.3769878484F, 0.3774685509F, 0.3779493686F,
-  0.3784303010F, 0.3789113475F, 0.3793925076F, 0.3798737809F,
-  0.3803551666F, 0.3808366642F, 0.3813182733F, 0.3817999932F,
-  0.3822818234F, 0.3827637633F, 0.3832458124F, 0.3837279702F,
-  0.3842102360F, 0.3846926093F, 0.3851750897F, 0.3856576764F,
-  0.3861403690F, 0.3866231670F, 0.3871060696F, 0.3875890765F,
-  0.3880721870F, 0.3885554007F, 0.3890387168F, 0.3895221349F,
-  0.3900056544F, 0.3904892748F, 0.3909729955F, 0.3914568160F,
-  0.3919407356F, 0.3924247539F, 0.3929088702F, 0.3933930841F,
-  0.3938773949F, 0.3943618021F, 0.3948463052F, 0.3953309035F,
-  0.3958155966F, 0.3963003838F, 0.3967852646F, 0.3972702385F,
-  0.3977553048F, 0.3982404631F, 0.3987257127F, 0.3992110531F,
-  0.3996964838F, 0.4001820041F, 0.4006676136F, 0.4011533116F,
-  0.4016390976F, 0.4021249710F, 0.4026109313F, 0.4030969779F,
-  0.4035831102F, 0.4040693277F, 0.4045556299F, 0.4050420160F,
-  0.4055284857F, 0.4060150383F, 0.4065016732F, 0.4069883899F,
-  0.4074751879F, 0.4079620665F, 0.4084490252F, 0.4089360635F,
-  0.4094231807F, 0.4099103763F, 0.4103976498F, 0.4108850005F,
-  0.4113724280F, 0.4118599315F, 0.4123475107F, 0.4128351648F,
-  0.4133228934F, 0.4138106959F, 0.4142985716F, 0.4147865201F,
-  0.4152745408F, 0.4157626330F, 0.4162507963F, 0.4167390301F,
-  0.4172273337F, 0.4177157067F, 0.4182041484F, 0.4186926583F,
-  0.4191812359F, 0.4196698805F, 0.4201585915F, 0.4206473685F,
-  0.4211362108F, 0.4216251179F, 0.4221140892F, 0.4226031241F,
-  0.4230922221F, 0.4235813826F, 0.4240706050F, 0.4245598887F,
-  0.4250492332F, 0.4255386379F, 0.4260281022F, 0.4265176256F,
-  0.4270072075F, 0.4274968473F, 0.4279865445F, 0.4284762984F,
-  0.4289661086F, 0.4294559743F, 0.4299458951F, 0.4304358704F,
-  0.4309258996F, 0.4314159822F, 0.4319061175F, 0.4323963050F,
-  0.4328865441F, 0.4333768342F, 0.4338671749F, 0.4343575654F,
-  0.4348480052F, 0.4353384938F, 0.4358290306F, 0.4363196149F,
-  0.4368102463F, 0.4373009241F, 0.4377916478F, 0.4382824168F,
-  0.4387732305F, 0.4392640884F, 0.4397549899F, 0.4402459343F,
-  0.4407369212F, 0.4412279499F, 0.4417190198F, 0.4422101305F,
-  0.4427012813F, 0.4431924717F, 0.4436837010F, 0.4441749686F,
-  0.4446662742F, 0.4451576169F, 0.4456489963F, 0.4461404118F,
-  0.4466318628F, 0.4471233487F, 0.4476148690F, 0.4481064230F,
-  0.4485980103F, 0.4490896302F, 0.4495812821F, 0.4500729654F,
-  0.4505646797F, 0.4510564243F, 0.4515481986F, 0.4520400021F,
-  0.4525318341F, 0.4530236942F, 0.4535155816F, 0.4540074959F,
-  0.4544994365F, 0.4549914028F, 0.4554833941F, 0.4559754100F,
-  0.4564674499F, 0.4569595131F, 0.4574515991F, 0.4579437074F,
-  0.4584358372F, 0.4589279881F, 0.4594201595F, 0.4599123508F,
-  0.4604045615F, 0.4608967908F, 0.4613890383F, 0.4618813034F,
-  0.4623735855F, 0.4628658841F, 0.4633581984F, 0.4638505281F,
-  0.4643428724F, 0.4648352308F, 0.4653276028F, 0.4658199877F,
-  0.4663123849F, 0.4668047940F, 0.4672972143F, 0.4677896451F,
-  0.4682820861F, 0.4687745365F, 0.4692669958F, 0.4697594634F,
-  0.4702519387F, 0.4707444211F, 0.4712369102F, 0.4717294052F,
-  0.4722219056F, 0.4727144109F, 0.4732069204F, 0.4736994336F,
-  0.4741919498F, 0.4746844686F, 0.4751769893F, 0.4756695113F,
-  0.4761620341F, 0.4766545571F, 0.4771470797F, 0.4776396013F,
-  0.4781321213F, 0.4786246392F, 0.4791171544F, 0.4796096663F,
-  0.4801021744F, 0.4805946779F, 0.4810871765F, 0.4815796694F,
-  0.4820721561F, 0.4825646360F, 0.4830571086F, 0.4835495732F,
-  0.4840420293F, 0.4845344763F, 0.4850269136F, 0.4855193407F,
-  0.4860117569F, 0.4865041617F, 0.4869965545F, 0.4874889347F,
-  0.4879813018F, 0.4884736551F, 0.4889659941F, 0.4894583182F,
-  0.4899506268F, 0.4904429193F, 0.4909351952F, 0.4914274538F,
-  0.4919196947F, 0.4924119172F, 0.4929041207F, 0.4933963046F,
-  0.4938884685F, 0.4943806116F, 0.4948727335F, 0.4953648335F,
-  0.4958569110F, 0.4963489656F, 0.4968409965F, 0.4973330032F,
-  0.4978249852F, 0.4983169419F, 0.4988088726F, 0.4993007768F,
-  0.4997926539F, 0.5002845034F, 0.5007763247F, 0.5012681171F,
-  0.5017598801F, 0.5022516132F, 0.5027433157F, 0.5032349871F,
-  0.5037266268F, 0.5042182341F, 0.5047098086F, 0.5052013497F,
-  0.5056928567F, 0.5061843292F, 0.5066757664F, 0.5071671679F,
-  0.5076585330F, 0.5081498613F, 0.5086411520F, 0.5091324047F,
-  0.5096236187F, 0.5101147934F, 0.5106059284F, 0.5110970230F,
-  0.5115880766F, 0.5120790887F, 0.5125700587F, 0.5130609860F,
-  0.5135518700F, 0.5140427102F, 0.5145335059F, 0.5150242566F,
-  0.5155149618F, 0.5160056208F, 0.5164962331F, 0.5169867980F,
-  0.5174773151F, 0.5179677837F, 0.5184582033F, 0.5189485733F,
-  0.5194388931F, 0.5199291621F, 0.5204193798F, 0.5209095455F,
-  0.5213996588F, 0.5218897190F, 0.5223797256F, 0.5228696779F,
-  0.5233595755F, 0.5238494177F, 0.5243392039F, 0.5248289337F,
-  0.5253186063F, 0.5258082213F, 0.5262977781F, 0.5267872760F,
-  0.5272767146F, 0.5277660932F, 0.5282554112F, 0.5287446682F,
-  0.5292338635F, 0.5297229965F, 0.5302120667F, 0.5307010736F,
-  0.5311900164F, 0.5316788947F, 0.5321677079F, 0.5326564554F,
-  0.5331451366F, 0.5336337511F, 0.5341222981F, 0.5346107771F,
-  0.5350991876F, 0.5355875290F, 0.5360758007F, 0.5365640021F,
-  0.5370521327F, 0.5375401920F, 0.5380281792F, 0.5385160939F,
-  0.5390039355F, 0.5394917034F, 0.5399793971F, 0.5404670159F,
-  0.5409545594F, 0.5414420269F, 0.5419294179F, 0.5424167318F,
-  0.5429039680F, 0.5433911261F, 0.5438782053F, 0.5443652051F,
-  0.5448521250F, 0.5453389644F, 0.5458257228F, 0.5463123995F,
-  0.5467989940F, 0.5472855057F, 0.5477719341F, 0.5482582786F,
-  0.5487445387F, 0.5492307137F, 0.5497168031F, 0.5502028063F,
-  0.5506887228F, 0.5511745520F, 0.5516602934F, 0.5521459463F,
-  0.5526315103F, 0.5531169847F, 0.5536023690F, 0.5540876626F,
-  0.5545728649F, 0.5550579755F, 0.5555429937F, 0.5560279189F,
-  0.5565127507F, 0.5569974884F, 0.5574821315F, 0.5579666794F,
-  0.5584511316F, 0.5589354875F, 0.5594197465F, 0.5599039080F,
-  0.5603879716F, 0.5608719367F, 0.5613558026F, 0.5618395689F,
-  0.5623232350F, 0.5628068002F, 0.5632902642F, 0.5637736262F,
-  0.5642568858F, 0.5647400423F, 0.5652230953F, 0.5657060442F,
-  0.5661888883F, 0.5666716272F, 0.5671542603F, 0.5676367870F,
-  0.5681192069F, 0.5686015192F, 0.5690837235F, 0.5695658192F,
-  0.5700478058F, 0.5705296827F, 0.5710114494F, 0.5714931052F,
-  0.5719746497F, 0.5724560822F, 0.5729374023F, 0.5734186094F,
-  0.5738997029F, 0.5743806823F, 0.5748615470F, 0.5753422965F,
-  0.5758229301F, 0.5763034475F, 0.5767838480F, 0.5772641310F,
-  0.5777442960F, 0.5782243426F, 0.5787042700F, 0.5791840778F,
-  0.5796637654F, 0.5801433322F, 0.5806227778F, 0.5811021016F,
-  0.5815813029F, 0.5820603814F, 0.5825393363F, 0.5830181673F,
-  0.5834968737F, 0.5839754549F, 0.5844539105F, 0.5849322399F,
-  0.5854104425F, 0.5858885179F, 0.5863664653F, 0.5868442844F,
-  0.5873219746F, 0.5877995353F, 0.5882769660F, 0.5887542661F,
-  0.5892314351F, 0.5897084724F, 0.5901853776F, 0.5906621500F,
-  0.5911387892F, 0.5916152945F, 0.5920916655F, 0.5925679016F,
-  0.5930440022F, 0.5935199669F, 0.5939957950F, 0.5944714861F,
-  0.5949470396F, 0.5954224550F, 0.5958977317F, 0.5963728692F,
-  0.5968478669F, 0.5973227244F, 0.5977974411F, 0.5982720163F,
-  0.5987464497F, 0.5992207407F, 0.5996948887F, 0.6001688932F,
-  0.6006427537F, 0.6011164696F, 0.6015900405F, 0.6020634657F,
-  0.6025367447F, 0.6030098770F, 0.6034828621F, 0.6039556995F,
-  0.6044283885F, 0.6049009288F, 0.6053733196F, 0.6058455606F,
-  0.6063176512F, 0.6067895909F, 0.6072613790F, 0.6077330152F,
-  0.6082044989F, 0.6086758295F, 0.6091470065F, 0.6096180294F,
-  0.6100888977F, 0.6105596108F, 0.6110301682F, 0.6115005694F,
-  0.6119708139F, 0.6124409011F, 0.6129108305F, 0.6133806017F,
-  0.6138502139F, 0.6143196669F, 0.6147889599F, 0.6152580926F,
-  0.6157270643F, 0.6161958746F, 0.6166645230F, 0.6171330088F,
-  0.6176013317F, 0.6180694910F, 0.6185374863F, 0.6190053171F,
-  0.6194729827F, 0.6199404828F, 0.6204078167F, 0.6208749841F,
-  0.6213419842F, 0.6218088168F, 0.6222754811F, 0.6227419768F,
-  0.6232083032F, 0.6236744600F, 0.6241404465F, 0.6246062622F,
-  0.6250719067F, 0.6255373795F, 0.6260026799F, 0.6264678076F,
-  0.6269327619F, 0.6273975425F, 0.6278621487F, 0.6283265800F,
-  0.6287908361F, 0.6292549163F, 0.6297188201F, 0.6301825471F,
-  0.6306460966F, 0.6311094683F, 0.6315726617F, 0.6320356761F,
-  0.6324985111F, 0.6329611662F, 0.6334236410F, 0.6338859348F,
-  0.6343480472F, 0.6348099777F, 0.6352717257F, 0.6357332909F,
-  0.6361946726F, 0.6366558704F, 0.6371168837F, 0.6375777122F,
-  0.6380383552F, 0.6384988123F, 0.6389590830F, 0.6394191668F,
-  0.6398790631F, 0.6403387716F, 0.6407982916F, 0.6412576228F,
-  0.6417167645F, 0.6421757163F, 0.6426344778F, 0.6430930483F,
-  0.6435514275F, 0.6440096149F, 0.6444676098F, 0.6449254119F,
-  0.6453830207F, 0.6458404356F, 0.6462976562F, 0.6467546820F,
-  0.6472115125F, 0.6476681472F, 0.6481245856F, 0.6485808273F,
-  0.6490368717F, 0.6494927183F, 0.6499483667F, 0.6504038164F,
-  0.6508590670F, 0.6513141178F, 0.6517689684F, 0.6522236185F,
-  0.6526780673F, 0.6531323146F, 0.6535863598F, 0.6540402024F,
-  0.6544938419F, 0.6549472779F, 0.6554005099F, 0.6558535373F,
-  0.6563063598F, 0.6567589769F, 0.6572113880F, 0.6576635927F,
-  0.6581155906F, 0.6585673810F, 0.6590189637F, 0.6594703380F,
-  0.6599215035F, 0.6603724598F, 0.6608232064F, 0.6612737427F,
-  0.6617240684F, 0.6621741829F, 0.6626240859F, 0.6630737767F,
-  0.6635232550F, 0.6639725202F, 0.6644215720F, 0.6648704098F,
-  0.6653190332F, 0.6657674417F, 0.6662156348F, 0.6666636121F,
-  0.6671113731F, 0.6675589174F, 0.6680062445F, 0.6684533538F,
-  0.6689002450F, 0.6693469177F, 0.6697933712F, 0.6702396052F,
-  0.6706856193F, 0.6711314129F, 0.6715769855F, 0.6720223369F,
-  0.6724674664F, 0.6729123736F, 0.6733570581F, 0.6738015194F,
-  0.6742457570F, 0.6746897706F, 0.6751335596F, 0.6755771236F,
-  0.6760204621F, 0.6764635747F, 0.6769064609F, 0.6773491204F,
-  0.6777915525F, 0.6782337570F, 0.6786757332F, 0.6791174809F,
-  0.6795589995F, 0.6800002886F, 0.6804413477F, 0.6808821765F,
-  0.6813227743F, 0.6817631409F, 0.6822032758F, 0.6826431785F,
-  0.6830828485F, 0.6835222855F, 0.6839614890F, 0.6844004585F,
-  0.6848391936F, 0.6852776939F, 0.6857159589F, 0.6861539883F,
-  0.6865917815F, 0.6870293381F, 0.6874666576F, 0.6879037398F,
-  0.6883405840F, 0.6887771899F, 0.6892135571F, 0.6896496850F,
-  0.6900855733F, 0.6905212216F, 0.6909566294F, 0.6913917963F,
-  0.6918267218F, 0.6922614055F, 0.6926958471F, 0.6931300459F,
-  0.6935640018F, 0.6939977141F, 0.6944311825F, 0.6948644066F,
-  0.6952973859F, 0.6957301200F, 0.6961626085F, 0.6965948510F,
-  0.6970268470F, 0.6974585961F, 0.6978900980F, 0.6983213521F,
-  0.6987523580F, 0.6991831154F, 0.6996136238F, 0.7000438828F,
-  0.7004738921F, 0.7009036510F, 0.7013331594F, 0.7017624166F,
-  0.7021914224F, 0.7026201763F, 0.7030486779F, 0.7034769268F,
-  0.7039049226F, 0.7043326648F, 0.7047601531F, 0.7051873870F,
-  0.7056143662F, 0.7060410902F, 0.7064675586F, 0.7068937711F,
-  0.7073197271F, 0.7077454264F, 0.7081708684F, 0.7085960529F,
-  0.7090209793F, 0.7094456474F, 0.7098700566F, 0.7102942066F,
-  0.7107180970F, 0.7111417274F, 0.7115650974F, 0.7119882066F,
-  0.7124110545F, 0.7128336409F, 0.7132559653F, 0.7136780272F,
-  0.7140998264F, 0.7145213624F, 0.7149426348F, 0.7153636433F,
-  0.7157843874F, 0.7162048668F, 0.7166250810F, 0.7170450296F,
-  0.7174647124F, 0.7178841289F, 0.7183032786F, 0.7187221613F,
-  0.7191407765F, 0.7195591239F, 0.7199772030F, 0.7203950135F,
-  0.7208125550F, 0.7212298271F, 0.7216468294F, 0.7220635616F,
-  0.7224800233F, 0.7228962140F, 0.7233121335F, 0.7237277813F,
-  0.7241431571F, 0.7245582604F, 0.7249730910F, 0.7253876484F,
-  0.7258019322F, 0.7262159422F, 0.7266296778F, 0.7270431388F,
-  0.7274563247F, 0.7278692353F, 0.7282818700F, 0.7286942287F,
-  0.7291063108F, 0.7295181160F, 0.7299296440F, 0.7303408944F,
-  0.7307518669F, 0.7311625609F, 0.7315729763F, 0.7319831126F,
-  0.7323929695F, 0.7328025466F, 0.7332118435F, 0.7336208600F,
-  0.7340295955F, 0.7344380499F, 0.7348462226F, 0.7352541134F,
-  0.7356617220F, 0.7360690478F, 0.7364760907F, 0.7368828502F,
-  0.7372893259F, 0.7376955176F, 0.7381014249F, 0.7385070475F,
-  0.7389123849F, 0.7393174368F, 0.7397222029F, 0.7401266829F,
-  0.7405308763F, 0.7409347829F, 0.7413384023F, 0.7417417341F,
-  0.7421447780F, 0.7425475338F, 0.7429500009F, 0.7433521791F,
-  0.7437540681F, 0.7441556674F, 0.7445569769F, 0.7449579960F,
-  0.7453587245F, 0.7457591621F, 0.7461593084F, 0.7465591631F,
-  0.7469587259F, 0.7473579963F, 0.7477569741F, 0.7481556590F,
-  0.7485540506F, 0.7489521486F, 0.7493499526F, 0.7497474623F,
-  0.7501446775F, 0.7505415977F, 0.7509382227F, 0.7513345521F,
-  0.7517305856F, 0.7521263229F, 0.7525217636F, 0.7529169074F,
-  0.7533117541F, 0.7537063032F, 0.7541005545F, 0.7544945076F,
-  0.7548881623F, 0.7552815182F, 0.7556745749F, 0.7560673323F,
-  0.7564597899F, 0.7568519474F, 0.7572438046F, 0.7576353611F,
-  0.7580266166F, 0.7584175708F, 0.7588082235F, 0.7591985741F,
-  0.7595886226F, 0.7599783685F, 0.7603678116F, 0.7607569515F,
-  0.7611457879F, 0.7615343206F, 0.7619225493F, 0.7623104735F,
-  0.7626980931F, 0.7630854078F, 0.7634724171F, 0.7638591209F,
-  0.7642455188F, 0.7646316106F, 0.7650173959F, 0.7654028744F,
-  0.7657880459F, 0.7661729100F, 0.7665574664F, 0.7669417150F,
-  0.7673256553F, 0.7677092871F, 0.7680926100F, 0.7684756239F,
-  0.7688583284F, 0.7692407232F, 0.7696228080F, 0.7700045826F,
-  0.7703860467F, 0.7707671999F, 0.7711480420F, 0.7715285728F,
-  0.7719087918F, 0.7722886989F, 0.7726682938F, 0.7730475762F,
-  0.7734265458F, 0.7738052023F, 0.7741835454F, 0.7745615750F,
-  0.7749392906F, 0.7753166921F, 0.7756937791F, 0.7760705514F,
-  0.7764470087F, 0.7768231508F, 0.7771989773F, 0.7775744880F,
-  0.7779496827F, 0.7783245610F, 0.7786991227F, 0.7790733676F,
-  0.7794472953F, 0.7798209056F, 0.7801941982F, 0.7805671729F,
-  0.7809398294F, 0.7813121675F, 0.7816841869F, 0.7820558873F,
-  0.7824272684F, 0.7827983301F, 0.7831690720F, 0.7835394940F,
-  0.7839095957F, 0.7842793768F, 0.7846488373F, 0.7850179767F,
-  0.7853867948F, 0.7857552914F, 0.7861234663F, 0.7864913191F,
-  0.7868588497F, 0.7872260578F, 0.7875929431F, 0.7879595055F,
-  0.7883257445F, 0.7886916601F, 0.7890572520F, 0.7894225198F,
-  0.7897874635F, 0.7901520827F, 0.7905163772F, 0.7908803468F,
-  0.7912439912F, 0.7916073102F, 0.7919703035F, 0.7923329710F,
-  0.7926953124F, 0.7930573274F, 0.7934190158F, 0.7937803774F,
-  0.7941414120F, 0.7945021193F, 0.7948624991F, 0.7952225511F,
-  0.7955822752F, 0.7959416711F, 0.7963007387F, 0.7966594775F,
-  0.7970178875F, 0.7973759685F, 0.7977337201F, 0.7980911422F,
-  0.7984482346F, 0.7988049970F, 0.7991614292F, 0.7995175310F,
-  0.7998733022F, 0.8002287426F, 0.8005838519F, 0.8009386299F,
-  0.8012930765F, 0.8016471914F, 0.8020009744F, 0.8023544253F,
-  0.8027075438F, 0.8030603298F, 0.8034127831F, 0.8037649035F,
-  0.8041166906F, 0.8044681445F, 0.8048192647F, 0.8051700512F,
-  0.8055205038F, 0.8058706222F, 0.8062204062F, 0.8065698556F,
-  0.8069189702F, 0.8072677499F, 0.8076161944F, 0.8079643036F,
-  0.8083120772F, 0.8086595151F, 0.8090066170F, 0.8093533827F,
-  0.8096998122F, 0.8100459051F, 0.8103916613F, 0.8107370806F,
-  0.8110821628F, 0.8114269077F, 0.8117713151F, 0.8121153849F,
-  0.8124591169F, 0.8128025108F, 0.8131455666F, 0.8134882839F,
-  0.8138306627F, 0.8141727027F, 0.8145144038F, 0.8148557658F,
-  0.8151967886F, 0.8155374718F, 0.8158778154F, 0.8162178192F,
-  0.8165574830F, 0.8168968067F, 0.8172357900F, 0.8175744328F,
-  0.8179127349F, 0.8182506962F, 0.8185883164F, 0.8189255955F,
-  0.8192625332F, 0.8195991295F, 0.8199353840F, 0.8202712967F,
-  0.8206068673F, 0.8209420958F, 0.8212769820F, 0.8216115256F,
-  0.8219457266F, 0.8222795848F, 0.8226131000F, 0.8229462721F,
-  0.8232791009F, 0.8236115863F, 0.8239437280F, 0.8242755260F,
-  0.8246069801F, 0.8249380901F, 0.8252688559F, 0.8255992774F,
-  0.8259293544F, 0.8262590867F, 0.8265884741F, 0.8269175167F,
-  0.8272462141F, 0.8275745663F, 0.8279025732F, 0.8282302344F,
-  0.8285575501F, 0.8288845199F, 0.8292111437F, 0.8295374215F,
-  0.8298633530F, 0.8301889382F, 0.8305141768F, 0.8308390688F,
-  0.8311636141F, 0.8314878124F, 0.8318116637F, 0.8321351678F,
-  0.8324583246F, 0.8327811340F, 0.8331035957F, 0.8334257098F,
-  0.8337474761F, 0.8340688944F, 0.8343899647F, 0.8347106867F,
-  0.8350310605F, 0.8353510857F, 0.8356707624F, 0.8359900904F,
-  0.8363090696F, 0.8366276999F, 0.8369459811F, 0.8372639131F,
-  0.8375814958F, 0.8378987292F, 0.8382156130F, 0.8385321472F,
-  0.8388483316F, 0.8391641662F, 0.8394796508F, 0.8397947853F,
-  0.8401095697F, 0.8404240037F, 0.8407380873F, 0.8410518204F,
-  0.8413652029F, 0.8416782347F, 0.8419909156F, 0.8423032456F,
-  0.8426152245F, 0.8429268523F, 0.8432381289F, 0.8435490541F,
-  0.8438596279F, 0.8441698502F, 0.8444797208F, 0.8447892396F,
-  0.8450984067F, 0.8454072218F, 0.8457156849F, 0.8460237959F,
-  0.8463315547F, 0.8466389612F, 0.8469460154F, 0.8472527170F,
-  0.8475590661F, 0.8478650625F, 0.8481707063F, 0.8484759971F,
-  0.8487809351F, 0.8490855201F, 0.8493897521F, 0.8496936308F,
-  0.8499971564F, 0.8503003286F, 0.8506031474F, 0.8509056128F,
-  0.8512077246F, 0.8515094828F, 0.8518108872F, 0.8521119379F,
-  0.8524126348F, 0.8527129777F, 0.8530129666F, 0.8533126015F,
-  0.8536118822F, 0.8539108087F, 0.8542093809F, 0.8545075988F,
-  0.8548054623F, 0.8551029712F, 0.8554001257F, 0.8556969255F,
-  0.8559933707F, 0.8562894611F, 0.8565851968F, 0.8568805775F,
-  0.8571756034F, 0.8574702743F, 0.8577645902F, 0.8580585509F,
-  0.8583521566F, 0.8586454070F, 0.8589383021F, 0.8592308420F,
-  0.8595230265F, 0.8598148556F, 0.8601063292F, 0.8603974473F,
-  0.8606882098F, 0.8609786167F, 0.8612686680F, 0.8615583636F,
-  0.8618477034F, 0.8621366874F, 0.8624253156F, 0.8627135878F,
-  0.8630015042F, 0.8632890646F, 0.8635762690F, 0.8638631173F,
-  0.8641496096F, 0.8644357457F, 0.8647215257F, 0.8650069495F,
-  0.8652920171F, 0.8655767283F, 0.8658610833F, 0.8661450820F,
-  0.8664287243F, 0.8667120102F, 0.8669949397F, 0.8672775127F,
-  0.8675597293F, 0.8678415894F, 0.8681230929F, 0.8684042398F,
-  0.8686850302F, 0.8689654640F, 0.8692455412F, 0.8695252617F,
-  0.8698046255F, 0.8700836327F, 0.8703622831F, 0.8706405768F,
-  0.8709185138F, 0.8711960940F, 0.8714733174F, 0.8717501840F,
-  0.8720266939F, 0.8723028469F, 0.8725786430F, 0.8728540824F,
-  0.8731291648F, 0.8734038905F, 0.8736782592F, 0.8739522711F,
-  0.8742259261F, 0.8744992242F, 0.8747721653F, 0.8750447496F,
-  0.8753169770F, 0.8755888475F, 0.8758603611F, 0.8761315177F,
-  0.8764023175F, 0.8766727603F, 0.8769428462F, 0.8772125752F,
-  0.8774819474F, 0.8777509626F, 0.8780196209F, 0.8782879224F,
-  0.8785558669F, 0.8788234546F, 0.8790906854F, 0.8793575594F,
-  0.8796240765F, 0.8798902368F, 0.8801560403F, 0.8804214870F,
-  0.8806865768F, 0.8809513099F, 0.8812156863F, 0.8814797059F,
-  0.8817433687F, 0.8820066749F, 0.8822696243F, 0.8825322171F,
-  0.8827944532F, 0.8830563327F, 0.8833178556F, 0.8835790219F,
-  0.8838398316F, 0.8841002848F, 0.8843603815F, 0.8846201217F,
-  0.8848795054F, 0.8851385327F, 0.8853972036F, 0.8856555182F,
-  0.8859134764F, 0.8861710783F, 0.8864283239F, 0.8866852133F,
-  0.8869417464F, 0.8871979234F, 0.8874537443F, 0.8877092090F,
-  0.8879643177F, 0.8882190704F, 0.8884734671F, 0.8887275078F,
-  0.8889811927F, 0.8892345216F, 0.8894874948F, 0.8897401122F,
-  0.8899923738F, 0.8902442798F, 0.8904958301F, 0.8907470248F,
-  0.8909978640F, 0.8912483477F, 0.8914984759F, 0.8917482487F,
-  0.8919976662F, 0.8922467284F, 0.8924954353F, 0.8927437871F,
-  0.8929917837F, 0.8932394252F, 0.8934867118F, 0.8937336433F,
-  0.8939802199F, 0.8942264417F, 0.8944723087F, 0.8947178210F,
-  0.8949629785F, 0.8952077815F, 0.8954522299F, 0.8956963239F,
-  0.8959400634F, 0.8961834486F, 0.8964264795F, 0.8966691561F,
-  0.8969114786F, 0.8971534470F, 0.8973950614F, 0.8976363219F,
-  0.8978772284F, 0.8981177812F, 0.8983579802F, 0.8985978256F,
-  0.8988373174F, 0.8990764556F, 0.8993152405F, 0.8995536720F,
-  0.8997917502F, 0.9000294751F, 0.9002668470F, 0.9005038658F,
-  0.9007405317F, 0.9009768446F, 0.9012128048F, 0.9014484123F,
-  0.9016836671F, 0.9019185693F, 0.9021531191F, 0.9023873165F,
-  0.9026211616F, 0.9028546546F, 0.9030877954F, 0.9033205841F,
-  0.9035530210F, 0.9037851059F, 0.9040168392F, 0.9042482207F,
-  0.9044792507F, 0.9047099293F, 0.9049402564F, 0.9051702323F,
-  0.9053998569F, 0.9056291305F, 0.9058580531F, 0.9060866248F,
-  0.9063148457F, 0.9065427159F, 0.9067702355F, 0.9069974046F,
-  0.9072242233F, 0.9074506917F, 0.9076768100F, 0.9079025782F,
-  0.9081279964F, 0.9083530647F, 0.9085777833F, 0.9088021523F,
-  0.9090261717F, 0.9092498417F, 0.9094731623F, 0.9096961338F,
-  0.9099187561F, 0.9101410295F, 0.9103629540F, 0.9105845297F,
-  0.9108057568F, 0.9110266354F, 0.9112471656F, 0.9114673475F,
-  0.9116871812F, 0.9119066668F, 0.9121258046F, 0.9123445945F,
-  0.9125630367F, 0.9127811314F, 0.9129988786F, 0.9132162785F,
-  0.9134333312F, 0.9136500368F, 0.9138663954F, 0.9140824073F,
-  0.9142980724F, 0.9145133910F, 0.9147283632F, 0.9149429890F,
-  0.9151572687F, 0.9153712023F, 0.9155847900F, 0.9157980319F,
-  0.9160109282F, 0.9162234790F, 0.9164356844F, 0.9166475445F,
-  0.9168590595F, 0.9170702296F, 0.9172810548F, 0.9174915354F,
-  0.9177016714F, 0.9179114629F, 0.9181209102F, 0.9183300134F,
-  0.9185387726F, 0.9187471879F, 0.9189552595F, 0.9191629876F,
-  0.9193703723F, 0.9195774136F, 0.9197841119F, 0.9199904672F,
-  0.9201964797F, 0.9204021495F, 0.9206074767F, 0.9208124616F,
-  0.9210171043F, 0.9212214049F, 0.9214253636F, 0.9216289805F,
-  0.9218322558F, 0.9220351896F, 0.9222377821F, 0.9224400335F,
-  0.9226419439F, 0.9228435134F, 0.9230447423F, 0.9232456307F,
-  0.9234461787F, 0.9236463865F, 0.9238462543F, 0.9240457822F,
-  0.9242449704F, 0.9244438190F, 0.9246423282F, 0.9248404983F,
-  0.9250383293F, 0.9252358214F, 0.9254329747F, 0.9256297896F,
-  0.9258262660F, 0.9260224042F, 0.9262182044F, 0.9264136667F,
-  0.9266087913F, 0.9268035783F, 0.9269980280F, 0.9271921405F,
-  0.9273859160F, 0.9275793546F, 0.9277724566F, 0.9279652221F,
-  0.9281576513F, 0.9283497443F, 0.9285415014F, 0.9287329227F,
-  0.9289240084F, 0.9291147586F, 0.9293051737F, 0.9294952536F,
-  0.9296849987F, 0.9298744091F, 0.9300634850F, 0.9302522266F,
-  0.9304406340F, 0.9306287074F, 0.9308164471F, 0.9310038532F,
-  0.9311909259F, 0.9313776654F, 0.9315640719F, 0.9317501455F,
-  0.9319358865F, 0.9321212951F, 0.9323063713F, 0.9324911155F,
-  0.9326755279F, 0.9328596085F, 0.9330433577F, 0.9332267756F,
-  0.9334098623F, 0.9335926182F, 0.9337750434F, 0.9339571380F,
-  0.9341389023F, 0.9343203366F, 0.9345014409F, 0.9346822155F,
-  0.9348626606F, 0.9350427763F, 0.9352225630F, 0.9354020207F,
-  0.9355811498F, 0.9357599503F, 0.9359384226F, 0.9361165667F,
-  0.9362943830F, 0.9364718716F, 0.9366490327F, 0.9368258666F,
-  0.9370023733F, 0.9371785533F, 0.9373544066F, 0.9375299335F,
-  0.9377051341F, 0.9378800087F, 0.9380545576F, 0.9382287809F,
-  0.9384026787F, 0.9385762515F, 0.9387494993F, 0.9389224223F,
-  0.9390950209F, 0.9392672951F, 0.9394392453F, 0.9396108716F,
-  0.9397821743F, 0.9399531536F, 0.9401238096F, 0.9402941427F,
-  0.9404641530F, 0.9406338407F, 0.9408032061F, 0.9409722495F,
-  0.9411409709F, 0.9413093707F, 0.9414774491F, 0.9416452062F,
-  0.9418126424F, 0.9419797579F, 0.9421465528F, 0.9423130274F,
-  0.9424791819F, 0.9426450166F, 0.9428105317F, 0.9429757274F,
-  0.9431406039F, 0.9433051616F, 0.9434694005F, 0.9436333209F,
-  0.9437969232F, 0.9439602074F, 0.9441231739F, 0.9442858229F,
-  0.9444481545F, 0.9446101691F, 0.9447718669F, 0.9449332481F,
-  0.9450943129F, 0.9452550617F, 0.9454154945F, 0.9455756118F,
-  0.9457354136F, 0.9458949003F, 0.9460540721F, 0.9462129292F,
-  0.9463714719F, 0.9465297003F, 0.9466876149F, 0.9468452157F,
-  0.9470025031F, 0.9471594772F, 0.9473161384F, 0.9474724869F,
-  0.9476285229F, 0.9477842466F, 0.9479396584F, 0.9480947585F,
-  0.9482495470F, 0.9484040243F, 0.9485581906F, 0.9487120462F,
-  0.9488655913F, 0.9490188262F, 0.9491717511F, 0.9493243662F,
-  0.9494766718F, 0.9496286683F, 0.9497803557F, 0.9499317345F,
-  0.9500828047F, 0.9502335668F, 0.9503840209F, 0.9505341673F,
-  0.9506840062F, 0.9508335380F, 0.9509827629F, 0.9511316810F,
-  0.9512802928F, 0.9514285984F, 0.9515765982F, 0.9517242923F,
-  0.9518716810F, 0.9520187646F, 0.9521655434F, 0.9523120176F,
-  0.9524581875F, 0.9526040534F, 0.9527496154F, 0.9528948739F,
-  0.9530398292F, 0.9531844814F, 0.9533288310F, 0.9534728780F,
-  0.9536166229F, 0.9537600659F, 0.9539032071F, 0.9540460470F,
-  0.9541885858F, 0.9543308237F, 0.9544727611F, 0.9546143981F,
-  0.9547557351F, 0.9548967723F, 0.9550375100F, 0.9551779485F,
-  0.9553180881F, 0.9554579290F, 0.9555974714F, 0.9557367158F,
-  0.9558756623F, 0.9560143112F, 0.9561526628F, 0.9562907174F,
-  0.9564284752F, 0.9565659366F, 0.9567031017F, 0.9568399710F,
-  0.9569765446F, 0.9571128229F, 0.9572488061F, 0.9573844944F,
-  0.9575198883F, 0.9576549879F, 0.9577897936F, 0.9579243056F,
-  0.9580585242F, 0.9581924497F, 0.9583260824F, 0.9584594226F,
-  0.9585924705F, 0.9587252264F, 0.9588576906F, 0.9589898634F,
-  0.9591217452F, 0.9592533360F, 0.9593846364F, 0.9595156465F,
-  0.9596463666F, 0.9597767971F, 0.9599069382F, 0.9600367901F,
-  0.9601663533F, 0.9602956279F, 0.9604246143F, 0.9605533128F,
-  0.9606817236F, 0.9608098471F, 0.9609376835F, 0.9610652332F,
-  0.9611924963F, 0.9613194733F, 0.9614461644F, 0.9615725699F,
-  0.9616986901F, 0.9618245253F, 0.9619500757F, 0.9620753418F,
-  0.9622003238F, 0.9623250219F, 0.9624494365F, 0.9625735679F,
-  0.9626974163F, 0.9628209821F, 0.9629442656F, 0.9630672671F,
-  0.9631899868F, 0.9633124251F, 0.9634345822F, 0.9635564585F,
-  0.9636780543F, 0.9637993699F, 0.9639204056F, 0.9640411616F,
-  0.9641616383F, 0.9642818359F, 0.9644017549F, 0.9645213955F,
-  0.9646407579F, 0.9647598426F, 0.9648786497F, 0.9649971797F,
-  0.9651154328F, 0.9652334092F, 0.9653511095F, 0.9654685337F,
-  0.9655856823F, 0.9657025556F, 0.9658191538F, 0.9659354773F,
-  0.9660515263F, 0.9661673013F, 0.9662828024F, 0.9663980300F,
-  0.9665129845F, 0.9666276660F, 0.9667420750F, 0.9668562118F,
-  0.9669700766F, 0.9670836698F, 0.9671969917F, 0.9673100425F,
-  0.9674228227F, 0.9675353325F, 0.9676475722F, 0.9677595422F,
-  0.9678712428F, 0.9679826742F, 0.9680938368F, 0.9682047309F,
-  0.9683153569F, 0.9684257150F, 0.9685358056F, 0.9686456289F,
-  0.9687551853F, 0.9688644752F, 0.9689734987F, 0.9690822564F,
-  0.9691907483F, 0.9692989750F, 0.9694069367F, 0.9695146337F,
-  0.9696220663F, 0.9697292349F, 0.9698361398F, 0.9699427813F,
-  0.9700491597F, 0.9701552754F, 0.9702611286F, 0.9703667197F,
-  0.9704720490F, 0.9705771169F, 0.9706819236F, 0.9707864695F,
-  0.9708907549F, 0.9709947802F, 0.9710985456F, 0.9712020514F,
-  0.9713052981F, 0.9714082859F, 0.9715110151F, 0.9716134862F,
-  0.9717156993F, 0.9718176549F, 0.9719193532F, 0.9720207946F,
-  0.9721219794F, 0.9722229080F, 0.9723235806F, 0.9724239976F,
-  0.9725241593F, 0.9726240661F, 0.9727237183F, 0.9728231161F,
-  0.9729222601F, 0.9730211503F, 0.9731197873F, 0.9732181713F,
-  0.9733163027F, 0.9734141817F, 0.9735118088F, 0.9736091842F,
-  0.9737063083F, 0.9738031814F, 0.9738998039F, 0.9739961760F,
-  0.9740922981F, 0.9741881706F, 0.9742837938F, 0.9743791680F,
-  0.9744742935F, 0.9745691707F, 0.9746637999F, 0.9747581814F,
-  0.9748523157F, 0.9749462029F, 0.9750398435F, 0.9751332378F,
-  0.9752263861F, 0.9753192887F, 0.9754119461F, 0.9755043585F,
-  0.9755965262F, 0.9756884496F, 0.9757801291F, 0.9758715650F,
-  0.9759627575F, 0.9760537071F, 0.9761444141F, 0.9762348789F,
-  0.9763251016F, 0.9764150828F, 0.9765048228F, 0.9765943218F,
-  0.9766835802F, 0.9767725984F, 0.9768613767F, 0.9769499154F,
-  0.9770382149F, 0.9771262755F, 0.9772140976F, 0.9773016815F,
-  0.9773890275F, 0.9774761360F, 0.9775630073F, 0.9776496418F,
-  0.9777360398F, 0.9778222016F, 0.9779081277F, 0.9779938182F,
-  0.9780792736F, 0.9781644943F, 0.9782494805F, 0.9783342326F,
-  0.9784187509F, 0.9785030359F, 0.9785870877F, 0.9786709069F,
-  0.9787544936F, 0.9788378484F, 0.9789209714F, 0.9790038631F,
-  0.9790865238F, 0.9791689538F, 0.9792511535F, 0.9793331232F,
-  0.9794148633F, 0.9794963742F, 0.9795776561F, 0.9796587094F,
-  0.9797395345F, 0.9798201316F, 0.9799005013F, 0.9799806437F,
-  0.9800605593F, 0.9801402483F, 0.9802197112F, 0.9802989483F,
-  0.9803779600F, 0.9804567465F, 0.9805353082F, 0.9806136455F,
-  0.9806917587F, 0.9807696482F, 0.9808473143F, 0.9809247574F,
-  0.9810019778F, 0.9810789759F, 0.9811557519F, 0.9812323064F,
-  0.9813086395F, 0.9813847517F, 0.9814606433F, 0.9815363147F,
-  0.9816117662F, 0.9816869981F, 0.9817620108F, 0.9818368047F,
-  0.9819113801F, 0.9819857374F, 0.9820598769F, 0.9821337989F,
-  0.9822075038F, 0.9822809920F, 0.9823542638F, 0.9824273195F,
-  0.9825001596F, 0.9825727843F, 0.9826451940F, 0.9827173891F,
-  0.9827893700F, 0.9828611368F, 0.9829326901F, 0.9830040302F,
-  0.9830751574F, 0.9831460720F, 0.9832167745F, 0.9832872652F,
-  0.9833575444F, 0.9834276124F, 0.9834974697F, 0.9835671166F,
-  0.9836365535F, 0.9837057806F, 0.9837747983F, 0.9838436071F,
-  0.9839122072F, 0.9839805990F, 0.9840487829F, 0.9841167591F,
-  0.9841845282F, 0.9842520903F, 0.9843194459F, 0.9843865953F,
-  0.9844535389F, 0.9845202771F, 0.9845868101F, 0.9846531383F,
-  0.9847192622F, 0.9847851820F, 0.9848508980F, 0.9849164108F,
-  0.9849817205F, 0.9850468276F, 0.9851117324F, 0.9851764352F,
-  0.9852409365F, 0.9853052366F, 0.9853693358F, 0.9854332344F,
-  0.9854969330F, 0.9855604317F, 0.9856237309F, 0.9856868310F,
-  0.9857497325F, 0.9858124355F, 0.9858749404F, 0.9859372477F,
-  0.9859993577F, 0.9860612707F, 0.9861229871F, 0.9861845072F,
-  0.9862458315F, 0.9863069601F, 0.9863678936F, 0.9864286322F,
-  0.9864891764F, 0.9865495264F, 0.9866096826F, 0.9866696454F,
-  0.9867294152F, 0.9867889922F, 0.9868483769F, 0.9869075695F,
-  0.9869665706F, 0.9870253803F, 0.9870839991F, 0.9871424273F,
-  0.9872006653F, 0.9872587135F, 0.9873165721F, 0.9873742415F,
-  0.9874317222F, 0.9874890144F, 0.9875461185F, 0.9876030348F,
-  0.9876597638F, 0.9877163057F, 0.9877726610F, 0.9878288300F,
-  0.9878848130F, 0.9879406104F, 0.9879962225F, 0.9880516497F,
-  0.9881068924F, 0.9881619509F, 0.9882168256F, 0.9882715168F,
-  0.9883260249F, 0.9883803502F, 0.9884344931F, 0.9884884539F,
-  0.9885422331F, 0.9885958309F, 0.9886492477F, 0.9887024838F,
-  0.9887555397F, 0.9888084157F, 0.9888611120F, 0.9889136292F,
-  0.9889659675F, 0.9890181273F, 0.9890701089F, 0.9891219128F,
-  0.9891735392F, 0.9892249885F, 0.9892762610F, 0.9893273572F,
-  0.9893782774F, 0.9894290219F, 0.9894795911F, 0.9895299853F,
-  0.9895802049F, 0.9896302502F, 0.9896801217F, 0.9897298196F,
-  0.9897793443F, 0.9898286961F, 0.9898778755F, 0.9899268828F,
-  0.9899757183F, 0.9900243823F, 0.9900728753F, 0.9901211976F,
-  0.9901693495F, 0.9902173314F, 0.9902651436F, 0.9903127865F,
-  0.9903602605F, 0.9904075659F, 0.9904547031F, 0.9905016723F,
-  0.9905484740F, 0.9905951086F, 0.9906415763F, 0.9906878775F,
-  0.9907340126F, 0.9907799819F, 0.9908257858F, 0.9908714247F,
-  0.9909168988F, 0.9909622086F, 0.9910073543F, 0.9910523364F,
-  0.9910971552F, 0.9911418110F, 0.9911863042F, 0.9912306351F,
-  0.9912748042F, 0.9913188117F, 0.9913626580F, 0.9914063435F,
-  0.9914498684F, 0.9914932333F, 0.9915364383F, 0.9915794839F,
-  0.9916223703F, 0.9916650981F, 0.9917076674F, 0.9917500787F,
-  0.9917923323F, 0.9918344286F, 0.9918763679F, 0.9919181505F,
-  0.9919597769F, 0.9920012473F, 0.9920425621F, 0.9920837217F,
-  0.9921247263F, 0.9921655765F, 0.9922062724F, 0.9922468145F,
-  0.9922872030F, 0.9923274385F, 0.9923675211F, 0.9924074513F,
-  0.9924472294F, 0.9924868557F, 0.9925263306F, 0.9925656544F,
-  0.9926048275F, 0.9926438503F, 0.9926827230F, 0.9927214461F,
-  0.9927600199F, 0.9927984446F, 0.9928367208F, 0.9928748486F,
-  0.9929128285F, 0.9929506608F, 0.9929883459F, 0.9930258841F,
-  0.9930632757F, 0.9931005211F, 0.9931376207F, 0.9931745747F,
-  0.9932113836F, 0.9932480476F, 0.9932845671F, 0.9933209425F,
-  0.9933571742F, 0.9933932623F, 0.9934292074F, 0.9934650097F,
-  0.9935006696F, 0.9935361874F, 0.9935715635F, 0.9936067982F,
-  0.9936418919F, 0.9936768448F, 0.9937116574F, 0.9937463300F,
-  0.9937808629F, 0.9938152565F, 0.9938495111F, 0.9938836271F,
-  0.9939176047F, 0.9939514444F, 0.9939851465F, 0.9940187112F,
-  0.9940521391F, 0.9940854303F, 0.9941185853F, 0.9941516044F,
-  0.9941844879F, 0.9942172361F, 0.9942498495F, 0.9942823283F,
-  0.9943146729F, 0.9943468836F, 0.9943789608F, 0.9944109047F,
-  0.9944427158F, 0.9944743944F, 0.9945059408F, 0.9945373553F,
-  0.9945686384F, 0.9945997902F, 0.9946308112F, 0.9946617017F,
-  0.9946924621F, 0.9947230926F, 0.9947535937F, 0.9947839656F,
-  0.9948142086F, 0.9948443232F, 0.9948743097F, 0.9949041683F,
-  0.9949338995F, 0.9949635035F, 0.9949929807F, 0.9950223315F,
-  0.9950515561F, 0.9950806549F, 0.9951096282F, 0.9951384764F,
-  0.9951671998F, 0.9951957987F, 0.9952242735F, 0.9952526245F,
-  0.9952808520F, 0.9953089564F, 0.9953369380F, 0.9953647971F,
-  0.9953925340F, 0.9954201491F, 0.9954476428F, 0.9954750153F,
-  0.9955022670F, 0.9955293981F, 0.9955564092F, 0.9955833003F,
-  0.9956100720F, 0.9956367245F, 0.9956632582F, 0.9956896733F,
-  0.9957159703F, 0.9957421494F, 0.9957682110F, 0.9957941553F,
-  0.9958199828F, 0.9958456937F, 0.9958712884F, 0.9958967672F,
-  0.9959221305F, 0.9959473784F, 0.9959725115F, 0.9959975300F,
-  0.9960224342F, 0.9960472244F, 0.9960719011F, 0.9960964644F,
-  0.9961209148F, 0.9961452525F, 0.9961694779F, 0.9961935913F,
-  0.9962175930F, 0.9962414834F, 0.9962652627F, 0.9962889313F,
-  0.9963124895F, 0.9963359377F, 0.9963592761F, 0.9963825051F,
-  0.9964056250F, 0.9964286361F, 0.9964515387F, 0.9964743332F,
-  0.9964970198F, 0.9965195990F, 0.9965420709F, 0.9965644360F,
-  0.9965866946F, 0.9966088469F, 0.9966308932F, 0.9966528340F,
-  0.9966746695F, 0.9966964001F, 0.9967180260F, 0.9967395475F,
-  0.9967609651F, 0.9967822789F, 0.9968034894F, 0.9968245968F,
-  0.9968456014F, 0.9968665036F, 0.9968873037F, 0.9969080019F,
-  0.9969285987F, 0.9969490942F, 0.9969694889F, 0.9969897830F,
-  0.9970099769F, 0.9970300708F, 0.9970500651F, 0.9970699601F,
-  0.9970897561F, 0.9971094533F, 0.9971290522F, 0.9971485531F,
-  0.9971679561F, 0.9971872617F, 0.9972064702F, 0.9972255818F,
-  0.9972445968F, 0.9972635157F, 0.9972823386F, 0.9973010659F,
-  0.9973196980F, 0.9973382350F, 0.9973566773F, 0.9973750253F,
-  0.9973932791F, 0.9974114392F, 0.9974295059F, 0.9974474793F,
-  0.9974653599F, 0.9974831480F, 0.9975008438F, 0.9975184476F,
-  0.9975359598F, 0.9975533806F, 0.9975707104F, 0.9975879495F,
-  0.9976050981F, 0.9976221566F, 0.9976391252F, 0.9976560043F,
-  0.9976727941F, 0.9976894950F, 0.9977061073F, 0.9977226312F,
-  0.9977390671F, 0.9977554152F, 0.9977716759F, 0.9977878495F,
-  0.9978039361F, 0.9978199363F, 0.9978358501F, 0.9978516780F,
-  0.9978674202F, 0.9978830771F, 0.9978986488F, 0.9979141358F,
-  0.9979295383F, 0.9979448566F, 0.9979600909F, 0.9979752417F,
-  0.9979903091F, 0.9980052936F, 0.9980201952F, 0.9980350145F,
-  0.9980497515F, 0.9980644067F, 0.9980789804F, 0.9980934727F,
-  0.9981078841F, 0.9981222147F, 0.9981364649F, 0.9981506350F,
-  0.9981647253F, 0.9981787360F, 0.9981926674F, 0.9982065199F,
-  0.9982202936F, 0.9982339890F, 0.9982476062F, 0.9982611456F,
-  0.9982746074F, 0.9982879920F, 0.9983012996F, 0.9983145304F,
-  0.9983276849F, 0.9983407632F, 0.9983537657F, 0.9983666926F,
-  0.9983795442F, 0.9983923208F, 0.9984050226F, 0.9984176501F,
-  0.9984302033F, 0.9984426827F, 0.9984550884F, 0.9984674208F,
-  0.9984796802F, 0.9984918667F, 0.9985039808F, 0.9985160227F,
-  0.9985279926F, 0.9985398909F, 0.9985517177F, 0.9985634734F,
-  0.9985751583F, 0.9985867727F, 0.9985983167F, 0.9986097907F,
-  0.9986211949F, 0.9986325297F, 0.9986437953F, 0.9986549919F,
-  0.9986661199F, 0.9986771795F, 0.9986881710F, 0.9986990946F,
-  0.9987099507F, 0.9987207394F, 0.9987314611F, 0.9987421161F,
-  0.9987527045F, 0.9987632267F, 0.9987736829F, 0.9987840734F,
-  0.9987943985F, 0.9988046584F, 0.9988148534F, 0.9988249838F,
-  0.9988350498F, 0.9988450516F, 0.9988549897F, 0.9988648641F,
-  0.9988746753F, 0.9988844233F, 0.9988941086F, 0.9989037313F,
-  0.9989132918F, 0.9989227902F, 0.9989322269F, 0.9989416021F,
-  0.9989509160F, 0.9989601690F, 0.9989693613F, 0.9989784931F,
-  0.9989875647F, 0.9989965763F, 0.9990055283F, 0.9990144208F,
-  0.9990232541F, 0.9990320286F, 0.9990407443F, 0.9990494016F,
-  0.9990580008F, 0.9990665421F, 0.9990750257F, 0.9990834519F,
-  0.9990918209F, 0.9991001331F, 0.9991083886F, 0.9991165877F,
-  0.9991247307F, 0.9991328177F, 0.9991408491F, 0.9991488251F,
-  0.9991567460F, 0.9991646119F, 0.9991724232F, 0.9991801801F,
-  0.9991878828F, 0.9991955316F, 0.9992031267F, 0.9992106684F,
-  0.9992181569F, 0.9992255925F, 0.9992329753F, 0.9992403057F,
-  0.9992475839F, 0.9992548101F, 0.9992619846F, 0.9992691076F,
-  0.9992761793F, 0.9992832001F, 0.9992901701F, 0.9992970895F,
-  0.9993039587F, 0.9993107777F, 0.9993175470F, 0.9993242667F,
-  0.9993309371F, 0.9993375583F, 0.9993441307F, 0.9993506545F,
-  0.9993571298F, 0.9993635570F, 0.9993699362F, 0.9993762678F,
-  0.9993825519F, 0.9993887887F, 0.9993949785F, 0.9994011216F,
-  0.9994072181F, 0.9994132683F, 0.9994192725F, 0.9994252307F,
-  0.9994311434F, 0.9994370107F, 0.9994428327F, 0.9994486099F,
-  0.9994543423F, 0.9994600303F, 0.9994656739F, 0.9994712736F,
-  0.9994768294F, 0.9994823417F, 0.9994878105F, 0.9994932363F,
-  0.9994986191F, 0.9995039592F, 0.9995092568F, 0.9995145122F,
-  0.9995197256F, 0.9995248971F, 0.9995300270F, 0.9995351156F,
-  0.9995401630F, 0.9995451695F, 0.9995501352F, 0.9995550604F,
-  0.9995599454F, 0.9995647903F, 0.9995695953F, 0.9995743607F,
-  0.9995790866F, 0.9995837734F, 0.9995884211F, 0.9995930300F,
-  0.9995976004F, 0.9996021324F, 0.9996066263F, 0.9996110822F,
-  0.9996155004F, 0.9996198810F, 0.9996242244F, 0.9996285306F,
-  0.9996327999F, 0.9996370326F, 0.9996412287F, 0.9996453886F,
-  0.9996495125F, 0.9996536004F, 0.9996576527F, 0.9996616696F,
-  0.9996656512F, 0.9996695977F, 0.9996735094F, 0.9996773865F,
-  0.9996812291F, 0.9996850374F, 0.9996888118F, 0.9996925523F,
-  0.9996962591F, 0.9996999325F, 0.9997035727F, 0.9997071798F,
-  0.9997107541F, 0.9997142957F, 0.9997178049F, 0.9997212818F,
-  0.9997247266F, 0.9997281396F, 0.9997315209F, 0.9997348708F,
-  0.9997381893F, 0.9997414767F, 0.9997447333F, 0.9997479591F,
-  0.9997511544F, 0.9997543194F, 0.9997574542F, 0.9997605591F,
-  0.9997636342F, 0.9997666797F, 0.9997696958F, 0.9997726828F,
-  0.9997756407F, 0.9997785698F, 0.9997814703F, 0.9997843423F,
-  0.9997871860F, 0.9997900016F, 0.9997927894F, 0.9997955494F,
-  0.9997982818F, 0.9998009869F, 0.9998036648F, 0.9998063157F,
-  0.9998089398F, 0.9998115373F, 0.9998141082F, 0.9998166529F,
-  0.9998191715F, 0.9998216642F, 0.9998241311F, 0.9998265724F,
-  0.9998289884F, 0.9998313790F, 0.9998337447F, 0.9998360854F,
-  0.9998384015F, 0.9998406930F, 0.9998429602F, 0.9998452031F,
-  0.9998474221F, 0.9998496171F, 0.9998517885F, 0.9998539364F,
-  0.9998560610F, 0.9998581624F, 0.9998602407F, 0.9998622962F,
-  0.9998643291F, 0.9998663394F, 0.9998683274F, 0.9998702932F,
-  0.9998722370F, 0.9998741589F, 0.9998760591F, 0.9998779378F,
-  0.9998797952F, 0.9998816313F, 0.9998834464F, 0.9998852406F,
-  0.9998870141F, 0.9998887670F, 0.9998904995F, 0.9998922117F,
-  0.9998939039F, 0.9998955761F, 0.9998972285F, 0.9998988613F,
-  0.9999004746F, 0.9999020686F, 0.9999036434F, 0.9999051992F,
-  0.9999067362F, 0.9999082544F, 0.9999097541F, 0.9999112354F,
-  0.9999126984F, 0.9999141433F, 0.9999155703F, 0.9999169794F,
-  0.9999183709F, 0.9999197449F, 0.9999211014F, 0.9999224408F,
-  0.9999237631F, 0.9999250684F, 0.9999263570F, 0.9999276289F,
-  0.9999288843F, 0.9999301233F, 0.9999313461F, 0.9999325529F,
-  0.9999337437F, 0.9999349187F, 0.9999360780F, 0.9999372218F,
-  0.9999383503F, 0.9999394635F, 0.9999405616F, 0.9999416447F,
-  0.9999427129F, 0.9999437665F, 0.9999448055F, 0.9999458301F,
-  0.9999468404F, 0.9999478365F, 0.9999488185F, 0.9999497867F,
-  0.9999507411F, 0.9999516819F, 0.9999526091F, 0.9999535230F,
-  0.9999544236F, 0.9999553111F, 0.9999561856F, 0.9999570472F,
-  0.9999578960F, 0.9999587323F, 0.9999595560F, 0.9999603674F,
-  0.9999611666F, 0.9999619536F, 0.9999627286F, 0.9999634917F,
-  0.9999642431F, 0.9999649828F, 0.9999657110F, 0.9999664278F,
-  0.9999671334F, 0.9999678278F, 0.9999685111F, 0.9999691835F,
-  0.9999698451F, 0.9999704960F, 0.9999711364F, 0.9999717662F,
-  0.9999723858F, 0.9999729950F, 0.9999735942F, 0.9999741834F,
-  0.9999747626F, 0.9999753321F, 0.9999758919F, 0.9999764421F,
-  0.9999769828F, 0.9999775143F, 0.9999780364F, 0.9999785495F,
-  0.9999790535F, 0.9999795485F, 0.9999800348F, 0.9999805124F,
-  0.9999809813F, 0.9999814417F, 0.9999818938F, 0.9999823375F,
-  0.9999827731F, 0.9999832005F, 0.9999836200F, 0.9999840316F,
-  0.9999844353F, 0.9999848314F, 0.9999852199F, 0.9999856008F,
-  0.9999859744F, 0.9999863407F, 0.9999866997F, 0.9999870516F,
-  0.9999873965F, 0.9999877345F, 0.9999880656F, 0.9999883900F,
-  0.9999887078F, 0.9999890190F, 0.9999893237F, 0.9999896220F,
-  0.9999899140F, 0.9999901999F, 0.9999904796F, 0.9999907533F,
-  0.9999910211F, 0.9999912830F, 0.9999915391F, 0.9999917896F,
-  0.9999920345F, 0.9999922738F, 0.9999925077F, 0.9999927363F,
-  0.9999929596F, 0.9999931777F, 0.9999933907F, 0.9999935987F,
-  0.9999938018F, 0.9999940000F, 0.9999941934F, 0.9999943820F,
-  0.9999945661F, 0.9999947456F, 0.9999949206F, 0.9999950912F,
-  0.9999952575F, 0.9999954195F, 0.9999955773F, 0.9999957311F,
-  0.9999958807F, 0.9999960265F, 0.9999961683F, 0.9999963063F,
-  0.9999964405F, 0.9999965710F, 0.9999966979F, 0.9999968213F,
-  0.9999969412F, 0.9999970576F, 0.9999971707F, 0.9999972805F,
-  0.9999973871F, 0.9999974905F, 0.9999975909F, 0.9999976881F,
-  0.9999977824F, 0.9999978738F, 0.9999979624F, 0.9999980481F,
-  0.9999981311F, 0.9999982115F, 0.9999982892F, 0.9999983644F,
-  0.9999984370F, 0.9999985072F, 0.9999985750F, 0.9999986405F,
-  0.9999987037F, 0.9999987647F, 0.9999988235F, 0.9999988802F,
-  0.9999989348F, 0.9999989873F, 0.9999990379F, 0.9999990866F,
-  0.9999991334F, 0.9999991784F, 0.9999992217F, 0.9999992632F,
-  0.9999993030F, 0.9999993411F, 0.9999993777F, 0.9999994128F,
-  0.9999994463F, 0.9999994784F, 0.9999995091F, 0.9999995384F,
-  0.9999995663F, 0.9999995930F, 0.9999996184F, 0.9999996426F,
-  0.9999996657F, 0.9999996876F, 0.9999997084F, 0.9999997282F,
-  0.9999997469F, 0.9999997647F, 0.9999997815F, 0.9999997973F,
-  0.9999998123F, 0.9999998265F, 0.9999998398F, 0.9999998524F,
-  0.9999998642F, 0.9999998753F, 0.9999998857F, 0.9999998954F,
-  0.9999999045F, 0.9999999130F, 0.9999999209F, 0.9999999282F,
-  0.9999999351F, 0.9999999414F, 0.9999999472F, 0.9999999526F,
-  0.9999999576F, 0.9999999622F, 0.9999999664F, 0.9999999702F,
-  0.9999999737F, 0.9999999769F, 0.9999999798F, 0.9999999824F,
-  0.9999999847F, 0.9999999868F, 0.9999999887F, 0.9999999904F,
-  0.9999999919F, 0.9999999932F, 0.9999999943F, 0.9999999953F,
-  0.9999999961F, 0.9999999969F, 0.9999999975F, 0.9999999980F,
-  0.9999999985F, 0.9999999988F, 0.9999999991F, 0.9999999993F,
-  0.9999999995F, 0.9999999997F, 0.9999999998F, 0.9999999999F,
-  0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F,
-  1.0000000000F, 1.0000000000F, 1.0000000000F, 1.0000000000F,
-};
-
-static float *vwin[8] = {
-  vwin64,
-  vwin128,
-  vwin256,
-  vwin512,
-  vwin1024,
-  vwin2048,
-  vwin4096,
-  vwin8192,
-};
-
-float *_vorbis_window_get(int n){
-  return vwin[n];
-}
-
-void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
-                          int lW,int W,int nW){
-  lW=(W?lW:0);
-  nW=(W?nW:0);
-
-  {
-    float *windowLW=vwin[winno[lW]];
-    float *windowNW=vwin[winno[nW]];
-
-    long n=blocksizes[W];
-    long ln=blocksizes[lW];
-    long rn=blocksizes[nW];
-
-    long leftbegin=n/4-ln/4;
-    long leftend=leftbegin+ln/2;
-
-    long rightbegin=n/2+n/4-rn/4;
-    long rightend=rightbegin+rn/2;
-
-    int i,p;
-
-    for(i=0;i<leftbegin;i++)
-      d[i]=0.f;
-
-    for(p=0;i<leftend;i++,p++)
-      d[i]*=windowLW[p];
-
-    for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
-      d[i]*=windowNW[p];
-
-    for(;i<n;i++)
-      d[i]=0.f;
-  }
-}
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.h b/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.h
deleted file mode 100644
index 1f7a569..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/window.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: window functions
- last mod: $Id: window.h 13293 2007-07-24 00:09:47Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_WINDOW_
-#define _V_WINDOW_
-
-extern float *_vorbis_window_get(int n);
-extern void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
-                          int lW,int W,int nW);
-
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/ogg.h b/modules/juce_audio_formats/codecs/oggvorbis/ogg.h
deleted file mode 100644
index d9bd13e..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/ogg.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: toplevel libogg include
- last mod: $Id: ogg.h,v 1.1 2007/06/07 17:48:18 jules_rms Exp $
-
- ********************************************************************/
-#ifndef _OGG_H
-#define _OGG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "os_types.h"
-
-typedef struct {
-  long endbyte;
-  int  endbit;
-
-  unsigned char *buffer;
-  unsigned char *ptr;
-  long storage;
-} oggpack_buffer;
-
-/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
-
-typedef struct {
-  unsigned char *header;
-  long header_len;
-  unsigned char *body;
-  long body_len;
-} ogg_page;
-
-
-static inline ogg_uint32_t ogg_bitreverse(ogg_uint32_t x){
-  x=    ((x>>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL);
-  x=    ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL);
-  x=    ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL);
-  x=    ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL);
-  return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL);
-}
-
-
-/* ogg_stream_state contains the current encode/decode state of a logical
-   Ogg bitstream **********************************************************/
-
-typedef struct {
-  unsigned char   *body_data;    /* bytes from packet bodies */
-  long    body_storage;          /* storage elements allocated */
-  long    body_fill;             /* elements stored; fill mark */
-  long    body_returned;         /* elements of fill returned */
-
-
-  int     *lacing_vals;      /* The values that will go to the segment table */
-  ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
-				this way, but it is simple coupled to the
-				lacing fifo */
-  long    lacing_storage;
-  long    lacing_fill;
-  long    lacing_packet;
-  long    lacing_returned;
-
-  unsigned char    header[282];      /* working space for header encode */
-  int              header_fill;
-
-  int     e_o_s;          /* set when we have buffered the last packet in the
-                             logical bitstream */
-  int     b_o_s;          /* set after we've written the initial page
-                             of a logical bitstream */
-  long    serialno;
-  long    pageno;
-  ogg_int64_t  packetno;      /* sequence number for decode; the framing
-                             knows where there's a hole in the data,
-                             but we need coupling so that the codec
-                             (which is in a seperate abstraction
-                             layer) also knows about the gap */
-  ogg_int64_t   granulepos;
-
-} ogg_stream_state;
-
-/* ogg_packet is used to encapsulate the data and metadata belonging
-   to a single raw Ogg/Vorbis packet *************************************/
-
-typedef struct {
-  unsigned char *packet;
-  long  bytes;
-  long  b_o_s;
-  long  e_o_s;
-
-  ogg_int64_t  granulepos;
-
-  ogg_int64_t  packetno;     /* sequence number for decode; the framing
-				knows where there's a hole in the data,
-				but we need coupling so that the codec
-				(which is in a seperate abstraction
-				layer) also knows about the gap */
-} ogg_packet;
-
-typedef struct {
-  unsigned char *data;
-  int storage;
-  int fill;
-  int returned;
-
-  int unsynced;
-  int headerbytes;
-  int bodybytes;
-} ogg_sync_state;
-
-/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
-
-extern void  oggpack_writeinit(oggpack_buffer *b);
-extern void  oggpack_writetrunc(oggpack_buffer *b,long bits);
-extern void  oggpack_writealign(oggpack_buffer *b);
-extern void  oggpack_writecopy(oggpack_buffer *b,void *source,long bits);
-extern void  oggpack_reset(oggpack_buffer *b);
-extern void  oggpack_writeclear(oggpack_buffer *b);
-extern void  oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
-extern void  oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
-extern long  oggpack_look(oggpack_buffer *b,int bits);
-extern long  oggpack_look1(oggpack_buffer *b);
-extern void  oggpack_adv(oggpack_buffer *b,int bits);
-extern void  oggpack_adv1(oggpack_buffer *b);
-extern long  oggpack_read(oggpack_buffer *b,int bits);
-extern long  oggpack_read1(oggpack_buffer *b);
-extern long  oggpack_bytes(oggpack_buffer *b);
-extern long  oggpack_bits(oggpack_buffer *b);
-extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
-
-extern void  oggpackB_writeinit(oggpack_buffer *b);
-extern void  oggpackB_writetrunc(oggpack_buffer *b,long bits);
-extern void  oggpackB_writealign(oggpack_buffer *b);
-extern void  oggpackB_writecopy(oggpack_buffer *b,void *source,long bits);
-extern void  oggpackB_reset(oggpack_buffer *b);
-extern void  oggpackB_writeclear(oggpack_buffer *b);
-extern void  oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
-extern void  oggpackB_write(oggpack_buffer *b,unsigned long value,int bits);
-extern long  oggpackB_look(oggpack_buffer *b,int bits);
-extern long  oggpackB_look1(oggpack_buffer *b);
-extern void  oggpackB_adv(oggpack_buffer *b,int bits);
-extern void  oggpackB_adv1(oggpack_buffer *b);
-extern long  oggpackB_read(oggpack_buffer *b,int bits);
-extern long  oggpackB_read1(oggpack_buffer *b);
-extern long  oggpackB_bytes(oggpack_buffer *b);
-extern long  oggpackB_bits(oggpack_buffer *b);
-extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
-
-/* Ogg BITSTREAM PRIMITIVES: encoding **************************/
-
-extern int      ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
-extern int      ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
-extern int      ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
-
-/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
-
-extern int      ogg_sync_init(ogg_sync_state *oy);
-extern int      ogg_sync_clear(ogg_sync_state *oy);
-extern int      ogg_sync_reset(ogg_sync_state *oy);
-extern int	ogg_sync_destroy(ogg_sync_state *oy);
-
-extern char    *ogg_sync_buffer(ogg_sync_state *oy, long size);
-extern int      ogg_sync_wrote(ogg_sync_state *oy, long bytes);
-extern long     ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
-extern int      ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
-extern int      ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
-extern int      ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
-extern int      ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
-
-/* Ogg BITSTREAM PRIMITIVES: general ***************************/
-
-extern int      ogg_stream_init(ogg_stream_state *os,int serialno);
-extern int      ogg_stream_clear(ogg_stream_state *os);
-extern int      ogg_stream_reset(ogg_stream_state *os);
-extern int      ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
-extern int      ogg_stream_destroy(ogg_stream_state *os);
-extern int      ogg_stream_eos(ogg_stream_state *os);
-
-extern void     ogg_page_checksum_set(ogg_page *og);
-
-extern int      ogg_page_version(ogg_page *og);
-extern int      ogg_page_continued(ogg_page *og);
-extern int      ogg_page_bos(ogg_page *og);
-extern int      ogg_page_eos(ogg_page *og);
-extern ogg_int64_t  ogg_page_granulepos(ogg_page *og);
-extern int      ogg_page_serialno(ogg_page *og);
-extern long     ogg_page_pageno(ogg_page *og);
-extern int      ogg_page_packets(ogg_page *og);
-
-extern void     ogg_packet_clear(ogg_packet *op);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* _OGG_H */
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/os_types.h b/modules/juce_audio_formats/codecs/oggvorbis/os_types.h
deleted file mode 100644
index fa7b49f..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/os_types.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: #ifdef jail to whip a few platforms into the UNIX ideal.
- last mod: $Id: os_types.h,v 1.1 2007/06/07 17:48:18 jules_rms Exp $
-
- ********************************************************************/
-#ifndef _OS_TYPES_H
-#define _OS_TYPES_H
-
-/* make it easy on the folks that want to compile the libs with a
-   different malloc than stdlib */
-#define _ogg_malloc  malloc
-#define _ogg_calloc  calloc
-#define _ogg_realloc realloc
-#define _ogg_free    free
-
-#if defined(_WIN32)
-
-#  if defined(__CYGWIN__)
-#    include <_G_config.h>
-     typedef _G_int64_t ogg_int64_t;
-     typedef _G_int32_t ogg_int32_t;
-     typedef _G_uint32_t ogg_uint32_t;
-     typedef _G_int16_t ogg_int16_t;
-     typedef _G_uint16_t ogg_uint16_t;
-#  elif defined(__MINGW32__)
-     typedef short ogg_int16_t;
-     typedef unsigned short ogg_uint16_t;
-     typedef int ogg_int32_t;
-     typedef unsigned int ogg_uint32_t;
-     typedef long long ogg_int64_t;
-     typedef unsigned long long ogg_uint64_t;
-#  elif defined(__MWERKS__)
-     typedef long long ogg_int64_t;
-     typedef int ogg_int32_t;
-     typedef unsigned int ogg_uint32_t;
-     typedef short ogg_int16_t;
-     typedef unsigned short ogg_uint16_t;
-#  else
-     /* MSVC/Borland */
-     typedef __int64 ogg_int64_t;
-     typedef __int32 ogg_int32_t;
-     typedef unsigned __int32 ogg_uint32_t;
-     typedef __int16 ogg_int16_t;
-     typedef unsigned __int16 ogg_uint16_t;
-#  endif
-
-#elif defined(__MACOS__)
-
-#  include <sys/types.h>
-   typedef SInt16 ogg_int16_t;
-   typedef UInt16 ogg_uint16_t;
-   typedef SInt32 ogg_int32_t;
-   typedef UInt32 ogg_uint32_t;
-   typedef SInt64 ogg_int64_t;
-
-#elif defined(__MACOSX__) /* MacOS X Framework build */
-
-#  include <sys/types.h>
-   typedef int16_t ogg_int16_t;
-   typedef u_int16_t ogg_uint16_t;
-   typedef int32_t ogg_int32_t;
-   typedef u_int32_t ogg_uint32_t;
-   typedef int64_t ogg_int64_t;
-
-#elif defined(__BEOS__)
-
-   /* Be */
-#  include <inttypes.h>
-   typedef int16_t ogg_int16_t;
-   typedef u_int16_t ogg_uint16_t;
-   typedef int32_t ogg_int32_t;
-   typedef u_int32_t ogg_uint32_t;
-   typedef int64_t ogg_int64_t;
-
-#elif defined (__EMX__)
-
-   /* OS/2 GCC */
-   typedef short ogg_int16_t;
-   typedef unsigned short ogg_uint16_t;
-   typedef int ogg_int32_t;
-   typedef unsigned int ogg_uint32_t;
-   typedef long long ogg_int64_t;
-
-#elif defined (DJGPP)
-
-   /* DJGPP */
-   typedef short ogg_int16_t;
-   typedef int ogg_int32_t;
-   typedef unsigned int ogg_uint32_t;
-   typedef long long ogg_int64_t;
-
-#elif defined(R5900)
-
-   /* PS2 EE */
-   typedef long ogg_int64_t;
-   typedef int ogg_int32_t;
-   typedef unsigned ogg_uint32_t;
-   typedef short ogg_int16_t;
-
-#elif defined(__SYMBIAN32__)
-
-   /* Symbian GCC */
-   typedef signed short ogg_int16_t;
-   typedef unsigned short ogg_uint16_t;
-   typedef signed int ogg_int32_t;
-   typedef unsigned int ogg_uint32_t;
-   typedef long long int ogg_int64_t;
-
-#else
-
-#  include <sys/types.h>
-#  include "config_types.h"
-
-#endif
-
-#endif  /* _OS_TYPES_H */
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h b/modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h
deleted file mode 100644
index c7a23f9..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/vorbisenc.h
+++ /dev/null
@@ -1,436 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: vorbis encode-engine setup
- last mod: $Id: vorbisenc.h 17021 2010-03-24 09:29:41Z xiphmont $
-
- ********************************************************************/
-
-/** \file
- * Libvorbisenc is a convenient API for setting up an encoding
- * environment using libvorbis. Libvorbisenc encapsulates the
- * actions needed to set up the encoder properly.
- */
-
-#ifndef _OV_ENC_H_
-#define _OV_ENC_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include "codec.h"
-
-/**
- * This is the primary function within libvorbisenc for setting up managed
- * bitrate modes.
- *
- * Before this function is called, the \ref vorbis_info
- * struct should be initialized by using vorbis_info_init() from the libvorbis
- * API.  After encoding, vorbis_info_clear() should be called.
- *
- * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set
- * constraints for the encoded file.  This function uses these settings to
- * select the appropriate encoding mode and set it up.
- *
- * \param vi               Pointer to an initialized \ref vorbis_info struct.
- * \param channels         The number of channels to be encoded.
- * \param rate             The sampling rate of the source audio.
- * \param max_bitrate      Desired maximum bitrate (limit). -1 indicates unset.
- * \param nominal_bitrate  Desired average, or central, bitrate. -1 indicates unset.
- * \param min_bitrate      Desired minimum bitrate. -1 indicates unset.
- *
- * \return Zero for success, and negative values for failure.
- *
- * \retval 0          Success.
- * \retval OV_EFAULT  Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL  Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL   Unimplemented mode; unable to comply with bitrate request.
- */
-extern int vorbis_encode_init(vorbis_info *vi,
-                              long channels,
-                              long rate,
-
-                              long max_bitrate,
-                              long nominal_bitrate,
-                              long min_bitrate);
-
-/**
- * This function performs step-one of a three-step bitrate-managed encode
- * setup.  It functions similarly to the one-step setup performed by \ref
- * vorbis_encode_init but allows an application to make further encode setup
- * tweaks using \ref vorbis_encode_ctl before finally calling \ref
- * vorbis_encode_setup_init to complete the setup process.
- *
- * Before this function is called, the \ref vorbis_info struct should be
- * initialized by using vorbis_info_init() from the libvorbis API.  After
- * encoding, vorbis_info_clear() should be called.
- *
- * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set
- * constraints for the encoded file.  This function uses these settings to
- * select the appropriate encoding mode and set it up.
- *
- * \param vi                Pointer to an initialized vorbis_info struct.
- * \param channels          The number of channels to be encoded.
- * \param rate              The sampling rate of the source audio.
- * \param max_bitrate       Desired maximum bitrate (limit). -1 indicates unset.
- * \param nominal_bitrate   Desired average, or central, bitrate. -1 indicates unset.
- * \param min_bitrate       Desired minimum bitrate. -1 indicates unset.
- *
- * \return Zero for success, and negative for failure.
- *
- * \retval 0           Success
- * \retval OV_EFAULT   Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL   Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL    Unimplemented mode; unable to comply with bitrate request.
- */
-extern int vorbis_encode_setup_managed(vorbis_info *vi,
-                                       long channels,
-                                       long rate,
-
-                                       long max_bitrate,
-                                       long nominal_bitrate,
-                                       long min_bitrate);
-
-/**
- * This function performs step-one of a three-step variable bitrate
- * (quality-based) encode setup.  It functions similarly to the one-step setup
- * performed by \ref vorbis_encode_init_vbr() but allows an application to
- * make further encode setup tweaks using \ref vorbis_encode_ctl() before
- * finally calling \ref vorbis_encode_setup_init to complete the setup
- * process.
- *
- * Before this function is called, the \ref vorbis_info struct should be
- * initialized by using \ref vorbis_info_init() from the libvorbis API.  After
- * encoding, vorbis_info_clear() should be called.
- *
- * \param vi        Pointer to an initialized vorbis_info struct.
- * \param channels  The number of channels to be encoded.
- * \param rate      The sampling rate of the source audio.
- * \param quality   Desired quality level, currently from -0.1 to 1.0 (lo to hi).
- *
- * \return Zero for success, and negative values for failure.
- *
- * \retval  0          Success
- * \retval  OV_EFAULT  Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval  OV_EINVAL  Invalid setup request, eg, out of range argument.
- * \retval  OV_EIMPL   Unimplemented mode; unable to comply with quality level request.
- */
-extern int vorbis_encode_setup_vbr(vorbis_info *vi,
-                                  long channels,
-                                  long rate,
-
-                                  float quality
-                                  );
-
-/**
- * This is the primary function within libvorbisenc for setting up variable
- * bitrate ("quality" based) modes.
- *
- *
- * Before this function is called, the vorbis_info struct should be
- * initialized by using vorbis_info_init() from the libvorbis API. After
- * encoding, vorbis_info_clear() should be called.
- *
- * \param vi           Pointer to an initialized vorbis_info struct.
- * \param channels     The number of channels to be encoded.
- * \param rate         The sampling rate of the source audio.
- * \param base_quality Desired quality level, currently from -0.1 to 1.0 (lo to hi).
- *
- *
- * \return Zero for success, or a negative number for failure.
- *
- * \retval 0           Success
- * \retval OV_EFAULT   Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL   Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL    Unimplemented mode; unable to comply with quality level request.
- */
-extern int vorbis_encode_init_vbr(vorbis_info *vi,
-                                  long channels,
-                                  long rate,
-
-                                  float base_quality
-                                  );
-
-/**
- * This function performs the last stage of three-step encoding setup, as
- * described in the API overview under managed bitrate modes.
- *
- * Before this function is called, the \ref vorbis_info struct should be
- * initialized by using vorbis_info_init() from the libvorbis API, one of
- * \ref vorbis_encode_setup_managed() or \ref vorbis_encode_setup_vbr() called to
- * initialize the high-level encoding setup, and \ref vorbis_encode_ctl()
- * called if necessary to make encoding setup changes.
- * vorbis_encode_setup_init() finalizes the highlevel encoding structure into
- * a complete encoding setup after which the application may make no further
- * setup changes.
- *
- * After encoding, vorbis_info_clear() should be called.
- *
- * \param vi Pointer to an initialized \ref vorbis_info struct.
- *
- * \return Zero for success, and negative values for failure.
- *
- * \retval  0           Success.
- * \retval  OV_EFAULT  Internal logic fault; indicates a bug or heap/stack corruption.
- *
- * \retval OV_EINVAL   Attempt to use vorbis_encode_setup_init() without first
- * calling one of vorbis_encode_setup_managed() or vorbis_encode_setup_vbr() to
- * initialize the high-level encoding setup
- *
- */
-extern int vorbis_encode_setup_init(vorbis_info *vi);
-
-/**
- * This function implements a generic interface to miscellaneous encoder
- * settings similar to the classic UNIX 'ioctl()' system call.  Applications
- * may use vorbis_encode_ctl() to query or set bitrate management or quality
- * mode details by using one of several \e request arguments detailed below.
- * vorbis_encode_ctl() must be called after one of
- * vorbis_encode_setup_managed() or vorbis_encode_setup_vbr().  When used
- * to modify settings, \ref vorbis_encode_ctl() must be called before \ref
- * vorbis_encode_setup_init().
- *
- * \param vi      Pointer to an initialized vorbis_info struct.
- *
- * \param number Specifies the desired action; See \ref encctlcodes "the list
- * of available requests".
- *
- * \param arg void * pointing to a data structure matching the request
- * argument.
- *
- * \retval 0          Success. Any further return information (such as the result of a
- * query) is placed into the storage pointed to by *arg.
- *
- * \retval OV_EINVAL  Invalid argument, or an attempt to modify a setting after
- * calling vorbis_encode_setup_init().
- *
- * \retval OV_EIMPL   Unimplemented or unknown request
- */
-extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg);
-
-/**
- * \deprecated This is a deprecated interface. Please use vorbis_encode_ctl()
- * with the \ref ovectl_ratemanage2_arg struct and \ref
- * OV_ECTL_RATEMANAGE2_GET and \ref OV_ECTL_RATEMANAGE2_SET calls in new code.
- *
- * The \ref ovectl_ratemanage_arg structure is used with vorbis_encode_ctl()
- * and the \ref OV_ECTL_RATEMANAGE_GET, \ref OV_ECTL_RATEMANAGE_SET, \ref
- * OV_ECTL_RATEMANAGE_AVG, \ref OV_ECTL_RATEMANAGE_HARD calls in order to
- * query and modify specifics of the encoder's bitrate management
- * configuration.
-*/
-struct ovectl_ratemanage_arg {
-  int    management_active; /**< nonzero if bitrate management is active*/
-/** hard lower limit (in kilobits per second) below which the stream bitrate
-    will never be allowed for any given bitrate_hard_window seconds of time.*/
-  long   bitrate_hard_min;
-/** hard upper limit (in kilobits per second) above which the stream bitrate
-    will never be allowed for any given bitrate_hard_window seconds of time.*/
-  long   bitrate_hard_max;
-/** the window period (in seconds) used to regulate the hard bitrate minimum
-    and maximum*/
-  double bitrate_hard_window;
-/** soft lower limit (in kilobits per second) below which the average bitrate
-    tracker will start nudging the bitrate higher.*/
-  long   bitrate_av_lo;
-/** soft upper limit (in kilobits per second) above which the average bitrate
-    tracker will start nudging the bitrate lower.*/
-  long   bitrate_av_hi;
-/** the window period (in seconds) used to regulate the average bitrate
-    minimum and maximum.*/
-  double bitrate_av_window;
-/** Regulates the relative centering of the average and hard windows; in
-    libvorbis 1.0 and 1.0.1, the hard window regulation overlapped but
-    followed the average window regulation. In libvorbis 1.1 a bit-reservoir
-    interface replaces the old windowing interface; the older windowing
-    interface is simulated and this field has no effect.*/
-  double bitrate_av_window_center;
-};
-
-/**
- * \name struct ovectl_ratemanage2_arg
- *
- * The ovectl_ratemanage2_arg structure is used with vorbis_encode_ctl() and
- * the OV_ECTL_RATEMANAGE2_GET and OV_ECTL_RATEMANAGE2_SET calls in order to
- * query and modify specifics of the encoder's bitrate management
- * configuration.
- *
-*/
-struct ovectl_ratemanage2_arg {
-  int    management_active; /**< nonzero if bitrate management is active */
-/** Lower allowed bitrate limit in kilobits per second */
-  long   bitrate_limit_min_kbps;
-/** Upper allowed bitrate limit in kilobits per second */
-  long   bitrate_limit_max_kbps;
-  long   bitrate_limit_reservoir_bits; /**<Size of the bitrate reservoir in bits */
-/** Regulates the bitrate reservoir's preferred fill level in a range from 0.0
- * to 1.0; 0.0 tries to bank bits to buffer against future bitrate spikes, 1.0
- * buffers against future sudden drops in instantaneous bitrate. Default is
- * 0.1
- */
-  double bitrate_limit_reservoir_bias;
-/** Average bitrate setting in kilobits per second */
-  long   bitrate_average_kbps;
-/** Slew rate limit setting for average bitrate adjustment; sets the minimum
- *  time in seconds the bitrate tracker may swing from one extreme to the
- *  other when boosting or damping average bitrate.
- */
-  double bitrate_average_damping;
-};
-
-
-/**
- * \name vorbis_encode_ctl() codes
- *
- * \anchor encctlcodes
- *
- * These values are passed as the \c number parameter of vorbis_encode_ctl().
- * The type of the referent of that function's \c arg pointer depends on these
- * codes.
- */
-/*@{*/
-
-/**
- * Query the current encoder bitrate management setting.
- *
- *Argument: <tt>struct ovectl_ratemanage2_arg *</tt>
- *
- * Used to query the current encoder bitrate management setting. Also used to
- * initialize fields of an ovectl_ratemanage2_arg structure for use with
- * \ref OV_ECTL_RATEMANAGE2_SET.
- */
-#define OV_ECTL_RATEMANAGE2_GET      0x14
-
-/**
- * Set the current encoder bitrate management settings.
- *
- * Argument: <tt>struct ovectl_ratemanage2_arg *</tt>
- *
- * Used to set the current encoder bitrate management settings to the values
- * listed in the ovectl_ratemanage2_arg. Passing a NULL pointer will disable
- * bitrate management.
-*/
-#define OV_ECTL_RATEMANAGE2_SET      0x15
-
-/**
- * Returns the current encoder hard-lowpass setting (kHz) in the double
- * pointed to by arg.
- *
- * Argument: <tt>double *</tt>
-*/
-#define OV_ECTL_LOWPASS_GET          0x20
-
-/**
- *  Sets the encoder hard-lowpass to the value (kHz) pointed to by arg. Valid
- *  lowpass settings range from 2 to 99.
- *
- * Argument: <tt>double *</tt>
-*/
-#define OV_ECTL_LOWPASS_SET          0x21
-
-/**
- *  Returns the current encoder impulse block setting in the double pointed
- *  to by arg.
- *
- * Argument: <tt>double *</tt>
-*/
-#define OV_ECTL_IBLOCK_GET           0x30
-
-/**
- *  Sets the impulse block bias to the the value pointed to by arg.
- *
- * Argument: <tt>double *</tt>
- *
- *  Valid range is -15.0 to 0.0 [default]. A negative impulse block bias will
- *  direct to encoder to use more bits when incoding short blocks that contain
- *  strong impulses, thus improving the accuracy of impulse encoding.
- */
-#define OV_ECTL_IBLOCK_SET           0x31
-
-/**
- *  Returns the current encoder coupling setting in the int pointed
- *  to by arg.
- *
- * Argument: <tt>int *</tt>
-*/
-#define OV_ECTL_COUPLING_GET         0x40
-
-/**
- *  Enables/disables channel coupling in multichannel encoding according to arg.
- *
- * Argument: <tt>int *</tt>
- *
- *  Zero disables channel coupling for multichannel inputs, nonzer enables
- *  channel coupling.  Setting has no effect on monophonic encoding or
- *  multichannel counts that do not offer coupling.  At present, coupling is
- *  available for stereo and 5.1 encoding.
- */
-#define OV_ECTL_COUPLING_SET         0x41
-
-  /* deprecated rate management supported only for compatibility */
-
-/**
- * Old interface to querying bitrate management settings.
- *
- * Deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
-
- * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_GET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_GET       0x10
-/**
- * Old interface to modifying bitrate management settings.
- *
- *  deprecated after move to bit-reservoir style management in 1.1 rendered
- *  this interface partially obsolete.
- *
- * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_SET       0x11
-/**
- * Old interface to setting average-bitrate encoding mode.
- *
- * Deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
- *
- *  \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_AVG       0x12
-/**
- * Old interface to setting bounded-bitrate encoding modes.
- *
- * deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
- *
- *  \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_HARD      0x13
-
-/*@}*/
-
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
diff --git a/modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h b/modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h
deleted file mode 100644
index ee6e3f7..0000000
--- a/modules/juce_audio_formats/codecs/oggvorbis/vorbisfile.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/********************************************************************
- *                                                                  *
- * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
- *                                                                  *
- * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
- * by the Xiph.Org Foundation http://www.xiph.org/                  *
- *                                                                  *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.h 17182 2010-04-29 03:48:32Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _OV_FILE_H_
-#define _OV_FILE_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include <stdio.h>
-#include "codec.h"
-
-/* The function prototypes for the callbacks are basically the same as for
- * the stdio functions fread, fseek, fclose, ftell.
- * The one difference is that the FILE * arguments have been replaced with
- * a void * - this is to be used as a pointer to whatever internal data these
- * functions might need. In the stdio case, it's just a FILE * cast to a void *
- *
- * If you use other functions, check the docs for these functions and return
- * the right values. For seek_func(), you *MUST* return -1 if the stream is
- * unseekable
- */
-typedef struct {
-  size_t (*read_func)  (void *ptr, size_t size, size_t nmemb, void *datasource);
-  int    (*seek_func)  (void *datasource, ogg_int64_t offset, int whence);
-  int    (*close_func) (void *datasource);
-  long   (*tell_func)  (void *datasource);
-} ov_callbacks;
-
-#ifndef OV_EXCLUDE_STATIC_CALLBACKS
-
-/* a few sets of convenient callbacks, especially for use under
- * Windows where ov_open_callbacks() should always be used instead of
- * ov_open() to avoid problems with incompatible crt.o version linking
- * issues. */
-
-/*static int _ov_header_fseek_wrap(FILE *f,ogg_int64_t off,int whence){
-  if(f==NULL)return(-1);
-
-#ifdef __MINGW32__
-  return fseeko64(f,off,whence);
-#elif defined (_WIN32)
-  return _fseeki64(f,off,whence);
-#else
-  return fseek(f,off,whence);
-#endif
-}*/
-
-/* These structs below (OV_CALLBACKS_DEFAULT etc) are defined here as
- * static data. That means that every file which includes this header
- * will get its own copy of these structs whether it uses them or
- * not unless it #defines OV_EXCLUDE_STATIC_CALLBACKS.
- * These static symbols are essential on platforms such as Windows on
- * which several different versions of stdio support may be linked to
- * by different DLLs, and we need to be certain we know which one
- * we're using (the same one as the main application).
- */
-
-/*static ov_callbacks OV_CALLBACKS_DEFAULT = {
-  (size_t (*)(void *, size_t, size_t, void *))  fread,
-  (int (*)(void *, ogg_int64_t, int))           _ov_header_fseek_wrap,
-  (int (*)(void *))                             fclose,
-  (long (*)(void *))                            ftell
-};
-
-static ov_callbacks OV_CALLBACKS_NOCLOSE = {
-  (size_t (*)(void *, size_t, size_t, void *))  fread,
-  (int (*)(void *, ogg_int64_t, int))           _ov_header_fseek_wrap,
-  (int (*)(void *))                             NULL,
-  (long (*)(void *))                            ftell
-};
-
-static ov_callbacks OV_CALLBACKS_STREAMONLY = {
-  (size_t (*)(void *, size_t, size_t, void *))  fread,
-  (int (*)(void *, ogg_int64_t, int))           NULL,
-  (int (*)(void *))                             fclose,
-  (long (*)(void *))                            NULL
-};
-
-static ov_callbacks OV_CALLBACKS_STREAMONLY_NOCLOSE = {
-  (size_t (*)(void *, size_t, size_t, void *))  fread,
-  (int (*)(void *, ogg_int64_t, int))           NULL,
-  (int (*)(void *))                             NULL,
-  (long (*)(void *))                            NULL
-};*/
-
-#endif
-
-#define  NOTOPEN   0
-#define  PARTOPEN  1
-#define  OPENED    2
-#define  STREAMSET 3
-#define  INITSET   4
-
-typedef struct OggVorbis_File {
-  void            *datasource; /* Pointer to a FILE *, etc. */
-  int              seekable;
-  ogg_int64_t      offset;
-  ogg_int64_t      end;
-  ogg_sync_state   oy;
-
-  /* If the FILE handle isn't seekable (eg, a pipe), only the current
-     stream appears */
-  int              links;
-  ogg_int64_t     *offsets;
-  ogg_int64_t     *dataoffsets;
-  long            *serialnos;
-  ogg_int64_t     *pcmlengths; /* overloaded to maintain binary
-                                  compatibility; x2 size, stores both
-                                  beginning and end values */
-  vorbis_info     *vi;
-  vorbis_comment  *vc;
-
-  /* Decoding working state local storage */
-  ogg_int64_t      pcm_offset;
-  int              ready_state;
-  long             current_serialno;
-  int              current_link;
-
-  double           bittrack;
-  double           samptrack;
-
-  ogg_stream_state os; /* take physical pages, weld into a logical
-                          stream of packets */
-  vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
-  vorbis_block     vb; /* local working space for packet->PCM decode */
-
-  ov_callbacks callbacks;
-
-} OggVorbis_File;
-
-
-extern int ov_clear(OggVorbis_File *vf);
-extern int ov_fopen(const char *path,OggVorbis_File *vf);
-extern int ov_open(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes);
-extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
-                const char *initial, long ibytes, ov_callbacks callbacks);
-
-extern int ov_test(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes);
-extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
-                const char *initial, long ibytes, ov_callbacks callbacks);
-extern int ov_test_open(OggVorbis_File *vf);
-
-extern long ov_bitrate(OggVorbis_File *vf,int i);
-extern long ov_bitrate_instant(OggVorbis_File *vf);
-extern long ov_streams(OggVorbis_File *vf);
-extern long ov_seekable(OggVorbis_File *vf);
-extern long ov_serialnumber(OggVorbis_File *vf,int i);
-
-extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
-extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
-extern double ov_time_total(OggVorbis_File *vf,int i);
-
-extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_time_seek(OggVorbis_File *vf,double pos);
-extern int ov_time_seek_page(OggVorbis_File *vf,double pos);
-
-extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_time_seek_lap(OggVorbis_File *vf,double pos);
-extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos);
-
-extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
-extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
-extern double ov_time_tell(OggVorbis_File *vf);
-
-extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
-extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
-
-extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples,
-                          int *bitstream);
-extern long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
-                          int bigendianp,int word,int sgned,int *bitstream,
-                          void (*filter)(float **pcm,long channels,long samples,void *filter_param),void *filter_param);
-extern long ov_read(OggVorbis_File *vf,char *buffer,int length,
-                    int bigendianp,int word,int sgned,int *bitstream);
-extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2);
-
-extern int ov_halfrate(OggVorbis_File *vf,int flag);
-extern int ov_halfrate_p(OggVorbis_File *vf);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/AUResources.r b/modules/juce_audio_plugin_client/AU/AUResources.r
deleted file mode 100644
index 55040fc..0000000
--- a/modules/juce_audio_plugin_client/AU/AUResources.r
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-     File: AUResources.r
- Abstract: AUResources.r
-  Version: 1.1
- 
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
- 
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
- 
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
- 
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
- 
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
- 
-*/
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//	AUResources.r
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-
-/* sample macro definitions -- all of these symbols must be defined
-#define RES_ID			kHALOutputResID
-#define COMP_TYPE		kAudioUnitComponentType
-#define COMP_SUBTYPE	kAudioUnitOutputSubType
-#define COMP_MANUF		kAudioUnitAudioHardwareOutputSubSubType
-#define VERSION			0x00010000
-#define NAME			"AudioHALOutput"
-#define DESCRIPTION		"Audio hardware output AudioUnit"
-#define ENTRY_POINT		"AUHALEntry"
-*/
-#define UseExtendedThingResource 1
-
-#include <CoreServices/CoreServices.r>
-
-// this is a define used to indicate that a component has no static data that would mean 
-// that no more than one instance could be open at a time - never been true for AUs
-#ifndef cmpThreadSafeOnMac
-#define cmpThreadSafeOnMac	0x10000000
-#endif
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-resource 'STR ' (RES_ID, purgeable) {
-	NAME
-};
-
-resource 'STR ' (RES_ID + 1, purgeable) {
-	DESCRIPTION
-};
-
-resource 'dlle' (RES_ID) {
-	ENTRY_POINT
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-resource 'thng' (RES_ID, NAME) {
-	COMP_TYPE,
-	COMP_SUBTYPE,
-	COMP_MANUF,
-	0, 0, 0, 0,								//	no 68K
-	'STR ',	RES_ID,
-	'STR ',	RES_ID + 1,
-	0,	0,			/* icon */
-	VERSION,
-	componentHasMultiplePlatforms | componentDoAutoVersion,
-	0,
-	{
-	#if defined(ppc_YES)
-			cmpThreadSafeOnMac,
-			'dlle', RES_ID, platformPowerPCNativeEntryPoint
-			#define NeedLeadingComma 1
-	#endif
-	#if defined(ppc64_YES)
-		#if defined(NeedLeadingComma)
-			,
-		#endif
-			cmpThreadSafeOnMac,
-			'dlle', RES_ID, platformPowerPC64NativeEntryPoint
-			#define NeedLeadingComma 1
-	#endif
-	#if defined(i386_YES)
-		#if defined(NeedLeadingComma)
-			,
-		#endif
-			cmpThreadSafeOnMac,
-			'dlle', RES_ID, platformIA32NativeEntryPoint
-			#define NeedLeadingComma 1
-	#endif
-	#if defined(x86_64_YES)
-		#if defined(NeedLeadingComma)
-			,
-		#endif
-			cmpThreadSafeOnMac,
-			'dlle', RES_ID, 8
-			#define NeedLeadingComma 1
-	#endif
-	}
-};
-
-#undef RES_ID
-#undef COMP_TYPE
-#undef COMP_SUBTYPE
-#undef COMP_MANUF
-#undef VERSION
-#undef NAME
-#undef DESCRIPTION
-#undef ENTRY_POINT
-#undef NeedLeadingComma
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp
deleted file mode 100644
index 70791f6..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp
+++ /dev/null
@@ -1,2400 +0,0 @@
-/*
-     File: AUBase.cpp
- Abstract: AUBase.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUBase.h"
-#include "AUDispatch.h"
-#include "AUInputElement.h"
-#include "AUOutputElement.h"
-#include <algorithm>
-#include <syslog.h>
-#include "CAAudioChannelLayout.h"
-#include "CAHostTimeBase.h"
-#include "CAVectorUnit.h"
-#include "CAXException.h"
-
-// This is for JUCE, added as a workaround for problems in older hosts following an API change.
-struct OldHostCallbackInfo
-{
-    void* hostUserData;
-    HostCallback_GetBeatAndTempo beatAndTempoProc;
-    HostCallback_GetMusicalTimeLocation musicalTimeLocationProc;
-    HostCallback_GetTransportState transportStateProc;
-};
-
-
-#if TARGET_OS_MAC && (TARGET_CPU_X86 || TARGET_CPU_X86_64)
-	// our compiler does ALL floating point with SSE
-	inline int  GETCSR ()    { int _result; asm volatile ("stmxcsr %0" : "=m" (*&_result) ); return _result; }
-	inline void SETCSR (int a)    { int _temp = a; asm volatile( "ldmxcsr %0" : : "m" (*&_temp ) ); }
-
-	#define DISABLE_DENORMALS int _savemxcsr = GETCSR(); SETCSR(_savemxcsr | 0x8040);
-	#define RESTORE_DENORMALS SETCSR(_savemxcsr);
-#else
-	#define DISABLE_DENORMALS
-	#define RESTORE_DENORMALS
-#endif
-
-static bool sAUBaseCFStringsInitialized = false;
-// this is used for the presets
-static CFStringRef kUntitledString = NULL;
-//these are the current keys for the class info document
-static CFStringRef kVersionString = NULL;
-static CFStringRef kTypeString = NULL;
-static CFStringRef kSubtypeString = NULL;
-static CFStringRef kManufacturerString = NULL;
-static CFStringRef kDataString = NULL;
-static CFStringRef kNameString = NULL;
-static CFStringRef kRenderQualityString = NULL;
-static CFStringRef kCPULoadString = NULL;
-static CFStringRef kElementNameString = NULL;
-static CFStringRef kPartString = NULL;
-
-SInt32 AUBase::sVectorUnitType = kVecUninitialized;
-
-//_____________________________________________________________________________
-//
-AUBase::AUBase(	AudioComponentInstance			inInstance,
-				UInt32							numInputElements,
-				UInt32							numOutputElements,
-				UInt32							numGroupElements) :
-	ComponentBase(inInstance),
-	mElementsCreated(false),
-	mInitialized(false),
-	mHasBegunInitializing(false),
-	mInitNumInputEls(numInputElements), mInitNumOutputEls(numOutputElements),
-#if !CA_BASIC_AU_FEATURES
-	mInitNumGroupEls(numGroupElements),
-#endif
-	mRenderCallbacksTouched(false),
-	mRenderThreadID (NULL),
-	mWantsRenderThreadID (false),
-	mLastRenderError(0),
-	mUsesFixedBlockSize(false),
-	mBuffersAllocated(false),
-	mLogString (NULL),
-    mNickName (NULL),
-	mAUMutex(NULL)
-	#if !CA_NO_AU_UI_FEATURES
-		,
-		mContextName(NULL)
-	#endif
-{
-	ResetRenderTime ();
-
-	if(!sAUBaseCFStringsInitialized)
-	{
-		kUntitledString = CFSTR("Untitled");
-		kVersionString = CFSTR(kAUPresetVersionKey);
-		kTypeString = CFSTR(kAUPresetTypeKey);
-		kSubtypeString = CFSTR(kAUPresetSubtypeKey);
-		kManufacturerString = CFSTR(kAUPresetManufacturerKey);
-		kDataString = CFSTR(kAUPresetDataKey);
-		kNameString = CFSTR(kAUPresetNameKey);
-		kRenderQualityString = CFSTR(kAUPresetRenderQualityKey);
-		kCPULoadString = CFSTR(kAUPresetCPULoadKey);
-		kElementNameString = CFSTR(kAUPresetElementNameKey);
-		kPartString = CFSTR(kAUPresetPartKey);
-		sAUBaseCFStringsInitialized = true;
-	}
-
-	if (sVectorUnitType == kVecUninitialized) {
-		sVectorUnitType = CAVectorUnit::GetVectorUnitType() ;
-	}
-
-	mAudioUnitAPIVersion = 2;
-
-	SetMaxFramesPerSlice(kAUDefaultMaxFramesPerSlice);
-
-	GlobalScope().Initialize(this, kAudioUnitScope_Global, 1);
-
-#if !CA_NO_AU_UI_FEATURES
-	memset (&mHostCallbackInfo, 0, sizeof (mHostCallbackInfo));
-#endif
-
-
-	mCurrentPreset.presetNumber = -1;
-	mCurrentPreset.presetName = kUntitledString;
-	CFRetain (mCurrentPreset.presetName);
-}
-
-//_____________________________________________________________________________
-//
-AUBase::~AUBase()
-{
-	if (mCurrentPreset.presetName) CFRelease (mCurrentPreset.presetName);
-#if !CA_NO_AU_UI_FEATURES
-	if (mContextName) CFRelease (mContextName);
-#endif
-	if (mLogString) delete [] mLogString;
-    if (mNickName) CFRelease(mNickName);
-}
-
-//_____________________________________________________________________________
-//
-void	AUBase::CreateElements()
-{
-	if (!mElementsCreated) {
-		Inputs().Initialize(this, kAudioUnitScope_Input, mInitNumInputEls);
-		Outputs().Initialize(this, kAudioUnitScope_Output, mInitNumOutputEls);
-#if !CA_BASIC_AU_FEATURES
-		Groups().Initialize(this, kAudioUnitScope_Group, mInitNumGroupEls);
-#endif
-		CreateExtendedElements();
-
-		mElementsCreated = true;
-	}
-}
-
-//_____________________________________________________________________________
-//
-void	AUBase::SetMaxFramesPerSlice(UInt32 nFrames)
-{
-	mMaxFramesPerSlice = nFrames;
-	if (mBuffersAllocated)
-		ReallocateBuffers();
-	PropertyChanged(kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0);
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::CanSetMaxFrames() const
-{
-	return IsInitialized() ? kAudioUnitErr_Initialized : OSStatus(noErr);
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::ReallocateBuffers()
-{
-	CreateElements();
-
-	UInt32 nOutputs = Outputs().GetNumberOfElements();
-	for (UInt32 i = 0; i < nOutputs; ++i) {
-		AUOutputElement *output = GetOutput(i);
-		output->AllocateBuffer();	// does no work if already allocated
-	}
-	UInt32 nInputs = Inputs().GetNumberOfElements();
-	for (UInt32 i = 0; i < nInputs; ++i) {
-		AUInputElement *input = GetInput(i);
-		input->AllocateBuffer();	// does no work if already allocated
-	}
-	mBuffersAllocated = true;
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::DeallocateIOBuffers()
-{
-	if (!mBuffersAllocated)
-		return;
-
-	UInt32 nOutputs = Outputs().GetNumberOfElements();
-	for (UInt32 i = 0; i < nOutputs; ++i) {
-		AUOutputElement *output = GetOutput(i);
-		output->DeallocateBuffer();
-	}
-	UInt32 nInputs = Inputs().GetNumberOfElements();
-	for (UInt32 i = 0; i < nInputs; ++i) {
-		AUInputElement *input = GetInput(i);
-		input->DeallocateBuffer();
-	}
-	mBuffersAllocated = false;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::DoInitialize()
-{
-	OSStatus result = noErr;
-
-	if (!mInitialized) {
-		result = Initialize();
-		if (result == noErr) {
-			if (CanScheduleParameters())
-				mParamList.reserve(24);
-			mHasBegunInitializing = true;
-			ReallocateBuffers();	// calls CreateElements()
-			mInitialized = true;	// signal that it's okay to render
-			CAMemoryBarrier();
-		}
-	}
-
-	return result;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::Initialize()
-{
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::PreDestructor()
-{
-	// this is called from the ComponentBase dispatcher, which doesn't know anything about our (optional) lock
-	CAMutex::Locker lock(mAUMutex);
-	DoCleanup();
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::DoCleanup()
-{
-	if (mInitialized)
-		Cleanup();
-
-	DeallocateIOBuffers();
-	ResetRenderTime ();
-
-	mInitialized = false;
-	mHasBegunInitializing = false;
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::Cleanup()
-{
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::Reset(					AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement)
-{
-	ResetRenderTime ();
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::DispatchGetPropertyInfo(AudioUnitPropertyID				inID,
-													AudioUnitScope					inScope,
-													AudioUnitElement				inElement,
-													UInt32 &						outDataSize,
-													Boolean &						outWritable)
-{
-	OSStatus result = noErr;
-	bool validateElement = true;
-
-	switch (inID) {
-	case kAudioUnitProperty_MakeConnection:
-		ca_require(inScope == kAudioUnitScope_Input || inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(AudioUnitConnection);
-		outWritable = true;
-		break;
-
-
-	case kAudioUnitProperty_SetRenderCallback:
-		ca_require(AudioUnitAPIVersion() > 1, InvalidProperty);
-		ca_require(inScope == kAudioUnitScope_Input || inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(AURenderCallbackStruct);
-		outWritable = true;
-		break;
-
-	case kAudioUnitProperty_StreamFormat:
-		outDataSize = sizeof(CAStreamBasicDescription);
-		outWritable = IsStreamFormatWritable(inScope, inElement);
-		break;
-
-	case kAudioUnitProperty_SampleRate:
-		outDataSize = sizeof(Float64);
-		outWritable = IsStreamFormatWritable(inScope, inElement);
-		break;
-
-	case kAudioUnitProperty_ClassInfo:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(CFPropertyListRef);
-		outWritable = true;
-		break;
-
-	case kAudioUnitProperty_FactoryPresets:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		result = GetPresets(NULL);
-		if (!result) {
-			outDataSize = sizeof(CFArrayRef);
-			outWritable = false;
-		}
-		break;
-
-	case kAudioUnitProperty_PresentPreset:
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-#ifndef __LP64__
-	case kAudioUnitProperty_CurrentPreset:
-#endif
-#endif
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(AUPreset);
-		outWritable = true;
-		break;
-
-	case kAudioUnitProperty_ElementName:
-		outDataSize = sizeof (CFStringRef);
-		outWritable = true;
-		break;
-
-	case kAudioUnitProperty_ParameterList:
-		{
-			UInt32 nparams = 0;
-			result = GetParameterList(inScope, NULL, nparams);
-
-			outDataSize = sizeof(AudioUnitParameterID) * nparams;
-			outWritable = false;
-			validateElement = false;
-		}
-		break;
-
-	case kAudioUnitProperty_ParameterInfo:
-		outDataSize = sizeof(AudioUnitParameterInfo);
-		outWritable = false;
-		validateElement = false;
-		break;
-
-	case kAudioUnitProperty_ParameterHistoryInfo:
-		outDataSize = sizeof(AudioUnitParameterHistoryInfo);
-		outWritable = false;
-		validateElement = false;
-		break;
-
-	case kAudioUnitProperty_ElementCount:
-		outDataSize = sizeof(UInt32);
-		outWritable = BusCountWritable(inScope);
-		validateElement = false;
-		break;
-
-	case kAudioUnitProperty_Latency:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(Float64);
-		outWritable = false;
-		break;
-
-	case kAudioUnitProperty_TailTime:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		if (SupportsTail()) {
-			outDataSize = sizeof(Float64);
-			outWritable = false;
-		} else
-			goto InvalidProperty;
-		break;
-
-	case kAudioUnitProperty_MaximumFramesPerSlice:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(UInt32);
-		outWritable = true;
-		break;
-
-	case kAudioUnitProperty_LastRenderError:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(OSStatus);
-		outWritable = false;
-		break;
-
-	case kAudioUnitProperty_SupportedNumChannels:
-	{
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		UInt32 num = SupportedNumChannels (NULL);
-		if (num) {
-			outDataSize = sizeof (AUChannelInfo) * num;
-			result = noErr;
-		} else
-			goto InvalidProperty;
-		outWritable = false;
-		break;
-	}
-
-	case kAudioUnitProperty_SupportedChannelLayoutTags:
-	{
-		UInt32 numLayouts = GetChannelLayoutTags(inScope, inElement, NULL);
-		if (numLayouts) {
-			outDataSize = numLayouts * sizeof(AudioChannelLayoutTag);
-			result = noErr;
-		} else
-			goto InvalidProperty;
-		outWritable = false;
-		validateElement = false; //already done it
-		break;
-	}
-
-	case kAudioUnitProperty_AudioChannelLayout:
-	{
-		outWritable = false;
-		outDataSize = GetAudioChannelLayout(inScope, inElement, NULL, outWritable);
-		if (outDataSize) {
-			result = noErr;
-		} else {
-			if (GetChannelLayoutTags(inScope, inElement, NULL) == 0)
-				goto InvalidProperty;
-			else
-				result = kAudioUnitErr_InvalidPropertyValue;
-		}
-		validateElement = false; //already done it
-		break;
-	}
-
-#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5) || TARGET_OS_IPHONE
-	case kAudioUnitProperty_ShouldAllocateBuffer:
-		ca_require((inScope == kAudioUnitScope_Input || inScope == kAudioUnitScope_Output), InvalidScope);
-		outWritable = true;
-		outDataSize = sizeof(UInt32);
-		break;
-#endif
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	case kAudioUnitProperty_FastDispatch:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		if (!IsCMgrObject()) goto InvalidProperty;
-		outDataSize = sizeof(void *);
-		outWritable = false;
-		validateElement = false;
-		break;
-
-	case kAudioUnitProperty_GetUIComponentList:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = GetNumCustomUIComponents();
-		if (outDataSize == 0)
-			goto InvalidProperty;
-		outDataSize *= sizeof (AudioComponentDescription);
-
-		outWritable = false;
-		break;
-#endif
-
-	case kAudioUnitProperty_ParameterValueStrings:
-		result = GetParameterValueStrings(inScope, inElement, NULL);
-		if (result == noErr) {
-			outDataSize = sizeof(CFArrayRef);
-			outWritable = false;
-			validateElement = false;
-		}
-		break;
-
-#if !CA_NO_AU_HOST_CALLBACKS
-	case kAudioUnitProperty_HostCallbacks:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(OldHostCallbackInfo);
-		outWritable = true;
-		break;
-#endif
-#if !CA_NO_AU_UI_FEATURES
-	case kAudioUnitProperty_ContextName:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outDataSize = sizeof(CFStringRef);
-		outWritable = true;
-		break;
-
-	case kAudioUnitProperty_IconLocation:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		outWritable = false;
-		if (!HasIcon())
-			goto InvalidProperty;
-		outDataSize = sizeof(CFURLRef);
-		break;
-
-	case kAudioUnitProperty_ParameterClumpName:
-		outDataSize = sizeof(AudioUnitParameterNameInfo );
-		outWritable = false;
-		break;
-
-#endif // !CA_NO_AU_UI_FEATURES
-
-	case 'lrst' :  // kAudioUnitProperty_LastRenderedSampleTime
-		outDataSize = sizeof(Float64);
-		outWritable = false;
-		break;
-
-    case /*kAudioUnitProperty_NickName*/ 54:
-        ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-        outDataSize = sizeof(CFStringRef);
-        outWritable = true;
-        break;
-
-	default:
-		result = GetPropertyInfo(inID, inScope, inElement, outDataSize, outWritable);
-		validateElement = false;
-		break;
-	}
-
-	if (result == noErr && validateElement) {
-		ca_require(GetElement(inScope, inElement) != NULL, InvalidElement);
-	}
-
-	return result;
-InvalidProperty:
-	return kAudioUnitErr_InvalidProperty;
-InvalidScope:
-	return kAudioUnitErr_InvalidScope;
-InvalidElement:
-	return kAudioUnitErr_InvalidElement;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::DispatchGetProperty(	AudioUnitPropertyID 			inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement			 	inElement,
-													void *							outData)
-{
-	// NOTE: We're currently only called from AUBase::ComponentEntryDispatch, which
-	// calls DispatchGetPropertyInfo first, which performs validation of the scope/element,
-	// and ensures that the outData buffer is non-null and large enough.
-	OSStatus result = noErr;
-
-	switch (inID) {
-	case kAudioUnitProperty_StreamFormat:
-		*(CAStreamBasicDescription *)outData = GetStreamFormat(inScope, inElement);
-		break;
-
-	case kAudioUnitProperty_SampleRate:
-		*(Float64 *)outData = GetStreamFormat(inScope, inElement).mSampleRate;
-		break;
-
-	case kAudioUnitProperty_ParameterList:
-		{
-			UInt32 nparams = 0;
-			result = GetParameterList(inScope, (AudioUnitParameterID *)outData, nparams);
-		}
-		break;
-
-	case kAudioUnitProperty_ParameterInfo:
-		result = GetParameterInfo(inScope, inElement, *(AudioUnitParameterInfo *)outData);
-		break;
-
-	case kAudioUnitProperty_ParameterHistoryInfo:
-		{
-			AudioUnitParameterHistoryInfo* info = (AudioUnitParameterHistoryInfo*)outData;
-			result = GetParameterHistoryInfo(inScope, inElement, info->updatesPerSecond, info->historyDurationInSeconds);
-		}
-		break;
-
-	case kAudioUnitProperty_ClassInfo:
-		{
-			*(CFPropertyListRef *)outData = NULL;
-			result = SaveState((CFPropertyListRef *)outData);
-		}
-		break;
-
-	case kAudioUnitProperty_FactoryPresets:
-		{
-			*(CFArrayRef *)outData = NULL;
-			result = GetPresets ((CFArrayRef *)outData);
-		}
-		break;
-
-	case kAudioUnitProperty_PresentPreset:
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-#ifndef __LP64__
-	case kAudioUnitProperty_CurrentPreset:
-#endif
-#endif
-		{
-			*(AUPreset *)outData = mCurrentPreset;
-
-				// retain current string (as client owns a reference to it and will release it)
-			if (inID == kAudioUnitProperty_PresentPreset && mCurrentPreset.presetName)
-				CFRetain (mCurrentPreset.presetName);
-
-			result = noErr;
-		}
-		break;
-
-	case kAudioUnitProperty_ElementName:
-		{
-			AUElement * element = GetElement(inScope, inElement);
-			if (element->HasName()) {
-				*(CFStringRef *)outData = element->GetName();
-				CFRetain (element->GetName());
-				result = noErr;
-			} else
-				result = kAudioUnitErr_InvalidPropertyValue;
-		}
-		break;
-
-	case kAudioUnitProperty_ElementCount:
-		*(UInt32 *)outData = GetScope(inScope).GetNumberOfElements();
-		break;
-
-	case kAudioUnitProperty_Latency:
-		*(Float64 *)outData = GetLatency();
-		break;
-
-	case kAudioUnitProperty_TailTime:
-		if (SupportsTail())
-			*(Float64 *)outData = GetTailTime();
-		else
-			result = kAudioUnitErr_InvalidProperty;
-		break;
-
-	case kAudioUnitProperty_MaximumFramesPerSlice:
-		*(UInt32 *)outData = mMaxFramesPerSlice;
-		break;
-
-	case kAudioUnitProperty_LastRenderError:
-		*(OSStatus *)outData = mLastRenderError;
-		mLastRenderError = 0;
-		break;
-
-	case kAudioUnitProperty_SupportedNumChannels:
-		{
-			const AUChannelInfo* infoPtr = NULL;
-			UInt32 num = SupportedNumChannels (&infoPtr);
-			if(num != 0 && infoPtr != NULL)
-				memcpy (outData, infoPtr, num * sizeof (AUChannelInfo));
-		}
-		break;
-
-	case kAudioUnitProperty_SupportedChannelLayoutTags:
-		{
-			AudioChannelLayoutTag* ptr = outData ? static_cast<AudioChannelLayoutTag*>(outData) : NULL;
-			UInt32 numLayouts = GetChannelLayoutTags (inScope, inElement, ptr);
-			if (numLayouts == 0)
-				result = kAudioUnitErr_InvalidProperty;
-		}
-		break;
-
-	case kAudioUnitProperty_AudioChannelLayout:
-	{
-		AudioChannelLayout* ptr = outData ? static_cast<AudioChannelLayout*>(outData) : NULL;
-		Boolean writable;
-		UInt32 dataSize = GetAudioChannelLayout(inScope, inElement, ptr, writable);
-		if (!dataSize) {
-			result = kAudioUnitErr_InvalidProperty;
-		}
-		break;
-	}
-
-#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5) || TARGET_OS_IPHONE
-	case kAudioUnitProperty_ShouldAllocateBuffer:
-	{
-		AUIOElement * element = GetIOElement(inScope, inElement);
-		*(UInt32*)outData = element->WillAllocateBuffer();
-		break;
-	}
-#endif
-
- 	case kAudioUnitProperty_ParameterValueStrings:
-		result = GetParameterValueStrings(inScope, inElement, (CFArrayRef *)outData);
-		break;
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	case kAudioUnitProperty_FastDispatch:
-		if (!IsCMgrObject()) result = kAudioUnitErr_InvalidProperty;
-		else {
-			switch (inElement) {
-			case kAudioUnitGetParameterSelect:
-				*(AudioUnitGetParameterProc *)outData = (AudioUnitGetParameterProc)CMgr_AudioUnitBaseGetParameter;
-				break;
-			case kAudioUnitSetParameterSelect:
-				*(AudioUnitSetParameterProc *)outData = (AudioUnitSetParameterProc)CMgr_AudioUnitBaseSetParameter;
-				break;
-			case kAudioUnitRenderSelect:
-				if (AudioUnitAPIVersion() > 1)
-					*(AudioUnitRenderProc *)outData = (AudioUnitRenderProc)CMgr_AudioUnitBaseRender;
-				else result = kAudioUnitErr_InvalidElement;
-				break;
-			default:
-				result = GetProperty(inID, inScope, inElement, outData);
-				break;
-			}
-		}
-		break;
-
-	case kAudioUnitProperty_GetUIComponentList:
-		GetUIComponentDescs ((ComponentDescription*)outData);
-		break;
-#endif
-
-#if !CA_NO_AU_HOST_CALLBACKS
-	case kAudioUnitProperty_HostCallbacks:
-		memcpy(outData, &mHostCallbackInfo, sizeof(OldHostCallbackInfo));
-		break;
-#endif
-#if !CA_NO_AU_UI_FEATURES
-	case kAudioUnitProperty_IconLocation:
-		{
-			CFURLRef iconLocation = CopyIconLocation();
-			if (iconLocation) {
-				*(CFURLRef*)outData = iconLocation;
-			} else
-				result = kAudioUnitErr_InvalidProperty;
-		}
-		break;
-
-	case kAudioUnitProperty_ContextName:
-		*(CFStringRef *)outData = mContextName;
-		if (mContextName) {
-			CFRetain(mContextName);
-			// retain CFString (if exists) since client will be responsible for its release
-			result = noErr;
-		} else {
-			result = kAudioUnitErr_InvalidPropertyValue;
-		}
-		break;
-
-	case kAudioUnitProperty_ParameterClumpName:
-		{
-			AudioUnitParameterNameInfo * ioClumpInfo = (AudioUnitParameterNameInfo*) outData;
-			if (ioClumpInfo->inID == kAudioUnitClumpID_System)	// this ID value is reserved
-				result = kAudioUnitErr_InvalidPropertyValue;
-			else
-			{
-				result = CopyClumpName(inScope, ioClumpInfo->inID, ioClumpInfo->inDesiredLength, &ioClumpInfo->outName);
-
-					// this is provided for compatbility with existing implementations that don't know
-					// about this new mechanism
-				if (result == kAudioUnitErr_InvalidProperty)
-					result = GetProperty (inID, inScope, inElement, outData);
-			}
-		}
-		break;
-
-#endif  // !CA_NO_AU_UI_FEATURES
-
-	case 'lrst' : // kAudioUnitProperty_LastRenderedSampleTime
-		*(Float64*)outData = mCurrentRenderTime.mSampleTime;
-		break;
-
-    case /*kAudioUnitProperty_NickName*/ 54:
-        // Ownership follows Core Foundation's 'Copy Rule'
-        if (mNickName) CFRetain(mNickName);
-        *(CFStringRef*)outData = mNickName;
-        break;
-
-	default:
-		result = GetProperty(inID, inScope, inElement, outData);
-		break;
-	}
-	return result;
-}
-
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::DispatchSetProperty(	AudioUnitPropertyID 			inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement,
-													const void *					inData,
-													UInt32 							inDataSize)
-{
-	OSStatus result = noErr;
-
-	switch (inID) {
-	case kAudioUnitProperty_MakeConnection:
-		ca_require(inDataSize >= sizeof(AudioUnitConnection), InvalidPropertyValue);
-		{
-			AudioUnitConnection &connection = *(AudioUnitConnection *)inData;
-			result = SetConnection(connection);
-		}
-		break;
-
-
-	case kAudioUnitProperty_SetRenderCallback:
-		{
-			ca_require(inDataSize >= sizeof(AURenderCallbackStruct), InvalidPropertyValue);
-			ca_require(AudioUnitAPIVersion() > 1, InvalidProperty);
-			AURenderCallbackStruct &callback = *(AURenderCallbackStruct*)inData;
-			result = SetInputCallback(kAudioUnitProperty_SetRenderCallback, inElement, callback.inputProc, callback.inputProcRefCon);
-		}
-		break;
-
-	case kAudioUnitProperty_ElementCount:
-		ca_require(inDataSize == sizeof(UInt32), InvalidPropertyValue);
-		ca_require(BusCountWritable(inScope), NotWritable);
-		result = SetBusCount(inScope, *(UInt32*)inData);
-		if (result == noErr) {
-			PropertyChanged(inID, inScope, inElement);
-		}
-		break;
-
-	case kAudioUnitProperty_MaximumFramesPerSlice:
-		ca_require(inDataSize == sizeof(UInt32), InvalidPropertyValue);
-		result = CanSetMaxFrames();
-		if (result) return result;
-		SetMaxFramesPerSlice(*(UInt32 *)inData);
-		break;
-
-	case kAudioUnitProperty_StreamFormat:
-		{
-			if (inDataSize < 36) goto InvalidPropertyValue;
-			ca_require(GetElement(inScope, inElement) != NULL, InvalidElement);
-
-			CAStreamBasicDescription newDesc;
-				// now we're going to be ultra conservative! because of discrepancies between
-				// sizes of this struct based on aligment padding inconsistencies
-			memset (&newDesc, 0, sizeof(newDesc));
-			memcpy (&newDesc, inData, 36);
-
-			ca_require(ValidFormat(inScope, inElement, newDesc), InvalidFormat);
-
-			const CAStreamBasicDescription curDesc = GetStreamFormat(inScope, inElement);
-
-			if ( !curDesc.IsEqual(newDesc, false) ) {
-				ca_require(IsStreamFormatWritable(inScope, inElement), NotWritable);
-				result = ChangeStreamFormat(inScope, inElement, curDesc, newDesc);
-			}
-		}
-		break;
-
-	case kAudioUnitProperty_SampleRate:
-		{
-			ca_require(inDataSize == sizeof(Float64), InvalidPropertyValue);
-			ca_require(GetElement(inScope, inElement) != NULL, InvalidElement);
-
-			const CAStreamBasicDescription curDesc = GetStreamFormat(inScope, inElement);
-			CAStreamBasicDescription newDesc = curDesc;
-			newDesc.mSampleRate = *(Float64 *)inData;
-
-			ca_require(ValidFormat(inScope, inElement, newDesc), InvalidFormat);
-
-			if ( !curDesc.IsEqual(newDesc, false) ) {
-				ca_require(IsStreamFormatWritable(inScope, inElement), NotWritable);
-				result = ChangeStreamFormat(inScope, inElement, curDesc, newDesc);
-			}
-		}
-		break;
-
-	case kAudioUnitProperty_AudioChannelLayout:
-		{
-			const AudioChannelLayout *layout = static_cast<const AudioChannelLayout *>(inData);
-			size_t headerSize = sizeof(AudioChannelLayout) - sizeof(AudioChannelDescription);
-
-			ca_require(inDataSize >= headerSize + layout->mNumberChannelDescriptions * sizeof(AudioChannelDescription), InvalidPropertyValue);
-			result = SetAudioChannelLayout(inScope, inElement, layout);
-			if (result == noErr)
-				PropertyChanged(inID, inScope, inElement);
-			break;
-		}
-
-	case kAudioUnitProperty_ClassInfo:
-		ca_require(inDataSize == sizeof(CFPropertyListRef *), InvalidPropertyValue);
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		result = RestoreState(*(CFPropertyListRef *)inData);
-		break;
-
-	case kAudioUnitProperty_PresentPreset:
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-#ifndef __LP64__
-	case kAudioUnitProperty_CurrentPreset:
-#endif
-#endif
-		{
-			ca_require(inDataSize == sizeof(AUPreset), InvalidPropertyValue);
-			ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-			AUPreset & newPreset = *(AUPreset *)inData;
-
-			if (newPreset.presetNumber >= 0)
-			{
-				result = NewFactoryPresetSet(newPreset);
-				// NewFactoryPresetSet SHOULD call SetAFactoryPreset if the preset is valid
-				// from its own list of preset number->name
-				if (!result)
-					PropertyChanged(inID, inScope, inElement);
-			}
-			else if (newPreset.presetName)
-			{
-				result = NewCustomPresetSet(newPreset);
-                if (!result)
-                    PropertyChanged(inID, inScope, inElement);
-			}
-			else
-				result = kAudioUnitErr_InvalidPropertyValue;
-		}
-		break;
-
-	case kAudioUnitProperty_ElementName:
-		{
-			ca_require(GetElement(inScope, inElement) != NULL, InvalidElement);
-			ca_require(inDataSize == sizeof(CFStringRef), InvalidPropertyValue);
-			AUElement * element = GetScope(inScope).GetElement (inElement);
-			element->SetName (*(CFStringRef *)inData);
-			PropertyChanged(inID, inScope, inElement);
-		}
-		break;
-
-#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5) || TARGET_OS_IPHONE
-	case kAudioUnitProperty_ShouldAllocateBuffer:
-		{
-			ca_require((inScope == kAudioUnitScope_Input || inScope == kAudioUnitScope_Output), InvalidScope);
-			ca_require(GetElement(inScope, inElement) != NULL, InvalidElement);
-			ca_require(inDataSize == sizeof(UInt32), InvalidPropertyValue);
-			ca_require(!IsInitialized(), Initialized);
-
-			AUIOElement * element = GetIOElement(inScope, inElement);
-			element->SetWillAllocateBuffer(*(UInt32 *)inData != 0);
-		}
-		break;
-#endif
-
-#if !CA_NO_AU_HOST_CALLBACKS
-	case kAudioUnitProperty_HostCallbacks:
-	{
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		UInt32 availSize = std::min(inDataSize, (UInt32)sizeof(HostCallbackInfo));
-		bool hasChanged = !memcmp (&mHostCallbackInfo, inData, availSize);
-		memset (&mHostCallbackInfo, 0, sizeof (mHostCallbackInfo));
-		memcpy (&mHostCallbackInfo, inData, availSize);
-		if (hasChanged)
-			PropertyChanged(inID, inScope, inElement);
-		break;
-	}
-#endif
-#if !CA_NO_AU_UI_FEATURES
-	case kAudioUnitProperty_SetExternalBuffer:
-		ca_require(inDataSize >= sizeof(AudioUnitExternalBuffer), InvalidPropertyValue);
-		ca_require(IsInitialized(), Uninitialized);
-		{
-			AudioUnitExternalBuffer &buf = *(AudioUnitExternalBuffer*)inData;
-			if (intptr_t(buf.buffer) & 0x0F) result = kAudio_ParamError;
-			else if (inScope == kAudioUnitScope_Input) {
-				AUInputElement *input = GetInput(inElement);
-				input->UseExternalBuffer(buf);
-			} else {
-				AUOutputElement *output = GetOutput(inElement);
-				output->UseExternalBuffer(buf);
-			}
-		}
-		break;
-
-	case kAudioUnitProperty_ContextName:
-		{
-			ca_require(inDataSize == sizeof(CFStringRef), InvalidPropertyValue);
-			ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-			CFStringRef inStr = *(CFStringRef *)inData;
-			if (mContextName) CFRelease(mContextName);
-			if (inStr) CFRetain(inStr);
-			mContextName = inStr;
-			PropertyChanged(inID, inScope, inElement);
-		}
-		break;
-
-#endif // !CA_NO_AU_UI_FEATURES
-
-    case /*kAudioUnitProperty_NickName*/ 54:
-    {
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-        ca_require(inDataSize == sizeof(CFStringRef), InvalidPropertyValue);
-        CFStringRef inStr = *(CFStringRef *)inData;
-        if (mNickName) CFRelease(mNickName);
-        if (inStr) CFRetain(inStr);
-        mNickName = inStr;
-        PropertyChanged(inID, inScope, inElement);
-        break;
-    }
-
-	default:
-		result = SetProperty(inID, inScope, inElement, inData, inDataSize);
-		if (result == noErr)
-			PropertyChanged(inID, inScope, inElement);
-
-		break;
-	}
-	return result;
-NotWritable:
-	return kAudioUnitErr_PropertyNotWritable;
-InvalidFormat:
-	return kAudioUnitErr_FormatNotSupported;
-#if !CA_NO_AU_UI_FEATURES
-Uninitialized:
-	return kAudioUnitErr_Uninitialized;
-#endif
-#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5) || CA_USE_AUDIO_PLUGIN_ONLY
-Initialized:
-	return kAudioUnitErr_Initialized;
-#endif
-InvalidScope:
-	return kAudioUnitErr_InvalidScope;
-InvalidProperty:
-	return kAudioUnitErr_InvalidProperty;
-InvalidPropertyValue:
-	return kAudioUnitErr_InvalidPropertyValue;
-InvalidElement:
-	return kAudioUnitErr_InvalidElement;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::DispatchRemovePropertyValue (AudioUnitPropertyID		inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement)
-{
-	OSStatus result = noErr;
-	switch (inID)
-	{
-	case kAudioUnitProperty_AudioChannelLayout:
-	{
-		result = RemoveAudioChannelLayout(inScope, inElement);
-		if (result == noErr)
-			PropertyChanged(inID, inScope, inElement);
-		break;
-	}
-
-#if !CA_NO_AU_HOST_CALLBACKS
-	case kAudioUnitProperty_HostCallbacks:
-	{
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		bool hasValue = false;
-		void* ptr = &mHostCallbackInfo;
-		for (unsigned int i = 0; i <  sizeof (HostCallbackInfo); ++i) {
-			if (static_cast<char*>(ptr)[i]) {
-				hasValue = true;
-				break;
-			}
-		}
-		if (hasValue) {
-			memset (&mHostCallbackInfo, 0, sizeof (HostCallbackInfo));
-			PropertyChanged(inID, inScope, inElement);
-		}
-		break;
-	}
-#endif
-#if !CA_NO_AU_UI_FEATURES
-	case kAudioUnitProperty_ContextName:
-		if (mContextName) CFRelease(mContextName);
-		mContextName = NULL;
-		result = noErr;
-		break;
-
-#endif // !CA_NO_AU_UI_FEATURES
-
-    case /*kAudioUnitProperty_NickName*/ 54:
-    {
-        if(inScope == kAudioUnitScope_Global) {
-            if (mNickName) CFRelease(mNickName);
-            mNickName = NULL;
-            PropertyChanged(inID, inScope, inElement);
-        } else {
-            result = kAudioUnitErr_InvalidScope;
-        }
-        break;
-    }
-
-	default:
-		result = RemovePropertyValue (inID, inScope, inElement);
-		break;
-	}
-
-	return result;
-#if !CA_NO_AU_UI_FEATURES || !CA_NO_AU_HOST_CALLBACKS
-InvalidScope:
-	return kAudioUnitErr_InvalidScope;
-#endif
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::GetPropertyInfo(		AudioUnitPropertyID				inID,
-													AudioUnitScope					inScope,
-													AudioUnitElement				inElement,
-													UInt32 &						outDataSize,
-													Boolean &						outWritable)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::GetProperty(			AudioUnitPropertyID 			inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement			 	inElement,
-													void *							outData)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::SetProperty(			AudioUnitPropertyID 			inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement,
-													const void *					inData,
-													UInt32 							inDataSize)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::RemovePropertyValue (	AudioUnitPropertyID		 		inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement)
-{
-	return kAudioUnitErr_InvalidPropertyValue;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::AddPropertyListener(	AudioUnitPropertyID				inID,
-													AudioUnitPropertyListenerProc	inProc,
-													void *							inProcRefCon)
-{
-	PropertyListener pl;
-
-	pl.propertyID = inID;
-	pl.listenerProc = inProc;
-	pl.listenerRefCon = inProcRefCon;
-
-	if (mPropertyListeners.empty())
-		mPropertyListeners.reserve(32);
-	mPropertyListeners.push_back(pl);
-
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::RemovePropertyListener(		AudioUnitPropertyID				inID,
-														AudioUnitPropertyListenerProc	inProc,
-														void *							inProcRefCon,
-														bool							refConSpecified)
-{
-	// iterate in reverse so that it's safe to erase in the middle of the vector
-	for (int i = (int)mPropertyListeners.size(); --i >=0; ) {
-		PropertyListeners::iterator it = mPropertyListeners.begin() + i;
-		if ((*it).propertyID == inID && (*it).listenerProc == inProc && (!refConSpecified || (*it).listenerRefCon == inProcRefCon))
-			mPropertyListeners.erase(it);
-	}
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::PropertyChanged(			AudioUnitPropertyID				inID,
-														AudioUnitScope					inScope,
-														AudioUnitElement				inElement)
-{
-	for (PropertyListeners::iterator it = mPropertyListeners.begin(); it != mPropertyListeners.end(); ++it)
-		if ((*it).propertyID == inID)
-			((*it).listenerProc)((*it).listenerRefCon, mComponentInstance, inID, inScope, inElement);
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::SetRenderNotification(	AURenderCallback		 		inProc,
-													void *							inRefCon)
-{
-	if (inProc == NULL)
-		return kAudio_ParamError;
-
-	mRenderCallbacksTouched = true;
-	mRenderCallbacks.deferred_add(RenderCallback(inProc, inRefCon));
-			// this will do nothing if it's already in the list
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::RemoveRenderNotification(	AURenderCallback			inProc,
-														void *						inRefCon)
-{
-	mRenderCallbacks.deferred_remove(RenderCallback(inProc, inRefCon));
-	return noErr;	// error?
-}
-
-//_____________________________________________________________________________
-//
-OSStatus 	AUBase::GetParameter(			AudioUnitParameterID			inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement,
-													AudioUnitParameterValue &		outValue)
-{
-	AUElement *elem = SafeGetElement(inScope, inElement);
-	outValue = elem->GetParameter(inID);
-	return noErr;
-}
-
-
-//_____________________________________________________________________________
-//
-OSStatus 	AUBase::SetParameter(			AudioUnitParameterID			inID,
-													AudioUnitScope 					inScope,
-													AudioUnitElement 				inElement,
-													AudioUnitParameterValue			inValue,
-													UInt32							inBufferOffsetInFrames)
-{
-	AUElement *elem = SafeGetElement(inScope, inElement);
-	elem->SetParameter(inID, inValue);
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus 	AUBase::ScheduleParameter (	const AudioUnitParameterEvent 		*inParameterEvent,
-													UInt32							inNumEvents)
-{
-	bool canScheduleParameters = CanScheduleParameters();
-
-	for (UInt32 i = 0; i < inNumEvents; ++i)
-	{
-		if (inParameterEvent[i].eventType == kParameterEvent_Immediate)
-		{
-			SetParameter (inParameterEvent[i].parameter,
-							inParameterEvent[i].scope,
-							inParameterEvent[i].element,
-							inParameterEvent[i].eventValues.immediate.value,
-							inParameterEvent[i].eventValues.immediate.bufferOffset);
-		}
-		if (canScheduleParameters) {
-			mParamList.push_back (inParameterEvent[i]);
-		}
-	}
-
-	return noErr;
-}
-
-// ____________________________________________________________________________
-//
-static bool SortParameterEventList(const AudioUnitParameterEvent &ev1, const AudioUnitParameterEvent &ev2 )
-{
-	int offset1 = ev1.eventType == kParameterEvent_Immediate ?  ev1.eventValues.immediate.bufferOffset : ev1.eventValues.ramp.startBufferOffset;
-	int offset2 = ev2.eventType == kParameterEvent_Immediate ?  ev2.eventValues.immediate.bufferOffset : ev2.eventValues.ramp.startBufferOffset;
-
-	if(offset1 < offset2) return true;
-	return false;
-}
-
-
-// ____________________________________________________________________________
-//
-OSStatus 	AUBase::ProcessForScheduledParams(	ParameterEventList		&inParamList,
-														UInt32					inFramesToProcess,
-														void					*inUserData )
-{
-	OSStatus result = noErr;
-
-	int totalFramesToProcess = inFramesToProcess;
-
-	int framesRemaining = totalFramesToProcess;
-
-	unsigned int currentStartFrame = 0;	// start of the whole buffer
-
-
-
-	// sort the ParameterEventList by startBufferOffset
-	std::sort(inParamList.begin(), inParamList.end(), SortParameterEventList);
-
-	ParameterEventList::iterator iter = inParamList.begin();
-
-
-	while(framesRemaining > 0 )
-	{
-		// first of all, go through the ramped automation events and find out where the next
-		// division of our whole buffer will be
-
-		int currentEndFrame = totalFramesToProcess;	// start out assuming we'll process all the way to
-													// the end of the buffer
-
-		iter = inParamList.begin();
-
-		// find the next break point
-		while(iter != inParamList.end() )
-		{
-			AudioUnitParameterEvent &event = *iter;
-
-			int offset = event.eventType == kParameterEvent_Immediate ?  event.eventValues.immediate.bufferOffset : event.eventValues.ramp.startBufferOffset;
-
-			if(offset > (int)currentStartFrame && offset < currentEndFrame )
-			{
-				currentEndFrame = offset;
-				break;
-			}
-
-			// consider ramp end to be a possible choice (there may be gaps in the supplied ramp events)
-			if(event.eventType == kParameterEvent_Ramped )
-			{
-				offset = event.eventValues.ramp.startBufferOffset + event.eventValues.ramp.durationInFrames;
-
-				if(offset > (int)currentStartFrame && offset < currentEndFrame )
-				{
-					currentEndFrame = offset;
-				}
-			}
-
-			iter++;
-		}
-
-		int framesThisTime = currentEndFrame - currentStartFrame;
-
-		// next, setup the parameter maps to be current for the ramp parameters active during
-		// this time segment...
-
-		for(ParameterEventList::iterator iter2 = inParamList.begin(); iter2 != inParamList.end(); iter2++ )
-		{
-			AudioUnitParameterEvent &event = *iter2;
-
-			bool eventFallsInSlice;
-
-
-			if(event.eventType == kParameterEvent_Ramped)
-				eventFallsInSlice = event.eventValues.ramp.startBufferOffset < currentEndFrame
-					&& event.eventValues.ramp.startBufferOffset + event.eventValues.ramp.durationInFrames > currentStartFrame;
-			else /* kParameterEvent_Immediate */
-				// actually, for the same parameter, there may be future immediate events which override this one,
-				// but it's OK since the event list is sorted in time order, we're guaranteed to end up with the current one
-				eventFallsInSlice = event.eventValues.immediate.bufferOffset <= currentStartFrame;
-
-			if(eventFallsInSlice)
-			{
-				AUElement *element = GetElement(event.scope, event.element );
-
-				if(element) element->SetScheduledEvent(	event.parameter,
-														event,
-														currentStartFrame,
-														currentEndFrame - currentStartFrame );
-			}
-		}
-
-
-
-		// Finally, actually do the processing for this slice.....
-
-		result = ProcessScheduledSlice(	inUserData,
-										currentStartFrame,
-										framesThisTime,
-										inFramesToProcess );
-
-		if(result != noErr) break;
-
-		framesRemaining -= framesThisTime;
-		currentStartFrame = currentEndFrame;	// now start from where we left off last time
-	}
-
-	return result;
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::SetWantsRenderThreadID (bool inFlag)
-{
-	if (inFlag == mWantsRenderThreadID)
-		return;
-
-	mWantsRenderThreadID = inFlag;
-	if (!mWantsRenderThreadID)
-		mRenderThreadID = NULL;
-}
-
-//_____________________________________________________________________________
-//
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::DoRender(		AudioUnitRenderActionFlags &	ioActionFlags,
-											const AudioTimeStamp &			inTimeStamp,
-											UInt32							inBusNumber,
-											UInt32							inFramesToProcess,
-											AudioBufferList &				ioData)
-{
-	OSStatus theError;
-	RenderCallbackList::iterator rcit;
-
-	AUTRACE(kCATrace_AUBaseRenderStart, mComponentInstance, (uintptr_t)this, inBusNumber, inFramesToProcess, (uintptr_t)ioData.mBuffers[0].mData);
-	DISABLE_DENORMALS
-
-	try {
-		ca_require(IsInitialized(), Uninitialized);
-		ca_require(mAudioUnitAPIVersion >= 2, ParamErr);
-		if (inFramesToProcess > mMaxFramesPerSlice) {
-			static time_t lastTimeMessagePrinted = 0;
-			time_t now = time(NULL);
-			if (now != lastTimeMessagePrinted) {
-				lastTimeMessagePrinted = now;
-				syslog(LOG_ERR, "kAudioUnitErr_TooManyFramesToProcess : inFramesToProcess=%u, mMaxFramesPerSlice=%u", (unsigned)inFramesToProcess, (unsigned)mMaxFramesPerSlice);
-				DebugMessageN4("%s:%d inFramesToProcess=%u, mMaxFramesPerSlice=%u; TooManyFrames", __FILE__, __LINE__, (unsigned)inFramesToProcess, (unsigned)mMaxFramesPerSlice);
-			}
-			goto TooManyFrames;
-		}
-		ca_require (!UsesFixedBlockSize() || inFramesToProcess == GetMaxFramesPerSlice(), ParamErr);
-
-        AUOutputElement *output = GetScope(kAudioUnitScope_Output).GetNumberOfElements() > 0 ? GetOutput(inBusNumber) : NULL;	// will throw if non-existant
-		if (output != NULL && output->GetStreamFormat().NumberChannelStreams() != ioData.mNumberBuffers) {
-			DebugMessageN4("%s:%d ioData.mNumberBuffers=%u, output->GetStreamFormat().NumberChannelStreams()=%u; kAudio_ParamError",
-				__FILE__, __LINE__, (unsigned)ioData.mNumberBuffers, (unsigned)output->GetStreamFormat().NumberChannelStreams());
-			goto ParamErr;
-		}
-
-        unsigned expectedBufferByteSize = output != NULL ? inFramesToProcess * output->GetStreamFormat().mBytesPerFrame : 0;
-		for (unsigned ibuf = 0; ibuf < ioData.mNumberBuffers; ++ibuf) {
-			AudioBuffer &buf = ioData.mBuffers[ibuf];
-			if (buf.mData != NULL) {
-				// only care about the size if the buffer is non-null
-				if (buf.mDataByteSize < expectedBufferByteSize) {
-					// if the buffer is too small, we cannot render safely. kAudio_ParamError.
-					DebugMessageN7("%s:%d %u frames, %u bytes/frame, expected %u-byte buffer; ioData.mBuffers[%u].mDataByteSize=%u; kAudio_ParamError",
-						__FILE__, __LINE__, (unsigned)inFramesToProcess, (unsigned)output->GetStreamFormat().mBytesPerFrame, expectedBufferByteSize, ibuf, (unsigned)buf.mDataByteSize);
-					goto ParamErr;
-				}
-				// Some clients incorrectly pass bigger buffers than expectedBufferByteSize.
-				// We will generally set the buffer size at the end of rendering, before we return.
-				// However we should ensure that no one, DURING rendering, READS a
-				// potentially incorrect size. This can lead to doing too much work, or
-				// reading past the end of an input buffer into unmapped memory.
-				buf.mDataByteSize = expectedBufferByteSize;
-			}
-		}
-
-		if (WantsRenderThreadID())
-		{
-			#if TARGET_OS_MAC
-				mRenderThreadID = pthread_self();
-			#elif TARGET_OS_WIN32
-				mRenderThreadID = GetCurrentThreadId();
-			#endif
-		}
-
-		AudioUnitRenderActionFlags flags;
-		if (mRenderCallbacksTouched) {
-			mRenderCallbacks.update();
-			flags = ioActionFlags | kAudioUnitRenderAction_PreRender;
-			for (rcit = mRenderCallbacks.begin(); rcit != mRenderCallbacks.end(); ++rcit) {
-				RenderCallback &rc = *rcit;
-				AUTRACE(kCATrace_AUBaseRenderCallbackStart, mComponentInstance, (intptr_t)this, (intptr_t)rc.mRenderNotify, 1, 0);
-				(*(AURenderCallback)rc.mRenderNotify)(rc.mRenderNotifyRefCon,
-								&flags,
-								&inTimeStamp, inBusNumber, inFramesToProcess, &ioData);
-				AUTRACE(kCATrace_AUBaseRenderCallbackEnd, mComponentInstance, (intptr_t)this, (intptr_t)rc.mRenderNotify, 1, 0);
-			}
-		}
-
-		theError = DoRenderBus(ioActionFlags, inTimeStamp, inBusNumber, output, inFramesToProcess, ioData);
-
-		if (mRenderCallbacksTouched) {
-			flags = ioActionFlags | kAudioUnitRenderAction_PostRender;
-
-			if (SetRenderError (theError)) {
-				flags |= kAudioUnitRenderAction_PostRenderError;
-			}
-
-			for (rcit = mRenderCallbacks.begin(); rcit != mRenderCallbacks.end(); ++rcit) {
-				RenderCallback &rc = *rcit;
-				AUTRACE(kCATrace_AUBaseRenderCallbackStart, mComponentInstance, (intptr_t)this, (intptr_t)rc.mRenderNotify, 2, 0);
-				(*(AURenderCallback)rc.mRenderNotify)(rc.mRenderNotifyRefCon,
-								&flags,
-								&inTimeStamp, inBusNumber, inFramesToProcess, &ioData);
-				AUTRACE(kCATrace_AUBaseRenderCallbackEnd, mComponentInstance, (intptr_t)this, (intptr_t)rc.mRenderNotify, 2, 0);
-			}
-		}
-
-		// The vector's being emptied
-		// because these events should only apply to this Render cycle, so anything
-		// left over is from a preceding cycle and should be dumped.  New scheduled
-		// parameters must be scheduled from the next pre-render callback.
-		if (!mParamList.empty())
-			mParamList.clear();
-
-	}
-	catch (OSStatus err) {
-		theError = err;
-		goto errexit;
-	}
-	catch (...) {
-		theError = -1;
-		goto errexit;
-	}
-done:
-	RESTORE_DENORMALS
-	AUTRACE(kCATrace_AUBaseRenderEnd, mComponentInstance, (intptr_t)this, theError, ioActionFlags, CATrace::ablData(ioData));
-
-	return theError;
-
-Uninitialized:	theError = kAudioUnitErr_Uninitialized;				goto errexit;
-ParamErr:		theError = kAudio_ParamError;						goto errexit;
-TooManyFrames:	theError = kAudioUnitErr_TooManyFramesToProcess;	goto errexit;
-errexit:
-	DebugMessageN2 ("  from %s, render err: %d", GetLoggingString(), (int)theError);
-	SetRenderError(theError);
-	goto done;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus	AUBase::DoProcess (	AudioUnitRenderActionFlags  &		ioActionFlags,
-								const AudioTimeStamp &				inTimeStamp,
-								UInt32								inFramesToProcess,
-								AudioBufferList &					ioData)
-{
-	OSStatus theError;
-	AUTRACE(kCATrace_AUBaseRenderStart, mComponentInstance, (intptr_t)this, -1, inFramesToProcess, 0);
-	DISABLE_DENORMALS
-
-	try {
-
-		if (!(ioActionFlags & (1 << 9)/*kAudioUnitRenderAction_DoNotCheckRenderArgs*/)) {
-			ca_require(IsInitialized(), Uninitialized);
-			ca_require(inFramesToProcess <= mMaxFramesPerSlice, TooManyFrames);
-			ca_require(!UsesFixedBlockSize() || inFramesToProcess == GetMaxFramesPerSlice(), ParamErr);
-
-			AUInputElement *input = GetInput(0);	// will throw if non-existant
-			if (input->GetStreamFormat().NumberChannelStreams() != ioData.mNumberBuffers) {
-				DebugMessageN4("%s:%d ioData.mNumberBuffers=%u, input->GetStreamFormat().NumberChannelStreams()=%u; kAudio_ParamError",
-					__FILE__, __LINE__, (unsigned)ioData.mNumberBuffers, (unsigned)input->GetStreamFormat().NumberChannelStreams());
-				goto ParamErr;
-			}
-
-			unsigned expectedBufferByteSize = inFramesToProcess * input->GetStreamFormat().mBytesPerFrame;
-			for (unsigned ibuf = 0; ibuf < ioData.mNumberBuffers; ++ibuf) {
-				AudioBuffer &buf = ioData.mBuffers[ibuf];
-				if (buf.mData != NULL) {
-					// only care about the size if the buffer is non-null
-					if (buf.mDataByteSize < expectedBufferByteSize) {
-						// if the buffer is too small, we cannot render safely. kAudio_ParamError.
-						DebugMessageN7("%s:%d %u frames, %u bytes/frame, expected %u-byte buffer; ioData.mBuffers[%u].mDataByteSize=%u; kAudio_ParamError",
-							__FILE__, __LINE__, (unsigned)inFramesToProcess, (unsigned)input->GetStreamFormat().mBytesPerFrame, expectedBufferByteSize, ibuf, (unsigned)buf.mDataByteSize);
-						goto ParamErr;
-					}
-					// Some clients incorrectly pass bigger buffers than expectedBufferByteSize.
-					// We will generally set the buffer size at the end of rendering, before we return.
-					// However we should ensure that no one, DURING rendering, READS a
-					// potentially incorrect size. This can lead to doing too much work, or
-					// reading past the end of an input buffer into unmapped memory.
-					buf.mDataByteSize = expectedBufferByteSize;
-				}
-			}
-		}
-
-		if (WantsRenderThreadID())
-		{
-			#if TARGET_OS_MAC
-				mRenderThreadID = pthread_self();
-			#elif TARGET_OS_WIN32
-				mRenderThreadID = GetCurrentThreadId();
-			#endif
-		}
-
-		if (NeedsToRender (inTimeStamp)) {
-			theError = ProcessBufferLists (ioActionFlags, ioData, ioData, inFramesToProcess);
-		} else
-			theError = noErr;
-
-	}
-	catch (OSStatus err) {
-		theError = err;
-		goto errexit;
-	}
-	catch (...) {
-		theError = -1;
-		goto errexit;
-	}
-done:
-	RESTORE_DENORMALS
-	AUTRACE(kCATrace_AUBaseRenderEnd, mComponentInstance, (intptr_t)this, theError, ioActionFlags, CATrace::ablData(ioData));
-
-	return theError;
-
-Uninitialized:	theError = kAudioUnitErr_Uninitialized;				goto errexit;
-ParamErr:		theError = kAudio_ParamError;						goto errexit;
-TooManyFrames:	theError = kAudioUnitErr_TooManyFramesToProcess;	goto errexit;
-errexit:
-	DebugMessageN2 ("  from %s, process err: %d", GetLoggingString(), (int)theError);
-	SetRenderError(theError);
-	goto done;
-}
-
-OSStatus	AUBase::DoProcessMultiple (	AudioUnitRenderActionFlags  & ioActionFlags,
-							   const AudioTimeStamp &				inTimeStamp,
-							   UInt32								inFramesToProcess,
-							   UInt32								inNumberInputBufferLists,
-							   const AudioBufferList **				inInputBufferLists,
-							   UInt32								inNumberOutputBufferLists,
-							   AudioBufferList **					ioOutputBufferLists)
-{
-	OSStatus theError;
-	DISABLE_DENORMALS
-
-	try {
-
-		if (!(ioActionFlags & (1 << 9)/*kAudioUnitRenderAction_DoNotCheckRenderArgs*/)) {
-			ca_require(IsInitialized(), Uninitialized);
-			ca_require(inFramesToProcess <= mMaxFramesPerSlice, TooManyFrames);
-			ca_require (!UsesFixedBlockSize() || inFramesToProcess == GetMaxFramesPerSlice(), ParamErr);
-
-			for (unsigned ibl = 0; ibl < inNumberInputBufferLists; ++ibl) {
-				if (inInputBufferLists[ibl] != NULL) {
-					AUInputElement *input = GetInput(ibl);	// will throw if non-existant
-					unsigned expectedBufferByteSize = inFramesToProcess * input->GetStreamFormat().mBytesPerFrame;
-
-					if (input->GetStreamFormat().NumberChannelStreams() != inInputBufferLists[ibl]->mNumberBuffers) {
-						DebugMessageN5("%s:%d inInputBufferLists[%u]->mNumberBuffers=%u, input->GetStreamFormat().NumberChannelStreams()=%u; kAudio_ParamError",
-									   __FILE__, __LINE__, ibl, (unsigned)inInputBufferLists[ibl]->mNumberBuffers, (unsigned)input->GetStreamFormat().NumberChannelStreams());
-						goto ParamErr;
-					}
-
-					for (unsigned ibuf = 0; ibuf < inInputBufferLists[ibl]->mNumberBuffers; ++ibuf) {
-						const AudioBuffer &buf = inInputBufferLists[ibl]->mBuffers[ibuf];
-						if (buf.mData != NULL) {
-							if (buf.mDataByteSize < expectedBufferByteSize) {
-								// the buffer is too small
-								DebugMessageN8("%s:%d %u frames, %u bytes/frame, expected %u-byte buffer; inInputBufferLists[%u].mBuffers[%u].mDataByteSize=%u; kAudio_ParamError",
-											   __FILE__, __LINE__, (unsigned)inFramesToProcess, (unsigned)input->GetStreamFormat().mBytesPerFrame, expectedBufferByteSize, ibl, ibuf, (unsigned)buf.mDataByteSize);
-								goto ParamErr;
-							}
-						} else {
-							// the buffer must exist
-							goto ParamErr;
-						}
-					}
-				} else {
-					// skip NULL input audio buffer list
-				}
-			}
-
-			for (unsigned obl = 0; obl < inNumberOutputBufferLists; ++obl) {
-				if (ioOutputBufferLists[obl] != NULL) {
-					AUOutputElement *output = GetOutput(obl);	// will throw if non-existant
-					unsigned expectedBufferByteSize = inFramesToProcess * output->GetStreamFormat().mBytesPerFrame;
-
-					if (output->GetStreamFormat().NumberChannelStreams() != ioOutputBufferLists[obl]->mNumberBuffers) {
-						DebugMessageN5("%s:%d ioOutputBufferLists[%u]->mNumberBuffers=%u, output->GetStreamFormat().NumberChannelStreams()=%u; kAudio_ParamError",
-									   __FILE__, __LINE__, obl, (unsigned)ioOutputBufferLists[obl]->mNumberBuffers, (unsigned)output->GetStreamFormat().NumberChannelStreams());
-						goto ParamErr;
-					}
-
-					for (unsigned obuf = 0; obuf < ioOutputBufferLists[obl]->mNumberBuffers; ++obuf) {
-						AudioBuffer &buf = ioOutputBufferLists[obl]->mBuffers[obuf];
-						if (buf.mData != NULL) {
-							// only care about the size if the buffer is non-null
-							if (buf.mDataByteSize < expectedBufferByteSize) {
-								// if the buffer is too small, we cannot render safely. kAudio_ParamError.
-								DebugMessageN8("%s:%d %u frames, %u bytes/frame, expected %u-byte buffer; ioOutputBufferLists[%u]->mBuffers[%u].mDataByteSize=%u; kAudio_ParamError",
-											   __FILE__, __LINE__, (unsigned)inFramesToProcess, (unsigned)output->GetStreamFormat().mBytesPerFrame, expectedBufferByteSize, obl, obuf, (unsigned)buf.mDataByteSize);
-								goto ParamErr;
-							}
-							// Some clients incorrectly pass bigger buffers than expectedBufferByteSize.
-							// We will generally set the buffer size at the end of rendering, before we return.
-							// However we should ensure that no one, DURING rendering, READS a
-							// potentially incorrect size. This can lead to doing too much work, or
-							// reading past the end of an input buffer into unmapped memory.
-							buf.mDataByteSize = expectedBufferByteSize;
-						}
-					}
-				} else {
-					// skip NULL output audio buffer list
-				}
-			}
-		}
-
-		if (WantsRenderThreadID())
-		{
-#if TARGET_OS_MAC
-			mRenderThreadID = pthread_self();
-#elif TARGET_OS_WIN32
-			mRenderThreadID = GetCurrentThreadId();
-#endif
-		}
-
-		if (NeedsToRender (inTimeStamp)) {
-			theError = ProcessMultipleBufferLists (ioActionFlags, inFramesToProcess, inNumberInputBufferLists, inInputBufferLists, inNumberOutputBufferLists, ioOutputBufferLists);
-		} else
-			theError = noErr;
-	}
-	catch (OSStatus err) {
-		theError = err;
-		goto errexit;
-	}
-	catch (...) {
-		theError = -1;
-		goto errexit;
-	}
-done:
-	RESTORE_DENORMALS
-
-	return theError;
-
-Uninitialized:	theError = kAudioUnitErr_Uninitialized;				goto errexit;
-ParamErr:		theError = kAudio_ParamError;						goto errexit;
-TooManyFrames:	theError = kAudioUnitErr_TooManyFramesToProcess;	goto errexit;
-errexit:
-	DebugMessageN2 ("  from %s, processmultiple err: %d", GetLoggingString(), (int)theError);
-	SetRenderError(theError);
-	goto done;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::SetInputCallback(		UInt32							inPropertyID,
-													AudioUnitElement 				inElement,
-													AURenderCallback				inProc,
-													void *							inRefCon)
-{
-	AUInputElement *input = GetInput(inElement);	// may throw
-
-	input->SetInputCallback(inProc, inRefCon);
-	PropertyChanged(inPropertyID, kAudioUnitScope_Input, inElement);
-
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::SetConnection(			const AudioUnitConnection &		inConnection)
-{
-
-	OSStatus err;
-	AUInputElement *input = GetInput(inConnection.destInputNumber);	// may throw
-
-	if (inConnection.sourceAudioUnit) {
-		// connecting, not disconnecting
-		CAStreamBasicDescription sourceDesc;
-		UInt32 size = sizeof(CAStreamBasicDescription);
-		ca_require_noerr(err = AudioUnitGetProperty(
-										inConnection.sourceAudioUnit,
-										kAudioUnitProperty_StreamFormat,
-										kAudioUnitScope_Output,
-										inConnection.sourceOutputNumber,
-										&sourceDesc,
-										&size), errexit);
-		ca_require_noerr(err = DispatchSetProperty (kAudioUnitProperty_StreamFormat,
-								kAudioUnitScope_Input, inConnection.destInputNumber,
-								&sourceDesc, sizeof(CAStreamBasicDescription)), errexit);
-	}
-	input->SetConnection(inConnection);
-
-	PropertyChanged(kAudioUnitProperty_MakeConnection, kAudioUnitScope_Input, inConnection.destInputNumber);
-	return noErr;
-
-errexit:
-	return err;
-}
-
-//_____________________________________________________________________________
-//
-UInt32				AUBase::SupportedNumChannels (	const AUChannelInfo** 			outInfo)
-{
-	return 0;
-}
-
-//_____________________________________________________________________________
-//
-bool				AUBase::ValidFormat(			AudioUnitScope					inScope,
-													AudioUnitElement				inElement,
-													const CAStreamBasicDescription &		inNewFormat)
-{
-	return FormatIsCanonical(inNewFormat);
-}
-
-//_____________________________________________________________________________
-//
-bool				AUBase::IsStreamFormatWritable(	AudioUnitScope					scope,
-													AudioUnitElement				element)
-{
-	switch (scope) {
-	case kAudioUnitScope_Input:
-		{
-			AUInputElement *input = GetInput(element);
-			if (input->HasConnection()) return false;	// can't write format when input comes from connection
-		}
-		// ... fall ...
-	case kAudioUnitScope_Output:
-		return StreamFormatWritable(scope, element);
-
-//#warning "aliasing of global scope format should be pushed to subclasses"
-	case kAudioUnitScope_Global:
-		return StreamFormatWritable(kAudioUnitScope_Output, 0);
-	}
-	return false;
-}
-
-//_____________________________________________________________________________
-//
-const CAStreamBasicDescription &
-					AUBase::GetStreamFormat(		AudioUnitScope					inScope,
-													AudioUnitElement				inElement)
-{
-//#warning "aliasing of global scope format should be pushed to subclasses"
-	AUIOElement *element;
-
-	switch (inScope) {
-	case kAudioUnitScope_Input:
-		element = Inputs().GetIOElement(inElement);
-		break;
-	case kAudioUnitScope_Output:
-		element = Outputs().GetIOElement(inElement);
-		break;
-	case kAudioUnitScope_Global:	// global stream description is an alias for that of output 0
-		element = Outputs().GetIOElement(0);
-		break;
-	default:
-		COMPONENT_THROW(kAudioUnitErr_InvalidScope);
-	}
-	return element->GetStreamFormat();
-}
-
-OSStatus			AUBase::SetBusCount(	AudioUnitScope					inScope,
-											UInt32 							inCount)
-{
-	if (IsInitialized())
-		return kAudioUnitErr_Initialized;
-
-	GetScope(inScope).SetNumberOfElements(inCount);
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::ChangeStreamFormat(		AudioUnitScope					inScope,
-													AudioUnitElement				inElement,
-													const CAStreamBasicDescription & inPrevFormat,
-													const CAStreamBasicDescription &	inNewFormat)
-{
-//#warning "aliasing of global scope format should be pushed to subclasses"
-	AUIOElement *element;
-
-	switch (inScope) {
-	case kAudioUnitScope_Input:
-		element = Inputs().GetIOElement(inElement);
-		break;
-	case kAudioUnitScope_Output:
-		element = Outputs().GetIOElement(inElement);
-		break;
-	case kAudioUnitScope_Global:
-		element = Outputs().GetIOElement(0);
-		break;
-	default:
-		COMPONENT_THROW(kAudioUnitErr_InvalidScope);
-	}
-	element->SetStreamFormat(inNewFormat);
-	PropertyChanged(kAudioUnitProperty_StreamFormat, inScope, inElement);
-	return noErr;
-}
-
-UInt32		AUBase::GetChannelLayoutTags(	AudioUnitScope				inScope,
-											AudioUnitElement 			inElement,
-											AudioChannelLayoutTag *		outLayoutTags)
-{
-	return GetIOElement(inScope, inElement)->GetChannelLayoutTags(outLayoutTags);
-}
-
-UInt32		AUBase::GetAudioChannelLayout(	AudioUnitScope				scope,
-											AudioUnitElement 			element,
-											AudioChannelLayout *		outLayoutPtr,
-											Boolean &					outWritable)
-{
-	AUIOElement * el = GetIOElement(scope, element);
-	return el->GetAudioChannelLayout(outLayoutPtr, outWritable);
-}
-
-OSStatus	AUBase::RemoveAudioChannelLayout(			AudioUnitScope				inScope,
-														AudioUnitElement			inElement)
-{
-	OSStatus result = noErr;
-	AUIOElement * el = GetIOElement(inScope, inElement);
-	Boolean writable;
-	if (el->GetAudioChannelLayout(NULL, writable)) {
-		result = el->RemoveAudioChannelLayout();
-	}
-	return result;
-}
-
-OSStatus 	AUBase::SetAudioChannelLayout(				AudioUnitScope 				inScope,
-														AudioUnitElement 			inElement,
-														const AudioChannelLayout *	inLayout)
-{
-	AUIOElement* ioEl = GetIOElement (inScope, inElement);
-
-	// the num channels of the layout HAS TO MATCH the current channels of the Element's stream format
-	UInt32 currentChannels = ioEl->GetStreamFormat().NumberChannels();
-	UInt32 numChannelsInLayout = CAAudioChannelLayout::NumberChannels(*inLayout);
-	if (currentChannels != numChannelsInLayout)
-		return kAudioUnitErr_InvalidPropertyValue;
-
-	UInt32 numLayouts = GetChannelLayoutTags (inScope, inElement, NULL);
-	if (numLayouts == 0)
-		return kAudioUnitErr_InvalidProperty;
-	AudioChannelLayoutTag *tags = (AudioChannelLayoutTag *)CA_malloc (numLayouts * sizeof (AudioChannelLayoutTag));
-	GetChannelLayoutTags (inScope, inElement, tags);
-	bool foundTag = false;
-	for (unsigned int i = 0; i < numLayouts; ++i) {
-		if (tags[i] == inLayout->mChannelLayoutTag || tags[i] == kAudioChannelLayoutTag_UseChannelDescriptions) {
-			foundTag = true;
-			break;
-		}
-	}
-	free(tags);
-
-	if (foundTag == false)
-		return kAudioUnitErr_InvalidPropertyValue;
-
-	return ioEl->SetAudioChannelLayout(*inLayout);
-}
-
-static void AddNumToDictionary (CFMutableDictionaryRef dict, CFStringRef key, SInt32 value)
-{
-	CFNumberRef num = CFNumberCreate (NULL, kCFNumberSInt32Type, &value);
-	CFDictionarySetValue (dict, key, num);
-	CFRelease (num);
-}
-
-#define kCurrentSavedStateVersion 0
-
-OSStatus			AUBase::SaveState(		CFPropertyListRef * outData)
-{
-	AudioComponentDescription desc = GetComponentDescription();
-
-	CFMutableDictionaryRef dict = CFDictionaryCreateMutable	(NULL, 0,
-								&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
-
-// first step -> save the version to the data ref
-	SInt32 value = kCurrentSavedStateVersion;
-	AddNumToDictionary (dict, kVersionString, value);
-
-// second step -> save the component type, subtype, manu to the data ref
-	value = desc.componentType;
-	AddNumToDictionary (dict, kTypeString, value);
-
-	value = desc.componentSubType;
-	AddNumToDictionary (dict, kSubtypeString, value);
-
-	value = desc.componentManufacturer;
-	AddNumToDictionary (dict, kManufacturerString, value);
-
-// fourth step -> save the state of all parameters on all scopes and elements
-	CFMutableDataRef data = CFDataCreateMutable(NULL, 0);
-	for (AudioUnitScope iscope = 0; iscope < 3; ++iscope) {
-		AUScope &scope = GetScope(iscope);
-		scope.SaveState (data);
-	}
-
-    SaveExtendedScopes(data);
-
-// save all this in the data section of the dictionary
-	CFDictionarySetValue(dict, kDataString, data);
-	CFRelease (data);
-
-//OK - now we're going to do some properties
-//save the preset name...
-	CFDictionarySetValue (dict, kNameString, mCurrentPreset.presetName);
-
-// Does the unit support the RenderQuality property - if so, save it...
-	value = 0;
-	OSStatus result = DispatchGetProperty (kAudioUnitProperty_RenderQuality,
-								kAudioUnitScope_Global,
-								0,
-								&value);
-
-	if (result == noErr) {
-		AddNumToDictionary (dict, kRenderQualityString, value);
-	}
-
-// Does the unit support the CPULoad Quality property - if so, save it...
-	Float32 cpuLoad;
-	result = DispatchGetProperty (6/*kAudioUnitProperty_CPULoad*/,
-								kAudioUnitScope_Global,
-								0,
-								&cpuLoad);
-
-	if (result == noErr) {
-		CFNumberRef num = CFNumberCreate (NULL, kCFNumberFloatType, &cpuLoad);
-		CFDictionarySetValue (dict, kCPULoadString, num);
-		CFRelease (num);
-	}
-
-// Do we have any element names for any of our scopes?
-	// first check to see if we have any names...
-	bool foundName = false;
-	for (AudioUnitScope i = 0; i < kNumScopes; ++i) {
-		foundName = GetScope (i).HasElementWithName();
-		if (foundName)
-			break;
-	}
-		// OK - we found a name away we go...
-	if (foundName) {
-		CFMutableDictionaryRef nameDict = CFDictionaryCreateMutable	(NULL, 0,
-								&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
-		for (AudioUnitScope i = 0; i < kNumScopes; ++i) {
-			GetScope (i).AddElementNamesToDict (nameDict);
-		}
-
-		CFDictionarySetValue (dict, kElementNameString, nameDict);
-		CFRelease (nameDict);
-	}
-
-// we're done!!!
-	*outData = dict;
-
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::RestoreState(	CFPropertyListRef	plist)
-{
-	if (CFGetTypeID(plist) != CFDictionaryGetTypeID()) return kAudioUnitErr_InvalidPropertyValue;
-
-	AudioComponentDescription desc = GetComponentDescription();
-
-	CFDictionaryRef dict = static_cast<CFDictionaryRef>(plist);
-
-// zeroeth step - make sure the Part key is NOT present, as this method is used
-// to restore the GLOBAL state of the dictionary
-	if (CFDictionaryContainsKey (dict, kPartString))
-		return kAudioUnitErr_InvalidPropertyValue;
-
-// first step -> check the saved version in the data ref
-// at this point we're only dealing with version==0
-	CFNumberRef cfnum = reinterpret_cast<CFNumberRef>(CFDictionaryGetValue (dict, kVersionString));
-	if (cfnum == NULL) return kAudioUnitErr_InvalidPropertyValue;
-	SInt32 value;
-	CFNumberGetValue (cfnum, kCFNumberSInt32Type, &value);
-	if (value != kCurrentSavedStateVersion) return kAudioUnitErr_InvalidPropertyValue;
-
-// second step -> check that this data belongs to this kind of audio unit
-// by checking the component subtype and manuID
-// We're not checking the type, since there may be different versions (effect, format-converter, offline)
-// of essentially the same AU
-	cfnum = reinterpret_cast<CFNumberRef>(CFDictionaryGetValue (dict, kSubtypeString));
-	if (cfnum == NULL) return kAudioUnitErr_InvalidPropertyValue;
-	CFNumberGetValue (cfnum, kCFNumberSInt32Type, &value);
-	if (UInt32(value) != desc.componentSubType) return kAudioUnitErr_InvalidPropertyValue;
-
-	cfnum = reinterpret_cast<CFNumberRef>(CFDictionaryGetValue (dict, kManufacturerString));
-	if (cfnum == NULL) return kAudioUnitErr_InvalidPropertyValue;
-	CFNumberGetValue (cfnum, kCFNumberSInt32Type, &value);
-	if (UInt32(value) != desc.componentManufacturer) return kAudioUnitErr_InvalidPropertyValue;
-
-// fourth step -> restore the state of all of the parameters for each scope and element
-	CFDataRef data = reinterpret_cast<CFDataRef>(CFDictionaryGetValue (dict, kDataString));
-	if (data != NULL)
-	{
-		const UInt8 *p, *pend;
-
-		p = CFDataGetBytePtr(data);
-		pend = p + CFDataGetLength(data);
-
-		// we have a zero length data, which may just mean there were no parameters to save!
-		//	if (p >= pend) return noErr;
-
-		while (p < pend) {
-            UInt32 scopeIdx = CFSwapInt32BigToHost(*(UInt32 *)p);
-            p += sizeof(UInt32);
-
-			AUScope &scope = GetScope(scopeIdx);
-            p = scope.RestoreState(p);
-        }
-	}
-
-//OK - now we're going to do some properties
-//restore the preset name...
-	CFStringRef name = reinterpret_cast<CFStringRef>(CFDictionaryGetValue (dict, kNameString));
-	if (mCurrentPreset.presetName) CFRelease (mCurrentPreset.presetName);
-	if (name)
-	{
-		mCurrentPreset.presetName = name;
-		mCurrentPreset.presetNumber = -1;
-	}
-	else { // no name entry make the default one
-		mCurrentPreset.presetName = kUntitledString;
-		mCurrentPreset.presetNumber = -1;
-	}
-
-	CFRetain (mCurrentPreset.presetName);
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-#ifndef __LP64__
-	PropertyChanged(kAudioUnitProperty_CurrentPreset, kAudioUnitScope_Global, 0);
-#endif
-#endif
-	PropertyChanged(kAudioUnitProperty_PresentPreset, kAudioUnitScope_Global, 0);
-
-// Does the dict contain render quality information?
-	if (CFDictionaryGetValueIfPresent (dict, kRenderQualityString, reinterpret_cast<const void**>(&cfnum)))
-	{
-		CFNumberGetValue (cfnum, kCFNumberSInt32Type, &value);
-		DispatchSetProperty (kAudioUnitProperty_RenderQuality,
-								kAudioUnitScope_Global,
-								0,
-								&value,
-								sizeof(value));
-	}
-
-// Does the unit support the CPULoad Quality property - if so, save it...
-	if (CFDictionaryGetValueIfPresent (dict, kCPULoadString, reinterpret_cast<const void**>(&cfnum)))
-	{
-		Float32 floatValue;
-		CFNumberGetValue (cfnum, kCFNumberFloatType, &floatValue);
-		DispatchSetProperty (6/*kAudioUnitProperty_CPULoad*/,
-								kAudioUnitScope_Global,
-								0,
-								&floatValue,
-								sizeof(floatValue));
-	}
-
-// Do we have any element names for any of our scopes?
-	CFDictionaryRef nameDict;
-	if (CFDictionaryGetValueIfPresent (dict, kElementNameString, reinterpret_cast<const void**>(&nameDict)))
-	{
-		char string[64];
-		for (int i = 0; i < kNumScopes; ++i)
-		{
-			snprintf (string, sizeof(string), "%d", i);
-			CFStringRef key = CFStringCreateWithCString (NULL, string, kCFStringEncodingASCII);
-			CFDictionaryRef elementDict;
-			if (CFDictionaryGetValueIfPresent (nameDict, key, reinterpret_cast<const void**>(&elementDict)))
-			{
-				bool didAddElements = GetScope (i).RestoreElementNames (elementDict);
-				if (didAddElements)
-					PropertyChanged (kAudioUnitProperty_ElementCount, i, 0);
-			}
-			CFRelease (key);
-		}
-	}
-
-	return noErr;
-}
-
-OSStatus			AUBase::GetPresets (			CFArrayRef * 					outData) const
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-OSStatus			AUBase::NewFactoryPresetSet (const AUPreset & inNewFactoryPreset)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-OSStatus            AUBase::NewCustomPresetSet (const AUPreset & inNewCustomPreset)
-{
-    CFRelease (mCurrentPreset.presetName);
-    mCurrentPreset = inNewCustomPreset;
-    CFRetain (mCurrentPreset.presetName);
-    return noErr;
-}
-
-		// set the default preset for the unit -> the number of the preset MUST be >= 0
-		// and the name should be valid, or the preset WON'T take
-bool				AUBase::SetAFactoryPresetAsCurrent (const AUPreset & inPreset)
-{
-	if (inPreset.presetNumber < 0 || inPreset.presetName == NULL) return false;
-	CFRelease (mCurrentPreset.presetName);
-	mCurrentPreset = inPreset;
-	CFRetain (mCurrentPreset.presetName);
-	return true;
-}
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-int			AUBase::GetNumCustomUIComponents ()
-{
-	return 0;
-}
-
-void		AUBase::GetUIComponentDescs (ComponentDescription* inDescArray) {}
-#endif
-
-bool		AUBase::HasIcon ()
-{
-#if !CA_NO_AU_UI_FEATURES
-	CFURLRef url = CopyIconLocation();
-	if (url) {
-		CFRelease (url);
-		return true;
-	}
-#endif
-	return false;
-}
-
-CFURLRef	AUBase::CopyIconLocation ()
-{
-	return NULL;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::GetParameterList(		AudioUnitScope					inScope,
-													AudioUnitParameterID *			outParameterList,
-													UInt32 &						outNumParameters)
-{
-	AUScope &scope = GetScope(inScope);
-	AUElement *elementWithMostParameters = NULL;
-	UInt32 maxNumParams = 0;
-
-	int nElems = scope.GetNumberOfElements();
-	for (int ielem = 0; ielem < nElems; ++ielem) {
-		AUElement *element = scope.GetElement(ielem);
-		UInt32 nParams = element->GetNumberOfParameters();
-		if (nParams > maxNumParams) {
-			maxNumParams = nParams;
-			elementWithMostParameters = element;
-		}
-	}
-
-	if (outParameterList != NULL && elementWithMostParameters != NULL)
-		elementWithMostParameters->GetParameterList(outParameterList);
-
-	outNumParameters = maxNumParams;
-	return noErr;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::GetParameterInfo(		AudioUnitScope			inScope,
-													AudioUnitParameterID	inParameterID,
-													AudioUnitParameterInfo	&outParameterInfo )
-{
-	return kAudioUnitErr_InvalidParameter;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::GetParameterValueStrings(AudioUnitScope			inScope,
-													AudioUnitParameterID	inParameterID,
-													CFArrayRef *			outStrings)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::GetParameterHistoryInfo(	AudioUnitScope					inScope,
-														AudioUnitParameterID			inParameterID,
-														Float32 &						outUpdatesPerSecond,
-														Float32 &						outHistoryDurationInSeconds)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-
-//_____________________________________________________________________________
-//
-OSStatus			AUBase::CopyClumpName(			AudioUnitScope			inScope,
-													UInt32					inClumpID,
-													UInt32					inDesiredNameLength,
-													CFStringRef *			outClumpName)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-//_____________________________________________________________________________
-//
-void				AUBase::SetNumberOfElements(	AudioUnitScope					inScope,
-													UInt32							numElements)
-{
-	if (inScope == kAudioUnitScope_Global && numElements != 1)
-		COMPONENT_THROW(kAudioUnitErr_InvalidScope);
-
-	GetScope(inScope).SetNumberOfElements(numElements);
-}
-
-//_____________________________________________________________________________
-//
-AUElement *			AUBase::CreateElement(			AudioUnitScope					scope,
-													AudioUnitElement				element)
-{
-	switch (scope) {
-	case kAudioUnitScope_Global:
-		return new AUElement(this);
-	case kAudioUnitScope_Input:
-		return new AUInputElement(this);
-	case kAudioUnitScope_Output:
-		return new AUOutputElement(this);
-#if !CA_BASIC_AU_FEATURES
-	case kAudioUnitScope_Group:
-		return new AUElement(this);
-	case kAudioUnitScope_Part:
-		return new AUElement(this);
-#endif
-	}
-	COMPONENT_THROW(kAudioUnitErr_InvalidScope);
-
-	return NULL;	// get rid of compiler warning
-}
-
-//_____________________________________________________________________________
-//
-bool	AUBase::FormatIsCanonical(		const CAStreamBasicDescription &f)
-{
-	return (f.mFormatID == kAudioFormatLinearPCM
-		&&	f.mFramesPerPacket == 1
-		&&	f.mBytesPerPacket == f.mBytesPerFrame
-//		&&	f.mChannelsPerFrame >= 0	-- this is always true since it's unsigned
-		// so far, it's a valid PCM format
-#if CA_PREFER_FIXED_POINT
-		&&	(f.mFormatFlags & kLinearPCMFormatFlagIsFloat) == 0
-		&&	(((f.mFormatFlags & kLinearPCMFormatFlagsSampleFractionMask) >> kLinearPCMFormatFlagsSampleFractionShift) == kAudioUnitSampleFractionBits)
-#else
-		&&	(f.mFormatFlags & kLinearPCMFormatFlagIsFloat) != 0
-#endif
-		&&	((f.mChannelsPerFrame == 1) || ((f.mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0) == (mAudioUnitAPIVersion == 1))
-#if TARGET_RT_BIG_ENDIAN
-		&&	(f.mFormatFlags & kLinearPCMFormatFlagIsBigEndian) != 0
-#else
-		&&	(f.mFormatFlags & kLinearPCMFormatFlagIsBigEndian) == 0
-#endif
-		&&	f.mBitsPerChannel == 8 * sizeof(AudioUnitSampleType)
-		&&	f.mBytesPerFrame == f.NumberInterleavedChannels() * sizeof(AudioUnitSampleType)
-		);
-}
-
-//_____________________________________________________________________________
-//
-void	AUBase::MakeCanonicalFormat(	CAStreamBasicDescription &		f,
-										int								nChannels)
-{
-	f.SetAUCanonical(nChannels, mAudioUnitAPIVersion < 2);	// interleaved for v1, non for v2
-	f.mSampleRate = 0.0;
-}
-
-const Float64 AUBase::kNoLastRenderedSampleTime = -1.;
-
-#include "AUBaseHelper.h"
-
-char*	AUBase::GetLoggingString () const
-{
-	if (mLogString) return mLogString;
-
-	AudioComponentDescription desc = GetComponentDescription();
-
-	const size_t logStringSize = 256;
-	const_cast<AUBase*>(this)->mLogString = new char[logStringSize];
-	char str[24];
-	char str1[24];
-	char str2[24];
-	snprintf (const_cast<AUBase*>(this)->mLogString, logStringSize, "AU (%p): %s %s %s",
-		GetComponentInstance(),
-		CAStringForOSType(desc.componentType, str, sizeof(str)),
-		CAStringForOSType(desc.componentSubType, str1, sizeof(str1)),
-		CAStringForOSType(desc.componentManufacturer, str2, sizeof(str2)));
-
-	return mLogString;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.h
deleted file mode 100644
index c67032c..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.h
+++ /dev/null
@@ -1,1055 +0,0 @@
-/*
-     File: AUBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUBase_h__
-#define __AUBase_h__
-
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-
-#include <TargetConditionals.h>
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-
-#if TARGET_OS_MAC
-	#include <pthread.h>
-#elif TARGET_OS_WIN32
-	#include <windows.h>
-#else
-	#error Unsupported Operating System
-#endif
-
-#include <vector>
-
-#include "AUScopeElement.h"
-#include "AUInputElement.h"
-#include "AUOutputElement.h"
-#include "AUBuffer.h"
-#include "CAMath.h"
-#include "CAThreadSafeList.h"
-#include "CAVectorUnit.h"
-#include "CAMutex.h"
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <AudioUnit/AudioUnit.h>
-	#if !CA_BASIC_AU_FEATURES
-		#include <AudioUnit/MusicDevice.h>
-	#endif
-#else
-	#include "AudioUnit.h"
-	#if !CA_BASIC_AU_FEATURES
-		#include "MusicDevice.h"
-	#endif
-#endif
-
-#ifndef AUTRACE
-	#define AUTRACE(code, obj, a, b, c, d)
-#endif
-
-#include "AUPlugInDispatch.h"
-
-
-
-// ________________________________________________________________________
-// These are to be moved to the public AudioUnit headers
-
-#define kAUDefaultSampleRate		44100.0
-#if !TARGET_OS_WIN32
-#define kAUDefaultMaxFramesPerSlice	1156
-//this allows enough default frames for a 512 dest 44K and SRC from 96K
-// add a padding of 4 frames for any altivec rounding
-#else
-#define kAUDefaultMaxFramesPerSlice	2048
-#endif
-
-// ________________________________________________________________________
-
-/*! @class AUBase */
-class AUBase : public ComponentBase {
-public:
-
-	/*! @ctor AUBase */
-								AUBase(					AudioComponentInstance			inInstance,
-														UInt32							numInputElements,
-														UInt32							numOutputElements,
-														UInt32							numGroupElements = 0);
-	/*! @dtor AUBase */
-	virtual						~AUBase();
-
-	/*! @method PostConstructor */
-	virtual void				PostConstructor() { CreateElements(); }
-
-	/*! @method PreDestructor */
-	virtual void				PreDestructor();
-
-	/*! @method CreateElements */
-	void						CreateElements();
-									// Called immediately after construction, when virtual methods work.
-									// Or, a subclass may call this in order to have access to elements
-									// in its constructor.
-
-	/*! @method CreateExtendedElements */
-	virtual void CreateExtendedElements() {}
-
-#pragma mark -
-#pragma mark AU dispatch
-	// ________________________________________________________________________
-	// Virtual methods (mostly) directly corresponding to the entry points.  Many of these
-	// have useful implementations here and will not need overriding.
-
-	/*! @method DoInitialize */
-			OSStatus			DoInitialize();
-				// this implements the entry point and makes sure that initialization
-				// is only attempted exactly once...
-
-	/*! @method Initialize */
-	virtual OSStatus			Initialize();
-				// ... so that overrides to this method can assume that they will only
-				// be called exactly once.
-
-	/*! @method IsInitialized */
-			bool				IsInitialized() const { return mInitialized; }
-	/*! @method HasBegunInitializing */
-			bool				HasBegunInitializing() const { return mHasBegunInitializing; }
-
-	/*! @method DoCleanup */
-			void				DoCleanup();
-				// same pattern as with Initialize
-
-	/*! @method Cleanup */
-	virtual void				Cleanup();
-
-	/*! @method Reset */
-	virtual OSStatus			Reset(					AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement);
-
-	// Note about GetPropertyInfo, GetProperty, SetProperty:
-	// Certain properties are trapped out in these dispatch functions and handled with different virtual
-	// methods.  (To discourage hacks and keep vtable size down, these are non-virtual)
-
-	/*! @method DispatchGetPropertyInfo */
-			OSStatus			DispatchGetPropertyInfo(AudioUnitPropertyID				inID,
-														AudioUnitScope					inScope,
-														AudioUnitElement				inElement,
-														UInt32 &						outDataSize,
-														Boolean &						outWritable);
-
-	/*! @method DispatchGetProperty */
-			OSStatus			DispatchGetProperty(	AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement,
-														void *							outData);
-
-	/*! @method DispatchSetProperty */
-			OSStatus			DispatchSetProperty(	AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement,
-														const void *					inData,
-														UInt32 							inDataSize);
-
-			OSStatus			DispatchRemovePropertyValue(	AudioUnitPropertyID 	inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement);
-
-	/*! @method GetPropertyInfo */
-	virtual OSStatus			GetPropertyInfo(		AudioUnitPropertyID				inID,
-														AudioUnitScope					inScope,
-														AudioUnitElement				inElement,
-														UInt32 &						outDataSize,
-														Boolean &						outWritable);
-
-	/*! @method GetProperty */
-	virtual OSStatus			GetProperty(			AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement,
-														void *							outData);
-
-	/*! @method SetProperty */
-	virtual OSStatus			SetProperty(			AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement,
-														const void *					inData,
-														UInt32 							inDataSize);
-
-	/*! @method ClearPropertyUsage */
-	virtual OSStatus			RemovePropertyValue (	AudioUnitPropertyID		 		inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement);
-
-	/*! @method AddPropertyListener */
-	virtual OSStatus			AddPropertyListener(	AudioUnitPropertyID				inID,
-														AudioUnitPropertyListenerProc	inProc,
-														void *							inProcRefCon);
-
-	/*! @method RemovePropertyListener */
-	virtual OSStatus			RemovePropertyListener(	AudioUnitPropertyID				inID,
-														AudioUnitPropertyListenerProc	inProc,
-														void *							inProcRefCon,
-														bool							refConSpecified);
-
-	/*! @method SetRenderNotification */
-	virtual OSStatus			SetRenderNotification(	AURenderCallback		 		inProc,
-														void *							inRefCon);
-
-	/*! @method RemoveRenderNotification */
-	virtual OSStatus			RemoveRenderNotification(
-														AURenderCallback		 		inProc,
-														void *							inRefCon);
-
-	/*! @method GetParameter */
-	virtual OSStatus 	GetParameter(			AudioUnitParameterID			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement,
-														AudioUnitParameterValue &		outValue);
-
-	/*! @method SetParameter */
-	virtual OSStatus 	SetParameter(			AudioUnitParameterID			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement,
-														AudioUnitParameterValue			inValue,
-														UInt32							inBufferOffsetInFrames);
-
-	/*! @method CanScheduleParams */
-	virtual bool CanScheduleParameters() const = 0;
-
-	/*! @method ScheduleParameter */
-	virtual OSStatus 	ScheduleParameter (		const AudioUnitParameterEvent 	*inParameterEvent,
-														UInt32							inNumEvents);
-
-
-	/*! @method DoRender */
-	OSStatus 	DoRender(								AudioUnitRenderActionFlags &	ioActionFlags,
-														const AudioTimeStamp &			inTimeStamp,
-														UInt32							inBusNumber,
-														UInt32							inNumberFrames,
-														AudioBufferList &				ioData);
-
-
-	/*! @method Process */
-	OSStatus	DoProcess (							AudioUnitRenderActionFlags  &		ioActionFlags,
-													const AudioTimeStamp &				inTimeStamp,
-													UInt32								inFramesToProcess,
-													AudioBufferList &					ioData);
-
-	/*! @method ProcessMultiple */
-	OSStatus	DoProcessMultiple (					AudioUnitRenderActionFlags  &		ioActionFlags,
-													const AudioTimeStamp &				inTimeStamp,
-													UInt32								inFramesToProcess,
-													UInt32								inNumberInputBufferLists,
-													const AudioBufferList **			inInputBufferLists,
-													UInt32 								inNumberOutputBufferLists,
-													AudioBufferList **					ioOutputBufferLists);
-
-	/*! @method ProcessBufferLists */
-	virtual OSStatus	ProcessBufferLists(			AudioUnitRenderActionFlags &		ioActionFlags,
-													const AudioBufferList &				inBuffer,
-													AudioBufferList &					outBuffer,
-													UInt32								inFramesToProcess )
-						{
-							return kAudio_UnimplementedError;
-						}
-
-	/*! @method ProcessMultipleBufferLists */
-	virtual OSStatus	ProcessMultipleBufferLists(	AudioUnitRenderActionFlags &		ioActionFlags,
-													UInt32								inFramesToProcess,
-												    UInt32								inNumberInputBufferLists,
-												    const AudioBufferList **			inInputBufferLists,
-												    UInt32							 	inNumberOutputBufferLists,
-												    AudioBufferList **					ioOutputBufferLists)
-						{
-							return kAudio_UnimplementedError;
-						}
-
-	/*! @method ComplexRender */
-	virtual OSStatus	ComplexRender(				AudioUnitRenderActionFlags &		ioActionFlags,
-													const AudioTimeStamp &				inTimeStamp,
-													UInt32								inOutputBusNumber,
-													UInt32								inNumberOfPackets,
-													UInt32 *							outNumberOfPackets,
-													AudioStreamPacketDescription *		outPacketDescriptions,
-													AudioBufferList &					ioData,
-													void *								outMetadata,
-													UInt32 *							outMetadataByteSize)
-						{
-							return kAudio_UnimplementedError;
-						}
-
-	// Override this method if your AU processes multiple output busses completely independently --
-	// you'll want to just call Render without the NeedsToRender check.
-	// Otherwise, override Render().
-	//
-	// N.B. Implementations of this method can assume that the output's buffer list has already been
-	// prepared and access it with GetOutput(inBusNumber)->GetBufferList() instead of
-	// GetOutput(inBusNumber)->PrepareBuffer(nFrames) -- if PrepareBuffer is called, a
-	// copy may occur after rendering.
-	/*! @method RenderBus */
-	virtual OSStatus			RenderBus(				AudioUnitRenderActionFlags &	ioActionFlags,
-														const AudioTimeStamp &			inTimeStamp,
-														UInt32							inBusNumber,
-														UInt32							inNumberFrames)
-								{
-									if (NeedsToRender(inTimeStamp))
-										return Render(ioActionFlags, inTimeStamp, inNumberFrames);
-									return noErr;	// was presumably already rendered via another bus
-								}
-
-	// N.B. For a unit with only one output bus, it can assume in its implementation of this
-	// method that the output's buffer list has already been prepared and access it with
-	// GetOutput(0)->GetBufferList() instead of GetOutput(0)->PrepareBuffer(nFrames)
-	//  -- if PrepareBuffer is called, a copy may occur after rendering.
-	/*! @method Render */
-	virtual OSStatus			Render(					AudioUnitRenderActionFlags &	ioActionFlags,
-														const AudioTimeStamp &			inTimeStamp,
-														UInt32							inNumberFrames)
-								{
-									return noErr;
-								}
-
-
-#pragma mark -
-#pragma mark Property Dispatch
-
-	static const Float64 kNoLastRenderedSampleTime;
-
-	// ________________________________________________________________________
-	// These are generated from DispatchGetProperty/DispatchGetPropertyInfo/DispatchSetProperty
-
-	/*! @method BusCountWritable */
-	virtual bool				BusCountWritable(		AudioUnitScope					inScope)
-								{
-									return false;
-								}
-	virtual OSStatus			SetBusCount(		AudioUnitScope					inScope,
-													UInt32							inCount);
-
-	/*! @method SetConnection */
-	virtual OSStatus			SetConnection(			const AudioUnitConnection &		inConnection);
-
-	/*! @method SetInputCallback */
-	virtual OSStatus			SetInputCallback(		UInt32							inPropertyID,
-														AudioUnitElement 				inElement,
-														AURenderCallback				inProc,
-														void *							inRefCon);
-
-	/*! @method GetParameterList */
-	virtual OSStatus			GetParameterList(		AudioUnitScope					inScope,
-														AudioUnitParameterID *			outParameterList,
-														UInt32 &						outNumParameters);
-															// outParameterList may be a null pointer
-
-	/*! @method GetParameterInfo */
-	virtual OSStatus			GetParameterInfo(		AudioUnitScope					inScope,
-														AudioUnitParameterID			inParameterID,
-														AudioUnitParameterInfo &		outParameterInfo);
-
-	virtual OSStatus			GetParameterHistoryInfo(AudioUnitScope					inScope,
-														AudioUnitParameterID			inParameterID,
-														Float32 &						outUpdatesPerSecond,
-														Float32 &						outHistoryDurationInSeconds);
-
-	/*! @method SaveState */
-	virtual OSStatus			SaveState(				CFPropertyListRef *				outData);
-
-    /*! @method SaveExtendedScopes */
-	virtual void                SaveExtendedScopes(		CFMutableDataRef				outData) {};
-
-	/*! @method RestoreState */
-	virtual OSStatus			RestoreState(			CFPropertyListRef				inData);
-
-	/*! @method GetParameterValueStrings */
-	virtual OSStatus			GetParameterValueStrings(AudioUnitScope					inScope,
-														AudioUnitParameterID			inParameterID,
-														CFArrayRef *					outStrings);
-
-	/*! @method CopyClumpName */
-	virtual OSStatus			CopyClumpName(			AudioUnitScope					inScope,
-														UInt32							inClumpID,
-														UInt32							inDesiredNameLength,
-														CFStringRef *					outClumpName);
-
-	/*! @method GetPresets */
-	virtual OSStatus			GetPresets (			CFArrayRef * 					outData) const;
-
-		// set the default preset for the unit -> the number of the preset MUST be >= 0
-		// and the name should be valid, or the preset WON'T take
-	/*! @method SetAFactoryPresetAsCurrent */
-	bool						SetAFactoryPresetAsCurrent (const AUPreset & inPreset);
-
-		// Called when someone sets a new, valid preset
-		// If this is a valid preset, then the subclass sets its state to that preset
-		// and returns noErr.
-		// If not a valid preset, return an error, and the pre-existing preset is restored
-	/*! @method NewFactoryPresetSet */
-	virtual OSStatus			NewFactoryPresetSet (const AUPreset & inNewFactoryPreset);
-
-	/*! @method NewCustomPresetSet */
-	virtual OSStatus            NewCustomPresetSet (const AUPreset & inNewCustomPreset);
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	/*! @method GetNumCustomUIComponents */
-	virtual int					GetNumCustomUIComponents ();
-
-	/*! @method GetUIComponentDescs */
-	virtual void				GetUIComponentDescs (ComponentDescription* inDescArray);
-#endif
-
-	/*! @method CopyIconLocation */
-	virtual CFURLRef			CopyIconLocation ();
-
-	// default is no latency, and unimplemented tail time
-	/*! @method GetLatency */
-    virtual Float64				GetLatency() {return 0.0;}
-	/*! @method GetTailTime */
-    virtual Float64				GetTailTime() {return 0;}
-	/*! @method SupportsRampAndTail */
-	virtual	bool				SupportsTail () { return false; }
-
-	/*! @method IsStreamFormatWritable */
-			bool				IsStreamFormatWritable(	AudioUnitScope					scope,
-														AudioUnitElement				element);
-
-	/*! @method StreamFormatWritable */
-	virtual bool				StreamFormatWritable(	AudioUnitScope					scope,
-														AudioUnitElement				element) = 0;
-															// scope will always be input or output
-
-			// pass in a pointer to get the struct, and num channel infos
-			// you can pass in NULL to just get the number
-			// a return value of 0 (the default in AUBase) means the property is not supported...
-	/*! @method SupportedNumChannels */
-	virtual UInt32				SupportedNumChannels (	const AUChannelInfo**			outInfo);
-
-	/*! @method ValidFormat */
-	virtual bool				ValidFormat(			AudioUnitScope					inScope,
-														AudioUnitElement				inElement,
-														const CAStreamBasicDescription & inNewFormat);
-															// Will only be called after StreamFormatWritable
-															// has succeeded.
-															// Default implementation requires canonical format:
-															// native-endian 32-bit float, any sample rate,
-															// any number of channels; override when other
-															// formats are supported.  A subclass's override can
-															// choose to always return true and trap invalid
-															// formats in ChangeStreamFormat.
-
-
-	/*! @method FormatIsCanonical */
-			bool				FormatIsCanonical(		const CAStreamBasicDescription &format);
-
-	/*! @method MakeCanonicalFormat */
-			void				MakeCanonicalFormat(	CAStreamBasicDescription &	outDesc,
-														int							numChannels = 2);
-
-	/*! @method GetStreamFormat */
-	virtual const CAStreamBasicDescription &
-								GetStreamFormat(		AudioUnitScope					inScope,
-														AudioUnitElement				inElement);
-
-	/*! @method ChangeStreamFormat */
-	virtual	OSStatus			ChangeStreamFormat(		AudioUnitScope					inScope,
-														AudioUnitElement				inElement,
-														const CAStreamBasicDescription & inPrevFormat,
-														const CAStreamBasicDescription & inNewFormat);
-															// Will only be called after StreamFormatWritable
-															// and ValidFormat have succeeded.
-
-	// ________________________________________________________________________
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	/*! @method ComponentEntryDispatch */
-	static OSStatus			ComponentEntryDispatch(	ComponentParameters *			params,
-														AUBase *						This);
-#endif
-
-	// ________________________________________________________________________
-	// Methods useful for subclasses
-
-	/*! @method GetScope */
-	AUScope &					GetScope(				AudioUnitScope					inScope)
-	{
-		if (inScope >= kNumScopes) {
-			AUScope * scope = GetScopeExtended(inScope);
-			if (!scope) COMPONENT_THROW(kAudioUnitErr_InvalidScope);
-			return *scope;
-		}
-		return mScopes[inScope];
-	}
-
-	/*! @method GetScopeExtended */
-	virtual AUScope *			GetScopeExtended (AudioUnitScope inScope) { return NULL; }
-
-	/*! @method GlobalScope */
-	AUScope &					GlobalScope() { return mScopes[kAudioUnitScope_Global]; }
-	/*! @method Inputs */
-	AUScope &					Inputs()	{ return mScopes[kAudioUnitScope_Input]; }
-	/*! @method Outputs */
-	AUScope &					Outputs()	{ return mScopes[kAudioUnitScope_Output]; }
-#if !CA_BASIC_AU_FEATURES
-	/*! @method Groups */
-	AUScope &					Groups()	{ return mScopes[kAudioUnitScope_Group]; }
-#endif
-	/*! @method Globals */
-	AUElement *					Globals()	{ return mScopes[kAudioUnitScope_Global].GetElement(0); }
-
-	/*! @method SetNumberOfElements */
-	void						SetNumberOfElements(	AudioUnitScope					inScope,
-														UInt32							numElements);
-
-	/*! @method GetElement */
-	AUElement *					GetElement(				AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement)
-	{
-		return GetScope(inScope).GetElement(inElement);
-	}
-
-	/*! @method GetIOElement */
-	AUIOElement *				GetIOElement(			AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement)
-	{
-		return GetScope(inScope).GetIOElement(inElement);
-	}
-
-	/*! @method SafeGetElement */
-	AUElement *					SafeGetElement(			AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement)
-	{
-		return GetScope(inScope).SafeGetElement(inElement);
-	}
-
-	/*! @method GetInput */
-	AUInputElement *			GetInput(				AudioUnitElement				inElement)
-	{
-		return static_cast<AUInputElement *>(Inputs().SafeGetElement(inElement));
-	}
-
-	/*! @method GetOutput */
-	AUOutputElement *			GetOutput(				AudioUnitElement				inElement)
-	{
-		return static_cast<AUOutputElement *>(Outputs().SafeGetElement(inElement));
-	}
-
-#if !CA_BASIC_AU_FEATURES
-	/*! @method GetGroup */
-	AUElement *					GetGroup(				AudioUnitElement				inElement)
-	{
-		return Groups().SafeGetElement(inElement);
-	}
-#endif
-
-	/*! @method PullInput */
-	OSStatus					PullInput(				UInt32	 					inBusNumber,
-														AudioUnitRenderActionFlags &ioActionFlags,
-														const AudioTimeStamp &		inTimeStamp,
-														UInt32						inNumberFrames)
-	{
-		AUInputElement *input = GetInput(inBusNumber);	// throws if error
-		return input->PullInput(ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames);
-	}
-
-	/*! @method GetMaxFramesPerSlice */
-	UInt32						GetMaxFramesPerSlice() const { return mMaxFramesPerSlice; }
-	/*! @method UsesFixedBlockSize */
-	bool						UsesFixedBlockSize() const { return mUsesFixedBlockSize; }
-	/*! @method SetUsesFixedBlockSize */
-	void						SetUsesFixedBlockSize(bool inUsesFixedBlockSize) { mUsesFixedBlockSize = inUsesFixedBlockSize; }
-
-	/*! @method GetVectorUnitType */
-	static SInt32				GetVectorUnitType() { return sVectorUnitType; }
-	/*! @method HasVectorUnit */
-	static bool					HasVectorUnit() { return sVectorUnitType > 0; }
-	/*! @method HasAltivec */
-	static bool					HasAltivec() { return sVectorUnitType == kVecAltivec; }
-	/*! @method HasSSE2 */
-	static bool					HasSSE2() { return sVectorUnitType >= kVecSSE2; }
-	/*! @method HasSSE3 */
-	static bool					HasSSE3() { return sVectorUnitType >= kVecSSE3; }
-
-	/*! @method AudioUnitAPIVersion */
-	UInt8						AudioUnitAPIVersion() const { return mAudioUnitAPIVersion; }
-
-	/*! @method IsRenderThread */
-	bool						InRenderThread () const
-								{
-#if TARGET_OS_MAC
-									return (mRenderThreadID ? pthread_equal (mRenderThreadID, pthread_self()) : false);
-#elif TARGET_OS_WIN32
-									return (mRenderThreadID ? mRenderThreadID == GetCurrentThreadId() : false);
-#endif
-								}
-
-	/*! @method HasInput */
-	bool						HasInput(				AudioUnitElement				inElement) {
-									AUInputElement *in = static_cast<AUInputElement *>(Inputs().GetElement(inElement));
-									return in != NULL && in->IsActive();
-								}
-									// says whether an input is connected or has a callback
-
-	/*! @method PropertyChanged */
-	virtual void				PropertyChanged(		AudioUnitPropertyID				inID,
-														AudioUnitScope					inScope,
-														AudioUnitElement				inElement);
-
-#if !CA_NO_AU_UI_FEATURES
-	// These calls can be used to call a Host's Callbacks. The method returns -1 if the host
-	// hasn't supplied the callback. Any other result is returned by the host.
-	// As in the API contract, for a parameter's value, you specify a pointer
-	// to that data type. Specify NULL for a parameter that you are not interested
-	// as this can save work in the host.
-
-	/*! @method CallHostBeatAndTempo */
-	OSStatus	CallHostBeatAndTempo (Float64				*outCurrentBeat,
-										Float64				*outCurrentTempo)
-	{
-		return (mHostCallbackInfo.beatAndTempoProc
-						? (*mHostCallbackInfo.beatAndTempoProc) (mHostCallbackInfo.hostUserData,
-																	outCurrentBeat,
-																	outCurrentTempo)
-						: -1);
-	}
-
-	/*! @method CallHostMusicalTimeLocation */
-	OSStatus	CallHostMusicalTimeLocation (UInt32  		*outDeltaSampleOffsetToNextBeat,
-										Float32           	*outTimeSig_Numerator,
-										UInt32            	*outTimeSig_Denominator,
-										Float64           	*outCurrentMeasureDownBeat)
-	{
-		return (mHostCallbackInfo.musicalTimeLocationProc
-						? (*mHostCallbackInfo.musicalTimeLocationProc) (mHostCallbackInfo.hostUserData,
-																			outDeltaSampleOffsetToNextBeat,
-																			outTimeSig_Numerator,
-																			outTimeSig_Denominator,
-																			outCurrentMeasureDownBeat)
-						: -1);
-	}
-
-	/*! @method CallHostTransportState */
-	OSStatus	CallHostTransportState (Boolean 			*outIsPlaying,
-										Boolean 			*outTransportStateChanged,
-										Float64 			*outCurrentSampleInTimeLine,
-										Boolean 			*outIsCycling,
-										Float64 			*outCycleStartBeat,
-										Float64 			*outCycleEndBeat)
-	{
-		return (mHostCallbackInfo.transportStateProc
-						? (*mHostCallbackInfo.transportStateProc) (mHostCallbackInfo.hostUserData,
-																		outIsPlaying,
-																		outTransportStateChanged,
-																		outCurrentSampleInTimeLine,
-																		outIsCycling,
-																		outCycleStartBeat,
-																		outCycleEndBeat)
-						: -1);
-	}
-#endif
-
-	char*						GetLoggingString () const;
-
-	CAMutex*					GetMutex() { return mAUMutex; }
-
-	// ________________________________________________________________________
-	/*! @method CreateElement */
-	virtual AUElement *			CreateElement(			AudioUnitScope					scope,
-														AudioUnitElement				element);
-
-#pragma mark -
-#pragma mark AU Output Base Dispatch
-	// ________________________________________________________________________
-	// ________________________________________________________________________
-	// ________________________________________________________________________
-	// output unit methods
-	/*! @method Start */
-	virtual OSStatus	Start() { return kAudio_UnimplementedError; }
-	/*! @method Stop */
-	virtual OSStatus	Stop() { return kAudio_UnimplementedError; }
-
-#if !CA_BASIC_AU_FEATURES
-#pragma mark -
-#pragma mark AU Music Base Dispatch
-
-#if !TARGET_OS_IPHONE
-// these methods are deprecated, so we don't include them except for compatability
-	/*! @method PrepareInstrument */
-	virtual OSStatus			PrepareInstrument(MusicDeviceInstrumentID inInstrument) { return kAudio_UnimplementedError; }
-
-	/*! @method PrepareInstrument */
-	virtual OSStatus			ReleaseInstrument(MusicDeviceInstrumentID inInstrument) { return kAudio_UnimplementedError; }
-#endif
-
-	// ________________________________________________________________________
-	// ________________________________________________________________________
-	// ________________________________________________________________________
-	// music device/music effect methods -- incomplete
-	/*! @method MIDIEvent */
-	virtual OSStatus	MIDIEvent(		UInt32 						inStatus,
-										UInt32 						inData1,
-										UInt32 						inData2,
-										UInt32 						inOffsetSampleFrame) { return kAudio_UnimplementedError; }
-
-	/*! @method SysEx */
-	virtual OSStatus	SysEx(			const UInt8 *				inData,
-										UInt32 						inLength) { return kAudio_UnimplementedError;}
-
-	/*! @method StartNote */
-	virtual OSStatus	StartNote(		MusicDeviceInstrumentID 	inInstrument,
-										MusicDeviceGroupID 			inGroupID,
-										NoteInstanceID *			outNoteInstanceID,
-										UInt32 						inOffsetSampleFrame,
-										const MusicDeviceNoteParams &inParams) { return kAudio_UnimplementedError; }
-
-	/*! @method StopNote */
-	virtual OSStatus	StopNote(		MusicDeviceGroupID 			inGroupID,
-										NoteInstanceID 				inNoteInstanceID,
-										UInt32 						inOffsetSampleFrame) { return kAudio_UnimplementedError; }
-#endif
-
-	// ________________________________________________________________________
-	// ________________________________________________________________________
-	// ________________________________________________________________________
-
-protected:
-#pragma mark -
-#pragma mark Implementation methods
-
-	/*! @method ReallocateBuffers */
-	virtual void				ReallocateBuffers();
-									// needs to be called when mMaxFramesPerSlice changes
-	virtual void				DeallocateIOBuffers();
-
-	/*! @method FillInParameterName */
-	static void					FillInParameterName (AudioUnitParameterInfo& ioInfo, CFStringRef inName, bool inShouldRelease)
-	{
-		ioInfo.cfNameString = inName;
-		ioInfo.flags |= kAudioUnitParameterFlag_HasCFNameString;
-		if (inShouldRelease)
-			ioInfo.flags |= kAudioUnitParameterFlag_CFNameRelease;
-		CFStringGetCString (inName, ioInfo.name, offsetof (AudioUnitParameterInfo, clumpID), kCFStringEncodingUTF8);
-	}
-
-	static void					HasClump (AudioUnitParameterInfo& ioInfo, UInt32 inClumpID)
-	{
-		ioInfo.clumpID = inClumpID;
-		ioInfo.flags |= kAudioUnitParameterFlag_HasClump;
-	}
-
-	/*! @method SetMaxFramesPerSlice */
-	virtual void				SetMaxFramesPerSlice(UInt32 nFrames);
-
-	/*! @method CanSetMaxFrames */
-	virtual OSStatus			CanSetMaxFrames() const;
-
-	/*! @method WantsRenderThreadID */
-	bool						WantsRenderThreadID () const { return mWantsRenderThreadID; }
-
-	/*! @method SetWantsRenderThreadID */
-	void						SetWantsRenderThreadID (bool inFlag);
-
-	/*! @method SetRenderError */
-	OSStatus					SetRenderError (OSStatus inErr)
-	{
-		if (inErr && mLastRenderError == 0) {
-			mLastRenderError = inErr;
-			PropertyChanged(kAudioUnitProperty_LastRenderError, kAudioUnitScope_Global, 0);
-		}
-		return inErr;
-	}
-
-private:
-	/*! @method DoRenderBus */
-	// shared between Render and RenderSlice, inlined to minimize function call overhead
-	OSStatus					DoRenderBus(			AudioUnitRenderActionFlags &	ioActionFlags,
-														const AudioTimeStamp &			inTimeStamp,
-														UInt32							inBusNumber,
-														AUOutputElement *				theOutput,
-														UInt32							inNumberFrames,
-														AudioBufferList &				ioData)
-	{
-        if (theOutput != NULL)
-        {
-            if (ioData.mBuffers[0].mData == NULL || (theOutput->WillAllocateBuffer() && Outputs().GetNumberOfElements() > 1))
-                // will render into cache buffer
-                theOutput->PrepareBuffer(inNumberFrames);
-            else
-                // will render into caller's buffer
-                theOutput->SetBufferList(ioData);
-        }
-
-		OSStatus result = RenderBus(ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames);
-		if (result == noErr && theOutput != NULL) {
-			if (ioData.mBuffers[0].mData == NULL) {
-				theOutput->CopyBufferListTo(ioData);
-				AUTRACE(kCATrace_AUBaseDoRenderBus, mComponentInstance, inNumberFrames, (intptr_t)theOutput->GetBufferList().mBuffers[0].mData, 0, *(UInt32 *)ioData.mBuffers[0].mData);
-			} else {
-				theOutput->CopyBufferContentsTo(ioData);
-				AUTRACE(kCATrace_AUBaseDoRenderBus, mComponentInstance, inNumberFrames, (intptr_t)theOutput->GetBufferList().mBuffers[0].mData, (intptr_t)ioData.mBuffers[0].mData, *(UInt32 *)ioData.mBuffers[0].mData);
-				theOutput->InvalidateBufferList();
-			}
-		}
-		return result;
-	}
-
-	/*! @method HasIcon */
-	bool						HasIcon ();
-
-	/*! @method ResetRenderTime */
-	void						ResetRenderTime ()
-								{
-									memset (&mCurrentRenderTime, 0, sizeof(mCurrentRenderTime));
-									mCurrentRenderTime.mSampleTime = kNoLastRenderedSampleTime;
-								}
-
-protected:
-	/*! @method GetAudioChannelLayout */
-	virtual UInt32				GetChannelLayoutTags(	AudioUnitScope				scope,
-														AudioUnitElement 			element,
-														AudioChannelLayoutTag *		outLayoutTags);
-
-	/*! @method GetAudioChannelLayout */
-	virtual UInt32				GetAudioChannelLayout(	AudioUnitScope				scope,
-														AudioUnitElement 			element,
-														AudioChannelLayout *		outLayoutPtr,
-														Boolean &					outWritable);
-
-	/*! @method SetAudioChannelLayout */
-	virtual OSStatus			SetAudioChannelLayout(	AudioUnitScope 				scope,
-														AudioUnitElement 			element,
-														const AudioChannelLayout *	inLayout);
-
-	/*! @method RemoveAudioChannelLayout */
-	virtual OSStatus			RemoveAudioChannelLayout(AudioUnitScope scope, AudioUnitElement element);
-
-	/*! @method NeedsToRender */
-	bool						NeedsToRender(			const AudioTimeStamp &		inTimeStamp)
-								{
-									bool needsToRender = fnotequal(inTimeStamp.mSampleTime, mCurrentRenderTime.mSampleTime);
-									if (needsToRender)	// only copy this if we need to render
-										mCurrentRenderTime = inTimeStamp;
-									return needsToRender;
-								}
-
-	// Scheduled parameter implementation:
-
-	typedef std::vector<AudioUnitParameterEvent> ParameterEventList;
-
-	// Usually, you won't override this method.  You only need to call this if your DSP code
-	// is prepared to handle scheduled immediate and ramped parameter changes.
-	// Before calling this method, it is assumed you have already called PullInput() on the input busses
-	// for which the DSP code depends.  ProcessForScheduledParams() will call (potentially repeatedly)
-	// virtual method ProcessScheduledSlice() to perform the actual DSP for a given sub-division of
-	// the buffer.  The job of ProcessForScheduledParams() is to sub-divide the buffer into smaller
-	// pieces according to the scheduled times found in the ParameterEventList (usually coming
-	// directly from a previous call to ScheduleParameter() ), setting the appropriate immediate or
-	// ramped parameter values for the corresponding scopes and elements, then calling ProcessScheduledSlice()
-	// to do the actual DSP for each of these divisions.
-	virtual OSStatus 	ProcessForScheduledParams(	ParameterEventList		&inParamList,
-															UInt32					inFramesToProcess,
-															void					*inUserData );
-
-	//	This method is called (potentially repeatedly) by ProcessForScheduledParams()
-	//	in order to perform the actual DSP required for this portion of the entire buffer
-	//	being processed.  The entire buffer can be divided up into smaller "slices"
-	//	according to the timestamps on the scheduled parameters...
-	//
-	//	sub-classes wishing to handle scheduled parameter changes should override this method
-	//  in order to do the appropriate DSP.  AUEffectBase already overrides this for standard
-	//	effect AudioUnits.
-	virtual OSStatus			ProcessScheduledSlice(	void				*inUserData,
-														UInt32				inStartFrameInBuffer,
-														UInt32				inSliceFramesToProcess,
-														UInt32				inTotalBufferFrames ) {return noErr;};	// default impl does nothing...
-
-
-	/*! @method CurrentRenderTime */
-	const AudioTimeStamp &		CurrentRenderTime () const { return mCurrentRenderTime; }
-
-	// ________________________________________________________________________
-	//	Private data members to discourage hacking in subclasses
-private:
-	struct RenderCallback {
-		RenderCallback(AURenderCallback proc, void *ref) :
-			mRenderNotify(proc),
-			mRenderNotifyRefCon(ref)
-		{ }
-
-		AURenderCallback			mRenderNotify;
-		void *						mRenderNotifyRefCon;
-
-		bool operator == (const RenderCallback &other) {
-			return this->mRenderNotify == other.mRenderNotify &&
-					this->mRenderNotifyRefCon == other.mRenderNotifyRefCon;
-		}
-	};
-	typedef TThreadSafeList<RenderCallback>	RenderCallbackList;
-
-#if !CA_BASIC_AU_FEATURES
-	enum { kNumScopes = 4 };
-#else
-	enum { kNumScopes = 3 };
-#endif
-
-	/*! @var mElementsCreated */
-	bool						mElementsCreated;
-protected:
-	/*! @var mInitialized */
-	bool						mInitialized;
-	/*! @var mHasBegunInitializing */
-	bool						mHasBegunInitializing;
-private:
-	/*! @var mAudioUnitAPIVersion */
-	UInt8						mAudioUnitAPIVersion;
-
-	/*! @var mInitNumInputEls */
-	const UInt32				mInitNumInputEls;
-	/*! @var mInitNumOutputEls */
-	const UInt32				mInitNumOutputEls;
-#if !CA_BASIC_AU_FEATURES
-	/*! @var mInitNumGroupEls */
-	const UInt32				mInitNumGroupEls;
-#endif
-	/*! @var mScopes */
-	AUScope						mScopes[kNumScopes];
-
-	/*! @var mRenderCallbacks */
-	RenderCallbackList			mRenderCallbacks;
-	bool						mRenderCallbacksTouched;
-
-	/*! @var mRenderThreadID */
-#if TARGET_OS_MAC
-	pthread_t					mRenderThreadID;
-#elif TARGET_OS_WIN32
-	UInt32						mRenderThreadID;
-#endif
-
-	/*! @var mWantsRenderThreadID */
-	bool						mWantsRenderThreadID;
-
-	/*! @var mCurrentRenderTime */
-	AudioTimeStamp				mCurrentRenderTime;
-
-	/*! @var mMaxFramesPerSlice */
-	UInt32						mMaxFramesPerSlice;
-
-	/*! @var mLastRenderError */
-	OSStatus					mLastRenderError;
-	/*! @var mCurrentPreset */
-	AUPreset					mCurrentPreset;
-
-protected:
-	/*! @var mUsesFixedBlockSize */
-	bool						mUsesFixedBlockSize;
-
-	struct PropertyListener {
-		AudioUnitPropertyID				propertyID;
-		AudioUnitPropertyListenerProc	listenerProc;
-		void *							listenerRefCon;
-	};
-	typedef std::vector<PropertyListener>	PropertyListeners;
-
-	/*! @var mParamList */
-	ParameterEventList			mParamList;
-	/*! @var mPropertyListeners */
-	PropertyListeners			mPropertyListeners;
-
-	/*! @var mBuffersAllocated */
-	bool						mBuffersAllocated;
-
-	/*! @var mLogString */
-	// if this is NOT null, it will contain identifying info about this AU.
-	char*						mLogString;
-
-	/*! @var mNickName */
-	CFStringRef					mNickName;
-
-	/*! @var mAUMutex */
-	CAMutex *					mAUMutex;
-
-private:
-	/*! @var sVectorUnitType */
-	static SInt32	sVectorUnitType;
-
-#if !CA_NO_AU_HOST_CALLBACKS
-protected:
-	/*! @var mHostCallbackInfo */
-	HostCallbackInfo 			mHostCallbackInfo;
-
-#endif
-#if !CA_NO_AU_UI_FEATURES
-protected:
-	/*! @var mContextInfo */
-	CFStringRef					mContextName;
-#endif
-};
-
-inline 	OSStatus	AUInputElement::PullInputWithBufferList(
-												AudioUnitRenderActionFlags &  	ioActionFlags,
-												const AudioTimeStamp &			inTimeStamp,
-												AudioUnitElement				inElement,
-												UInt32							nFrames,
-												AudioBufferList *				inBufferList)
-{
-	OSStatus theResult;
-
-	if (HasConnection()) {
-			// only support connections for V2 audio units
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-		if (mConnRenderProc != NULL)
-			theResult = reinterpret_cast<AudioUnitRenderProc>(mConnRenderProc)(
-							mConnInstanceStorage, &ioActionFlags, &inTimeStamp, mConnection.sourceOutputNumber, nFrames, inBufferList);
-		else
-#endif
-			theResult = AudioUnitRender(
-							mConnection.sourceAudioUnit, &ioActionFlags, &inTimeStamp, mConnection.sourceOutputNumber, nFrames, inBufferList);
-	} else {
-		// kFromCallback:
-			theResult = (mInputProc)(
-							mInputProcRefCon, &ioActionFlags, &inTimeStamp, inElement, nFrames, inBufferList);
-	}
-
-	if (mInputType == kNoInput)	// defense: the guy upstream could have disconnected
-								// it's a horrible thing to do, but may happen!
-		return kAudioUnitErr_NoConnection;
-
-
-	return theResult;
-}
-
-#endif // __AUBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h
deleted file mode 100644
index 03f750f..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-     File: AUBaseHelper.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUBaseHelper_h__
-#define __AUBaseHelper_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreFoundation/CoreFoundation.h>
-	#include <AudioUnit/AUComponent.h>
-#else
-	#include <CoreFoundation.h>
-	#include <AUComponent.h>
-#endif
-
-#include "AUBase.h"
-
-// helpers for dealing with the file-references dictionary in an AUPreset
-OSStatus GetFileRefPath (CFDictionaryRef parent, CFStringRef frKey, CFStringRef * fPath);
-
-// if fileRefDict is NULL, this call creates one
-// if not NULL, then the key value is added to it
-CFMutableDictionaryRef CreateFileRefDict (CFStringRef fKey, CFStringRef fPath, CFMutableDictionaryRef fileRefDict);
-
-int AccessURLAsset(const CFURLRef inURL, int mode);
-
-#if DEBUG
-	void PrintAUParamEvent (AudioUnitParameterEvent& event, FILE* f);
-#endif
-
-
-
-#endif // __AUBaseHelper_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.cpp
deleted file mode 100644
index 2221bca..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-     File: AUBuffer.cpp
- Abstract: AUBuffer.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUBuffer.h"
-#include <stdlib.h>
-
-AUBufferList::~AUBufferList()
-{
-	Deallocate();
-	if (mPtrs)
-		free(mPtrs);
-}
-
-// a * b + c
-static UInt32 SafeMultiplyAddUInt32(UInt32 a, UInt32 b, UInt32 c)
-{
-	if (a == 0 || b == 0) return c;  // prevent zero divide
-
-	if (a > (0xFFFFFFFF - c) / b)
-		throw std::bad_alloc();
-
-	return a * b + c;
-}
-
-void				AUBufferList::Allocate(const CAStreamBasicDescription &format, UInt32 nFrames)
-{
-	UInt32 nStreams;
-	if (format.IsInterleaved()) {
-		nStreams = 1;
-	} else {
-		nStreams = format.mChannelsPerFrame;
-	}
-
-	// careful -- the I/O thread could be running!
-	if (nStreams > mAllocatedStreams) {
-		size_t theHeaderSize = sizeof(AudioBufferList) - sizeof(AudioBuffer);
-		mPtrs = (AudioBufferList *)CA_realloc(mPtrs,
-									SafeMultiplyAddUInt32(nStreams, sizeof(AudioBuffer), theHeaderSize));
-		mAllocatedStreams = nStreams;
-	}
-	UInt32 bytesPerStream = SafeMultiplyAddUInt32(nFrames, format.mBytesPerFrame, 0xF) & ~0xF;
-	UInt32 nBytes = SafeMultiplyAddUInt32(nStreams, bytesPerStream, 0);
-	if (nBytes > mAllocatedBytes) {
-		if (mExternalMemory) {
-			mExternalMemory = false;
-			mMemory = NULL;
-		}
-		mMemory = (Byte *)CA_realloc(mMemory, nBytes);
-		mAllocatedBytes = nBytes;
-	}
-	mAllocatedFrames = nFrames;
-	mPtrState = kPtrsInvalid;
-}
-
-void				AUBufferList::Deallocate()
-{
-	mAllocatedStreams = 0;
-	mAllocatedFrames = 0;
-	mAllocatedBytes = 0;
-// this causes a world of hurt if someone upstream disconnects during I/O (SysSoundGraph)
-/*	if (mPtrs) {
-		printf("deallocating bufferlist %08X\n", int(mPtrs));
-		free(mPtrs);
-		mPtrs = NULL;
-	} */
-	if (mMemory) {
-		if (mExternalMemory)
-			mExternalMemory = false;
-		else
-			free(mMemory);
-		mMemory = NULL;
-	}
-	mPtrState = kPtrsInvalid;
-}
-
-AudioBufferList &	AUBufferList::PrepareBuffer(const CAStreamBasicDescription &format, UInt32 nFrames)
-{
-	if (nFrames > mAllocatedFrames)
-		COMPONENT_THROW(kAudioUnitErr_TooManyFramesToProcess);
-
-	UInt32 nStreams;
-	UInt32 channelsPerStream;
-	if (format.IsInterleaved()) {
-		nStreams = 1;
-		channelsPerStream = format.mChannelsPerFrame;
-	} else {
-		nStreams = format.mChannelsPerFrame;
-		channelsPerStream = 1;
-		if (nStreams > mAllocatedStreams)
-			COMPONENT_THROW(kAudioUnitErr_FormatNotSupported);
-	}
-
-	AudioBufferList *abl = mPtrs;
-	abl->mNumberBuffers = nStreams;
-	AudioBuffer *buf = abl->mBuffers;
-	Byte *mem = mMemory;
-	UInt32 streamInterval = (mAllocatedFrames * format.mBytesPerFrame + 0xF) & ~0xF;
-	UInt32 bytesPerBuffer = nFrames * format.mBytesPerFrame;
-	for ( ; nStreams--; ++buf) {
-		buf->mNumberChannels = channelsPerStream;
-		buf->mData = mem;
-		buf->mDataByteSize = bytesPerBuffer;
-		mem += streamInterval;
-	}
-	if (UInt32(mem - mMemory) > mAllocatedBytes)
-		COMPONENT_THROW(kAudioUnitErr_TooManyFramesToProcess);
-	mPtrState = kPtrsToMyMemory;
-	return *mPtrs;
-}
-
-AudioBufferList &	AUBufferList::PrepareNullBuffer(const CAStreamBasicDescription &format, UInt32 nFrames)
-{
-	UInt32 nStreams;
-	UInt32 channelsPerStream;
-	if (format.IsInterleaved()) {
-		nStreams = 1;
-		channelsPerStream = format.mChannelsPerFrame;
-	} else {
-		nStreams = format.mChannelsPerFrame;
-		channelsPerStream = 1;
-		if (nStreams > mAllocatedStreams)
-			COMPONENT_THROW(kAudioUnitErr_FormatNotSupported);
-	}
-	AudioBufferList *abl = mPtrs;
-	abl->mNumberBuffers = nStreams;
-	AudioBuffer *buf = abl->mBuffers;
-	UInt32 bytesPerBuffer = nFrames * format.mBytesPerFrame;
-	for ( ; nStreams--; ++buf) {
-		buf->mNumberChannels = channelsPerStream;
-		buf->mData = NULL;
-		buf->mDataByteSize = bytesPerBuffer;
-	}
-	mPtrState = kPtrsToExternalMemory;
-	return *mPtrs;
-}
-
-// this should NOT be called while I/O is in process
-void		AUBufferList::UseExternalBuffer(const CAStreamBasicDescription &format, const AudioUnitExternalBuffer &buf)
-{
-	UInt32 alignedSize = buf.size & ~0xF;
-	if (mMemory != NULL && alignedSize >= mAllocatedBytes) {
-		// don't accept the buffer if we already have one and it's big enough
-		// if we don't already have one, we don't need one
-		Byte *oldMemory = mMemory;
-		mMemory = buf.buffer;
-		mAllocatedBytes = alignedSize;
-		// from Allocate(): nBytes = nStreams * nFrames * format.mBytesPerFrame;
-		// thus: nFrames = nBytes / (nStreams * format.mBytesPerFrame)
-		mAllocatedFrames = mAllocatedBytes / (format.NumberChannelStreams() * format.mBytesPerFrame);
-		mExternalMemory = true;
-		free(oldMemory);
-	}
-}
-
-#if DEBUG
-void	AUBufferList::PrintBuffer(const char *label, int subscript, const AudioBufferList &abl, UInt32 nFrames, bool asFloats)
-{
-	printf("  %s [%d] 0x%08lX:\n", label, subscript, long(&abl));
-	const AudioBuffer *buf = abl.mBuffers;
-	for (UInt32 i = 0; i < abl.mNumberBuffers; ++buf, ++i) {
-		printf("      [%2d] %5dbytes %dch @ %p: ", (int)i, (int)buf->mDataByteSize, (int)buf->mNumberChannels, buf->mData);
-		if (buf->mData != NULL) {
-			UInt32 nSamples = nFrames * buf->mNumberChannels;
-			for (UInt32 j = 0; j < nSamples; ++j) {
-				if (nSamples > 16 && (j % 16) == 0)
-					printf("\n\t");
-				if (asFloats)
-					printf(" %6.3f", ((float *)buf->mData)[j]);
-				else
-					printf(" %08X", (unsigned)((UInt32 *)buf->mData)[j]);
-			}
-		}
-		printf("\n");
-	}
-}
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.h
deleted file mode 100644
index cd0ec8a..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
-     File: AUBuffer.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUBuffer_h__
-#define __AUBuffer_h__
-
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-
-#include <TargetConditionals.h>
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <AudioUnit/AudioUnit.h>
-#else
-	#include <AudioUnit.h>
-#endif
-
-#include <string.h>
-#include "CAStreamBasicDescription.h"
-#include "CAAutoDisposer.h"
-#include "CADebugMacros.h"
-
-// make this usable outside the stricter context of AudiUnits
-#ifndef COMPONENT_THROW
-	#define COMPONENT_THROW(err) \
-		do { DebugMessage(#err); throw static_cast<OSStatus>(err); } while (0)
-#endif
-
-
-	/*! @class AUBufferList */
-class AUBufferList {
-	enum EPtrState {
-		kPtrsInvalid,
-		kPtrsToMyMemory,
-		kPtrsToExternalMemory
-	};
-public:
-	/*! @ctor AUBufferList */
-	AUBufferList() : mPtrState(kPtrsInvalid), mExternalMemory(false), mPtrs(NULL), mMemory(NULL),
-		mAllocatedStreams(0), mAllocatedFrames(0), mAllocatedBytes(0) { }
-	/*! @dtor ~AUBufferList */
-	~AUBufferList();
-
-	/*! @method PrepareBuffer */
-	AudioBufferList &	PrepareBuffer(const CAStreamBasicDescription &format, UInt32 nFrames);
-	/*! @method PrepareNullBuffer */
-	AudioBufferList &	PrepareNullBuffer(const CAStreamBasicDescription &format, UInt32 nFrames);
-
-	/*! @method SetBufferList */
-	AudioBufferList &	SetBufferList(const AudioBufferList &abl) {
-							if (mAllocatedStreams < abl.mNumberBuffers)
-								COMPONENT_THROW(-1);
-							mPtrState = kPtrsToExternalMemory;
-							memcpy(mPtrs, &abl, (char *)&abl.mBuffers[abl.mNumberBuffers] - (char *)&abl);
-							return *mPtrs;
-						}
-
-	/*! @method SetBuffer */
-	void				SetBuffer(UInt32 index, const AudioBuffer &ab) {
-							if (mPtrState == kPtrsInvalid || index >= mPtrs->mNumberBuffers)
-								COMPONENT_THROW(-1);
-							mPtrState = kPtrsToExternalMemory;
-							mPtrs->mBuffers[index] = ab;
-						}
-
-	/*! @method InvalidateBufferList */
-	void				InvalidateBufferList() { mPtrState = kPtrsInvalid; }
-
-	/*! @method GetBufferList */
-	AudioBufferList &	GetBufferList() const {
-							if (mPtrState == kPtrsInvalid)
-								COMPONENT_THROW(-1);
-							return *mPtrs;
-						}
-
-	/*! @method CopyBufferListTo */
-	void				CopyBufferListTo(AudioBufferList &abl) const {
-							if (mPtrState == kPtrsInvalid)
-								COMPONENT_THROW(-1);
-							memcpy(&abl, mPtrs, (char *)&abl.mBuffers[abl.mNumberBuffers] - (char *)&abl);
-						}
-
-	/*! @method CopyBufferContentsTo */
-	void				CopyBufferContentsTo(AudioBufferList &abl) const {
-							if (mPtrState == kPtrsInvalid)
-								COMPONENT_THROW(-1);
-							const AudioBuffer *srcbuf = mPtrs->mBuffers;
-							AudioBuffer *destbuf = abl.mBuffers;
-
-							for (UInt32 i = 0; i < abl.mNumberBuffers; ++i, ++srcbuf, ++destbuf) {
-								if (i >= mPtrs->mNumberBuffers) // duplicate last source to additional outputs [4341137]
-									--srcbuf;
-								if (destbuf->mData != srcbuf->mData)
-									memmove(destbuf->mData, srcbuf->mData, srcbuf->mDataByteSize);
-								destbuf->mDataByteSize = srcbuf->mDataByteSize;
-							}
-						}
-
-	/*! @method Allocate */
-	void				Allocate(const CAStreamBasicDescription &format, UInt32 nFrames);
-	/*! @method Deallocate */
-	void				Deallocate();
-
-	/*! @method UseExternalBuffer */
-	void				UseExternalBuffer(const CAStreamBasicDescription &format, const AudioUnitExternalBuffer &buf);
-
-	// AudioBufferList utilities
-	/*! @method ZeroBuffer */
-	static void			ZeroBuffer(AudioBufferList &abl) {
-							AudioBuffer *buf = abl.mBuffers;
-							for (UInt32 i = abl.mNumberBuffers ; i--; ++buf)
-								memset(buf->mData, 0, buf->mDataByteSize);
-						}
-#if DEBUG
-	/*! @method PrintBuffer */
-	static void			PrintBuffer(const char *label, int subscript, const AudioBufferList &abl, UInt32 nFrames = 8, bool asFloats = true);
-#endif
-
-	/*! @method GetAllocatedFrames */
-	UInt32				GetAllocatedFrames() const { return mAllocatedFrames; }
-
-private:
-	/*! @ctor AUBufferList */
-	AUBufferList(AUBufferList &) { }	// prohibit copy constructor
-
-	/*! @var mPtrState */
-	EPtrState					mPtrState;
-	/*! @var mExternalMemory */
-	bool						mExternalMemory;
-	/*! @var mPtrs */
-	AudioBufferList *			mPtrs;
-	/*! @var mMemory */
-	Byte *						mMemory;
-	/*! @var mAllocatedStreams */
-	UInt32						mAllocatedStreams;
-	/*! @var mAllocatedFrames */
-	UInt32						mAllocatedFrames;
-	/*! @var mAllocatedBytes */
-	UInt32						mAllocatedBytes;
-};
-
-
-// Allocates an array of samples (type T), to be optimally aligned for the processor
-	/*! @class TAUBuffer */
-template <class T>
-class TAUBuffer {
-public:
-	enum {
-		kAlignInterval = 0x10,
-		kAlignMask = kAlignInterval - 1
-	};
-
-	/*! @ctor TAUBuffer.0 */
-	TAUBuffer() :	mMemObject(NULL), mAlignedBuffer(NULL), mBufferSizeBytes(0)
-	{
-	}
-
-	/*! @ctor TAUBuffer.1 */
-	TAUBuffer(UInt32 numElems, UInt32 numChannels) :	mMemObject(NULL), mAlignedBuffer(NULL),
-														mBufferSizeBytes(0)
-	{
-		Allocate(numElems, numChannels);
-	}
-
-	/*! @dtor ~TAUBuffer */
-	~TAUBuffer()
-	{
-		Deallocate();
-	}
-
-	/*! @method Allocate */
-	void	Allocate(UInt32 numElems)			// can also re-allocate
-	{
-		UInt32 reqSize = numElems * sizeof(T);
-
-		if (mMemObject != NULL && reqSize == mBufferSizeBytes)
-			return;	// already allocated
-
-		mBufferSizeBytes = reqSize;
-		mMemObject = CA_realloc(mMemObject, reqSize);
-		UInt32 misalign = (uintptr_t)mMemObject & kAlignMask;
-		if (misalign) {
-			mMemObject = CA_realloc(mMemObject, reqSize + kAlignMask);
-			mAlignedBuffer = (T *)((char *)mMemObject + kAlignInterval - misalign);
-		} else
-			mAlignedBuffer = (T *)mMemObject;
-	}
-
-	/*! @method Deallocate */
-	void	Deallocate()
-	{
-		if (mMemObject == NULL) return;			// so this method has no effect if we're using
-												// an external buffer
-
-		free(mMemObject);
-		mMemObject = NULL;
-		mAlignedBuffer = NULL;
-		mBufferSizeBytes = 0;
-	}
-
-	/*! @method AllocateClear */
-	void	AllocateClear(UInt32 numElems)		// can also re-allocate
-	{
-		Allocate(numElems);
-		Clear();
-	}
-
-	/*! @method Clear */
-	void	Clear()
-	{
-		memset(mAlignedBuffer, 0, mBufferSizeBytes);
-	}
-
-	// accessors
-
-	/*! @method operator T *()@ */
-	operator T *()				{ return mAlignedBuffer; }
-
-private:
-	/*! @var mMemObject */
-	void *		mMemObject;			// null when using an external buffer
-	/*! @var mAlignedBuffer */
-	T *			mAlignedBuffer;		// always valid once allocated
-	/*! @var mBufferSizeBytes */
-	UInt32		mBufferSizeBytes;
-};
-
-#endif // __AUBuffer_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.cpp
deleted file mode 100644
index 4b9525b..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-     File: AUCarbonViewBase.cpp
- Abstract: AUCarbonViewBase.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUCarbonViewBase.h"
-#include "AUCarbonViewControl.h"
-#include <algorithm>
-
-AUCarbonViewBase::AUCarbonViewBase(AudioUnitCarbonView inInstance, Float32 inNotificationInterval /* in seconds */) :
-	ComponentBase(inInstance),
-	mEditAudioUnit(0),
-	mParameterListener(NULL),
-#if !__LP64__
-	mEventListener(NULL),
-#endif
-	mTimerRef (NULL),
-	mTimerUPP (NULL),
-	mCarbonWindow(NULL),
-	mCarbonPane(NULL),
-	mXOffset(0),
-	mYOffset(0)
-{
-	AUEventListenerCreate (ParameterListener, this,
-			CFRunLoopGetCurrent(), kCFRunLoopCommonModes,
-			inNotificationInterval, inNotificationInterval,
-			&mParameterListener);
-}
-
-AUCarbonViewBase::~AUCarbonViewBase()
-{
-#if !__LP64__
-	if (mCarbonPane)
-		DisposeControl(mCarbonPane);
-
-	for (ControlList::iterator it = mControlList.begin(); it != mControlList.end(); ++it) {
-		AUCarbonViewControl *ctl = *it;
-		delete ctl;
-	}
-	AUListenerDispose(mParameterListener);
-
-	if (mTimerRef)
-		::RemoveEventLoopTimer (mTimerRef);
-
-	if (mTimerUPP)
-		DisposeEventLoopTimerUPP (mTimerUPP);
-#endif
-}
-
-void	AUCarbonViewBase::AddControl(AUCarbonViewControl *control)
-{
-	ControlList::iterator it = find(mControlList.begin(), mControlList.end(), control);
-	if (it == mControlList.end())
-		mControlList.push_back(control);
-}
-
-void	AUCarbonViewBase::RemoveControl(AUCarbonViewControl *control)
-{
-	ControlList::iterator it = find(mControlList.begin(), mControlList.end(), control);
-	if (it != mControlList.end()) {
-		AUCarbonViewControl *ctl = *it;
-		mControlList.erase(it);
-		delete ctl;
-	}
-}
-
-void	AUCarbonViewBase::ClearControls ()
-{
-	for (ControlList::iterator it = mControlList.begin(); it != mControlList.end(); ++it) {
-		AUCarbonViewControl *ctl = *it;
-		delete ctl;
-	}
-	mControlList.clear();
-}
-
-void	AUCarbonViewBase::ParameterListener(void *				inCallbackRefCon,
-									void *						inObject,
-									const AudioUnitEvent *		inEvent,
-									UInt64						inEventHostTime,
-									Float32						inParameterValue)
-{
-	if (inEvent->mEventType == kAudioUnitEvent_ParameterValueChange) {
-		AUCarbonViewControl *ctl = (AUCarbonViewControl *)inObject;
-		ctl->ParameterToControl(inParameterValue);
-	}
-}
-
-
-OSStatus			AUCarbonViewBase::CreateCarbonView(AudioUnit inAudioUnit, WindowRef inWindow, ControlRef inParentControl, const Float32Point &inLocation, const Float32Point &inSize, ControlRef &outParentControl)
-{
-#if !__LP64__
-	mEditAudioUnit = inAudioUnit;
-	mCarbonWindow = inWindow;
-
-	WindowAttributes attributes;
-	verify_noerr(GetWindowAttributes(mCarbonWindow, &attributes));
-	mCompositWindow = (attributes & kWindowCompositingAttribute) != 0;
-
-	Rect area;
-	area.left = short(inLocation.x); area.top = short(inLocation.y);
-	area.right = short(area.left + inSize.x); area.bottom = short(area.top + inSize.y);
-	OSStatus err = ::CreateUserPaneControl(inWindow, &area,
-						kControlSupportsEmbedding,
-						&mCarbonPane);	// subclass can resize mCarbonPane to taste
-	verify_noerr(err);
-	if (err) return err;
-	outParentControl = mCarbonPane;
-
-	// register for mouse-down in our pane -- we want to clear focus
-	EventTypeSpec paneEvents[] = {
-		{ kEventClassControl, kEventControlClick }
-	};
-	WantEventTypes(GetControlEventTarget(mCarbonPane), GetEventTypeCount(paneEvents), paneEvents);
-
-	if (IsCompositWindow()) {
-		verify_noerr(::HIViewAddSubview(inParentControl, mCarbonPane));
-		mXOffset = 0;
-		mYOffset = 0;
-	}
-	else {
-		verify_noerr(::EmbedControl(mCarbonPane, inParentControl));
-		mXOffset = inLocation.x;
-		mYOffset = inLocation.y;
-	}
-	mBottomRight.h = mBottomRight.v = 0;
-
-	SizeControl(mCarbonPane, 0, 0);
-	if (err = CreateUI(mXOffset, mYOffset))
-		return err;
-
-	// we should only resize the control if a subclass has embedded
-	// controls in this AND this is done with the EmbedControl call below
-	// if mBottomRight is STILL equal to zero, then that wasn't done
-	// so don't size the control
-	Rect paneBounds;
-	GetControlBounds(mCarbonPane, &paneBounds);
-	// only resize mCarbonPane if it has not already been resized during CreateUI
-	if ((paneBounds.top == paneBounds.bottom) && (paneBounds.left == paneBounds.right)) {
-		if (mBottomRight.h != 0 && mBottomRight.v != 0)
-			SizeControl(mCarbonPane, (short) (mBottomRight.h - mXOffset), (short) (mBottomRight.v - mYOffset));
-	}
-
-	if (IsCompositWindow()) {
-		// prepare for handling scroll-events
-		EventTypeSpec scrollEvents[] = {
-			{ kEventClassScrollable, kEventScrollableGetInfo },
-			{ kEventClassScrollable, kEventScrollableScrollTo }
-		};
-
-		WantEventTypes(GetControlEventTarget(mCarbonPane), GetEventTypeCount(scrollEvents), scrollEvents);
-
-		mCurrentScrollPoint.x = mCurrentScrollPoint.y = 0.0f;
-	}
-
-	return err;
-#else
-	return noErr;
-#endif
-}
-
-OSStatus	AUCarbonViewBase::CreateUI(Float32	inXOffset, Float32 	inYOffset)
-{
-	return noErr;
-}
-
-OSStatus	AUCarbonViewBase::EmbedControl(ControlRef ctl)
-{
-#if !__LP64__
-	Rect r;
-	::GetControlBounds(ctl, &r);
-	if (r.right > mBottomRight.h) mBottomRight.h = r.right;
-	if (r.bottom > mBottomRight.v) mBottomRight.v = r.bottom;
-
-	if (IsCompositWindow())
-		return ::HIViewAddSubview(mCarbonPane, ctl);
-	else
-		return ::EmbedControl(ctl, mCarbonPane);
-#else
-	return noErr;
-#endif
-}
-
-void	AUCarbonViewBase::AddCarbonControl(AUCarbonViewControl::ControlType type, const CAAUParameter &param, ControlRef control)
-{
-	verify_noerr(EmbedControl(control));
-
-	AUCarbonViewControl *auvc = new AUCarbonViewControl(this, mParameterListener, type, param, control);
-	auvc->Bind();
-	AddControl(auvc);
-}
-
-bool	AUCarbonViewBase::HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event)
-{
-#if !__LP64__
-	UInt32 eclass = GetEventClass(event);
-	UInt32 ekind = GetEventKind(event);
-	ControlRef control;
-
-	switch (eclass) {
-		case kEventClassControl:
-		{
-			switch (ekind) {
-			case kEventControlClick:
-				GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(ControlRef), NULL, &control);
-				if (control == mCarbonPane) {
-					ClearKeyboardFocus(mCarbonWindow);
-					return true;
-				}
-			}
-		}
-		break;
-
-		case kEventClassScrollable:
-		{
-			switch (ekind) {
-			case kEventScrollableGetInfo:
-				{
-					// [1/4]
-					/*	<--	kEventParamImageSize (out, typeHISize)
-					 *		On exit, contains the size of the entire scrollable view.
-					 */
-					HISize originalSize = { static_cast<CGFloat>(mBottomRight.h), static_cast<CGFloat>(mBottomRight.v) };
-					verify_noerr(SetEventParameter(event, kEventParamImageSize, typeHISize, sizeof(HISize), &originalSize));
-
-					// [2/4]
-					/*	<--	kEventParamViewSize (out, typeHISize)
-					 *		On exit, contains the amount of the scrollable view that is
-					 *		visible.
-					 */
-					HIViewRef parentView = HIViewGetSuperview(mCarbonPane);
-					HIRect parentBounds;
-					verify_noerr(HIViewGetBounds(parentView, &parentBounds));
-					//HISize windowSize = {	float(windowBounds.right - windowBounds.left),
-					//						float(windowBounds.bottom - windowBounds.top) };
-					verify_noerr(SetEventParameter(event, kEventParamViewSize, typeHISize, sizeof(HISize), &(parentBounds.size)));
-
-					// [3/4]
-					/*	<--	kEventParamLineSize (out, typeHISize)
-					 *		On exit, contains the amount that should be scrolled in
-					 *		response to a single click on a scrollbar arrow.
-					 */
-					 HISize scrollIncrementSize = { 16.0f, float(20) };
-					 verify_noerr(SetEventParameter(event, kEventParamLineSize, typeHISize, sizeof(HISize), &scrollIncrementSize));
-
-					// [4/4]
-					/*	<-- kEventParamOrigin (out, typeHIPoint)
-					 *		On exit, contains the scrollable viewÕs current origin (the
-					 *		view-relative coordinate that is drawn at the top left
-					 *		corner of its frame). These coordinates should always be
-					 *		greater than or equal to zero. They should be less than or
-					 *		equal to the viewÕs image size minus its view size.
-					 */
-					 verify_noerr(SetEventParameter(event, kEventParamOrigin, typeHIPoint, sizeof(HIPoint), &mCurrentScrollPoint));
-				}
-				return true;
-
-			case kEventScrollableScrollTo:
-				{
-					/*
-					 *  kEventClassScrollable / kEventScrollableScrollTo
-					 *
-					 *  Summary:
-					 *    Requests that an HIScrollViewÕs scrollable view should scroll to
-					 *    a particular origin.
-					 */
-
-					/*	-->	kEventParamOrigin (in, typeHIPoint)
-					 *		The new origin for the scrollable view. The origin
-					 *		coordinates will vary from (0,0) to scrollable viewÕs image
-					 *		size minus its view size.
-					 */
-					HIPoint pointToScrollTo;
-					verify_noerr(GetEventParameter(event, kEventParamOrigin, typeHIPoint, NULL, sizeof(HIPoint), NULL, &pointToScrollTo));
-
-					float xDelta = mCurrentScrollPoint.x - pointToScrollTo.x;
-					float yDelta = mCurrentScrollPoint.y - pointToScrollTo.y;
-					// move visible portion the appropriate amount
-					verify_noerr(HIViewScrollRect(mCarbonPane, NULL, xDelta, yDelta));
-					// set new content to be drawn
-					verify_noerr(HIViewSetBoundsOrigin(mCarbonPane, pointToScrollTo.x, pointToScrollTo.y));
-
-					mCurrentScrollPoint = pointToScrollTo;
-				}
-				return true;
-
-			default:
-				break;
-			}
-		}
-		break;
-
-		default:
-			break;
-	}
-#endif
-	return false;
-}
-
-/*! @method TellListener */
-void	AUCarbonViewBase::TellListener (const CAAUParameter &auvp, AudioUnitCarbonViewEventID event, void *evpar)
-{
-#if !__LP64__
-	if (mEventListener)
-		(*mEventListener)(mEventListenerUserData, mComponentInstance, &auvp, event, evpar);
-#endif
-
-	AudioUnitEvent	auEvent;
-	auEvent.mArgument.mParameter = auvp;
-	if (event == kAudioUnitCarbonViewEvent_MouseDownInControl) {
-		auEvent.mEventType = kAudioUnitEvent_BeginParameterChangeGesture;
-	} else {
-		auEvent.mEventType = kAudioUnitEvent_EndParameterChangeGesture;
-	}
-	AUEventListenerNotify(mParameterListener, this, &auEvent);
-}
-
-
-void			AUCarbonViewBase::Update (bool inUIThread)
-{
-	for (ControlList::iterator iter = mControlList.begin(); iter != mControlList.end(); ++iter)
-	{
-		(*iter)->Update(inUIThread);
-	}
-}
-
-pascal void		AUCarbonViewBase::TheTimerProc (EventLoopTimerRef inTimer, void *inUserData)
-{
-	AUCarbonViewBase* This = reinterpret_cast<AUCarbonViewBase*>(inUserData);
-	This->RespondToEventTimer (inTimer);
-}
-
-void			AUCarbonViewBase::RespondToEventTimer (EventLoopTimerRef inTimer)
-{}
-
-/*
-	THESE are reasonable values for these two times
-	0.005 // delay
-	0.050 // interval
-*/
-
-OSStatus	AUCarbonViewBase::CreateEventLoopTimer (Float32 inDelay, Float32 inInterval)
-{
-	if (mTimerUPP)
-		return noErr;
-
-	mTimerUPP = NewEventLoopTimerUPP(TheTimerProc);
-
-	EventLoopRef mainEventLoop = GetMainEventLoop();
-
-		//doesn't seem to like too small a value
-	if (inDelay < 0.005)
-		inDelay = 0.005;
-
-	OSStatus timerResult =  ::InstallEventLoopTimer(
-									mainEventLoop,
-									inDelay,
-									inInterval,
-									mTimerUPP,
-									this,
-									&mTimerRef);
-	return timerResult;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.h
deleted file mode 100644
index b8bd9c0..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewBase.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-     File: AUCarbonViewBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUCarbonViewBase_h__
-#define __AUCarbonViewBase_h__
-
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-
-#include <vector>
-#include "AUCarbonViewControl.h"
-#include "ComponentBase.h"
-
-static const Float32 kDefaultNotificationInterval = 0.100;
-
-	/*! @class AUCarbonViewBase */
-class AUCarbonViewBase : public ComponentBase, public CarbonEventHandler
-{
-public:
-    /*! @ctor AUCarbonViewBase */
-    AUCarbonViewBase (	AudioUnitCarbonView inInstance,
-						Float32 inNotificationInterval = kDefaultNotificationInterval /* in seconds */);
-	/*! @dtor ~AUCarbonViewBase */
-	virtual ~AUCarbonViewBase();
-
-	// AUViewBase overrides
-	/*! @method CreateCarbonView */
-	virtual OSStatus			CreateCarbonView (AudioUnit inAudioUnit, WindowRef inWindow, ControlRef inParentControl, const Float32Point &inLocation, const Float32Point &inSize, ControlRef &outParentControl);
-
-	// our own virtual methods
-	/*! @method CreateUI */
-	virtual OSStatus			CreateUI (Float32	inXOffset, Float32 	inYOffset);
-
-	/*! @method HandleEvent */
-	virtual bool				HandleEvent (EventHandlerCallRef inHandlerRef, EventRef event);
-
-	/*! @method GetEditAudioUnit */
-	const AudioUnit				GetEditAudioUnit () const { return mEditAudioUnit; }
-	//
-	/*! @method ComponentEntryDispatch */
-	static OSStatus			ComponentEntryDispatch (
-									ComponentParameters *			params,
-									AUCarbonViewBase *				This);
-
-	/*! @method AddCarbonControl */
-	void						AddCarbonControl (
-									AUCarbonViewControl::ControlType	type,
-									const CAAUParameter &				param,
-									ControlRef							control);
-
-	/*! @method GetCarbonWindow */
-	WindowRef					GetCarbonWindow () { return mCarbonWindow; }
-	/*! @method GetCarbonPane */
-	ControlRef					GetCarbonPane () { return mCarbonPane; }
-	/*! @method EmbedControl */
-	OSStatus					EmbedControl (ControlRef ctl);
-
-	/*! @method TellListener */
-	void						TellListener (const CAAUParameter &auvp, AudioUnitCarbonViewEventID event, void *evpar);
-
-	// pass in true if wanting an update to the view and you're calling this from a thread
-	// that is safe to do UI in.
-	// If you don't know, pass in false!
-	/*! @method Update */
-	void						Update (bool inUIThread);
-
-	/*! @method GetXOffset */
-	Float32						GetXOffset () { return mXOffset; }
-	/*! @method GetYOffset */
-	Float32						GetYOffset () { return mYOffset; }
-
-	/*! @method ClearControls */
-	void						ClearControls ();
-
-	/*! @method IsCompositWindow */
-	bool						IsCompositWindow () const { return mCompositWindow; }
-
-protected:
-#if !__LP64__
-	/*! @method SetEventListener */
-	void						SetEventListener (AudioUnitCarbonViewEventListener listener, void *userData)
-								{
-									mEventListener = listener;
-									mEventListenerUserData = userData;
-								}
-#endif
-
-	/*! @method AddControl */
-	void						AddControl (AUCarbonViewControl *control);
-	/*! @method RemoveControl */
-	void						RemoveControl (AUCarbonViewControl *control);
-
-	OSStatus					CreateEventLoopTimer (Float32 inDelay, Float32 inInterval);
-
-	/*! @method ParameterListener */
-	static void ParameterListener (void *						inCallbackRefCon,
-									void *						inObject,
-									const AudioUnitEvent *		inEvent,
-									UInt64						inEventHostTime,
-									Float32						inParameterValue);
-
-	static pascal void TheTimerProc (	EventLoopTimerRef 		inTimer,
-										void *					inUserData);
-
-	virtual void 				RespondToEventTimer (EventLoopTimerRef inTimer);
-
-	/*! @var mEditAudioUnit */
-	AudioUnit					mEditAudioUnit;	// the AU we're controlling
-	/*! @var mParameterListener */
-	AUEventListenerRef			mParameterListener;
-
-#if !__LP64__
-	/*! @var mEventListener */
-	AudioUnitCarbonViewEventListener
-								mEventListener;
-#endif
-
-	/*! @var mEventListenerUserData */
-	void *						mEventListenerUserData;
-
-private:
-	typedef std::vector<AUCarbonViewControl *> ControlList;
-	/*! @var mControlList */
-	ControlList					mControlList;
-
-	EventLoopTimerRef 			mTimerRef;
-
-	EventLoopTimerUPP			mTimerUPP;
-
-protected:
-	/*! @var mCarbonWindow */
-	WindowRef			mCarbonWindow;
-	/*! @var mCarbonPane */
-	ControlRef			mCarbonPane;	// user pane, contains all other controls
-	/*! @var mBottomRight */
-	Point				mBottomRight;	// largest width and height of child controls
-	/*! @var mXOffset */
-	Float32				mXOffset;
-	/*! @var mYOffset */
-	Float32				mYOffset;
-	/*! @var mCompositWindow */
-	bool				mCompositWindow;
-	/*! @var mCurrentScrollPoint */
-	HIPoint				mCurrentScrollPoint;		// needed for scrolling
-};
-
-
-#endif // __AUCarbonViewBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.cpp
deleted file mode 100644
index 1a28c6f..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.cpp
+++ /dev/null
@@ -1,710 +0,0 @@
-/*
-     File: AUCarbonViewControl.cpp
- Abstract: AUCarbonViewControl.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUCarbonViewControl.h"
-#include "AUCarbonViewBase.h"
-#include "AUViewLocalizedStringKeys.h"
-
-AUCarbonViewControl::AUCarbonViewControl(AUCarbonViewBase *ownerView, AUParameterListenerRef listener, ControlType type, const CAAUParameter &param, ControlRef control) :
-	mOwnerView(ownerView),
-	mListener(listener),
-	mType(type),
-	mParam(param),
-	mControl(control),
-	mInControlInitialization(0)
-{
-#if !__LP64__
-	SetControlReference(control, SRefCon(this));
-#endif
-}
-
-AUCarbonViewControl::~AUCarbonViewControl()
-{
-	AUListenerRemoveParameter(mListener, this, &mParam);
-}
-
-AUCarbonViewControl* AUCarbonViewControl::mLastControl = NULL;
-
-void	AUCarbonViewControl::Bind()
-{
-#if !__LP64__
-	mInControlInitialization = 1;   // true
-	AUListenerAddParameter(mListener, this, &mParam);
-		// will cause an almost-immediate callback
-
-	EventTypeSpec events[] = {
-		{ kEventClassControl, kEventControlValueFieldChanged }	// N.B. OS X only
-	};
-
-	WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events);
-
-	if (mType == kTypeContinuous || mType == kTypeText || mType == kTypeDiscrete) {
-		EventTypeSpec events[] = {
-			{ kEventClassControl, kEventControlHit },
-			{ kEventClassControl, kEventControlClick },
-		    { kEventClassControl, kEventControlTrack }
-		};
-		WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events);
-	}
-
-	if (mType == kTypeText) {
-		EventTypeSpec events[] = {
-			{ kEventClassControl, kEventControlSetFocusPart }
-		};
-		WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events);
-		ControlKeyFilterUPP proc = mParam.ValuesHaveStrings() ? StdKeyFilterCallback : NumericKeyFilterCallback;
-			// this will fail for a static text field
-		SetControlData(mControl, 0, kControlEditTextKeyFilterTag, sizeof(proc), &proc);
-	}
-
-	Update(true);
-	mInControlInitialization = 0;   // false
-#endif
-}
-
-void	AUCarbonViewControl::ParameterToControl(Float32 paramValue)
-{
-#if !__LP64__
-	++mInControlInitialization;
-	switch (mType) {
-	case kTypeContinuous:
-		SetValueFract(AUParameterValueToLinear(paramValue, &mParam));
-		break;
-	case kTypeDiscrete:
-		{
-			long value = long(paramValue);
-
-			// special case [1] -- menu parameters
-			if (mParam.HasNamedParams()) {
-				// if we're dealing with menus they behave differently!
-				// becaue setting min and max doesn't work correctly for the control value
-				// first menu item always reports a control value of 1
-				ControlKind ctrlKind;
-				if (GetControlKind(mControl, &ctrlKind) == noErr) {
-					if ((ctrlKind.kind == kControlKindPopupArrow)
-						|| (ctrlKind.kind == kControlKindPopupButton))
-					{
-						value = value - long(mParam.ParamInfo().minValue) + 1;
-					}
-				}
-			}
-
-			// special case [2] -- Write-only boolean parameters
-			AudioUnitParameterInfo AUPI = mParam.ParamInfo();
-
-			bool isWriteOnlyBoolParameter = (	(AUPI.unit == kAudioUnitParameterUnit_Boolean) &&
-												(AUPI.flags & kAudioUnitParameterFlag_IsWritable) &&
-												!(AUPI.flags & kAudioUnitParameterFlag_IsReadable)	);
-			if (!isWriteOnlyBoolParameter) {
-				SetValue (value);
-			}
-		}
-		break;
-	case kTypeText:
-		{
-			CFStringRef cfstr = mParam.GetStringFromValueCopy(&paramValue);
-
-			if ( !(mParam.ParamInfo().flags & kAudioUnitParameterFlag_IsWritable)			//READ ONLY PARAMS
-					&& (mParam.ParamInfo().flags & kAudioUnitParameterFlag_IsReadable))
-			{
-				if (mParam.GetParamTag()) {
-					CFMutableStringRef str = CFStringCreateMutableCopy(NULL, 256, cfstr);
-					CFRelease (cfstr);
-					CFStringAppend (str, CFSTR(" "));
-					CFStringAppend (str, mParam.GetParamTag());
-					cfstr = str;
-				}
-			}
-			SetTextValue(cfstr);
-			CFRelease (cfstr);
-		}
-		break;
-	}
-	--mInControlInitialization;
-#endif
-}
-
-void	AUCarbonViewControl::ControlToParameter()
-{
-#if !__LP64__
-	if (mInControlInitialization)
-		return;
-
-	switch (mType) {
-	case kTypeContinuous:
-		{
-			double controlValue = GetValueFract();
-			Float32 paramValue = AUParameterValueFromLinear(controlValue, &mParam);
-			mParam.SetValue(mListener, this, paramValue);
-		}
-		break;
-	case kTypeDiscrete:
-		{
-			long value = GetValue();
-
-			// special case [1] -- Menus
-			if (mParam.HasNamedParams()) {
-				// if we're dealing with menus they behave differently!
-				// becaue setting min and max doesn't work correctly for the control value
-				// first menu item always reports a control value of 1
-				ControlKind ctrlKind;
-				if (GetControlKind(mControl, &ctrlKind) == noErr) {
-					if ((ctrlKind.kind == kControlKindPopupArrow)
-						|| (ctrlKind.kind == kControlKindPopupButton))
-					{
-						value = value + long(mParam.ParamInfo().minValue) - 1;
-					}
-				}
-			}
-
-			// special case [2] -- Write-only boolean parameters
-			AudioUnitParameterInfo AUPI = mParam.ParamInfo();
-
-			bool isWriteOnlyBoolParameter = (	(AUPI.unit == kAudioUnitParameterUnit_Boolean) &&
-												(AUPI.flags & kAudioUnitParameterFlag_IsWritable) &&
-												!(AUPI.flags & kAudioUnitParameterFlag_IsReadable)	);
-			if (isWriteOnlyBoolParameter) {
-				value = 1;
-			}
-
-			mParam.SetValue (mListener, this, value);
-		}
-		break;
-	case kTypeText:
-		{
-			Float32 val = mParam.GetValueFromString (GetTextValue());
-			mParam.SetValue(mListener, this, (mParam.IsIndexedParam() ? (int)val : val));
-			if (mParam.ValuesHaveStrings())
-				ParameterToControl(val); //make sure we display the correct text (from the AU)
-		}
-		break;
-	}
-#endif
-}
-
-void	AUCarbonViewControl::SetValueFract(double value)
-{
-#if !__LP64__
-	SInt32 minimum = GetControl32BitMinimum(mControl);
-	SInt32 maximum = GetControl32BitMaximum(mControl);
-	SInt32 cval = SInt32(value * (maximum - minimum) + minimum + 0.5);
-	SetControl32BitValue(mControl, cval);
-//	printf("set: value=%lf, min=%ld, max=%ld, ctl value=%ld\n", value, minimum, maximum, cval);
-#endif
-}
-
-double	AUCarbonViewControl::GetValueFract()
-{
-#if !__LP64__
-	SInt32 minimum = GetControl32BitMinimum(mControl);
-	SInt32 maximum = GetControl32BitMaximum(mControl);
-	SInt32 cval = GetControl32BitValue(mControl);
-	double result = double(cval - minimum) / double(maximum - minimum);
-//	printf("get: min=%ld, max=%ld, value=%ld, result=%f\n", minimum, maximum, cval, result);
-	return result;
-#else
-	return 0;
-#endif
-}
-
-void	AUCarbonViewControl::SetTextValue(CFStringRef cfstr)
-{
-#if !__LP64__
-	verify_noerr(SetControlData(mControl, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &cfstr));
-#endif
-}
-
-CFStringRef	AUCarbonViewControl::GetTextValue()
-{
-#if !__LP64__
-	CFStringRef cfstr;
-	verify_noerr(GetControlData(mControl, 0, kControlEditTextCFStringTag, sizeof(CFStringRef), &cfstr, NULL));
-	return cfstr;
-#else
-	return CFSTR("");
-#endif
-}
-
-void	AUCarbonViewControl::SetValue(long value)
-{
-#if !__LP64__
-	SetControl32BitValue(mControl, value);
-#endif
-}
-
-long	AUCarbonViewControl::GetValue()
-{
-#if !__LP64__
-	return GetControl32BitValue(mControl);
-#else
-	return 0;
-#endif
-}
-
-/* Notes on event handling
-
-	Button (Click and release on button)
-		kEventControlClick received
-		kEventControlTrack received
-		kEventControlValueFieldChanged received
-		kEventControlHit received
-
-	Button (Click and release outside of button bounds)
-		kEventControlClick received
-		kEventControlTrack received
-
-	Slider (Click, drag, and release)
-		kEventControlClick received
-		kEventControlTrack received
-		kEventControlValueFieldChanged received
-		kEventControlValueFieldChanged received
-		kEventControlHit received
-
-	Slider (Click, release without changing value)
-		kEventControlClick received
-		kEventControlTrack received
-*/
-bool	AUCarbonViewControl::HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event)
-{
-	UInt32 eclass = GetEventClass(event);
-	UInt32 ekind = GetEventKind(event);
-	ControlRef control;
-	bool		handled = true;
-
-	switch (eclass) {
-		case kEventClassControl:
-		{
-			AudioUnitParameterInfo AUPI = mParam.ParamInfo();
-
-			bool isWriteOnlyBoolParameter = (	(AUPI.unit == kAudioUnitParameterUnit_Boolean) &&
-												(AUPI.flags & kAudioUnitParameterFlag_IsWritable) &&
-												!(AUPI.flags & kAudioUnitParameterFlag_IsReadable)	);
-
-			switch (ekind) {
-				case kEventControlSetFocusPart:	// tab
-					handled = !handled;		// fall through to next case
-					mLastControl = this;
-				case kEventControlValueFieldChanged:
-					GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(ControlRef), NULL, &control);
-					verify(control == mControl);
-					ControlToParameter();
-					return handled;
-				case kEventControlClick:
-					if (isWriteOnlyBoolParameter) {
-						GetEventParameter(event, kEventParamDirectObject, typeControlRef, NULL, sizeof(ControlRef), NULL, &control);
-						verify(control == mControl);
-						ControlToParameter();
-					} else if (mLastControl != this) {
-						if (mLastControl != NULL) {
-							mLastControl->Update(false);
-						}
-						mLastControl = this;
-					}
-					mOwnerView->TellListener(mParam, kAudioUnitCarbonViewEvent_MouseDownInControl, NULL);
-					break;	// don't return true, continue normal processing
-				case kEventControlHit:
-					if (mLastControl != this) {
-						if (mLastControl != NULL)
-							mLastControl->Update(false);
-						mLastControl = this;
-					}
-					mOwnerView->TellListener(mParam, kAudioUnitCarbonViewEvent_MouseUpInControl, NULL);
-					break;	// don't return true, continue normal processing
-				case kEventControlTrack:
-					if (mLastControl != this) {
-						if (mLastControl != NULL)
-							mLastControl->Update(false);
-						mLastControl = this;
-					}
-
-					CallNextEventHandler(inHandlerRef, event);
-					ControlToParameter();						// new code
-					mOwnerView->TellListener(mParam, kAudioUnitCarbonViewEvent_MouseUpInControl, NULL);
-					// old code:
-					//		break;	// don't return true, continue normal processing
-
-					return handled;	// don't return true, continue normal processing
-			}
-		}
-	}
-	return !handled;
-}
-
-pascal void	AUCarbonViewControl::SliderTrackProc(ControlRef theControl, ControlPartCode partCode)
-{
-	// this doesn't need to actually do anything
-//	AUCarbonViewControl *This = (AUCarbonViewControl *)GetControlReference(theControl);
-}
-
-pascal ControlKeyFilterResult	AUCarbonViewControl::StdKeyFilterCallback(ControlRef theControl,
-												SInt16 *keyCode, SInt16 *charCode,
-												EventModifiers *modifiers)
-{
-#if !__LP64__
-	SInt16 c = *charCode;
-	if (c >= ' ' || c == '\b' || c == 0x7F || (c >= 0x1c && c <= 0x1f) || c == '\t')
-		return kControlKeyFilterPassKey;
-	if (c == '\r' || c == 3) {	// return or Enter
-		AUCarbonViewControl *This = (AUCarbonViewControl *)GetControlReference(theControl);
-		ControlEditTextSelectionRec sel = { 0, 32767 };
-		SetControlData(This->mControl, 0, kControlEditTextSelectionTag, sizeof(sel), &sel);
-		This->ControlToParameter();
-	}
-#endif
-	return kControlKeyFilterBlockKey;
-}
-
-pascal ControlKeyFilterResult	AUCarbonViewControl::NumericKeyFilterCallback(ControlRef theControl,
-												SInt16 *keyCode, SInt16 *charCode,
-												EventModifiers *modifiers)
-{
-#if !__LP64__
-	SInt16 c = *charCode;
-	if (isdigit(c) || c == '+' || c == '-' || c == '.' || c == '\b' || c == 0x7F || (c >= 0x1c && c <= 0x1f)
-	|| c == '\t')
-		return kControlKeyFilterPassKey;
-	if (c == '\r' || c == 3) {	// return or Enter
-		AUCarbonViewControl *This = (AUCarbonViewControl *)GetControlReference(theControl);
-		ControlEditTextSelectionRec sel = { 0, 32767 };
-		SetControlData(This->mControl, 0, kControlEditTextSelectionTag, sizeof(sel), &sel);
-		This->ControlToParameter();
-	}
-#endif
-	return kControlKeyFilterBlockKey;
-}
-
-Boolean	AUCarbonViewControl::SizeControlToFit(ControlRef inControl, SInt16 *outWidth, SInt16 *outHeight)
-{
-#if !__LP64__
-	if (inControl == 0) return false;
-
-	Boolean bValue = false;
-	// this only works on text controls -- returns an error for other controls, but doesn't do anything,
-	// so the error is irrelevant
-	SetControlData(inControl, kControlEntireControl, 'stim' /* kControlStaticTextIsMultilineTag */, sizeof(Boolean), &bValue);
-
-	SInt16 baseLineOffset;
-	Rect bestRect;
-	OSErr err = GetBestControlRect(inControl, &bestRect, &baseLineOffset);
-	if (err != noErr) return false;
-
-	int width = (bestRect.right - bestRect.left) + 1;
-	int height = (bestRect.bottom - bestRect.top) + 1;
-
-	Rect boundsRect;
-	GetControlBounds (inControl, &boundsRect);
-
-	Rect newRect;
-	newRect.top = boundsRect.top;
-	newRect.bottom = newRect.top + height;
-	newRect.left = boundsRect.left;
-	newRect.right = newRect.left + width;
-
-	SetControlBounds (inControl, &newRect);
-
-	if (outWidth)
-		*outWidth = width;
-
-	if (outHeight)
-		*outHeight = height;
-#endif
-	return true;
-}
-
-#pragma mark ___AUPropertyControl
-bool	AUPropertyControl::HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event)
-{
-	UInt32 eclass = GetEventClass(event);
-	UInt32 ekind = GetEventKind(event);
-	switch (eclass) {
-	case kEventClassControl:
-		switch (ekind) {
-		case kEventControlValueFieldChanged:
-			HandleControlChange();
-			return true;	// handled
-		}
-	}
-
-	return false;
-}
-
-void	AUPropertyControl::RegisterEvents ()
-{
-#if !__LP64__
-	EventTypeSpec events[] = {
-		{ kEventClassControl, kEventControlValueFieldChanged }	// N.B. OS X only
-	};
-
-	WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events);
-#endif
-}
-
-void	AUPropertyControl::EmbedControl (ControlRef theControl)
-{
-	mView->EmbedControl (theControl);
-}
-
-WindowRef 	AUPropertyControl::GetCarbonWindow()
-{
-	return mView->GetCarbonWindow();
-}
-
-#pragma mark ___AUVPreset
-#if !__LP64__
-static CFStringRef kStringFactoryPreset = kAUViewLocalizedStringKey_FactoryPreset;
-static bool sAUVPresetLocalized = false;
-#endif
-
-AUVPresets::AUVPresets (AUCarbonViewBase* 		inParentView,
-						CFArrayRef& 			inPresets,
-						Point 					inLocation,
-						int 					nameWidth,
-						int 					controlWidth,
-						ControlFontStyleRec & 	inFontStyle)
-	: AUPropertyControl (inParentView),
-	  mPresets (inPresets),
-	  mView (inParentView)
-{
-#if !__LP64__
-	Rect r;
-
-	// ok we now have an array of factory presets
-	// get their strings and display them
-
-	r.top = inLocation.v;		r.bottom = r.top;
-	r.left = inLocation.h;		r.right = r.left;
-
-    // localize as necessary
-    if (!sAUVPresetLocalized) {
-        CFBundleRef mainBundle = CFBundleGetBundleWithIdentifier(kLocalizedStringBundle_AUView);
-        if (mainBundle) {
-            kStringFactoryPreset =	CFCopyLocalizedStringFromTableInBundle(
-                                        kAUViewLocalizedStringKey_FactoryPreset, kLocalizedStringTable_AUView,
-                                        mainBundle, CFSTR("FactoryPreset title string"));
-            sAUVPresetLocalized = true;
-        }
-    }
-
-    // create localized title string
-    CFMutableStringRef factoryPresetsTitle = CFStringCreateMutable(NULL, 0);
-    CFStringAppend(factoryPresetsTitle, kStringFactoryPreset);
-    CFStringAppend(factoryPresetsTitle, kAUViewUnlocalizedString_TitleSeparator);
-
-	ControlRef theControl;
-    verify_noerr(CreateStaticTextControl(mView->GetCarbonWindow(), &r, factoryPresetsTitle, &inFontStyle, &theControl));
-	SInt16 width = 0;
-	AUCarbonViewControl::SizeControlToFit(theControl, &width, &mHeight);
-    CFRelease(factoryPresetsTitle);
-	EmbedControl(theControl);
-
-	r.top -= 2;
-	r.left += width + 10;
-	r.right = r.left;
-	r.bottom = r.top;
-
-	verify_noerr(CreatePopupButtonControl (	mView->GetCarbonWindow(), &r, NULL,
-											-12345,	// DON'T GET MENU FROM RESOURCE mMenuID,!!!
-											FALSE,	// variableWidth,
-											0,		// titleWidth,
-											0,		// titleJustification,
-											0,		// titleStyle,
-											&mControl));
-
-	MenuRef menuRef;
-	verify_noerr(CreateNewMenu(1, 0, &menuRef));
-
-	int numPresets = CFArrayGetCount(mPresets);
-
-	for (int i = 0; i < numPresets; ++i)
-	{
-		AUPreset* preset = (AUPreset*) CFArrayGetValueAtIndex (mPresets, i);
-		verify_noerr(AppendMenuItemTextWithCFString (menuRef, preset->presetName, 0, 0, 0));
-	}
-
-	verify_noerr(SetControlData(mControl, 0, kControlPopupButtonMenuRefTag, sizeof(menuRef), &menuRef));
-	verify_noerr (SetControlFontStyle (mControl, &inFontStyle));
-
-	SetControl32BitMaximum (mControl, numPresets);
-
-	// size popup
-	SInt16 height = 0;
-
-	AUCarbonViewControl::SizeControlToFit(mControl, &width, &height);
-
-	if (height > mHeight) mHeight = height;
-	if (mHeight < 0) mHeight = 0;
-
-	// find which menu item is the Default preset
-	UInt32 propertySize = sizeof(AUPreset);
-	AUPreset defaultPreset;
-	OSStatus result = AudioUnitGetProperty (mView->GetEditAudioUnit(),
-									kAudioUnitProperty_PresentPreset,
-									kAudioUnitScope_Global,
-									0,
-									&defaultPreset,
-									&propertySize);
-
-	mPropertyID = kAudioUnitProperty_PresentPreset;
-#endif
-#ifndef __LP64__
-	if (result != noErr) {	// if the PresentPreset property is not implemented, fall back to the CurrentPreset property
-		OSStatus result = AudioUnitGetProperty (mView->GetEditAudioUnit(),
-									kAudioUnitProperty_CurrentPreset,
-									kAudioUnitScope_Global,
-									0,
-									&defaultPreset,
-									&propertySize);
-		mPropertyID = kAudioUnitProperty_CurrentPreset;
-		if (result == noErr)
-			CFRetain (defaultPreset.presetName);
-	}
-#endif
-#if !__LP64__
-	EmbedControl (mControl);
-
-	HandlePropertyChange(defaultPreset);
-
-	RegisterEvents();
-#endif
-}
-
-void	AUVPresets::AddInterest (AUEventListenerRef		inListener,
-											void *		inObject)
-{
-	AudioUnitEvent e;
-	e.mEventType = kAudioUnitEvent_PropertyChange;
-	e.mArgument.mProperty.mAudioUnit = mView->GetEditAudioUnit();
-	e.mArgument.mProperty.mPropertyID = mPropertyID;
-	e.mArgument.mProperty.mScope = kAudioUnitScope_Global;
-	e.mArgument.mProperty.mElement = 0;
-
-	AUEventListenerAddEventType(inListener, inObject, &e);
-}
-
-void	AUVPresets::RemoveInterest (AUEventListenerRef	inListener,
-											void *		inObject)
-{
-	AudioUnitEvent e;
-	e.mEventType = kAudioUnitEvent_PropertyChange;
-	e.mArgument.mProperty.mAudioUnit = mView->GetEditAudioUnit();
-	e.mArgument.mProperty.mPropertyID = mPropertyID;
-	e.mArgument.mProperty.mScope = kAudioUnitScope_Global;
-	e.mArgument.mProperty.mElement = 0;
-
-	AUEventListenerRemoveEventType(inListener, inObject, &e);
-}
-
-void	AUVPresets::HandleControlChange ()
-{
-#if !__LP64__
-	SInt32 i = GetControl32BitValue(mControl);
-	if (i > 0)
-	{
-		AUPreset* preset = (AUPreset*) CFArrayGetValueAtIndex (mPresets, i-1);
-
-		verify_noerr(AudioUnitSetProperty (mView->GetEditAudioUnit(),
-									mPropertyID,	// either currentPreset or PresentPreset depending on which is supported
-									kAudioUnitScope_Global,
-									0,
-									preset,
-									sizeof(AUPreset)));
-
-		// when we change a preset we can't expect the AU to update its state
-		// as it isn't meant to know that its being viewed!
-		// so we broadcast a notification to all listeners that all parameters on this AU have changed
-		AudioUnitParameter changedUnit;
-		changedUnit.mAudioUnit = mView->GetEditAudioUnit();
-		changedUnit.mParameterID = kAUParameterListener_AnyParameter;
-		verify_noerr (AUParameterListenerNotify (NULL, NULL, &changedUnit) );
-	}
-#endif
-}
-
-void	AUVPresets::HandlePropertyChange(AUPreset &preset)
-{
-#if !__LP64__
-	// check to see if the preset is in our menu
-	int numPresets = CFArrayGetCount(mPresets);
-	if (preset.presetNumber < 0) {
-		SetControl32BitValue (mControl, 0); //controls are one-based
-	} else {
-		for (SInt32 i = 0; i < numPresets; ++i) {
-			AUPreset* currPreset = (AUPreset*) CFArrayGetValueAtIndex (mPresets, i);
-			if (preset.presetNumber == currPreset->presetNumber) {
-				SetControl32BitValue (mControl, ++i); //controls are one-based
-				break;
-			}
-		}
-	}
-
-	if (preset.presetName)
-		CFRelease (preset.presetName);
-#endif
-}
-
-bool	AUVPresets::HandlePropertyChange (const AudioUnitProperty &inProp)
-{
-	if (inProp.mPropertyID == mPropertyID)
-	{
-		UInt32 theSize = sizeof(AUPreset);
-		AUPreset currentPreset;
-
-		OSStatus result = AudioUnitGetProperty(inProp.mAudioUnit,
-												inProp.mPropertyID,
-												inProp.mScope,
-												inProp.mElement, &currentPreset, &theSize);
-
-		if (result == noErr) {
-#ifndef __LP64__
-			if (inProp.mPropertyID == kAudioUnitProperty_CurrentPreset && currentPreset.presetName)
-				CFRetain (currentPreset.presetName);
-#endif
-			HandlePropertyChange(currentPreset);
-			return true;
-		}
-	}
-	return false;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h
deleted file mode 100644
index 8aba58f..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-     File: AUCarbonViewControl.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUCarbonViewControl_h__
-#define __AUCarbonViewControl_h__
-
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-#include <Carbon/Carbon.h>
-#include <AudioUnit/AudioUnitCarbonView.h>
-#include <AudioToolbox/AudioUnitUtilities.h>
-#include "CarbonEventHandler.h"
-#include "CAAUParameter.h"
-
-class AUCarbonViewBase;
-
-// ____________________________________________________________________________
-//	AUCarbonViewControl
-//	Wrapper for a control that is wired to an AudioUnit parameter.
-	/*! @class AUCarbonViewControl */
-class AUCarbonViewControl : public CarbonEventHandler {
-	// note that the controls are never disposed; that's managed by the AUCarbonViewBase's
-	// parent pane which contains all of them ... if we later need to be able to delete
-	// individual controls on the fly, extra work needed
-public:
-	enum ControlType {
-		kTypeContinuous,	// e.g. slider
-		kTypeDiscrete,		// e.g. pop-up menu
-		kTypeText
-	};
-
-	AUCarbonViewControl(AUCarbonViewBase *ownerView, AUParameterListenerRef listener, ControlType type, const CAAUParameter &param, ControlRef control);
-	~AUCarbonViewControl();
-
-	/*! @method Bind */
-	virtual void		Bind();		// second-stage construction
-
-	/*! @method ControlToParameter */
-	virtual void		ControlToParameter();
-	/*! @method ParameterToControl */
-	virtual void		ParameterToControl(Float32 newValue);
-
-	/*! @method SetValueFract */
-	virtual void		SetValueFract(double value);
-	/*! @method GetValueFract */
-	virtual double		GetValueFract();
-	/*! @method SetTextValue */
-	virtual void		SetTextValue(CFStringRef str);
-	/*! @method GetTextValue */
-	virtual CFStringRef	GetTextValue();
-	/*! @method SetValue */
-	virtual void		SetValue(long value);
-	/*! @method GetValue */
-	virtual long		GetValue();
-
-	/*! @method GetOwnerView */
-	AUCarbonViewBase * GetOwnerView() {return mOwnerView;}
-
-	/*! @method Update */
-	void				Update (bool inUIThread)
-	{
-				if (inUIThread)
-					ParameterToControl (mParam.GetValue());
-				else
-					AUParameterListenerNotify (mListener, this, &mParam);
-	}
-
-
-	// CarbonEventHandler overrides
-	/*! @method HandleEvent */
-	virtual bool		HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event);
-
-	/*! @method ControlRef */
-	operator ControlRef() { return mControl; }
-
-	/*! @method SizeControlToFit */
-	static Boolean SizeControlToFit(ControlRef inControl, SInt16 *outWidth = NULL, SInt16 *outHeight = NULL);
-
-	/*! @method SliderTrackProc */
-	static pascal void SliderTrackProc(ControlRef theControl, ControlPartCode partCode);
-	/*! @method NumericKeyFilterCallback */
-	static pascal ControlKeyFilterResult NumericKeyFilterCallback(ControlRef theControl, SInt16 *keyCode, SInt16 *charCode,
-															EventModifiers *modifiers);
-protected:
-	/*! @method ParamInfo */
-	const AudioUnitParameterInfo &ParamInfo() { return mParam.ParamInfo(); }
-
-	/*! @var mOwnerView */
-	AUCarbonViewBase * 		mOwnerView;
-	/*! @var mListener */
-	AUParameterListenerRef	mListener;
-	/*! @var mType */
-	ControlType				mType;
-	/*! @var mParam */
-	CAAUParameter			mParam;
-
-	/*! @var mControl */
-	ControlRef				mControl;
-
-	/*! @method StdKeyFilterCallback */
-	static pascal ControlKeyFilterResult StdKeyFilterCallback(ControlRef theControl, SInt16 *keyCode,   SInt16 *charCode,
-																										EventModifiers *modifiers);
-	SInt16					mInControlInitialization;
-
-	static AUCarbonViewControl*	mLastControl;
-};
-
-	/*! @class AUPropertyControl */
-class AUPropertyControl : public CarbonEventHandler {
-public:
-	/*! @ctor AUPropertyControl */
-	AUPropertyControl (AUCarbonViewBase * 		inBase) : mControl(0), mView (inBase), mHeight(0) {}
-
-	/*! @method HandleEvent */
-	virtual bool	HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event);
-
-	/*! @method HandlePropertyChange */
-	virtual bool	HandlePropertyChange (const AudioUnitProperty &inProp) = 0;
-
-	/*! @method AddInterest */
-	virtual void	AddInterest (AUEventListenerRef		inListener,
-								void *					inObject) = 0;
-
-	/*! @method RemoveInterest */
-	virtual void	RemoveInterest  (AUEventListenerRef	inListener,
-								void *					inObject) = 0;
-
-	/*! @method GetHeight */
-	int			GetHeight()	{ return mHeight;}
-
-protected:
-	/*! @method HandleControlChange */
-	virtual void	HandleControlChange () = 0;
-
-	/*! @method RegisterEvents */
-			void	RegisterEvents ();
-
-	/*! @method EmbedControl */
-			void	EmbedControl (ControlRef theControl);
-
-	/*! @method GetCarbonWindow */
-	WindowRef 	GetCarbonWindow();
-
-	/*! @var mControl */
-	ControlRef			mControl;
-	/*! @var mView */
-	AUCarbonViewBase*	mView;
-	/*! @var mHeight */
-	SInt16				mHeight;
-};
-
-	/*! @class AUVPresets */
-class AUVPresets : public AUPropertyControl {
-public:
-					/*! @ctor HandleControlChange */
-					AUVPresets (AUCarbonViewBase * 		inBase,
-								CFArrayRef& 			inPresets,
-								Point 					inLocation,
-								int 					nameWidth,
-								int 					controlWidth,
-								ControlFontStyleRec & 	inFontStyle);
-
-					virtual ~AUVPresets () { CFRelease (mPresets); }
-
-	/*! @method HandlePropertyChange */
-	virtual bool	HandlePropertyChange (const AudioUnitProperty &inProp);
-
-	/*! @method AddInterest */
-	virtual void	AddInterest (AUEventListenerRef		inListener,
-								void *					inObject);
-
-	/*! @method RemoveInterest */
-	virtual void	RemoveInterest  (AUEventListenerRef	inListener,
-								void *					inObject);
-
-protected:
-	/*! @method HandleControlChange */
-	virtual void	HandleControlChange ();
-
-	/*! @var mPresets */
-	CFArrayRef			mPresets;
-	/*! @var mView */
-	AUCarbonViewBase*	mView;
-	AudioUnitPropertyID mPropertyID;
-
-	void	HandlePropertyChange(AUPreset &preset);
-};
-
-#endif // __AUCarbonViewControl_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewDispatch.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewDispatch.cpp
deleted file mode 100644
index 6b0e65a..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewDispatch.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-     File: AUCarbonViewDispatch.cpp
- Abstract: AUCarbonViewDispatch.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUCarbonViewBase.h"
-
-// ____________________________________________________________________________
-// component dispatch
-
-#if PRAGMA_STRUCT_ALIGN
-	#pragma options align=mac68k
-#elif PRAGMA_STRUCT_PACKPUSH
-	#pragma pack(push, 2)
-#elif PRAGMA_STRUCT_PACK
-	#pragma pack(2)
-#endif
-	struct AudioUnitCarbonViewCreateGluePB {
-		unsigned char                  componentFlags;
-		unsigned char                  componentParamSize;
-		short                          componentWhat;
-		ControlRef*                    outControl;
-		const Float32Point*            inSize;
-		const Float32Point*            inLocation;
-		ControlRef                     inParentControl;
-		WindowRef                      inWindow;
-		AudioUnit                      inAudioUnit;
-		AudioUnitCarbonView            inView;
-	};
-#if !__LP64__
-	struct AudioUnitCarbonViewSetEventListenerGluePB {
-		unsigned char                    componentFlags;
-		unsigned char                    componentParamSize;
-		short                            componentWhat;
-		void*                            inUserData;
-		AudioUnitCarbonViewEventListener inCallback;
-		AudioUnitCarbonView              inView;
-	};
-#endif
-#if PRAGMA_STRUCT_ALIGN
-	#pragma options align=reset
-#elif PRAGMA_STRUCT_PACKPUSH
-	#pragma pack(pop)
-#elif PRAGMA_STRUCT_PACK
-	#pragma pack()
-#endif
-
-#define CheckNull(x) if ((x) == NULL) return paramErr;
-
-OSStatus		AUCarbonViewBase::ComponentEntryDispatch(ComponentParameters *p, AUCarbonViewBase *This)
-{
-	if (This == NULL) return paramErr;
-
-	OSStatus result = noErr;
-
-	switch (p->what) {
-	case kAudioUnitCarbonViewCreateSelect:
-		{
-			AudioUnitCarbonViewCreateGluePB *pb = (AudioUnitCarbonViewCreateGluePB *)p;
-			CheckNull(pb->inAudioUnit);
-			CheckNull(pb->inWindow);
-			CheckNull(pb->inParentControl);
-			CheckNull(pb->inSize);
-			CheckNull(pb->inLocation);
-			CheckNull(pb->outControl);
-			result = This->CreateCarbonView(pb->inAudioUnit, pb->inWindow, pb->inParentControl,
-					*pb->inLocation, *pb->inSize, *pb->outControl);
-		}
-		break;
-#if !__LP64__
-	case kAudioUnitCarbonViewSetEventListenerSelect:
-		{
-			AudioUnitCarbonViewSetEventListenerGluePB *pb = (AudioUnitCarbonViewSetEventListenerGluePB *)p;
-			This->SetEventListener(pb->inCallback, pb->inUserData);
-		}
-		break;
-#endif
-
-	default:
-		result = ComponentBase::ComponentEntryDispatch(p, This);
-		break;
-	}
-	return result;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUDispatch.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUDispatch.cpp
deleted file mode 100644
index 5543468..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUDispatch.cpp
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
-     File: AUDispatch.cpp
- Abstract: AUDispatch.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUBase.h"
-#include "CAXException.h"
-#include "AUDispatch.h"
-
-
-
-#if TARGET_OS_MAC
-	#if __LP64__
-		// comp instance, parameters in forward order
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_index + 1];
-	#else
-		// parameters in reverse order, then comp instance
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_nparams - 1 - _index];
-	#endif
-#elif TARGET_OS_WIN32
-		// (no comp instance), parameters in forward order
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_index];
-#endif
-
-
-OSStatus		AUBase::ComponentEntryDispatch(ComponentParameters *params, AUBase *This)
-{
-	if (This == NULL) return kAudio_ParamError;
-
-	OSStatus result = noErr;
-
-	switch (params->what) {
-	case kComponentCanDoSelect:
-		switch (GetSelectorForCanDo(params)) {
-	// any selectors
-			case kAudioUnitInitializeSelect:
-			case kAudioUnitUninitializeSelect:
-			case kAudioUnitGetPropertyInfoSelect:
-			case kAudioUnitGetPropertySelect:
-			case kAudioUnitSetPropertySelect:
-			case kAudioUnitAddPropertyListenerSelect:
-#if (!__LP64__)
-			case kAudioUnitRemovePropertyListenerSelect:
-#endif
-			case kAudioUnitGetParameterSelect:
-			case kAudioUnitSetParameterSelect:
-			case kAudioUnitResetSelect:
-				result = 1;
-				break;
-	// v1 selectors
-
-	// v2 selectors
-			case kAudioUnitRemovePropertyListenerWithUserDataSelect:
-			case kAudioUnitAddRenderNotifySelect:
-			case kAudioUnitRemoveRenderNotifySelect:
-			case kAudioUnitScheduleParametersSelect:
-			case kAudioUnitRenderSelect:
-				result = (This->AudioUnitAPIVersion() > 1);
-				break;
-
-			default:
-				return ComponentBase::ComponentEntryDispatch(params, This);
-		}
-		break;
-
-	case kAudioUnitInitializeSelect:
-	{
-		CAMutex::Locker lock2(This->GetMutex());
-		result = This->DoInitialize();
-	}
-		break;
-
-	case kAudioUnitUninitializeSelect:
-	{
-		CAMutex::Locker lock2(This->GetMutex());
-		This->DoCleanup();
-		result = noErr;
-	}
-		break;
-
-	case kAudioUnitGetPropertyInfoSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitPropertyID, pinID, 0, 5);
-			PARAM(AudioUnitScope, pinScope, 1, 5);
-			PARAM(AudioUnitElement, pinElement, 2, 5);
-			PARAM(UInt32 *, poutDataSize, 3, 5);
-			PARAM(Boolean *, poutWritable, 4, 5);
-
-			// pass our own copies so that we assume responsibility for testing
-			// the caller's pointers against null and our C++ classes can
-			// always assume they're non-null
-			UInt32 dataSize;
-			Boolean writable;
-
-			result = This->DispatchGetPropertyInfo(pinID, pinScope, pinElement, dataSize, writable);
-			if (poutDataSize != NULL)
-				*poutDataSize = dataSize;
-			if (poutWritable != NULL)
-				*poutWritable = writable;
-		}
-		break;
-
-	case kAudioUnitGetPropertySelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitPropertyID, pinID, 0, 5);
-			PARAM(AudioUnitScope, pinScope, 1, 5);
-			PARAM(AudioUnitElement, pinElement, 2, 5);
-			PARAM(void *, poutData, 3, 5);
-			PARAM(UInt32 *, pioDataSize, 4, 5);
-
-			UInt32 actualPropertySize, clientBufferSize;
-			Boolean writable;
-			char *tempBuffer;
-			void *destBuffer;
-
-			if (pioDataSize == NULL) {
-				ca_debug_string("AudioUnitGetProperty: null size pointer");
-				result = kAudio_ParamError;
-				goto finishGetProperty;
-			}
-			if (poutData == NULL) {
-				UInt32 dataSize;
-
-				result = This->DispatchGetPropertyInfo(pinID, pinScope, pinElement, dataSize, writable);
-				*pioDataSize = dataSize;
-				goto finishGetProperty;
-			}
-
-			clientBufferSize = *pioDataSize;
-			if (clientBufferSize == 0)
-			{
-				ca_debug_string("AudioUnitGetProperty: *ioDataSize == 0 on entry");
-				// $$$ or should we allow this as a shortcut for finding the size?
-				result = kAudio_ParamError;
-				goto finishGetProperty;
-			}
-
-			result = This->DispatchGetPropertyInfo(pinID, pinScope, pinElement,
-													actualPropertySize, writable);
-			if (result)
-				goto finishGetProperty;
-
-			if (clientBufferSize < actualPropertySize)
-			{
-				tempBuffer = new char[actualPropertySize];
-				destBuffer = tempBuffer;
-			} else {
-				tempBuffer = NULL;
-				destBuffer = poutData;
-			}
-
-			result = This->DispatchGetProperty(pinID, pinScope, pinElement, destBuffer);
-
-			if (result == noErr) {
-				if (clientBufferSize < actualPropertySize && tempBuffer != NULL)
-				{
-					memcpy(poutData, tempBuffer, clientBufferSize);
-					delete[] tempBuffer;
-					// pioDataSize remains correct, the number of bytes we wrote
-				} else
-					*pioDataSize = actualPropertySize;
-			} else
-				*pioDataSize = 0;
-
-			finishGetProperty:
-				;
-
-		}
-		break;
-
-	case kAudioUnitSetPropertySelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitPropertyID, pinID, 0, 5);
-			PARAM(AudioUnitScope, pinScope, 1, 5);
-			PARAM(AudioUnitElement, pinElement, 2, 5);
-			PARAM(const void *, pinData, 3, 5);
-			PARAM(UInt32, pinDataSize, 4, 5);
-
-			if (pinData && pinDataSize)
-				result = This->DispatchSetProperty(pinID, pinScope, pinElement, pinData, pinDataSize);
-			else {
-				if (pinData == NULL && pinDataSize == 0) {
-					result = This->DispatchRemovePropertyValue (pinID, pinScope, pinElement);
-				} else {
-					if (pinData == NULL) {
-						ca_debug_string("AudioUnitSetProperty: inData == NULL");
-						result = kAudio_ParamError;
-						goto finishSetProperty;
-					}
-
-					if (pinDataSize == 0) {
-						ca_debug_string("AudioUnitSetProperty: inDataSize == 0");
-						result = kAudio_ParamError;
-						goto finishSetProperty;
-					}
-				}
-			}
-			finishSetProperty:
-					;
-
-		}
-		break;
-
-	case kAudioUnitAddPropertyListenerSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitPropertyID, pinID, 0, 3);
-			PARAM(AudioUnitPropertyListenerProc, pinProc, 1, 3);
-			PARAM(void *, pinProcRefCon, 2, 3);
-			result = This->AddPropertyListener(pinID, pinProc, pinProcRefCon);
-		}
-		break;
-
-#if (!__LP64__)
-	case kAudioUnitRemovePropertyListenerSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitPropertyID, pinID, 0, 2);
-			PARAM(AudioUnitPropertyListenerProc, pinProc, 1, 2);
-			result = This->RemovePropertyListener(pinID, pinProc, NULL, false);
-		}
-		break;
-#endif
-
-	case kAudioUnitRemovePropertyListenerWithUserDataSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitPropertyID, pinID, 0, 3);
-			PARAM(AudioUnitPropertyListenerProc, pinProc, 1, 3);
-			PARAM(void *, pinProcRefCon, 2, 3);
-			result = This->RemovePropertyListener(pinID, pinProc, pinProcRefCon, true);
-		}
-		break;
-
-	case kAudioUnitAddRenderNotifySelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AURenderCallback, pinProc, 0, 2);
-			PARAM(void *, pinProcRefCon, 1, 2);
-			result = This->SetRenderNotification (pinProc, pinProcRefCon);
-		}
-		break;
-
-	case kAudioUnitRemoveRenderNotifySelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AURenderCallback, pinProc, 0, 2);
-			PARAM(void *, pinProcRefCon, 1, 2);
-			result = This->RemoveRenderNotification (pinProc, pinProcRefCon);
-		}
-		break;
-
-	case kAudioUnitGetParameterSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitParameterID, pinID, 0, 4);
-			PARAM(AudioUnitScope, pinScope, 1, 4);
-			PARAM(AudioUnitElement, pinElement, 2, 4);
-			PARAM(AudioUnitParameterValue *, poutValue, 3, 4);
-			result = (poutValue == NULL ? kAudio_ParamError : This->GetParameter(pinID, pinScope, pinElement, *poutValue));
-		}
-		break;
-
-	case kAudioUnitSetParameterSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex()); // is this realtime or no???
-			PARAM(AudioUnitParameterID, pinID, 0, 5);
-			PARAM(AudioUnitScope, pinScope, 1, 5);
-			PARAM(AudioUnitElement, pinElement, 2, 5);
-			PARAM(AudioUnitParameterValue, pinValue, 3, 5);
-			PARAM(UInt32, pinBufferOffsetInFrames, 4, 5);
-			result = This->SetParameter(pinID, pinScope, pinElement, pinValue, pinBufferOffsetInFrames);
-		}
-		break;
-
-	case kAudioUnitScheduleParametersSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex()); // is this realtime or no???
-			if (This->AudioUnitAPIVersion() > 1)
-			{
-				PARAM(AudioUnitParameterEvent *, pinParameterEvent, 0, 2);
-				PARAM(UInt32, pinNumParamEvents, 1, 2);
-				result = This->ScheduleParameter (pinParameterEvent, pinNumParamEvents);
-			} else
-				result = badComponentSelector;
-		}
-		break;
-
-
-	case kAudioUnitRenderSelect:
-		{
-			// realtime; no lock
-			{
-				PARAM(AudioUnitRenderActionFlags *, pinActionFlags, 0, 5);
-				PARAM(const AudioTimeStamp *, pinTimeStamp, 1, 5);
-				PARAM(UInt32, pinOutputBusNumber, 2, 5);
-				PARAM(UInt32, pinNumberFrames, 3, 5);
-				PARAM(AudioBufferList *, pioData, 4, 5);
-				AudioUnitRenderActionFlags tempFlags;
-
-				if (pinTimeStamp == NULL || pioData == NULL)
-					result = kAudio_ParamError;
-				else {
-					if (pinActionFlags == NULL) {
-						tempFlags = 0;
-						pinActionFlags = &tempFlags;
-					}
-					result = This->DoRender(*pinActionFlags, *pinTimeStamp, pinOutputBusNumber, pinNumberFrames, *pioData);
-				}
-			}
-		}
-		break;
-
-	case kAudioUnitResetSelect:
-		{
-			CAMutex::Locker lock(This->GetMutex());
-			PARAM(AudioUnitScope, pinScope, 0, 2);
-			PARAM(AudioUnitElement, pinElement, 1, 2);
-			This->ResetRenderTime();
-			result = This->Reset(pinScope, pinElement);
-		}
-		break;
-
-	default:
-		result = ComponentBase::ComponentEntryDispatch(params, This);
-		break;
-	}
-
-	return result;
-}
-
-// Fast dispatch entry points -- these need to replicate all error-checking logic from above
-
-OSStatus CMgr_AudioUnitBaseGetParameter(	AUBase *				This,
-											AudioUnitParameterID	inID,
-											AudioUnitScope			inScope,
-											AudioUnitElement		inElement,
-											float					*outValue)
-{
-	OSStatus result = AUBase::noErr;
-
-	try {
-		if (This == NULL || outValue == NULL) return kAudio_ParamError;
-		result = This->GetParameter(inID, inScope, inElement, *outValue);
-	}
-	COMPONENT_CATCH
-
-	return result;
-}
-
-OSStatus CMgr_AudioUnitBaseSetParameter(	AUBase * 				This,
-											AudioUnitParameterID	inID,
-											AudioUnitScope			inScope,
-											AudioUnitElement		inElement,
-											float					inValue,
-											UInt32					inBufferOffset)
-{
-	OSStatus result = AUBase::noErr;
-
-	try {
-		if (This == NULL) return kAudio_ParamError;
-		result = This->SetParameter(inID, inScope, inElement, inValue, inBufferOffset);
-	}
-	COMPONENT_CATCH
-
-	return result;
-}
-
-OSStatus CMgr_AudioUnitBaseRender(			AUBase *				This,
-											AudioUnitRenderActionFlags *ioActionFlags,
-											const AudioTimeStamp *	inTimeStamp,
-											UInt32					inBusNumber,
-											UInt32					inNumberFrames,
-											AudioBufferList *		ioData)
-{
-	if (inTimeStamp == NULL || ioData == NULL) return kAudio_ParamError;
-
-	OSStatus result = AUBase::noErr;
-	AudioUnitRenderActionFlags tempFlags;
-
-	try {
-		if (ioActionFlags == NULL) {
-			tempFlags = 0;
-			ioActionFlags = &tempFlags;
-		}
-		result = This->DoRender(*ioActionFlags, *inTimeStamp, inBusNumber, inNumberFrames, *ioData);
-	}
-	COMPONENT_CATCH
-
-	return result;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUDispatch.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUDispatch.h
deleted file mode 100644
index a07bd03..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUDispatch.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-     File: AUDispatch.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUDispatch_h__
-#define __AUDispatch_h__
-
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <AudioUnit/AudioUnit.h>
-#else
-	#include "AudioUnit.h"
-#endif
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-/*! @function AudioUnitBaseGetParameter */
-OSStatus CMgr_AudioUnitBaseGetParameter(	AUBase *				This,
-											AudioUnitParameterID	inID,
-											AudioUnitScope			inScope,
-											AudioUnitElement		inElement,
-											float *					outValue);
-
-/*! @function AudioUnitBaseSetParameter */
-OSStatus CMgr_AudioUnitBaseSetParameter(	AUBase *		 		This,
-											AudioUnitParameterID	inID,
-											AudioUnitScope			inScope,
-											AudioUnitElement		inElement,
-											float					inValue,
-											UInt32					inBufferOffset);
-
-/*! @function AudioUnitBaseRender */
-OSStatus CMgr_AudioUnitBaseRender(			AUBase *				This,
-											AudioUnitRenderActionFlags *ioActionFlags,
-											const AudioTimeStamp *	inTimeStamp,
-											UInt32					inBusNumber,
-											UInt32					inNumberFrames,
-											AudioBufferList *		ioData);
-#endif
-
-#endif // __AUDispatch_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.cpp
deleted file mode 100644
index 5e5ba79..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-     File: AUInputElement.cpp
- Abstract: AUInputElement.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUBase.h"
-
-inline bool	HasGoodBufferPointers(const AudioBufferList &abl, UInt32 nBytes)
-{
-	const AudioBuffer *buf = abl.mBuffers;
-	for (UInt32 i = abl.mNumberBuffers; i--;++buf) {
-		if (buf->mData == NULL || buf->mDataByteSize < nBytes)
-			return false;
-	}
-	return true;
-}
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//	AUInputElement::AUInputElement
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-AUInputElement::AUInputElement(AUBase *audioUnit) :
-	AUIOElement(audioUnit),
-	mInputType(kNoInput)
-{
-}
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//	AUInputElement::SetConnection
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-void	AUInputElement::SetConnection(const AudioUnitConnection &conn)
-{
-	if (conn.sourceAudioUnit == 0) {
-		Disconnect();
-		return;
-	}
-
-	mInputType = kFromConnection;
-	mConnection = conn;
-	AllocateBuffer();
-
-	mConnInstanceStorage = NULL;
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	mConnRenderProc = NULL;
-	UInt32 size = sizeof(AudioUnitRenderProc);
-	OSStatus result = AudioUnitGetProperty(	conn.sourceAudioUnit,
-							kAudioUnitProperty_FastDispatch,
-							kAudioUnitScope_Global,
-							kAudioUnitRenderSelect,
-							&mConnRenderProc,
-							&size);
-	if (result == noErr)
-		mConnInstanceStorage = CMgr_GetComponentInstanceStorage (conn.sourceAudioUnit);
-	else
-		mConnRenderProc = NULL;
-#endif
-}
-
-void	AUInputElement::Disconnect()
-{
-	mInputType = kNoInput;
-	mIOBuffer.Deallocate();
-}
-
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//	AUInputElement::SetInputCallback
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-void	AUInputElement::SetInputCallback(AURenderCallback proc, void *refCon)
-{
-	if (proc == NULL)
-		Disconnect();
-	else {
-		mInputType = kFromCallback;
-		mInputProc = proc;
-		mInputProcRefCon = refCon;
-		AllocateBuffer();
-	}
-}
-
-OSStatus	AUInputElement::SetStreamFormat(const CAStreamBasicDescription &fmt)
-{
-	OSStatus err = AUIOElement::SetStreamFormat(fmt);
-	if (err == AUBase::noErr)
-		AllocateBuffer();
-	return err;
-}
-
-OSStatus		AUInputElement::PullInput(	AudioUnitRenderActionFlags &  	ioActionFlags,
-											const AudioTimeStamp &			inTimeStamp,
-											AudioUnitElement				inElement,
-											UInt32							nFrames)
-{
-	if (!IsActive())
-		return kAudioUnitErr_NoConnection;
-
-	AudioBufferList *pullBuffer;
-
-	if (HasConnection() || !WillAllocateBuffer())
-		pullBuffer = &mIOBuffer.PrepareNullBuffer(mStreamFormat, nFrames);
-	else
-		pullBuffer = &mIOBuffer.PrepareBuffer(mStreamFormat, nFrames);
-
-	return PullInputWithBufferList (ioActionFlags, inTimeStamp, inElement, nFrames, pullBuffer);
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.h
deleted file mode 100644
index 4a3060c..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-     File: AUInputElement.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUInput_h__
-#define __AUInput_h__
-
-#include "AUScopeElement.h"
-#include "AUBuffer.h"
-
-/*! @class AUInputElement */
-class AUInputElement : public AUIOElement {
-public:
-
-	/*! @ctor AUInputElement */
-						AUInputElement(AUBase *audioUnit);
-	/*! @dtor ~AUInputElement */
-	virtual				~AUInputElement() { }
-
-	// AUElement override
-	/*! @method SetStreamFormat */
-	virtual OSStatus	SetStreamFormat(const CAStreamBasicDescription &desc);
-	/*! @method NeedsBufferSpace */
-	virtual bool		NeedsBufferSpace() const { return IsCallback(); }
-
-	/*! @method SetConnection */
-	void				SetConnection(const AudioUnitConnection &conn);
-	/*! @method SetInputCallback */
-	void				SetInputCallback(AURenderCallback proc, void *refCon);
-
-	/*! @method IsActive */
-	bool				IsActive() const { return mInputType != kNoInput; }
-	/*! @method IsCallback */
-	bool				IsCallback() const { return mInputType == kFromCallback; }
-	/*! @method HasConnection */
-	bool				HasConnection() const { return mInputType == kFromConnection; }
-
-	/*! @method PullInput */
-	OSStatus			PullInput(	AudioUnitRenderActionFlags &  	ioActionFlags,
-									const AudioTimeStamp &			inTimeStamp,
-									AudioUnitElement				inElement,
-									UInt32							inNumberFrames);
-
-	/*! @method PullInputWithBufferList */
-	OSStatus			PullInputWithBufferList(	AudioUnitRenderActionFlags &  	ioActionFlags,
-													const AudioTimeStamp &			inTimeStamp,
-													AudioUnitElement				inElement,
-													UInt32							nFrames,
-													AudioBufferList *				inBufferList);
-protected:
-	/*! @method Disconnect */
-	void				Disconnect();
-
-	enum EInputType { kNoInput, kFromConnection, kFromCallback };
-
-	/*! @var mInputType */
-	EInputType					mInputType;
-
-	// if from callback:
-	/*! @var mInputProc */
-	AURenderCallback			mInputProc;
-	/*! @var mInputProcRefCon */
-	void *						mInputProcRefCon;
-
-	// if from connection:
-	/*! @var mConnection */
-	AudioUnitConnection			mConnection;
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	/*! @var mConnRenderProc */
-	AudioUnitRenderProc			mConnRenderProc;
-#endif
-	/*! @var mConnInstanceStorage */
-	void *						mConnInstanceStorage;		// for the input component
-};
-
-
-#endif // __AUInput_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputFormatConverter.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputFormatConverter.h
deleted file mode 100644
index 91c1b8c..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputFormatConverter.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-     File: AUInputFormatConverter.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUInputFormatConverter_h__
-#define __AUInputFormatConverter_h__
-
-#include "FormatConverterClient.h"
-#include "AUTimestampGenerator.h"
-
-// ____________________________________________________________________________
-// AUInputFormatConverter
-//
-// Subclass of FormatConverterClient that applies a format conversion
-// to an input of an AudioUnit.
-	/*! @class AUInputFormatConverter */
-class AUInputFormatConverter : public FormatConverterClient {
-public:
-	/*! @ctor AUInputFormatConverter */
-	AUInputFormatConverter(AUBase *hostAU, int inputBus) :
-		mHost(hostAU),
-		mHostBus(inputBus),
-		mPreviousSilentFrames(0x1000)
-	{
-#if DEBUG
-		mTimestampGenerator.mVerbosity = 0;
-		strcpy(mTimestampGenerator.mDebugName, "AUConverter");
-#endif
-	}
-
-	// need to subsequently call Initialize, with the desired formats
-
-	/*! @dtor ~AUInputFormatConverter */
-	~AUInputFormatConverter()
-	{
-	}
-
-	virtual OSStatus Initialize(const AudioStreamBasicDescription &src, const AudioStreamBasicDescription &dest)
-	{
-		OSStatus err = FormatConverterClient::Initialize(src, dest);
-		if (err) return err;
-		mIsPCMToPCM = (src.mFormatID == kAudioFormatLinearPCM) && (dest.mFormatID == kAudioFormatLinearPCM);
-		mHasSRC = (fnonzero(src.mSampleRate) && fnonzero(dest.mSampleRate) && fnotequal(src.mSampleRate, dest.mSampleRate));
-		return ca_noErr;
-	}
-
-	virtual OSStatus	Reset()
-	{
-		mPreviousSilentFrames = 0x1000;
-		mTimestampGenerator.Reset();
-		return FormatConverterClient::Reset();
-	}
-
-	void	SetStartInputTimeAtZero(bool b)
-	{
-		mTimestampGenerator.SetStartInputAtZero(b);
-	}
-
-	/*! @method FillComplexBuffer */
-	OSStatus	AUFillComplexBuffer(const AudioTimeStamp &				inTimeStamp,
-									UInt32 &							ioOutputDataPacketSize,
-									AudioBufferList &					outOutputData,
-									AudioStreamPacketDescription*		outPacketDescription,
-									bool&								outSilence)
-	{
-		mTimestampGenerator.AddOutputTime(inTimeStamp, ioOutputDataPacketSize, mOutputFormat.mSampleRate);
-		mSilentOutput = true;
-		OSStatus err = FillComplexBuffer(ioOutputDataPacketSize, outOutputData, outPacketDescription);
-		if (mSilentOutput) {
-			if (!mIsPCMToPCM || (mHasSRC && mPreviousSilentFrames < 32))
-				mSilentOutput = false;
-			mPreviousSilentFrames += ioOutputDataPacketSize;
- 		} else
-			mPreviousSilentFrames = 0;
-		outSilence = mSilentOutput;
-		return err;
-	}
-
-	/*! @method FormatConverterInputProc */
-	virtual OSStatus	FormatConverterInputProc(
-								UInt32 &						ioNumberDataPackets,
-								AudioBufferList &				ioData,
-								AudioStreamPacketDescription**	outDataPacketDescription)
-	{
-		OSStatus err = ca_noErr;
-
-		AudioUnitRenderActionFlags actionFlags = 0;
-		AUInputElement *input = mHost->GetInput(mHostBus);
-		*ioNumberDataPackets = std::min(*ioNumberDataPackets, This->mHost->GetMaxFramesPerSlice());
-		const AudioTimeStamp &inputTime = mTimestampGenerator.GenerateInputTime(ioNumberDataPackets, mInputFormat.mSampleRate);
-		err = input->PullInput(actionFlags, inputTime, mHostBus, ioNumberDataPackets);
-		if (!err) {
-			input->CopyBufferListTo(ioData);
-			if (!(actionFlags & kAudioUnitRenderAction_OutputIsSilence))
-				mSilentOutput = false;
-		}
-		return err;
-	}
-
-protected:
-	/*! @var mHost */
-	AUBase *				mHost;
-	/*! @var mHostBus */
-	int						mHostBus;
-
-	AUTimestampGenerator	mTimestampGenerator;
-	bool					mIsPCMToPCM;
-	bool					mHasSRC;
-	bool					mSilentOutput;
-	UInt32					mPreviousSilentFrames;
-};
-
-#endif // __AUInputFormatConverter_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.cpp
deleted file mode 100644
index dab6ec5..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.cpp
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
-     File: AUMIDIBase.cpp
- Abstract: AUMIDIBase.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUMIDIBase.h"
-#include <CoreMIDI/CoreMIDI.h>
-#include "CAXException.h"
-
-//temporaray location
-enum
-{
-	kMidiMessage_NoteOff 			= 0x80,
-	kMidiMessage_NoteOn 			= 0x90,
-	kMidiMessage_PolyPressure 		= 0xA0,
-	kMidiMessage_ControlChange 		= 0xB0,
-	kMidiMessage_ProgramChange 		= 0xC0,
-	kMidiMessage_ChannelPressure 	= 0xD0,
-	kMidiMessage_PitchWheel 		= 0xE0,
-
-	kMidiController_AllSoundOff			= 120,
-	kMidiController_ResetAllControllers	= 121,
-	kMidiController_AllNotesOff			= 123
-};
-
-AUMIDIBase::AUMIDIBase(AUBase* inBase)
-	: mAUBaseInstance (*inBase)
-{
-#if CA_AUTO_MIDI_MAP
-	mMapManager = new CAAUMIDIMapManager();
-#endif
-}
-
-AUMIDIBase::~AUMIDIBase()
-{
-#if CA_AUTO_MIDI_MAP
-	if (mMapManager)
-		delete mMapManager;
-#endif
-}
-
-#if TARGET_API_MAC_OSX
-OSStatus			AUMIDIBase::DelegateGetPropertyInfo(AudioUnitPropertyID				inID,
-														AudioUnitScope					inScope,
-														AudioUnitElement				inElement,
-														UInt32 &						outDataSize,
-														Boolean &						outWritable)
-{
-	OSStatus result = noErr;
-
-	switch (inID) {
-#if !TARGET_OS_IPHONE
-	case kMusicDeviceProperty_MIDIXMLNames:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		if (GetXMLNames(NULL) == noErr) {
-			outDataSize = sizeof(CFURLRef);
-			outWritable = false;
-		} else
-			result = kAudioUnitErr_InvalidProperty;
-		break;
-#endif
-#if CA_AUTO_MIDI_MAP
-	case kAudioUnitProperty_AllParameterMIDIMappings:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		outWritable = true;
-		outDataSize = sizeof (AUParameterMIDIMapping)*mMapManager->NumMaps();
-		result = noErr;
-		break;
-
-	case kAudioUnitProperty_HotMapParameterMIDIMapping:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		outWritable = true;
-		outDataSize = sizeof (AUParameterMIDIMapping);
-		result = noErr;
-		break;
-
-	case kAudioUnitProperty_AddParameterMIDIMapping:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		outWritable = true;
-		outDataSize = sizeof (AUParameterMIDIMapping);
-		result = noErr;
-		break;
-
-	case kAudioUnitProperty_RemoveParameterMIDIMapping:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		outWritable = true;
-		outDataSize = sizeof (AUParameterMIDIMapping);
-		result = noErr;
-		break;
-#endif
-
-	default:
-		result = kAudioUnitErr_InvalidProperty;
-		break;
-	}
-	return result;
-
-#if CA_AUTO_MIDI_MAP || (!TARGET_OS_IPHONE)
-InvalidScope:
-	return kAudioUnitErr_InvalidScope;
-InvalidElement:
-	return kAudioUnitErr_InvalidElement;
-#endif
-}
-
-OSStatus			AUMIDIBase::DelegateGetProperty(	AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement,
-														void *							outData)
-{
-	OSStatus result;
-
-	switch (inID) {
-#if !TARGET_OS_IPHONE
-	case kMusicDeviceProperty_MIDIXMLNames:
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		result = GetXMLNames((CFURLRef *)outData);
-		break;
-#endif
-#if CA_AUTO_MIDI_MAP
-	case kAudioUnitProperty_AllParameterMIDIMappings:{
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		AUParameterMIDIMapping*  maps =  (static_cast<AUParameterMIDIMapping*>(outData));
-		mMapManager->GetMaps(maps);
-//		printf ("GETTING MAPS\n");
-//		mMapManager->Print();
-		result = noErr;
-		break;
-	}
-
-	case kAudioUnitProperty_HotMapParameterMIDIMapping:{
-		ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-		ca_require(inElement == 0, InvalidElement);
-		AUParameterMIDIMapping *  map =  (static_cast<AUParameterMIDIMapping*>(outData));
-		mMapManager->GetHotParameterMap (*map);
-		result = noErr;
-		break;
-	}
-#endif
-
-	default:
-		result = kAudioUnitErr_InvalidProperty;
-		break;
-	}
-	return result;
-
-#if CA_AUTO_MIDI_MAP || (!TARGET_OS_IPHONE)
-InvalidScope:
-	return kAudioUnitErr_InvalidScope;
-InvalidElement:
-	return kAudioUnitErr_InvalidElement;
-#endif
-}
-
-OSStatus			AUMIDIBase::DelegateSetProperty(	AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement			 	inElement,
-														const void *					inData,
-														UInt32							inDataSize)
-{
-	OSStatus result;
-
-	switch (inID) {
-#if CA_AUTO_MIDI_MAP
-		case kAudioUnitProperty_AddParameterMIDIMapping:{
-			ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-			ca_require(inElement == 0, InvalidElement);
-			AUParameterMIDIMapping * maps = (AUParameterMIDIMapping*)inData;
-			mMapManager->SortedInsertToParamaterMaps (maps, (inDataSize / sizeof(AUParameterMIDIMapping)), mAUBaseInstance);
-			mAUBaseInstance.PropertyChanged (kAudioUnitProperty_AllParameterMIDIMappings, kAudioUnitScope_Global, 0);
-			result = noErr;
-			break;
-		}
-
-		case kAudioUnitProperty_RemoveParameterMIDIMapping:{
-			ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-			ca_require(inElement == 0, InvalidElement);
-			AUParameterMIDIMapping * maps = (AUParameterMIDIMapping*)inData;
-			bool didChange;
-			mMapManager->SortedRemoveFromParameterMaps(maps, (inDataSize / sizeof(AUParameterMIDIMapping)), didChange);
-			if (didChange)
-				mAUBaseInstance.PropertyChanged (kAudioUnitProperty_AllParameterMIDIMappings, kAudioUnitScope_Global, 0);
-			result = noErr;
-			break;
-		}
-
-		case kAudioUnitProperty_HotMapParameterMIDIMapping:{
-			ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-			ca_require(inElement == 0, InvalidElement);
-			AUParameterMIDIMapping & map = *((AUParameterMIDIMapping*)inData);
-			mMapManager->SetHotMapping (map);
-			result = noErr;
-			break;
-		}
-		case kAudioUnitProperty_AllParameterMIDIMappings:{
-			ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
-			ca_require(inElement == 0, InvalidElement);
-			AUParameterMIDIMapping * mappings = (AUParameterMIDIMapping*)inData;
-			mMapManager->ReplaceAllMaps (mappings, (inDataSize / sizeof(AUParameterMIDIMapping)), mAUBaseInstance);
-			result = noErr;
-			break;
-		}
-#endif
-
-	default:
-		result = kAudioUnitErr_InvalidProperty;
-		break;
-	}
-	return result;
-#if CA_AUTO_MIDI_MAP
-	InvalidScope:
-		return kAudioUnitErr_InvalidScope;
-	InvalidElement:
-		return kAudioUnitErr_InvalidElement;
-#endif
-}
-
-
-
-#endif //TARGET_API_MAC_OSX
-
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#pragma mark ____MidiDispatch
-
-
-inline const Byte *	NextMIDIEvent(const Byte *event, const Byte *end)
-{
-	Byte c = *event;
-	switch (c >> 4) {
-	default:	// data byte -- assume in sysex
-		while ((*++event & 0x80) == 0 && event < end)
-			;
-		break;
-	case 0x8:
-	case 0x9:
-	case 0xA:
-	case 0xB:
-	case 0xE:
-		event += 3;
-		break;
-	case 0xC:
-	case 0xD:
-		event += 2;
-		break;
-	case 0xF:
-		switch (c) {
-		case 0xF0:
-			while ((*++event & 0x80) == 0 && event < end)
-				;
-			break;
-		case 0xF1:
-		case 0xF3:
-			event += 2;
-			break;
-		case 0xF2:
-			event += 3;
-			break;
-		default:
-			++event;
-			break;
-		}
-	}
-	return (event >= end) ? end : event;
-}
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//	AUMIDIBase::HandleMIDIPacketList
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-OSStatus			AUMIDIBase::HandleMIDIPacketList(const MIDIPacketList *pktlist)
-{
-	if (!mAUBaseInstance.IsInitialized()) return kAudioUnitErr_Uninitialized;
-
-	int nPackets = pktlist->numPackets;
-	const MIDIPacket *pkt = pktlist->packet;
-
-	while (nPackets-- > 0) {
-		const Byte *event = pkt->data, *packetEnd = event + pkt->length;
-		long startFrame = (long)pkt->timeStamp;
-		while (event < packetEnd) {
-			Byte status = event[0];
-			if (status & 0x80) {
-				// really a status byte (not sysex continuation)
-				HandleMidiEvent(status & 0xF0, status & 0x0F, event[1], event[2], static_cast<UInt32>(startFrame));
-					// note that we're generating a bogus channel number for system messages (0xF0-FF)
-			}
-			event = NextMIDIEvent(event, packetEnd);
-		}
-		pkt = reinterpret_cast<const MIDIPacket *>(packetEnd);
-	}
-	return noErr;
-}
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//	AUMIDIBase::HandleMidiEvent
-//
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-OSStatus 	AUMIDIBase::HandleMidiEvent(UInt8 status, UInt8 channel, UInt8 data1, UInt8 data2, UInt32 inStartFrame)
-{
-	if (!mAUBaseInstance.IsInitialized()) return kAudioUnitErr_Uninitialized;
-
-#if CA_AUTO_MIDI_MAP
-// you potentially have a choice to make here - if a param mapping matches, do you still want to process the
-// MIDI event or not. The default behaviour is to continue on with the MIDI event.
-	if (mMapManager->HandleHotMapping (status, channel, data1, mAUBaseInstance)) {
-		mAUBaseInstance.PropertyChanged (kAudioUnitProperty_HotMapParameterMIDIMapping, kAudioUnitScope_Global, 0);
-	}
-	else {
-		mMapManager->FindParameterMapEventMatch(status, channel, data1, data2, inStartFrame, mAUBaseInstance);
-	}
-#endif
-
-	OSStatus result = noErr;
-
-	switch(status)
-	{
-		case kMidiMessage_NoteOn:
-			if(data2)
-			{
-				result = HandleNoteOn(channel, data1, data2, inStartFrame);
-			}
-			else
-			{
-				// zero velocity translates to note off
-				result = HandleNoteOff(channel, data1, data2, inStartFrame);
-			}
-			break;
-
-		case kMidiMessage_NoteOff:
-			result = HandleNoteOff(channel, data1, data2, inStartFrame);
-			break;
-
-		default:
-			result = HandleNonNoteEvent (status, channel, data1, data2, inStartFrame);
-			break;
-	}
-
-	return result;
-}
-
-OSStatus	AUMIDIBase::HandleNonNoteEvent (UInt8 status, UInt8 channel, UInt8 data1, UInt8 data2, UInt32 inStartFrame)
-{
-	OSStatus result = noErr;
-
-	switch (status)
-	{
-		case kMidiMessage_PitchWheel:
-			result = HandlePitchWheel(channel, data1, data2, inStartFrame);
-			break;
-
-		case kMidiMessage_ProgramChange:
-			result = HandleProgramChange(channel, data1);
-			break;
-
-		case kMidiMessage_ChannelPressure:
-			result = HandleChannelPressure(channel, data1, inStartFrame);
-			break;
-
-		case kMidiMessage_ControlChange:
-		{
-			switch (data1) {
-				case kMidiController_AllNotesOff:
-					result = HandleAllNotesOff(channel);
-					break;
-
-				case kMidiController_ResetAllControllers:
-					result = HandleResetAllControllers(channel);
-					break;
-
-				case kMidiController_AllSoundOff:
-					result = HandleAllSoundOff(channel);
-					break;
-
-				default:
-					result = HandleControlChange(channel, data1, data2, inStartFrame);
-					break;
-			}
-			break;
-		}
-		case kMidiMessage_PolyPressure:
-			result = HandlePolyPressure (channel, data1, data2, inStartFrame);
-			break;
-	}
-	return result;
-}
-
-OSStatus 	AUMIDIBase::SysEx (const UInt8 *	inData,
-										UInt32			inLength)
-{
-	if (!mAUBaseInstance.IsInitialized()) return kAudioUnitErr_Uninitialized;
-
-	return HandleSysEx(inData, inLength );
-}
-
-
-
-#if TARGET_OS_MAC
-	#if __LP64__
-		// comp instance, parameters in forward order
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_index + 1];
-	#else
-		// parameters in reverse order, then comp instance
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_nparams - 1 - _index];
-	#endif
-#elif TARGET_OS_WIN32
-		// (no comp instance), parameters in forward order
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_index];
-#endif
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-OSStatus			AUMIDIBase::ComponentEntryDispatch(	ComponentParameters *			params,
-															AUMIDIBase *				This)
-{
-	if (This == NULL) return kAudio_ParamError;
-
-	OSStatus result;
-
-	switch (params->what) {
-	case kMusicDeviceMIDIEventSelect:
-		{
-			PARAM(UInt32, pbinStatus, 0, 4);
-			PARAM(UInt32, pbinData1, 1, 4);
-			PARAM(UInt32, pbinData2, 2, 4);
-			PARAM(UInt32, pbinOffsetSampleFrame, 3, 4);
-			result = This->MIDIEvent(pbinStatus, pbinData1, pbinData2, pbinOffsetSampleFrame);
-		}
-		break;
-	case kMusicDeviceSysExSelect:
-		{
-			PARAM(const UInt8 *, pbinData, 0, 2);
-			PARAM(UInt32, pbinLength, 1, 2);
-			result = This->SysEx(pbinData, pbinLength);
-		}
-		break;
-
-	default:
-		result = badComponentSelector;
-		break;
-	}
-
-	return result;
-}
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.h
deleted file mode 100644
index 116b18c..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUMIDIBase.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
-     File: AUMIDIBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUMIDIBase_h__
-#define __AUMIDIBase_h__
-
-#include "AUBase.h"
-
-#if CA_AUTO_MIDI_MAP
-	#include "CAAUMIDIMapManager.h"
-#endif
-
-struct MIDIPacketList;
-
-// ________________________________________________________________________
-//	MusicDeviceBase
-//
-	/*! @class AUMIDIBase */
-class AUMIDIBase {
-public:
-									// this is NOT a copy constructor!
-	/*! @ctor AUMIDIBase */
-								AUMIDIBase(AUBase* inBase);
-	/*! @dtor ~AUMIDIBase */
-	virtual						~AUMIDIBase();
-
-	/*! @method MIDIEvent */
-	virtual OSStatus	MIDIEvent(		UInt32 						inStatus,
-										UInt32 						inData1,
-										UInt32 						inData2,
-										UInt32 						inOffsetSampleFrame)
-	{
-		UInt32 strippedStatus = inStatus & 0xf0;
-		UInt32 channel = inStatus & 0x0f;
-
-		return HandleMidiEvent(strippedStatus, channel, inData1, inData2, inOffsetSampleFrame);
-	}
-
-	/*! @method HandleMIDIPacketList */
-	OSStatus			HandleMIDIPacketList(const MIDIPacketList *pktlist);
-
-	/*! @method SysEx */
-	virtual OSStatus	SysEx(			const UInt8 *				inData,
-										UInt32 						inLength);
-
-#if TARGET_API_MAC_OSX
-	/*! @method DelegateGetPropertyInfo */
-	virtual OSStatus			DelegateGetPropertyInfo(AudioUnitPropertyID			inID,
-														AudioUnitScope				inScope,
-														AudioUnitElement			inElement,
-														UInt32 &					outDataSize,
-														Boolean &					outWritable);
-
-	/*! @method DelegateGetProperty */
-	virtual OSStatus			DelegateGetProperty(	AudioUnitPropertyID 		inID,
-														AudioUnitScope 				inScope,
-														AudioUnitElement		 	inElement,
-														void *						outData);
-
-	/*! @method DelegateSetProperty */
-	virtual OSStatus			DelegateSetProperty(	AudioUnitPropertyID 		inID,
-														AudioUnitScope 				inScope,
-														AudioUnitElement		 	inElement,
-														const void *				inData,
-														UInt32						inDataSize);
-#endif
-
-protected:
-	// MIDI dispatch
-	/*! @method HandleMidiEvent */
-	virtual OSStatus	HandleMidiEvent(		UInt8 	inStatus,
-												UInt8 	inChannel,
-												UInt8 	inData1,
-												UInt8 	inData2,
-												UInt32 	inStartFrame);
-
-	/*! @method HandleNonNoteEvent */
-	virtual OSStatus	HandleNonNoteEvent (	UInt8	status,
-												UInt8	channel,
-												UInt8	data1,
-												UInt8	data2,
-												UInt32	inStartFrame);
-
-#if TARGET_API_MAC_OSX
-	/*! @method GetXMLNames */
-	virtual OSStatus			GetXMLNames(CFURLRef *outNameDocument)
-	{ return kAudioUnitErr_InvalidProperty; }	// if not overridden, it's unsupported
-#endif
-
-// channel messages
-	/*! @method HandleNoteOn */
-	virtual OSStatus	HandleNoteOn(			UInt8 	inChannel,
-												UInt8 	inNoteNumber,
-												UInt8 	inVelocity,
-												UInt32 	inStartFrame) { return noErr; }
-
-	/*! @method HandleNoteOff */
-	virtual OSStatus	HandleNoteOff(			UInt8 	inChannel,
-												UInt8 	inNoteNumber,
-												UInt8 	inVelocity,
-												UInt32 	inStartFrame) { return noErr; }
-
-	/*! @method HandleControlChange */
-	virtual OSStatus	HandleControlChange(	UInt8 	inChannel,
-												UInt8 	inController,
-												UInt8 	inValue,
-												UInt32	inStartFrame) { return noErr; }
-
-	/*! @method HandlePitchWheel */
-	virtual OSStatus	HandlePitchWheel(		UInt8 	inChannel,
-												UInt8 	inPitch1,
-												UInt8 	inPitch2,
-												UInt32	inStartFrame) { return noErr; }
-
-	/*! @method HandleChannelPressure */
-	virtual OSStatus	HandleChannelPressure(	UInt8 	inChannel,
-												UInt8 	inValue,
-												UInt32	inStartFrame) { return noErr; }
-
-	/*! @method HandleProgramChange */
-	virtual OSStatus	HandleProgramChange(	UInt8 	inChannel,
-												UInt8 	inValue) { return noErr; }
-
-	/*! @method HandlePolyPressure */
-	virtual OSStatus	HandlePolyPressure(		UInt8 	inChannel,
-												UInt8 	inKey,
-												UInt8	inValue,
-												UInt32	inStartFrame) { return noErr; }
-
-	/*! @method HandleResetAllControllers */
-	virtual OSStatus	HandleResetAllControllers(UInt8 inChannel) { return noErr; }
-
-	/*! @method HandleAllNotesOff */
-	virtual OSStatus	HandleAllNotesOff(		UInt8	inChannel) { return noErr; }
-
-	/*! @method HandleAllSoundOff */
-	virtual OSStatus	HandleAllSoundOff(		UInt8	inChannel) { return noErr; }
-
-
-//System messages
-	/*! @method HandleSysEx */
-	virtual OSStatus	HandleSysEx(			const UInt8 *	inData,
-                                        		UInt32			inLength ) { return noErr; }
-
-#if CA_AUTO_MIDI_MAP
-	/* map manager */
-	CAAUMIDIMapManager			*GetMIDIMapManager() {return mMapManager;};
-
-#endif
-
-
-private:
-	/*! @var mAUBaseInstance */
-	AUBase						& mAUBaseInstance;
-
-#if CA_AUTO_MIDI_MAP
-	/* map manager */
-	CAAUMIDIMapManager			* mMapManager;
-#endif
-
-public:
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	// component dispatcher
-	/*! @method ComponentEntryDispatch */
-	static OSStatus			ComponentEntryDispatch(	ComponentParameters 		*params,
-														AUMIDIBase 					*This);
-#endif
-};
-
-#endif // __AUMIDIBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.cpp
deleted file mode 100644
index 4ee9bb7..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-     File: AUOutputBase.cpp
- Abstract: AUOutputBase.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-#include "AUOutputBase.h"
-
-OSStatus		AUOutputBase::ComponentEntryDispatch(ComponentParameters *params, AUOutputBase *This)
-{
-	if (This == NULL) return paramErr;
-
-	OSStatus result;
-
-	switch (params->what) {
-	case kAudioOutputUnitStartSelect:
-		{
-			result = This->Start();
-		}
-		break;
-
-	case kAudioOutputUnitStopSelect:
-		{
-			result = This->Stop();
-		}
-		break;
-
-	default:
-		result = badComponentSelector;
-		break;
-	}
-
-	return result;
-}
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.h
deleted file mode 100644
index 685c9bc..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-     File: AUOutputBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUOutputBase_h__
-#define __AUOutputBase_h__
-
-#include "AUBase.h"
-
-// ________________________________________________________________________
-//	AUOutputBase
-//	this is now a mix-in rather than an AUBase subclass
-
-	/*! @class AUOutputBase */
-class AUOutputBase {
-public:
-	/*! @ctor AUOutputBase */
-								AUOutputBase(AUBase *inBase) : mAUBaseInstance(*inBase) { }
-	virtual ~AUOutputBase() { }
-
-	// additional component entry points
-	/*! @method Start */
-	virtual OSStatus			Start() = 0;
-
-	/*! @method Stop */
-	virtual OSStatus			Stop() = 0;
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	// component dispatcher
-	/*! @method ComponentEntryDispatch */
-	static OSStatus			ComponentEntryDispatch(	ComponentParameters *			params,
-														AUOutputBase *					This);
-#endif
-
-private:
-	/*! @var mAUBaseInstance */
-	AUBase &					mAUBaseInstance;
-};
-
-#endif // __AUOutputBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.cpp
deleted file mode 100644
index b9fb999..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-     File: AUOutputElement.cpp
- Abstract: AUOutputElement.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-#include "AUOutputElement.h"
-#include "AUBase.h"
-
-AUOutputElement::AUOutputElement(AUBase *audioUnit) :
-	AUIOElement(audioUnit)
-{
-	AllocateBuffer();
-}
-
-OSStatus	AUOutputElement::SetStreamFormat(const CAStreamBasicDescription &desc)
-{
-	OSStatus result = AUIOElement::SetStreamFormat(desc);	// inherited
-	if (result == AUBase::noErr)
-		AllocateBuffer();
-	return result;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.h
deleted file mode 100644
index 99b7a11..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-     File: AUOutputElement.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUOutput_h__
-#define __AUOutput_h__
-
-#include "AUScopeElement.h"
-#include "AUBuffer.h"
-
-	/*! @class AUOutputElement */
-class AUOutputElement : public AUIOElement {
-public:
-	/*! @ctor AUOutputElement */
-						AUOutputElement(AUBase *audioUnit);
-
-	// AUElement override
-	/*! @method SetStreamFormat */
-	virtual OSStatus	SetStreamFormat(const CAStreamBasicDescription &desc);
-	/*! @method NeedsBufferSpace */
-	virtual bool		NeedsBufferSpace() const { return true; }
-};
-
-#endif // __AUOutput_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.cpp
deleted file mode 100644
index 3575a64..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.cpp
+++ /dev/null
@@ -1,668 +0,0 @@
-/*
-     File: AUPlugInDispatch.cpp
- Abstract: AUPlugInDispatch.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "AUPlugInDispatch.h"
-#include "CAXException.h"
-#include "ComponentBase.h"
-#include "AUBase.h"
-
-#define ACPI ((AudioComponentPlugInInstance *)self)
-#define AUI	((AUBase *)&ACPI->mInstanceStorage)
-
-#define AUI_LOCK CAMutex::Locker auLock(AUI->GetMutex());
-
-// ------------------------------------------------------------------------------------------------
-static OSStatus AUMethodInitialize(void *self)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->DoInitialize();
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodUninitialize(void *self)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		AUI->DoCleanup();
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodGetPropertyInfo(void *self, AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement elem, UInt32 *outDataSize, Boolean *outWritable)
-{
-	OSStatus result = noErr;
-	try {
-		UInt32 dataSize = 0;        // 13517289 GetPropetyInfo was returning an uninitialized value when there is an error. This is a problem for auval.
-		Boolean writable = false;
-
-		AUI_LOCK
-		result = AUI->DispatchGetPropertyInfo(prop, scope, elem, dataSize, writable);
-		if (outDataSize != NULL)
-			*outDataSize = dataSize;
-		if (outWritable != NULL)
-			*outWritable = writable;
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodGetProperty(void *self, AudioUnitPropertyID inID, AudioUnitScope inScope, AudioUnitElement inElement, void *outData, UInt32 *ioDataSize)
-{
-	OSStatus result = noErr;
-	try {
-		UInt32 actualPropertySize, clientBufferSize;
-		Boolean writable;
-		char *tempBuffer;
-		void *destBuffer;
-
-		AUI_LOCK
-		if (ioDataSize == NULL) {
-			ca_debug_string("AudioUnitGetProperty: null size pointer");
-			result = kAudio_ParamError;
-			goto finishGetProperty;
-		}
-		if (outData == NULL) {
-			UInt32 dataSize;
-
-			result = AUI->DispatchGetPropertyInfo(inID, inScope, inElement, dataSize, writable);
-			*ioDataSize = dataSize;
-			goto finishGetProperty;
-		}
-
-		clientBufferSize = *ioDataSize;
-		if (clientBufferSize == 0)
-		{
-			ca_debug_string("AudioUnitGetProperty: *ioDataSize == 0 on entry");
-			// $$$ or should we allow this as a shortcut for finding the size?
-			result = kAudio_ParamError;
-			goto finishGetProperty;
-		}
-
-		result = AUI->DispatchGetPropertyInfo(inID, inScope, inElement, actualPropertySize, writable);
-		if (result != noErr)
-			goto finishGetProperty;
-
-		if (clientBufferSize < actualPropertySize)
-		{
-			tempBuffer = new char[actualPropertySize];
-			destBuffer = tempBuffer;
-		} else {
-			tempBuffer = NULL;
-			destBuffer = outData;
-		}
-
-		result = AUI->DispatchGetProperty(inID, inScope, inElement, destBuffer);
-
-		if (result == noErr) {
-			if (clientBufferSize < actualPropertySize && tempBuffer != NULL)
-			{
-				memcpy(outData, tempBuffer, clientBufferSize);
-				delete[] tempBuffer;
-				// ioDataSize remains correct, the number of bytes we wrote
-			} else
-				*ioDataSize = actualPropertySize;
-		} else
-			*ioDataSize = 0;
-	}
-	COMPONENT_CATCH
-finishGetProperty:
-	return result;
-}
-
-static OSStatus AUMethodSetProperty(void *self, AudioUnitPropertyID inID, AudioUnitScope inScope, AudioUnitElement inElement, const void *inData, UInt32 inDataSize)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		if (inData && inDataSize)
-			result = AUI->DispatchSetProperty(inID, inScope, inElement, inData, inDataSize);
-		else {
-			if (inData == NULL && inDataSize == 0) {
-				result = AUI->DispatchRemovePropertyValue(inID, inScope, inElement);
-			} else {
-				if (inData == NULL) {
-					ca_debug_string("AudioUnitSetProperty: inData == NULL");
-					result = kAudio_ParamError;
-					goto finishSetProperty;
-				}
-
-				if (inDataSize == 0) {
-					ca_debug_string("AudioUnitSetProperty: inDataSize == 0");
-					result = kAudio_ParamError;
-					goto finishSetProperty;
-				}
-			}
-		}
-	}
-	COMPONENT_CATCH
-finishSetProperty:
-	return result;
-}
-
-static OSStatus AUMethodAddPropertyListener(void *self, AudioUnitPropertyID prop, AudioUnitPropertyListenerProc proc, void *userData)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->AddPropertyListener(prop, proc, userData);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodRemovePropertyListener(void *self, AudioUnitPropertyID prop, AudioUnitPropertyListenerProc proc)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->RemovePropertyListener(prop, proc, NULL, false);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodRemovePropertyListenerWithUserData(void *self, AudioUnitPropertyID prop, AudioUnitPropertyListenerProc proc, void *userData)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->RemovePropertyListener(prop, proc, userData, true);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodAddRenderNotify(void *self, AURenderCallback proc, void *userData)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->SetRenderNotification(proc, userData);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodRemoveRenderNotify(void *self, AURenderCallback proc, void *userData)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->RemoveRenderNotification(proc, userData);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodGetParameter(void *self, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement elem, AudioUnitParameterValue *value)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = (value == NULL ? kAudio_ParamError : AUI->GetParameter(param, scope, elem, *value));
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodSetParameter(void *self, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement elem, AudioUnitParameterValue value, UInt32 bufferOffset)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a (potentially) realtime method; no lock
-		result = AUI->SetParameter(param, scope, elem, value, bufferOffset);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodScheduleParameters(void *self, const AudioUnitParameterEvent *events, UInt32 numEvents)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a (potentially) realtime method; no lock
-		result = AUI->ScheduleParameter(events, numEvents);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodRender(void *self, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData)
-{
-	OSStatus result = noErr;
-
-#if !TARGET_OS_IPHONE
-	try {
-#endif
-		// this is a processing method; no lock
-		AudioUnitRenderActionFlags tempFlags;
-
-		if (inTimeStamp == NULL || ioData == NULL)
-			result = kAudio_ParamError;
-		else {
-			if (ioActionFlags == NULL) {
-				tempFlags = 0;
-				ioActionFlags = &tempFlags;
-			}
-			result = AUI->DoRender(*ioActionFlags, *inTimeStamp, inOutputBusNumber, inNumberFrames, *ioData);
-		}
-
-#if !TARGET_OS_IPHONE
-	}
-	COMPONENT_CATCH
-#endif
-
-	return result;
-}
-
-static OSStatus AUMethodComplexRender(void *self, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberOfPackets, UInt32 *outNumberOfPackets, AudioStreamPacketDescription *outPacketDescriptions, AudioBufferList *ioData, void *outMetadata, UInt32 *outMetadataByteSize)
-{
-	OSStatus result = noErr;
-
-#if !TARGET_OS_IPHONE
-	try {
-#endif
-		// this is a processing method; no lock
-		AudioUnitRenderActionFlags tempFlags;
-
-		if (inTimeStamp == NULL || ioData == NULL)
-			result = kAudio_ParamError;
-		else {
-			if (ioActionFlags == NULL) {
-				tempFlags = 0;
-				ioActionFlags = &tempFlags;
-			}
-			result = AUI->ComplexRender(*ioActionFlags, *inTimeStamp, inOutputBusNumber, inNumberOfPackets, outNumberOfPackets, outPacketDescriptions, *ioData, outMetadata, outMetadataByteSize);
-		}
-
-#if !TARGET_OS_IPHONE
-	}
-	COMPONENT_CATCH
-#endif
-
-	return result;
-}
-
-static OSStatus AUMethodReset(void *self, AudioUnitScope scope, AudioUnitElement elem)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->Reset(scope, elem);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodProcess (void *self, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData)
-{
-	OSStatus result = noErr;
-
-#if !TARGET_OS_IPHONE
-	try {
-#endif
-		// this is a processing method; no lock
-		bool doParamCheck = true;
-
-		AudioUnitRenderActionFlags tempFlags;
-
-		if (ioActionFlags == NULL) {
-			tempFlags = 0;
-			ioActionFlags = &tempFlags;
-		} else {
-			if (*ioActionFlags & (1 << 9)/*kAudioUnitRenderAction_DoNotCheckRenderArgs*/)
-				doParamCheck = false;
-		}
-
-		if (doParamCheck && (inTimeStamp == NULL || ioData == NULL))
-			result = kAudio_ParamError;
-		else {
-			result = AUI->DoProcess(*ioActionFlags, *inTimeStamp, inNumberFrames, *ioData);
-		}
-
-#if !TARGET_OS_IPHONE
-	}
-	COMPONENT_CATCH
-#endif
-
-	return result;
-}
-
-static OSStatus AUMethodProcessMultiple (void *self, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, UInt32 inNumberInputBufferLists, const AudioBufferList **inInputBufferLists, UInt32 inNumberOutputBufferLists, AudioBufferList **ioOutputBufferLists)
-{
-	OSStatus result = noErr;
-
-#if !TARGET_OS_IPHONE
-	try {
-#endif
-		// this is a processing method; no lock
-		bool doParamCheck = true;
-
-		AudioUnitRenderActionFlags tempFlags;
-
-		if (ioActionFlags == NULL) {
-			tempFlags = 0;
-			ioActionFlags = &tempFlags;
-		} else {
-			if (*ioActionFlags & (1 << 9)/*kAudioUnitRenderAction_DoNotCheckRenderArgs*/)
-				doParamCheck = false;
-		}
-
-		if (doParamCheck && (inTimeStamp == NULL || inInputBufferLists == NULL || ioOutputBufferLists == NULL))
-			result = kAudio_ParamError;
-		else {
-			result = AUI->DoProcessMultiple(*ioActionFlags, *inTimeStamp, inNumberFrames, inNumberInputBufferLists, inInputBufferLists, inNumberOutputBufferLists, ioOutputBufferLists);
-		}
-
-#if !TARGET_OS_IPHONE
-	}
-	COMPONENT_CATCH
-#endif
-
-	return result;
-}
-// ------------------------------------------------------------------------------------------------
-
-static OSStatus AUMethodStart(void *self)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->Start();
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodStop(void *self)
-{
-	OSStatus result = noErr;
-	try {
-		AUI_LOCK
-		result = AUI->Stop();
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-// ------------------------------------------------------------------------------------------------
-
-#if !CA_BASIC_AU_FEATURES
-// I don't know what I'm doing here; conflicts with the multiple inheritence in MusicDeviceBase.
-static OSStatus AUMethodMIDIEvent(void *self, UInt32 inStatus, UInt32 inData1, UInt32 inData2, UInt32 inOffsetSampleFrame)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a potential render-time method; no lock
-		result = AUI->MIDIEvent(inStatus, inData1, inData2, inOffsetSampleFrame);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodSysEx(void *self, const UInt8 *inData, UInt32 inLength)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a potential render-time method; no lock
-		result = AUI->SysEx(inData, inLength);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodStartNote(void *self, MusicDeviceInstrumentID inInstrument, MusicDeviceGroupID inGroupID, NoteInstanceID *outNoteInstanceID, UInt32 inOffsetSampleFrame, const MusicDeviceNoteParams *inParams)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a potential render-time method; no lock
-		if (inParams == NULL || outNoteInstanceID == NULL)
-			result = kAudio_ParamError;
-		else
-			result = AUI->StartNote(inInstrument, inGroupID, outNoteInstanceID, inOffsetSampleFrame, *inParams);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodStopNote(void *self, MusicDeviceGroupID inGroupID, NoteInstanceID inNoteInstanceID, UInt32 inOffsetSampleFrame)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a potential render-time method; no lock
-		result = AUI->StopNote(inGroupID, inNoteInstanceID, inOffsetSampleFrame);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-#if !TARGET_OS_IPHONE
-static OSStatus AUMethodPrepareInstrument (void *self, MusicDeviceInstrumentID inInstrument)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a potential render-time method; no lock
-		result = AUI->PrepareInstrument(inInstrument);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-static OSStatus AUMethodReleaseInstrument (void *self, MusicDeviceInstrumentID inInstrument)
-{
-	OSStatus result = noErr;
-	try {
-		// this is a potential render-time method; no lock
-		result = AUI->ReleaseInstrument(inInstrument);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-#endif // TARGET_OS_IPHONE
-#endif // CA_BASIC_AU_FEATURES
-
-
-//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-#pragma mark -
-#pragma mark Lookup Methods
-
-AudioComponentMethod AUBaseLookup::Lookup (SInt16 selector)
-{
-	switch (selector) {
-		case kAudioUnitInitializeSelect:		return (AudioComponentMethod)AUMethodInitialize;
-		case kAudioUnitUninitializeSelect:		return (AudioComponentMethod)AUMethodUninitialize;
-		case kAudioUnitGetPropertyInfoSelect:	return (AudioComponentMethod)AUMethodGetPropertyInfo;
-		case kAudioUnitGetPropertySelect:		return (AudioComponentMethod)AUMethodGetProperty;
-		case kAudioUnitSetPropertySelect:		return (AudioComponentMethod)AUMethodSetProperty;
-		case kAudioUnitAddPropertyListenerSelect:return (AudioComponentMethod)AUMethodAddPropertyListener;
-		case kAudioUnitRemovePropertyListenerSelect:
-												return (AudioComponentMethod)AUMethodRemovePropertyListener;
-		case kAudioUnitRemovePropertyListenerWithUserDataSelect:
-												return (AudioComponentMethod)AUMethodRemovePropertyListenerWithUserData;
-		case kAudioUnitAddRenderNotifySelect:	return (AudioComponentMethod)AUMethodAddRenderNotify;
-		case kAudioUnitRemoveRenderNotifySelect:return (AudioComponentMethod)AUMethodRemoveRenderNotify;
-		case kAudioUnitGetParameterSelect:		return (AudioComponentMethod)AUMethodGetParameter;
-		case kAudioUnitSetParameterSelect:		return (AudioComponentMethod)AUMethodSetParameter;
-		case kAudioUnitScheduleParametersSelect:return (AudioComponentMethod)AUMethodScheduleParameters;
-		case kAudioUnitRenderSelect:			return (AudioComponentMethod)AUMethodRender;
-		case kAudioUnitResetSelect:				return (AudioComponentMethod)AUMethodReset;
-		default:
-			break;
-	}
-	return NULL;
-}
-
-AudioComponentMethod AUOutputLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	switch (selector) {
-		case kAudioOutputUnitStartSelect:	return (AudioComponentMethod)AUMethodStart;
-		case kAudioOutputUnitStopSelect:	return (AudioComponentMethod)AUMethodStop;
-		default:
-			break;
-	}
-	return NULL;
-}
-
-AudioComponentMethod AUComplexOutputLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	method = AUOutputLookup::Lookup(selector);
-	if (method) return method;
-
-	if (selector == kAudioUnitComplexRenderSelect)
-		return (AudioComponentMethod)AUMethodComplexRender;
-	return NULL;
-}
-
-AudioComponentMethod AUBaseProcessLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	if (selector == kAudioUnitProcessSelect)
-		return (AudioComponentMethod)AUMethodProcess;
-
-	return NULL;
-}
-
-AudioComponentMethod AUBaseProcessMultipleLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	if (selector == kAudioUnitProcessMultipleSelect)
-		return (AudioComponentMethod)AUMethodProcessMultiple;
-
-	return NULL;
-}
-
-AudioComponentMethod AUBaseProcessAndMultipleLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	method = AUBaseProcessMultipleLookup::Lookup(selector);
-	if (method) return method;
-
-	method = AUBaseProcessLookup::Lookup(selector);
-	if (method) return method;
-
-	return NULL;
-}
-
-#if !CA_BASIC_AU_FEATURES
-inline AudioComponentMethod MIDI_Lookup (SInt16 selector)
-{
-	switch (selector) {
-		case kMusicDeviceMIDIEventSelect:	return (AudioComponentMethod)AUMethodMIDIEvent;
-		case kMusicDeviceSysExSelect:		return (AudioComponentMethod)AUMethodSysEx;
-		default:
-			break;
-	}
-	return NULL;
-}
-
-AudioComponentMethod AUMIDILookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	return MIDI_Lookup(selector);
-}
-
-AudioComponentMethod AUMIDIProcessLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseProcessLookup::Lookup(selector);
-	if (method) return method;
-
-	return MIDI_Lookup(selector);
-}
-
-AudioComponentMethod AUMusicLookup::Lookup (SInt16 selector)
-{
-	AudioComponentMethod method = AUBaseLookup::Lookup(selector);
-	if (method) return method;
-
-	switch (selector) {
-		case kMusicDeviceStartNoteSelect:	return (AudioComponentMethod)AUMethodStartNote;
-		case kMusicDeviceStopNoteSelect:	return (AudioComponentMethod)AUMethodStopNote;
-#if !TARGET_OS_IPHONE
-		case kMusicDevicePrepareInstrumentSelect:	return (AudioComponentMethod)AUMethodPrepareInstrument;
-		case kMusicDeviceReleaseInstrumentSelect:	return (AudioComponentMethod)AUMethodReleaseInstrument;
-#endif
-		default:
-			break;
-	}
-	return MIDI_Lookup (selector);
-}
-
-AudioComponentMethod AUAuxBaseLookup::Lookup (SInt16 selector)
-{
-	switch (selector) {
-		case kAudioUnitGetPropertyInfoSelect:	return (AudioComponentMethod)AUMethodGetPropertyInfo;
-		case kAudioUnitGetPropertySelect:		return (AudioComponentMethod)AUMethodGetProperty;
-		case kAudioUnitSetPropertySelect:		return (AudioComponentMethod)AUMethodSetProperty;
-
-		case kAudioUnitGetParameterSelect:		return (AudioComponentMethod)AUMethodGetParameter;
-		case kAudioUnitSetParameterSelect:		return (AudioComponentMethod)AUMethodSetParameter;
-
-		default:
-			break;
-	}
-	return NULL;
-}
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h
deleted file mode 100644
index 54e748e..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-     File: AUPlugInDispatch.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUPlugInBase_h__
-#define __AUPlugInBase_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <AudioUnit/AudioComponent.h>
-	#if !CA_BASIC_AU_FEATURES
-		#include <AudioUnit/MusicDevice.h>
-	#endif
-#else
-	#include "AudioComponent.h"
-	#include "MusicDevice.h"
-#endif
-
-#include "ComponentBase.h"
-
-struct AUBaseLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUBaseFactory : public APFactory<AUBaseLookup, Implementor>
-{
-};
-
-struct AUOutputLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUOutputBaseFactory : public APFactory<AUOutputLookup, Implementor>
-{
-};
-
-struct AUComplexOutputLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUOutputComplexBaseFactory : public APFactory<AUComplexOutputLookup, Implementor>
-{
-};
-
-struct AUBaseProcessLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUBaseProcessFactory : public APFactory<AUBaseProcessLookup, Implementor>
-{
-};
-
-struct AUBaseProcessMultipleLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUBaseProcessMultipleFactory : public APFactory<AUBaseProcessMultipleLookup, Implementor>
-{
-};
-
-struct AUBaseProcessAndMultipleLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUBaseProcessAndMultipleFactory : public APFactory<AUBaseProcessAndMultipleLookup, Implementor>
-{
-};
-
-#if !CA_BASIC_AU_FEATURES
-struct AUMIDILookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUMIDIEffectFactory : public APFactory<AUMIDILookup, Implementor>
-{
-};
-
-struct AUMIDIProcessLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUMIDIProcessFactory : public APFactory<AUMIDIProcessLookup, Implementor>
-{
-};
-
-struct AUMusicLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUMusicDeviceFactory : public APFactory<AUMusicLookup, Implementor>
-{
-};
-
-struct AUAuxBaseLookup {
-	static AudioComponentMethod Lookup (SInt16 selector);
-};
-template <class Implementor>
-class AUAuxBaseFactory : public APFactory<AUAuxBaseLookup, Implementor>
-{
-};
-#endif // CA_BASIC_AU_FEATURES
-
-#endif // __AUPlugInBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.cpp
deleted file mode 100644
index 4551e17..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.cpp
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
-     File: AUScopeElement.cpp
- Abstract: AUScopeElement.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-#include "AUScopeElement.h"
-#include "AUBase.h"
-
-//_____________________________________________________________________________
-//
-//	By default, parameterIDs may be arbitrarily spaced, and an STL map
-//  will be used for access.  Calling UseIndexedParameters() will
-//	instead use an STL vector for faster indexed access.
-//	This assumes the paramIDs are numbered 0.....inNumberOfParameters-1
-//	Call this before defining/adding any parameters with SetParameter()
-//
-void	AUElement::UseIndexedParameters(int inNumberOfParameters)
-{
-	mIndexedParameters.resize (inNumberOfParameters);
-	mUseIndexedParameters = true;
-}
-
-//_____________________________________________________________________________
-//
-//	Helper method.
-//	returns the ParameterMapEvent object associated with the paramID
-//
-inline ParameterMapEvent&	AUElement::GetParamEvent(AudioUnitParameterID paramID)
-{
-	ParameterMapEvent *event;
-
-	if(mUseIndexedParameters)
-	{
-		if(paramID >= mIndexedParameters.size() )
-			COMPONENT_THROW(kAudioUnitErr_InvalidParameter);
-
-		event = &mIndexedParameters[paramID];
-	}
-	else
-	{
-		ParameterMap::iterator i = mParameters.find(paramID);
-		if (i == mParameters.end())
-			COMPONENT_THROW(kAudioUnitErr_InvalidParameter);
-
-		event = &(*i).second;
-	}
-
-	return *event;
-}
-
-//_____________________________________________________________________________
-//
-//	Helper method.
-//	returns whether the specified paramID is known to the element
-//
-bool		AUElement::HasParameterID (AudioUnitParameterID paramID) const
-{
-	if(mUseIndexedParameters)
-	{
-		if(paramID >= mIndexedParameters.size() )
-			return false;
-
-		return true;
-	}
-
-	ParameterMap::const_iterator i = mParameters.find(paramID);
-	if (i == mParameters.end())
-		return false;
-
-	return true;
-}
-
-//_____________________________________________________________________________
-//
-//	caller assumes that this is actually an immediate parameter
-//
-AudioUnitParameterValue		AUElement::GetParameter(AudioUnitParameterID paramID)
-{
-	ParameterMapEvent &event = GetParamEvent(paramID);
-
-	return event.GetValue();
-}
-
-
-//_____________________________________________________________________________
-//
-void			AUElement::GetRampSliceStartEnd(	AudioUnitParameterID		paramID,
-													AudioUnitParameterValue &	outStartValue,
-													AudioUnitParameterValue &	outEndValue,
-													AudioUnitParameterValue &	outValuePerFrameDelta )
-
-{
-	ParameterMapEvent &event = GetParamEvent(paramID);
-
-	// works even if the value is constant (immediate parameter value)
-	event.GetRampSliceStartEnd(outStartValue, outEndValue, outValuePerFrameDelta );
-}
-
-//_____________________________________________________________________________
-//
-AudioUnitParameterValue			AUElement::GetEndValue(	AudioUnitParameterID		paramID)
-
-{
-	ParameterMapEvent &event = GetParamEvent(paramID);
-
-	// works even if the value is constant (immediate parameter value)
-	return event.GetEndValue();
-}
-
-//_____________________________________________________________________________
-//
-void			AUElement::SetParameter(AudioUnitParameterID paramID, AudioUnitParameterValue inValue, bool okWhenInitialized)
-{
-	if(mUseIndexedParameters)
-	{
-		ParameterMapEvent &event = GetParamEvent(paramID);
-		event.SetValue(inValue);
-	}
-	else
-	{
-		ParameterMap::iterator i = mParameters.find(paramID);
-
-		if (i == mParameters.end())
-		{
-			if (mAudioUnit->IsInitialized() && !okWhenInitialized) {
-				// The AU should not be creating new parameters once initialized.
-				// If a client tries to set an undefined parameter, we could throw as follows,
-				// but this might cause a regression. So it is better to just fail silently.
-				// COMPONENT_THROW(kAudioUnitErr_InvalidParameter);
-#if DEBUG
-				fprintf(stderr, "WARNING: %s SetParameter for undefined param ID %d while initialized. Ignoring..\n",
-								mAudioUnit->GetLoggingString(), (int)paramID);
-#endif
-			} else {
-				// create new entry in map for the paramID (only happens first time)
-				ParameterMapEvent event(inValue);
-				mParameters[paramID] = event;
-			}
-		}
-		else
-		{
-			// paramID already exists in map so simply change its value
-			ParameterMapEvent &event = (*i).second;
-			event.SetValue(inValue);
-		}
-	}
-}
-
-//_____________________________________________________________________________
-//
-void			AUElement::SetScheduledEvent(	AudioUnitParameterID 			paramID,
-												const AudioUnitParameterEvent 	&inEvent,
-												UInt32 							inSliceOffsetInBuffer,
-												UInt32							inSliceDurationFrames,
-												bool							okWhenInitialized )
-{
-	if(mUseIndexedParameters)
-	{
-		ParameterMapEvent &event = GetParamEvent(paramID);
-		event.SetScheduledEvent(inEvent, inSliceOffsetInBuffer, inSliceDurationFrames );
-	}
-	else
-	{
-		ParameterMap::iterator i = mParameters.find(paramID);
-
-		if (i == mParameters.end())
-		{
-			if (mAudioUnit->IsInitialized() && !okWhenInitialized) {
-				// The AU should not be creating new parameters once initialized.
-				// If a client tries to set an undefined parameter, we could throw as follows,
-				// but this might cause a regression. So it is better to just fail silently.
-				// COMPONENT_THROW(kAudioUnitErr_InvalidParameter);
-#if DEBUG
-				fprintf(stderr, "WARNING: %s SetScheduledEvent for undefined param ID %d while initialized. Ignoring..\n",
-								mAudioUnit->GetLoggingString(), (int)paramID);
-#endif
-			} else {
-				// create new entry in map for the paramID (only happens first time)
-				ParameterMapEvent event(inEvent, inSliceOffsetInBuffer, inSliceDurationFrames);
-				mParameters[paramID] = event;
-			}
-		}
-		else
-		{
-			// paramID already exists in map so simply change its value
-			ParameterMapEvent &event = (*i).second;
-
-			event.SetScheduledEvent(inEvent, inSliceOffsetInBuffer, inSliceDurationFrames );
-		}
-	}
-}
-
-
-
-//_____________________________________________________________________________
-//
-void			AUElement::GetParameterList(AudioUnitParameterID *outList)
-{
-	if(mUseIndexedParameters)
-	{
-		UInt32 nparams = static_cast<UInt32>(mIndexedParameters.size());
-		for (UInt32 i = 0; i < nparams; i++ )
-			*outList++ = (AudioUnitParameterID)i;
-	}
-	else
-	{
-		for (ParameterMap::iterator i = mParameters.begin(); i != mParameters.end(); ++i)
-			*outList++ = (*i).first;
-	}
-}
-
-//_____________________________________________________________________________
-//
-void			AUElement::SaveState(CFMutableDataRef data)
-{
-	if(mUseIndexedParameters)
-	{
-		UInt32 nparams = static_cast<UInt32>(mIndexedParameters.size());
-		UInt32 theData = CFSwapInt32HostToBig(nparams);
-		CFDataAppendBytes(data, (UInt8 *)&theData, sizeof(nparams));
-
-		for (UInt32 i = 0; i < nparams; i++)
-		{
-			struct {
-				UInt32				paramID;
-				//CFSwappedFloat32	value; crashes gcc3 PFE
-				UInt32				value;	// really a big-endian float
-			} entry;
-
-			entry.paramID = CFSwapInt32HostToBig(i);
-
-			AudioUnitParameterValue v = mIndexedParameters[i].GetValue();
-			entry.value = CFSwapInt32HostToBig(*(UInt32 *)&v );
-
-			CFDataAppendBytes(data, (UInt8 *)&entry, sizeof(entry));
-		}
-	}
-	else
-	{
-		UInt32 nparams = CFSwapInt32HostToBig(static_cast<uint32_t>(mParameters.size()));
-		CFDataAppendBytes(data, (UInt8 *)&nparams, sizeof(nparams));
-
-		for (ParameterMap::iterator i = mParameters.begin(); i != mParameters.end(); ++i) {
-			struct {
-				UInt32				paramID;
-				//CFSwappedFloat32	value; crashes gcc3 PFE
-				UInt32				value;	// really a big-endian float
-			} entry;
-
-			entry.paramID = CFSwapInt32HostToBig((*i).first);
-
-			AudioUnitParameterValue v = (*i).second.GetValue();
-			entry.value = CFSwapInt32HostToBig(*(UInt32 *)&v );
-
-			CFDataAppendBytes(data, (UInt8 *)&entry, sizeof(entry));
-		}
-	}
-}
-
-//_____________________________________________________________________________
-//
-const UInt8 *	AUElement::RestoreState(const UInt8 *state)
-{
-	union FloatInt32 { UInt32 i; AudioUnitParameterValue f; };
-	const UInt8 *p = state;
-	UInt32 nparams = CFSwapInt32BigToHost(*(UInt32 *)p);
-	p += sizeof(UInt32);
-
-	for (UInt32 i = 0; i < nparams; ++i) {
-		struct {
-			AudioUnitParameterID		paramID;
-			AudioUnitParameterValue		value;
-		} entry;
-
-		entry.paramID = CFSwapInt32BigToHost(*(UInt32 *)p);
-		p += sizeof(UInt32);
-		FloatInt32 temp;
-		temp.i = CFSwapInt32BigToHost(*(UInt32 *)p);
-		entry.value = temp.f;
-		p += sizeof(AudioUnitParameterValue);
-
-		SetParameter(entry.paramID, entry.value);
-	}
-	return p;
-}
-
-//_____________________________________________________________________________
-//
-void	AUElement::SetName (CFStringRef inName)
-{
-	if (mElementName) CFRelease (mElementName);
-	mElementName = inName;
-	if (mElementName) CFRetain (mElementName);
-}
-
-
-//_____________________________________________________________________________
-//
-AUIOElement::AUIOElement(AUBase *audioUnit) :
-	AUElement(audioUnit),
-	mWillAllocate (true)
-{
-	mStreamFormat.SetAUCanonical(2,	// stereo
-		audioUnit->AudioUnitAPIVersion() == 1);
-		// interleaved if API version 1, deinterleaved if version 2
-	mStreamFormat.mSampleRate = kAUDefaultSampleRate;
-}
-
-//_____________________________________________________________________________
-//
-OSStatus		AUIOElement::SetStreamFormat(const CAStreamBasicDescription &desc)
-{
-	mStreamFormat = desc;
-	return AUBase::noErr;
-}
-
-//_____________________________________________________________________________
-// inFramesToAllocate == 0 implies the AudioUnit's max-frames-per-slice will be used
-void			AUIOElement::AllocateBuffer(UInt32 inFramesToAllocate)
-{
-	if (GetAudioUnit()->HasBegunInitializing())
-	{
-		UInt32 framesToAllocate = inFramesToAllocate > 0 ? inFramesToAllocate : GetAudioUnit()->GetMaxFramesPerSlice();
-
-//		printf ("will allocate: %d\n", (int)((mWillAllocate && NeedsBufferSpace()) ? framesToAllocate : 0));
-
-		mIOBuffer.Allocate(mStreamFormat, (mWillAllocate && NeedsBufferSpace()) ? framesToAllocate : 0);
-	}
-}
-
-//_____________________________________________________________________________
-//
-void			AUIOElement::DeallocateBuffer()
-{
-	mIOBuffer.Deallocate();
-}
-
-//_____________________________________________________________________________
-//
-//		AudioChannelLayout support
-
-// outLayoutTagsPtr WILL be NULL if called to find out how many
-// layouts that Audio Unit will report
-// return 0 (ie. NO channel layouts) if the AU doesn't require channel layout knowledge
-UInt32		AUIOElement::GetChannelLayoutTags (AudioChannelLayoutTag		*outLayoutTagsPtr)
-{
-	return 0;
-}
-
-// As the AudioChannelLayout can be a variable length structure
-// (though in most cases it won't be!!!)
-// The size of the ACL is always returned by the method
-// if outMapPtr is NOT-NULL, then AU should copy into this pointer (outMapPtr) the current ACL that it has in use.
-// the AU should also return whether the property is writable (that is the client can provide any arbitrary ACL that the audio unit will then honour)
-// or if the property is read only - which is the generally preferred mode.
-// If the AU doesn't require an AudioChannelLayout, then just return 0.
-UInt32		AUIOElement::GetAudioChannelLayout (AudioChannelLayout		*outMapPtr,
-											Boolean				&outWritable)
-{
-	return 0;
-}
-
-// the incoming channel map will be at least as big as a basic AudioChannelLayout
-// but its contents will determine its actual size
-// Subclass should overide if channel map is writable
-OSStatus	AUIOElement::SetAudioChannelLayout (const AudioChannelLayout &inData)
-{
-	return kAudioUnitErr_InvalidProperty;
-}
-
-// Some units support optional usage of channel maps - typically converter units
-// that can do channel remapping between different maps. In that optional case
-// the user should be able to remove a channel map if that is possible.
-// Typically this is NOT the case (e.g., the 3DMixer even in the stereo case
-// needs to know if it is rendering to speakers or headphones)
-OSStatus	AUIOElement::RemoveAudioChannelLayout ()
-{
-	return kAudioUnitErr_InvalidPropertyValue;
-}
-
-
-//_____________________________________________________________________________
-//
-AUScope::~AUScope()
-{
-	for (ElementVector::iterator it = mElements.begin(); it != mElements.end(); ++it)
-		delete *it;
-}
-
-//_____________________________________________________________________________
-//
-void	AUScope::SetNumberOfElements(UInt32 numElements)
-{
-	if (mDelegate)
-		return mDelegate->SetNumberOfElements(numElements);
-
-	if (numElements > mElements.size()) {
-		mElements.reserve(numElements);
-		while (numElements > mElements.size()) {
-			AUElement *elem = mCreator->CreateElement(GetScope(), static_cast<UInt32>(mElements.size()));
-			mElements.push_back(elem);
-		}
-	} else
-		while (numElements < mElements.size()) {
-			AUElement *elem = mElements.back();
-			mElements.pop_back();
-			delete elem;
-		}
-}
-
-//_____________________________________________________________________________
-//
-bool	AUScope::HasElementWithName () const
-{
-	for (UInt32 i = 0; i < GetNumberOfElements(); ++i) {
-		AUElement *	el = const_cast<AUScope*>(this)->GetElement (i);
-		if (el && el->HasName()) {
-			return true;
-		}
-	}
-	return false;
-}
-
-//_____________________________________________________________________________
-//
-
-void	AUScope::AddElementNamesToDict (CFMutableDictionaryRef & inNameDict)
-{
-	if (HasElementWithName())
-	{
-		static char string[32];
-		CFMutableDictionaryRef elementDict = CFDictionaryCreateMutable	(NULL, 0,
-								&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
-		CFStringRef str;
-		for (UInt32 i = 0; i < GetNumberOfElements(); ++i) {
-			AUElement *	el = GetElement (i);
-			if (el && el->HasName()) {
-				snprintf (string, sizeof(string), "%d", int(i));
-				str = CFStringCreateWithCString (NULL, string, kCFStringEncodingASCII);
-				CFDictionarySetValue (elementDict, str, el->GetName());
-				CFRelease (str);
-			}
-		}
-
-		snprintf (string, sizeof(string), "%d", int(mScope));
-		str = CFStringCreateWithCString (NULL, string, kCFStringEncodingASCII);
-		CFDictionarySetValue (inNameDict, str, elementDict);
-		CFRelease (str);
-		CFRelease (elementDict);
-	}
-}
-
-//_____________________________________________________________________________
-//
-bool	AUScope::RestoreElementNames (CFDictionaryRef& inNameDict)
-{
-	static char string[32];
-
-	//first we have to see if we have enough elements
-	bool didAddElements = false;
-	unsigned int maxElNum = GetNumberOfElements();
-
-	int dictSize = static_cast<int>(CFDictionaryGetCount(inNameDict));
-	CFStringRef * keys = (CFStringRef*)CA_malloc (dictSize * sizeof (CFStringRef));
-	CFDictionaryGetKeysAndValues (inNameDict, reinterpret_cast<const void**>(keys), NULL);
-	for (int i = 0; i < dictSize; i++)
-	{
-		unsigned int intKey = 0;
-		CFStringGetCString (keys[i], string, 32, kCFStringEncodingASCII);
-		int result = sscanf (string, "%u", &intKey);
-        // check if sscanf succeeded and element index is less than max elements.
-		if (result && UInt32(intKey) < maxElNum)
-        {
-            CFStringRef elName = reinterpret_cast<CFStringRef>(CFDictionaryGetValue (inNameDict,  keys[i]));
-            AUElement* element = GetElement (intKey);
-            if (element)
-                element->SetName (elName);
-        }
-	}
-	free (keys);
-
-	return didAddElements;
-}
-
-void    AUScope::SaveState(CFMutableDataRef data)
-{
-    AudioUnitElement nElems = GetNumberOfElements();
-    for (AudioUnitElement ielem = 0; ielem < nElems; ++ielem) {
-        AUElement *element = GetElement(ielem);
-        UInt32 nparams = element->GetNumberOfParameters();
-        if (nparams > 0) {
-            struct {
-                UInt32	scope;
-                UInt32	element;
-            } hdr;
-
-            hdr.scope = CFSwapInt32HostToBig(GetScope());
-            hdr.element = CFSwapInt32HostToBig(ielem);
-            CFDataAppendBytes(data, (UInt8 *)&hdr, sizeof(hdr));
-
-            element->SaveState(data);
-        }
-    }
-}
-
-const UInt8 *	AUScope::RestoreState(const UInt8 *state)
-{
-    const UInt8 *p = state;
-    UInt32 elementIdx = CFSwapInt32BigToHost(*(UInt32 *)p);	p += sizeof(UInt32);
-    AUElement *element = GetElement(elementIdx);
-    if (!element) {
-        struct {
-            AudioUnitParameterID		paramID;
-            AudioUnitParameterValue		value;
-        } entry;
-        UInt32 nparams = CFSwapInt32BigToHost(*(UInt32 *)p);
-        p += sizeof(UInt32);
-
-        p += nparams * sizeof(entry);
-    } else
-        p = element->RestoreState(p);
-
-    return p;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.h
deleted file mode 100644
index 7e37bfb..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUScopeElement.h
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
-     File: AUScopeElement.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUScopeElement_h__
-#define __AUScopeElement_h__
-
-#include <map>
-#include <vector>
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <AudioUnit/AudioUnit.h>
-#else
-	#include <AudioUnit.h>
-#endif
-#include "ComponentBase.h"
-#include "AUBuffer.h"
-
-
-class AUBase;
-
-// ____________________________________________________________________________
-//
-// represents a parameter's value (either constant or ramped)
-/*! @class ParameterMapEvent */
-class ParameterMapEvent
-{
-public:
-/*! @ctor ParameterMapEvent */
-	ParameterMapEvent()
-		: mEventType(kParameterEvent_Immediate), mBufferOffset(0), mDurationInFrames(0), mValue1(0.0f), mValue2(0.0f), mSliceDurationFrames(0)
-		{}
-
-/*! @ctor ParameterMapEvent */
-	ParameterMapEvent(AudioUnitParameterValue inValue)
-		: mEventType(kParameterEvent_Immediate), mBufferOffset(0), mDurationInFrames(0), mValue1(inValue), mValue2(inValue), mSliceDurationFrames(0)
-		{}
-
-	// constructor for scheduled event
-/*! @ctor ParameterMapEvent */
-	ParameterMapEvent(	const AudioUnitParameterEvent 	&inEvent,
-						UInt32 							inSliceOffsetInBuffer,
-						UInt32							inSliceDurationFrames )
-	{
-		SetScheduledEvent(inEvent, inSliceOffsetInBuffer, inSliceDurationFrames );
-	};
-
-/*! @method SetScheduledEvent */
-	void SetScheduledEvent(	const AudioUnitParameterEvent 	&inEvent,
-							UInt32 							inSliceOffsetInBuffer,
-							UInt32							inSliceDurationFrames )
-	{
-		mEventType = inEvent.eventType;
-		mSliceDurationFrames = inSliceDurationFrames;
-
-		if(mEventType == kParameterEvent_Immediate )
-		{
-			// constant immediate value for the whole slice
-			mValue1 = inEvent.eventValues.immediate.value;
-			mValue2 = mValue1;
-			mDurationInFrames = inSliceDurationFrames;
-			mBufferOffset = 0;
-		}
-		else
-		{
-			mDurationInFrames 	= 	inEvent.eventValues.ramp.durationInFrames;
-			mBufferOffset 		= 	inEvent.eventValues.ramp.startBufferOffset - inSliceOffsetInBuffer;	// shift over for this slice
-			mValue1 			= 	inEvent.eventValues.ramp.startValue;
-			mValue2 			= 	inEvent.eventValues.ramp.endValue;
-		}
-	};
-
-
-
-/*! @method GetEventType */
-	AUParameterEventType		GetEventType() const {return mEventType;};
-
-/*! @method GetValue */
-	AudioUnitParameterValue		GetValue() const {return mValue1;};	// only valid if immediate event type
-/*! @method GetEndValue */
-	AudioUnitParameterValue		GetEndValue() const {return mValue2;};	// only valid if immediate event type
-/*! @method SetValue */
-	void						SetValue(AudioUnitParameterValue inValue)
-								{
-									mEventType = kParameterEvent_Immediate;
-									mValue1 = inValue;
-									mValue2 = inValue;
-								}
-
-	// interpolates the start and end values corresponding to the current processing slice
-	// most ramp parameter implementations will want to use this method
-	// the start value will correspond to the start of the slice
-	// the end value will correspond to the end of the slice
-/*! @method GetRampSliceStartEnd */
-	void					GetRampSliceStartEnd(	AudioUnitParameterValue &	outStartValue,
-													AudioUnitParameterValue &	outEndValue,
-													AudioUnitParameterValue &	outValuePerFrameDelta )
-	{
-		if (mEventType == kParameterEvent_Ramped) {
-			outValuePerFrameDelta = (mValue2 - mValue1) / mDurationInFrames;
-
-			outStartValue = mValue1 + outValuePerFrameDelta * (-mBufferOffset);	// corresponds to frame 0 of this slice
-			outEndValue = outStartValue +  outValuePerFrameDelta * mSliceDurationFrames;
-		} else {
-			outValuePerFrameDelta = 0;
-			outStartValue = outEndValue = mValue1;
-		}
-	};
-
-	// Some ramp parameter implementations will want to interpret the ramp using their
-	// own interpolation method (perhaps non-linear)
-	// This method gives the raw ramp information, relative to this processing slice
-	// for the client to interpret as desired
-/*! @method GetRampInfo */
-	void					GetRampInfo(	SInt32 	&					outBufferOffset,
-											UInt32 	&					outDurationInFrames,
-											AudioUnitParameterValue &	outStartValue,
-											AudioUnitParameterValue &	outEndValue )
-	{
-		outBufferOffset = mBufferOffset;
-		outDurationInFrames = mDurationInFrames;
-		outStartValue = mValue1;
-		outEndValue = mValue2;
-	};
-
-#if DEBUG
-	void					Print()
-	{
-		printf("ParameterEvent @ %p\n", this);
-		printf("	mEventType = %d\n", (int)mEventType);
-		printf("	mBufferOffset = %d\n", (int)mBufferOffset);
-		printf("	mDurationInFrames = %d\n", (int)mDurationInFrames);
-		printf("	mSliceDurationFrames = %d\n", (int)mSliceDurationFrames);
-		printf("	mValue1 = %.5f\n", mValue1);
-		printf("	mValue2 = %.5f\n", mValue2);
-	}
-#endif
-
-private:
-	AUParameterEventType		mEventType;
-
-	SInt32						mBufferOffset;		// ramp start offset relative to start of this slice (may be negative)
-	UInt32						mDurationInFrames;	// total duration of ramp parameter
-	AudioUnitParameterValue     mValue1;				// value if immediate : startValue if ramp
-	AudioUnitParameterValue		mValue2;				// endValue (only used for ramp)
-
-	UInt32					mSliceDurationFrames;	// duration of this processing slice
-};
-
-
-
-// ____________________________________________________________________________
-//
-class AUIOElement;
-
-/*! @class AUElement */
-class AUElement {
-public:
-/*! @ctor AUElement */
-								AUElement(AUBase *audioUnit) : mAudioUnit(audioUnit),
-									mUseIndexedParameters(false), mElementName(0) { }
-
-/*! @dtor ~AUElement */
-	virtual						~AUElement() { if (mElementName) CFRelease (mElementName); }
-
-/*! @method GetNumberOfParameters */
-	virtual UInt32				GetNumberOfParameters()
-	{
-		if(mUseIndexedParameters) return static_cast<UInt32>(mIndexedParameters.size()); else return static_cast<UInt32>(mParameters.size());
-	}
-/*! @method GetParameterList */
-	virtual void				GetParameterList(AudioUnitParameterID *outList);
-/*! @method HasParameterID */
-	bool						HasParameterID (AudioUnitParameterID paramID) const;
-
-/*! @method GetParameter */
-	AudioUnitParameterValue		GetParameter(AudioUnitParameterID paramID);
-/*! @method SetParameter */
-	void						SetParameter(AudioUnitParameterID paramID, AudioUnitParameterValue value, bool okWhenInitialized = false);
-	// Only set okWhenInitialized to true when you know the outside world cannot access this element. Otherwise the parameter map could get corrupted.
-
-	// interpolates the start and end values corresponding to the current processing slice
-	// most ramp parameter implementations will want to use this method
-/*! @method GetRampSliceStartEnd */
-	void						GetRampSliceStartEnd(	AudioUnitParameterID	paramID,
-													AudioUnitParameterValue &	outStartValue,
-													AudioUnitParameterValue &	outEndValue,
-													AudioUnitParameterValue &	outValuePerFrameDelta );
-
-/*! @method GetEndValue */
-	AudioUnitParameterValue		GetEndValue(	AudioUnitParameterID		paramID);
-
-/*! @method SetRampParameter */
-	void						SetScheduledEvent(	AudioUnitParameterID 			paramID,
-													const AudioUnitParameterEvent 	&inEvent,
-													UInt32 							inSliceOffsetInBuffer,
-													UInt32							inSliceDurationFrames,
-													bool							okWhenInitialized = false );
-	// Only set okWhenInitialized to true when you know the outside world cannot access this element. Otherwise the parameter map could get corrupted.
-
-
-/*! @method GetAudioUnit */
-	AUBase *					GetAudioUnit() const { return mAudioUnit; };
-
-/*! @method SaveState */
-	void						SaveState(CFMutableDataRef data);
-/*! @method RestoreState */
-	const UInt8 *				RestoreState(const UInt8 *state);
-/*! @method GetName */
-	CFStringRef					GetName () const { return mElementName; }
-/*! @method SetName */
-	void						SetName (CFStringRef inName);
-/*! @method HasName */
-	bool						HasName () const { return mElementName != 0; }
-/*! @method UseIndexedParameters */
-	virtual void				UseIndexedParameters(int inNumberOfParameters);
-
-/*! @method AsIOElement*/
-	virtual AUIOElement*		AsIOElement () { return NULL; }
-
-protected:
-	inline ParameterMapEvent&	GetParamEvent(AudioUnitParameterID paramID);
-
-private:
-	typedef std::map<AudioUnitParameterID, ParameterMapEvent, std::less<AudioUnitParameterID> > ParameterMap;
-
-/*! @var mAudioUnit */
-	AUBase *						mAudioUnit;
-/*! @var mParameters */
-	ParameterMap					mParameters;
-
-/*! @var mUseIndexedParameters */
-	bool							mUseIndexedParameters;
-/*! @var mIndexedParameters */
-	std::vector<ParameterMapEvent>	mIndexedParameters;
-
-/*! @var mElementName */
-	CFStringRef						mElementName;
-};
-
-
-
-// ____________________________________________________________________________
-//
-/*! @class AUIOElement */
-class AUIOElement : public AUElement {
-public:
-/*! @ctor AUIOElement */
-								AUIOElement(AUBase *audioUnit);
-
-/*! @method GetStreamFormat */
-	const CAStreamBasicDescription &GetStreamFormat() const { return mStreamFormat; }
-
-/*! @method SetStreamFormat */
-	virtual OSStatus			SetStreamFormat(const CAStreamBasicDescription &desc);
-
-/*! @method AllocateBuffer */
-	virtual void				AllocateBuffer(UInt32 inFramesToAllocate = 0);
-/*! @method DeallocateBuffer */
-	void						DeallocateBuffer();
-/*! @method NeedsBufferSpace */
-	virtual bool				NeedsBufferSpace() const = 0;
-
-/*! @method SetWillAllocateBuffer */
-	void						SetWillAllocateBuffer(bool inFlag) {
-									mWillAllocate = inFlag;
-								}
-/*! @method WillAllocateBuffer */
-	bool						WillAllocateBuffer() const {
-									return mWillAllocate;
-								}
-
-/*! @method UseExternalBuffer */
-	void						UseExternalBuffer(const AudioUnitExternalBuffer &buf) {
-									mIOBuffer.UseExternalBuffer(mStreamFormat, buf);
-								}
-/*! @method PrepareBuffer */
-	AudioBufferList &			PrepareBuffer(UInt32 nFrames) {
-									if (mWillAllocate)
-										return mIOBuffer.PrepareBuffer(mStreamFormat, nFrames);
-									throw OSStatus(kAudioUnitErr_InvalidPropertyValue);
-								}
-/*! @method PrepareNullBuffer */
-	AudioBufferList &			PrepareNullBuffer(UInt32 nFrames) {
-									return mIOBuffer.PrepareNullBuffer(mStreamFormat, nFrames);
-								}
-/*! @method SetBufferList */
-	AudioBufferList &			SetBufferList(AudioBufferList &abl) { return mIOBuffer.SetBufferList(abl); }
-/*! @method SetBuffer */
-	void						SetBuffer(UInt32 index, AudioBuffer &ab) { mIOBuffer.SetBuffer(index, ab); }
-/*! @method InvalidateBufferList */
-	void						InvalidateBufferList() { mIOBuffer.InvalidateBufferList(); }
-
-/*! @method GetBufferList */
-	AudioBufferList &			GetBufferList() const { return mIOBuffer.GetBufferList(); }
-
-/*! @method GetChannelData */
-	AudioUnitSampleType *		GetChannelData(int ch) const {
-									if (mStreamFormat.IsInterleaved())
-										return static_cast<AudioUnitSampleType *>(mIOBuffer.GetBufferList().mBuffers[0].mData) + ch;
-									else
-										return static_cast<AudioUnitSampleType *>(mIOBuffer.GetBufferList().mBuffers[ch].mData);
-								}
-	Float32 *					GetFloat32ChannelData(int ch) const {
-									if (mStreamFormat.IsInterleaved())
-										return static_cast<Float32 *>(mIOBuffer.GetBufferList().mBuffers[0].mData) + ch;
-									else
-										return static_cast<Float32 *>(mIOBuffer.GetBufferList().mBuffers[ch].mData);
-								}
-	SInt32 *					GetSInt32ChannelData(int ch) const {
-									if (mStreamFormat.IsInterleaved())
-										return static_cast<SInt32 *>(mIOBuffer.GetBufferList().mBuffers[0].mData) + ch;
-									else
-										return static_cast<SInt32 *>(mIOBuffer.GetBufferList().mBuffers[ch].mData);
-								}
-	SInt16 *					GetInt16ChannelData(int ch) const {
-									if (mStreamFormat.IsInterleaved())
-										return static_cast<SInt16 *>(mIOBuffer.GetBufferList().mBuffers[0].mData) + ch;
-									else
-										return static_cast<SInt16 *>(mIOBuffer.GetBufferList().mBuffers[ch].mData);
-								}
-
-/*! @method CopyBufferListTo */
-	void						CopyBufferListTo(AudioBufferList &abl) const {
-									mIOBuffer.CopyBufferListTo(abl);
-								}
-/*! @method CopyBufferContentsTo */
-	void						CopyBufferContentsTo(AudioBufferList &abl) const {
-									mIOBuffer.CopyBufferContentsTo(abl);
-								}
-
-/*	UInt32						BytesToFrames(UInt32 nBytes) { return nBytes / mStreamFormat.mBytesPerFrame; }
-	UInt32						BytesToFrames(AudioBufferList &abl) {
-									return BytesToFrames(abl.mBuffers[0].mDataByteSize);
-								}
-	UInt32						FramesToBytes(UInt32 nFrames) { return nFrames * mStreamFormat.mBytesPerFrame; }*/
-
-/*! @method IsInterleaved */
-	bool						IsInterleaved() const { return mStreamFormat.IsInterleaved(); }
-/*! @method NumberChannels */
-	UInt32						NumberChannels() const { return mStreamFormat.NumberChannels(); }
-/*! @method NumberInterleavedChannels */
-	UInt32						NumberInterleavedChannels() const { return mStreamFormat.NumberInterleavedChannels(); }
-
-/*! @method GetChannelMapTags */
-	virtual UInt32				GetChannelLayoutTags (AudioChannelLayoutTag	*outLayoutTagsPtr);
-
-/*! @method GetAudioChannelLayout */
-	virtual UInt32				GetAudioChannelLayout (AudioChannelLayout	*outMapPtr, Boolean	&outWritable);
-
-/*! @method SetAudioChannelLayout */
-	virtual OSStatus			SetAudioChannelLayout (const AudioChannelLayout &inData);
-
-/*! @method RemoveAudioChannelLayout */
-	virtual OSStatus			RemoveAudioChannelLayout ();
-
-/*! @method AsIOElement*/
-	virtual AUIOElement*		AsIOElement () { return this; }
-
-protected:
-/*! @var mStreamFormat */
-	CAStreamBasicDescription	mStreamFormat;
-/*! @var mIOBuffer */
-	AUBufferList				mIOBuffer;	// for input: input proc buffer, only allocated when needed
-											// for output: output cache, usually allocated early on
-/*! @var mWillAllocate */
-	bool						mWillAllocate;
-};
-
-// ____________________________________________________________________________
-//
-// AUScopeDelegates are a way to get virtual scopes.
-/*! @class AUScopeDelegate */
-class AUScopeDelegate {
-public:
-/*! @ctor AUScopeDelegate */
-					AUScopeDelegate() : mCreator(NULL), mScope(0) { }
-/*! @dtor ~AUScopeDelegate */
-					virtual ~AUScopeDelegate() {}
-
-/*! @method Initialize */
-	void					Initialize(	AUBase *creator,
-										AudioUnitScope scope,
-										UInt32 numElements)
-	{
-		mCreator = creator;
-		mScope = scope;
-		SetNumberOfElements(numElements);
-	}
-
-/*! @method SetNumberOfElements */
-	virtual void			SetNumberOfElements(UInt32 numElements) = 0;
-
-/*! @method GetNumberOfElements */
-	virtual UInt32			GetNumberOfElements()	 = 0;
-
-/*! @method GetElement */
-	virtual AUElement *		GetElement(UInt32 elementIndex) = 0;
-
-	AUBase *			GetCreator() const { return mCreator; }
-	AudioUnitScope		GetScope() const { return mScope; }
-
-
-private:
-/*! @var mCreator */
-	AUBase *					mCreator;
-/*! @var mScope */
-	AudioUnitScope				mScope;
-};
-
-
-
-// ____________________________________________________________________________
-//
-/*! @class AUScope */
-class AUScope {
-public:
-/*! @ctor AUScope */
-					AUScope() : mCreator(NULL), mScope(0), mDelegate(0) { }
-/*! @dtor ~AUScope */
-					~AUScope();
-
-/*! @method Initialize */
-	void			Initialize(AUBase *creator,
-								AudioUnitScope scope,
-								UInt32 numElements)
-	{
-		mCreator = creator;
-		mScope = scope;
-
-		if (mDelegate)
-			return mDelegate->Initialize(creator, scope, numElements);
-
-		SetNumberOfElements(numElements);
-	}
-
-/*! @method SetNumberOfElements */
-	void			SetNumberOfElements(UInt32 numElements);
-
-/*! @method GetNumberOfElements */
-	UInt32			GetNumberOfElements()	const
-	{
-		if (mDelegate)
-			return mDelegate->GetNumberOfElements();
-
-		return static_cast<UInt32>(mElements.size());
-	}
-
-/*! @method GetElement */
-	AUElement *		GetElement(UInt32 elementIndex) const
-	{
-		if (mDelegate)
-			return mDelegate->GetElement(elementIndex);
-
-		ElementVector::const_iterator i = mElements.begin() + elementIndex;
-			// catch passing -1 in as the elementIndex - causes a wrap around
-		return (i >= mElements.end() || i < mElements.begin()) ? NULL : *i;
-	}
-
-/*! @method SafeGetElement */
-	AUElement *		SafeGetElement(UInt32 elementIndex)
-	{
-		AUElement *element = GetElement(elementIndex);
-		if (element == NULL)
-			COMPONENT_THROW(kAudioUnitErr_InvalidElement);
-		return element;
-	}
-
-/*! @method GetIOElement */
-	AUIOElement *	GetIOElement(UInt32 elementIndex) const
-	{
-		AUElement *element = GetElement(elementIndex);
-		AUIOElement *ioel = element ? element->AsIOElement () : NULL;
-		if (!ioel)
-			COMPONENT_THROW (kAudioUnitErr_InvalidElement);
-		return ioel;
-	}
-
-/*! @method HasElementWithName */
-	bool			HasElementWithName () const;
-
-/*! @method AddElementNamesToDict */
-	void			AddElementNamesToDict (CFMutableDictionaryRef & inNameDict);
-
-	bool			RestoreElementNames (CFDictionaryRef& inNameDict);
-
-	AudioUnitScope		GetScope() const { return mScope; }
-
-	void SetDelegate(AUScopeDelegate* inDelegate) { mDelegate = inDelegate; }
-
-/*! @method SaveState */
-    void            SaveState(CFMutableDataRef data);
-
-/*! @method RestoreState */
-    const UInt8 *	RestoreState(const UInt8 *state);
-
-private:
-	typedef std::vector<AUElement *> ElementVector;
-/*! @var mCreator */
-	AUBase *					mCreator;
-/*! @var mScope */
-	AudioUnitScope				mScope;
-/*! @var mElements */
-	ElementVector				mElements;
-/*! @var mDelegate */
-	AUScopeDelegate *			mDelegate;
-};
-
-
-
-#endif // __AUScopeElement_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUSilentTimeout.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUSilentTimeout.h
deleted file mode 100644
index 7e5a65e..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUSilentTimeout.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-     File: AUSilentTimeout.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUSilentTimeout
-#define __AUSilentTimeout
-
-class AUSilentTimeout
-{
-public:
-	AUSilentTimeout()
-		: 	mTimeoutCounter(0),
-			mResetTimer(true)
-				{};
-
-	void				Process(UInt32 inFramesToProcess, UInt32 inTimeoutLimit, bool &ioSilence )
-	{
-		if(ioSilence )
-		{
-			if(mResetTimer )
-			{
-				mTimeoutCounter = inTimeoutLimit;
-				mResetTimer = false;
-			}
-
-			if(mTimeoutCounter > 0 )
-			{
-				mTimeoutCounter -= inFramesToProcess;
-				ioSilence = false;
-			}
-		}
-		else
-		{
-			// signal to reset the next time we receive silence
-			mResetTimer = true;
-		}
-	}
-
-	void				Reset()
-	{
-		mResetTimer = true;
-	};
-
-
-
-private:
-	SInt32				mTimeoutCounter;
-	bool				mResetTimer;
-};
-
-#endif // __AUSilentTimeout
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h
deleted file mode 100644
index 6e27f74..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-     File: AUTimestampGenerator.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUTimestampGenerator_h__
-#define __AUTimestampGenerator_h__
-
-#include <math.h>
-#include "CAHostTimeBase.h"
-#include <stdio.h>
-
-#define TSGFMT "0x%10qx"
-//#define TSGFMT "%10qd"
-
-// This class generates a continuously increasing series of timestamps based
-// on a series of potentially discontinuous timestamps (as can be delivered from
-// CoreAudio in the event of an overload or major engine change).
-// N.B.: "output" = downstream (source) timestamp
-//		 "input"  = upstream (derived) timestamp
-class AUTimestampGenerator {
-public:
-	AUTimestampGenerator(bool hostTimeDiscontinuityCorrection = false)
-	{
-		mState.mStartInputAtZero = true;
-		mState.mBypassed = false;
-		mState.mHostTimeDiscontinuityCorrection = hostTimeDiscontinuityCorrection;
-#if DEBUG
-		mVerbosity = 0;
-		snprintf(mDebugName, sizeof(mDebugName), "tsg @ %p", this);
-#endif
-		// CAHostTimeBase should be used instead of the calls in <CoreAudio/HostTime.h>
-		// we make this call here to ensure that this is initialized, otherwise the first time
-		// you do actually call CAHostTimeBase to do work, can be on the render thread, and lead to unwanted VM faults
-		CAHostTimeBase::GetFrequency();
-		Reset();
-	}
-
-	void	SetStartInputAtZero(bool b) { mState.mStartInputAtZero = b; }
-	bool	GetStartInputAtZero() const { return mState.mStartInputAtZero; }
-
-	// bypassing is intended for a narrow special case. the upstream sample time will always be the same as the downstream time.
-	void	SetBypassed(bool b) { mState.mBypassed = b; }
-	bool	GetBypassed() const { return mState.mBypassed; }
-
-	// Call this to reset the timeline.
-	void	Reset()
-	{
-		mState.mCurrentInputTime.mSampleTime = 0.;
-		mState.mNextInputSampleTime = 0.;
-		mState.mCurrentOutputTime.mSampleTime = 0.;
-		mState.mNextOutputSampleTime = 0.;
-		mState.mLastOutputTime.mFlags = 0;
-		mState.mRateScalarAdj = 1.;
-
-		mFirstTime = true;
-#if DEBUG
-		if (mVerbosity)
-			printf("%-20.20s: Reset\n", mDebugName);
-#endif
-	}
-
-	// Call this once per render cycle with the downstream timestamp.
-	// expectedDeltaFrames is the expected difference between the current and NEXT
-	//	downstream timestamps.
-	// sampleRate is the OUTPUT sample rate.
-	void	AddOutputTime(const AudioTimeStamp &inTimeStamp, Float64 expectedDeltaFrames, double outputSampleRate, double rateScalarAdj=1.0);
-
-	// Call this once per render cycle to obtain the upstream timestamp.
-	// framesToAdvance is the number of frames the input timeline is to be
-	//	advanced during this render cycle.
-	// sampleRate is the INPUT sample rate.
-	const AudioTimeStamp &	GenerateInputTime(Float64 framesToAdvance, double inputSampleRate, bool advanceHostTime = false);
-
-	// this can be called to override the setting of the next input sample time in GenerateInputTime
-	void					Advance(Float64 framesToAdvance)
-	{
-#if DEBUG
-		if (mVerbosity > 1)
-			printf("%-20.20s:	ADVANCE         in = " TSGFMT "                    advance = " TSGFMT "\n", mDebugName, (SInt64)mState.mCurrentInputTime.mSampleTime, (SInt64)framesToAdvance);
-#endif
-		mState.mNextInputSampleTime = mState.mCurrentInputTime.mSampleTime + framesToAdvance;
-	}
-
-	struct State {
-		AudioTimeStamp		mCurrentInputTime;
-		Float64				mNextInputSampleTime;
-		Float64				mNextOutputSampleTime;
-		Float64				mInputSampleTimeForOutputPull;
-
-		AudioTimeStamp		mLastOutputTime;
-		AudioTimeStamp		mCurrentOutputTime;
-
-		bool				mStartInputAtZero;  // if true, input timeline starts at 0, else it starts
-												// synced with the output timeline
-		bool				mDiscontinuous;
-		bool				mBypassed;
-		Float64				mDiscontinuityDeltaSamples;
-
-		double				mRateScalarAdj;
-
-		bool				mHostTimeDiscontinuityCorrection; // If true, propagate timestamp discontinuities using host time.
-	};
-
-	void GetState(State& outState) const { outState = mState; }
-	void SetState(State const& inState) { mState = inState; mFirstTime = false; }
-
-private:
-
-	struct State		mState;
-
-	bool				mFirstTime;
-
-#if DEBUG
-public:
-	int					mVerbosity;
-	char				mDebugName[64];
-#endif
-};
-
-
-#endif // __AUTimestampGenerator_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUViewLocalizedStringKeys.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUViewLocalizedStringKeys.h
deleted file mode 100644
index 7f40021..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUViewLocalizedStringKeys.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-     File: AUViewLocalizedStringKeys.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __AUViewLocalizedStringKeys_h__
-#define __AUViewLocalizedStringKeys_h__
-
-// ACCESS POINT:
-#define	kLocalizedStringBundle_AUView 		CFSTR("com.apple.audio.units.Components")
-#define	kLocalizedStringTable_AUView 		CFSTR("CustomUI")
-
-// UNLOCALIZED STRINGS:
-    #define	kAUViewUnlocalizedString_TitleSeparator  			CFSTR(": ")
-
-// Generic View:
-    #define	kAUViewLocalizedStringKey_AudioUnit 				CFSTR("Audio Unit")
-    #define	kAUViewLocalizedStringKey_Manufacturer 			CFSTR("Manufacturer")
-
-    #define	kAUViewLocalizedStringKey_FactoryPreset 			CFSTR("Factory Preset")
-
-    #define	kAUViewLocalizedStringKey_Properties 				CFSTR("Properties")
-    #define	kAUViewLocalizedStringKey_Parameters 				CFSTR("Parameters")
-
-    #define	kAUViewLocalizedStringKey_Standard 				CFSTR("Standard")
-    #define	kAUViewLocalizedStringKey_Expert 					CFSTR("Expert")
-
-// AULoadCPU:
-    #define	kAUViewLocalizedStringKey_RestrictCPULoad 			CFSTR("Restrict CPU Load")
-    #define	kAUViewLocalizedStringKey_PercentSymbol 			CFSTR("%")
-    #define	kAUViewLocalizedStringKey_NotApplicable 			CFSTR("n/a")
-
-// AUDiskStreamingCheckbox:
-    #define	kAUViewLocalizedStringKey_StreamFromDisk 			CFSTR("Stream From Disk")
-
-// AURenderQualityPopup:
-    #define	kAUViewLocalizedStringKey_RenderQuality 			CFSTR("Render Quality")
-    #define	kAUViewLocalizedStringKey_Maximum 					CFSTR("Maximum")
-    #define	kAUViewLocalizedStringKey_High 					CFSTR("High")
-    #define	kAUViewLocalizedStringKey_Medium 					CFSTR("Medium")
-    #define	kAUViewLocalizedStringKey_Low 						CFSTR("Low")
-    #define	kAUViewLocalizedStringKey_Minimum 					CFSTR("Minimum")
-
-// AUChannelLayoutPopUp:
-	#define	kAUViewLocalizedStringKey_AudioChannelLayout 		CFSTR("Audio Channel Layout")
-
-#endif //__AUViewLocalizedStringKeys_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.cpp
deleted file mode 100644
index a48868a..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
-     File: CAAUParameter.cpp
- Abstract: CAAUParameter.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-#include "CAAUParameter.h"
-
-CAAUParameter::CAAUParameter()
-{
-	memset(this, 0, sizeof(CAAUParameter));
-}
-
-CAAUParameter::CAAUParameter(AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element)
-{
-	memset(this, 0, sizeof(CAAUParameter));
-	Init (au, param, scope, element);
-}
-
-CAAUParameter::CAAUParameter (AudioUnitParameter &inParam)
-{
-	memset(this, 0, sizeof(CAAUParameter));
-	Init (inParam.mAudioUnit, inParam.mParameterID, inParam.mScope, inParam.mElement);
-}
-
-CAAUParameter::CAAUParameter(const CAAUParameter &a)
-{
-	memset(this, 0, sizeof(CAAUParameter));
-	*this = a;
-}
-
-CAAUParameter &	CAAUParameter::operator = (const CAAUParameter &a)
-{
-	if (mParamName) CFRelease(mParamName);
-	if (mParamTag) CFRelease(mParamTag);
-	if (mNamedParams) CFRelease(mNamedParams);
-
-	memcpy(this, &a, sizeof(CAAUParameter));
-
-	if (mParamName) CFRetain(mParamName);
-	if (mParamTag) CFRetain(mParamTag);
-	if (mNamedParams) CFRetain(mNamedParams);
-
-	return *this;
-}
-
-CAAUParameter::~CAAUParameter()
-{
-	if (mParamName) CFRelease(mParamName);
-	if (mParamTag) CFRelease(mParamTag);
-	if (mNamedParams) CFRelease (mNamedParams);
-}
-
-void		CAAUParameter::Init (AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element)
-{
-	mAudioUnit = au;
-	mParameterID = param;
-	mScope = scope;
-	mElement = element;
-
-	UInt32 propertySize = sizeof(mParamInfo);
-	OSStatus err = AudioUnitGetProperty(au, kAudioUnitProperty_ParameterInfo,
-			scope, param, &mParamInfo, &propertySize);
-	if (err)
-		memset(&mParamInfo, 0, sizeof(mParamInfo));
-	if (mParamInfo.flags & kAudioUnitParameterFlag_HasCFNameString) {
-		mParamName = mParamInfo.cfNameString;
-		if (!(mParamInfo.flags & kAudioUnitParameterFlag_CFNameRelease))
-			CFRetain (mParamName);
-	} else
-		mParamName = CFStringCreateWithCString(NULL, mParamInfo.name, kCFStringEncodingUTF8);
-
-	const char* str = 0;
-	switch (mParamInfo.unit)
-	{
-		case kAudioUnitParameterUnit_Boolean:
-			str = "T/F";
-			break;
-		case kAudioUnitParameterUnit_Percent:
-		case kAudioUnitParameterUnit_EqualPowerCrossfade:
-			str = "%";
-			break;
-		case kAudioUnitParameterUnit_Seconds:
-			str = "Secs";
-			break;
-		case kAudioUnitParameterUnit_SampleFrames:
-			str = "Samps";
-			break;
-		case kAudioUnitParameterUnit_Phase:
-		case kAudioUnitParameterUnit_Degrees:
-			str = "Degr.";
-			break;
-		case kAudioUnitParameterUnit_Hertz:
-			str = "Hz";
-			break;
-		case kAudioUnitParameterUnit_Cents:
-		case kAudioUnitParameterUnit_AbsoluteCents:
-			str = "Cents";
-			break;
-		case kAudioUnitParameterUnit_RelativeSemiTones:
-			str = "S-T";
-			break;
-		case kAudioUnitParameterUnit_MIDINoteNumber:
-		case kAudioUnitParameterUnit_MIDIController:
-			str = "MIDI";
-				//these are inclusive, so add one value here
-			mNumIndexedParams = short(mParamInfo.maxValue+1 - mParamInfo.minValue);
-			break;
-		case kAudioUnitParameterUnit_Decibels:
-			str = "dB";
-			break;
-		case kAudioUnitParameterUnit_MixerFaderCurve1:
-		case kAudioUnitParameterUnit_LinearGain:
-			str = "Gain";
-			break;
-		case kAudioUnitParameterUnit_Pan:
-			str = "L/R";
-			break;
-		case kAudioUnitParameterUnit_Meters:
-			str = "Mtrs";
-			break;
-		case kAudioUnitParameterUnit_Octaves:
-			str = "8ve";
-			break;
-		case kAudioUnitParameterUnit_BPM:
-			str = "BPM";
-			break;
-		case kAudioUnitParameterUnit_Beats:
-			str = "Beats";
-			break;
-		case kAudioUnitParameterUnit_Milliseconds:
-			str = "msecs";
-			break;
-		case kAudioUnitParameterUnit_Ratio:
-			str = "Ratio";
-			break;
-		case kAudioUnitParameterUnit_Indexed:
-			{
-				propertySize = sizeof(mNamedParams);
-				err = AudioUnitGetProperty (au,
-									kAudioUnitProperty_ParameterValueStrings,
-									scope,
-									param,
-									&mNamedParams,
-									&propertySize);
-				if (!err && mNamedParams) {
-					mNumIndexedParams = CFArrayGetCount(mNamedParams);
-				} else {
-						//these are inclusive, so add one value here
-					mNumIndexedParams = short(mParamInfo.maxValue+1 - mParamInfo.minValue);
-				}
-				str = NULL;
-			}
-			break;
-		case kAudioUnitParameterUnit_CustomUnit:
-		{
-			CFStringRef unitName = mParamInfo.unitName;
-			static char paramStr[256];
-			CFStringGetCString (unitName, paramStr, 256, kCFStringEncodingUTF8);
-			if (mParamInfo.flags & kAudioUnitParameterFlag_CFNameRelease)
-				CFRelease (unitName);
-			str = paramStr;
-			break;
-		}
-		case kAudioUnitParameterUnit_Generic:
-		case kAudioUnitParameterUnit_Rate:
-		default:
-			str = NULL;
-			break;
-	}
-
-	if (str)
-		mParamTag = CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8);
-	else
-		mParamTag = NULL;
-}
-
-
-Float32		CAAUParameter::GetValue() const
-{
-	Float32 value = 0.;
-	//OSStatus err =
-	AudioUnitGetParameter(mAudioUnit, mParameterID, mScope, mElement, &value);
-	return value;
-}
-
-CFStringRef CreateLocalizedStringForParameterValue ( double					inParameterValue,
-													 const CAAUParameter *	inParameter,
-													 UInt32					inDigits,
-													 UInt32					minDigits) {
-	if (!inParameter) return nil;
-
-	AudioUnitParameterInfo info = inParameter->ParamInfo();
-	int pow10;
-
-	switch (info.unit) {
-		case kAudioUnitParameterUnit_Hertz:
-			// number of significant digits based on value
-			pow10 = int(log10(fmax(inParameterValue, .000001)));
-			break;
-		default:
-			// number of significant digits based on parameter range
-			pow10 = int(log10(fmax(double(info.maxValue - info.minValue), .000001)));
-			break;
-	}
-
-	// pow10	range			nDigitsAfterDecimal
-	//	-2		.0100-.0999		4
-	//	-1		.100-.999		3
-	//	0		1.00-9.99		2
-	//	1		10.0-99.9		1
-	//	2		100-999			0
-	//	3		1000-9990		-1
-	//	4		10000-99900		-2
-
-	int nDigitsAfterDecimal = inDigits - (pow10 + 1);
-	if (nDigitsAfterDecimal < 0)
-		nDigitsAfterDecimal = 0;	// the least number of digits possible is zero
-
-	if (info.flags & kAudioUnitParameterFlag_IsHighResolution)
-		nDigitsAfterDecimal = 4;
-
-	CFLocaleRef currentLocale = CFLocaleCopyCurrent();
-	CFNumberFormatterRef numberFormatter = CFNumberFormatterCreate (NULL, currentLocale, kCFNumberFormatterDecimalStyle);
-
-	CFNumberRef maxFractionDigits = CFNumberCreate (NULL, kCFNumberIntType, &nDigitsAfterDecimal);
-
-	if (nDigitsAfterDecimal > 0)
-		nDigitsAfterDecimal = minDigits;
-
-	CFNumberRef minFractionDigits = CFNumberCreate (NULL, kCFNumberIntType, &nDigitsAfterDecimal);
-
-	CFNumberFormatterSetProperty (numberFormatter, kCFNumberFormatterMinFractionDigits, minFractionDigits);
-	CFNumberFormatterSetProperty (numberFormatter, kCFNumberFormatterMaxFractionDigits, maxFractionDigits);
-	CFStringRef formattedNumberString = CFNumberFormatterCreateStringWithValue (NULL, numberFormatter, kCFNumberDoubleType, &inParameterValue);
-
-	CFRelease(currentLocale);
-	CFRelease(numberFormatter);
-	CFRelease(maxFractionDigits);
-	CFRelease(minFractionDigits);
-
-	return formattedNumberString;
-}
-
-CFStringRef CreateLocalizedStringForParameterValue ( double					inParameterValue,
-													 const CAAUParameter *	inParameter,
-													 UInt32					inDigits) {
-	return CreateLocalizedStringForParameterValue (inParameterValue, inParameter, inDigits, 1);
-}
-
-double ValueForLocalizedParameterString (CFStringRef string, const CAAUParameter * inParameter) {
-	CFLocaleRef currentLocale = CFLocaleCopyCurrent();
-	CFNumberFormatterRef numberFormatter = CFNumberFormatterCreate (NULL, currentLocale, kCFNumberFormatterDecimalStyle);
-
-	double value = 0;
-	Boolean worked = CFNumberFormatterGetValueFromString (numberFormatter, string, NULL, kCFNumberDoubleType, &value);
-
-	CFRelease(currentLocale);
-	CFRelease(numberFormatter);
-
-	if (worked)
-		return value;
-	else {
-		AudioUnitParameterInfo info = inParameter->ParamInfo();
-		return info.defaultValue;
-	}
-}
-
-CFStringRef CAAUParameter::GetStringFromValueCopy(const Float32 *value) const
-{
-	if (HasNamedParams())
-	{
-		Float32 val = (value == NULL ? GetValue() : *value);
-		int index = int(mParamInfo.minValue) + int(val);
-		CFStringRef str = GetParamName (index);
-		if (str) {
-			CFRetain (str);
-			return str;
-		}
-	}
-	else if (ValuesHaveStrings())
-	{
-		AudioUnitParameterStringFromValue stringValue;
-		stringValue.inParamID = mParameterID;
-		stringValue.inValue = value;
-		stringValue.outString = NULL;
-		UInt32 propertySize = sizeof(stringValue);
-
-		OSStatus err = AudioUnitGetProperty (mAudioUnit,
-											kAudioUnitProperty_ParameterStringFromValue,
-											mScope,
-											0,
-											&stringValue,
-											&propertySize);
-
-		if (!err && stringValue.outString != NULL)
-			return stringValue.outString;
-	}
-
-	Float32 val = (value == NULL ? GetValue() : *value);
-	AudioUnitParameterUnit unit = this->ParamInfo().unit;
-	if (unit ==  kAudioUnitParameterUnit_Cents || unit == kAudioUnitParameterUnit_AbsoluteCents)
-		return CreateLocalizedStringForParameterValue(val, this, 4, 0);
-	else
-		return CreateLocalizedStringForParameterValue(val, this, 4);
-}
-
-Float32 CAAUParameter::GetValueFromString(CFStringRef str) const
-{
-	if (ValuesHaveStrings())
-	{
-		AudioUnitParameterValueFromString valueString;
-		valueString.inParamID = mParameterID;
-		valueString.inString = str;
-		UInt32 propertySize = sizeof(valueString);
-
-		OSStatus err = AudioUnitGetProperty (mAudioUnit,
-										kAudioUnitProperty_ParameterValueFromString,
-										mScope,
-										0,
-										&valueString,
-										&propertySize);
-
-		if (!err) {
-			return valueString.outValue;
-		}
-	}
-
-	return (Float32) ValueForLocalizedParameterString(str, this);
-}
-
-void		CAAUParameter::SetValue(	AUParameterListenerRef		inListener,
-									void *							inObject,
-									Float32							inValue) const
-{
-    // clip inValue as: maxValue >= inValue >= minValue before setting
-    Float32 valueToSet = inValue;
-    if (valueToSet > mParamInfo.maxValue)
-        valueToSet = mParamInfo.maxValue;
-    if (valueToSet < mParamInfo.minValue)
-        valueToSet = mParamInfo.minValue;
-
-	AUParameterSet(inListener, inObject, this, valueToSet, 0);
-}
-
-#if DEBUG
-void	CAAUParameter::Print() const
-{
-	UInt32 clump = 0;
-	GetClumpID (clump);
-
-	UInt32 len = static_cast<UInt32>(CFStringGetLength(mParamName));
-	char* chars = (char*)malloc (len * 2); // give us plenty of room for unichar chars
-	if (!CFStringGetCString (mParamName, chars, len * 2, kCFStringEncodingUTF8))
-		chars[0] = 0;
-
-	printf ("ID: %ld, Clump: %u, Name: %s\n", (long unsigned int) mParameterID, (unsigned int) clump, chars);
-	free (chars);
-}
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h
deleted file mode 100644
index f51b392..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-     File: CAAUParameter.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAAUParameter_h__
-#define __CAAUParameter_h__
-
-#include <AudioToolbox/AudioUnitUtilities.h>
-
-// ____________________________________________________________________________
-//	CAAUParameter
-//	complete parameter specification
-	/*! @class CAAUParameter */
-class CAAUParameter : public AudioUnitParameter {
-public:
-								/*! @ctor CAAUParameter.0 */
-								CAAUParameter();
-								/*! @ctor CAAUParameter.1 */
-								CAAUParameter(AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element);
-								/*! @ctor CAAUParameter.2 */
-								CAAUParameter(AudioUnitParameter &inParam);
-								/*! @ctor CAAUParameter.3 */
-								CAAUParameter(const CAAUParameter &a);
-								/*! @dtor ~CAAUParameter */
-								~CAAUParameter();
-
-	/*! @method operator <@ */
-	bool						operator < (const CAAUParameter &a) const
-								{
-									return memcmp(this, &a, sizeof(AudioUnitParameter)) < 0;
-								}
-
-	/*! @method operator ==@ */
-	bool						operator == (const CAAUParameter &a) const
-								{
-									return !memcmp(this, &a, sizeof(AudioUnitParameter));
-								}
-
-	/*! @method operator =@ */
-	CAAUParameter &				operator = (const CAAUParameter &a);
-
-	/*! @method GetValue */
-	Float32						GetValue() const;
-	/*! @method SetValue */
-	void						SetValue(	AUParameterListenerRef			inListener,
-											void *							inObject,
-											Float32							inValue) const;
-
-	/*! @method GetName */
-	CFStringRef					GetName() const { return mParamName; }
-										// borrowed reference!
-
-	/*! @method GetStringFromValueCopy */
-	CFStringRef					GetStringFromValueCopy(const Float32 *value = NULL) const;
-										// returns a copy of the name of the current parameter value
-										// or null if there is no name associated
-										// caller must release
-	/*! @method ValuesHaveStrings */
-	bool						ValuesHaveStrings () const
-								{
-									return (mParamInfo.flags & kAudioUnitParameterFlag_ValuesHaveStrings) != 0;
-								}
-
-	/*! @method GetValueFromString */
-	Float32						GetValueFromString (CFStringRef str) const;
-									// caller must release
-
-	/*! @method ParamInfo */
-	const AudioUnitParameterInfo &
-								ParamInfo()	const { return mParamInfo; }
-
-	/*! @method GetParamTag */
-	CFStringRef					GetParamTag() const	{ return mParamTag; }
-									// this may return null! -
-									// in which case there is no descriptive tag for the parameter
-
-	/*! @method GetParamName */
-	CFStringRef					GetParamName (int inIndex) const
-									// this can return null if there is no name for the parameter
-								{
-									return (mNamedParams && inIndex < mNumIndexedParams)
-												? (CFStringRef) CFArrayGetValueAtIndex(mNamedParams, inIndex)
-												: 0;
-								}
-
-	/*! @method GetNumIndexedParams */
-	int							GetNumIndexedParams () const { return mNumIndexedParams; }
-
-	/*! @method IsIndexedParam */
-	bool						IsIndexedParam () const { return mNumIndexedParams != 0; }
-
-	/*! @method HasNamedParams */
-	bool						HasNamedParams () const { return IsIndexedParam() && mNamedParams; }
-
-	/*! @method GetClumpID */
-	bool						GetClumpID (UInt32 &outClumpID) const
-								{
-									if (mParamInfo.flags & kAudioUnitParameterFlag_HasClump) {
-										outClumpID = mParamInfo.clumpID;
-										return true;
-									}
-									return false;
-								}
-
-	/*! @method HasDisplayTransformation */
-	bool						HasDisplayTransformation () const
-								{
-									return GetAudioUnitParameterDisplayType (mParamInfo.flags);
-								}
-
-	/*! @method IsExpert */
-	bool						IsExpert () const
-								{
-									return mParamInfo.flags & kAudioUnitParameterFlag_ExpertMode;
-								}
-#if DEBUG
-	void						Print () const;
-#endif
-
-		// these methods are defined in CAPersistence.cpp
-		// they will persist and restore only the scope, element and param ID's of the AudioUnitParameter
-		// however, this is sufficient to be able to save/restore a CAAUParameter object
-	void						Save (CFPropertyListRef &outData) const;
-
-	static void					Save (const AudioUnitParameter &inParam, CFPropertyListRef &outData);
-
-	static OSStatus				Restore	(const CFPropertyListRef inData, AudioUnitParameter &outParam);
-
-protected:
-	// cached parameter info
-	/*! @var mParamInfo */
-	AudioUnitParameterInfo		mParamInfo;
-	/*! @var mParamName */
-	CFStringRef					mParamName;
-	/*! @var mParamTag */
-	CFStringRef					mParamTag;
-	/*! @var mNumIndexedParams */
-	short						mNumIndexedParams;
-	/*! @var mNamedParams */
-	CFArrayRef					mNamedParams;
-
-private:
-	void						Init (AudioUnit au, AudioUnitParameterID param, AudioUnitScope scope, AudioUnitElement element);
-
-};
-
-
-
-#endif // __CAAUParameter_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomic.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomic.h
deleted file mode 100644
index 5f9a16a..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomic.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
-     File: CAAtomic.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-/*
-	This file implements all Atomic operations using Interlocked functions specified in
-	Winbase.h
-NOTE: According to Microsoft documentation, all Interlocked functions generates a
-full barrier.
-	On Windows:
-	As the Interlocked functions returns the Old value, Extra checks and operations
-	are made after the atomic operation to return value consistent with OSX counterparts.
-*/
-#ifndef __CAAtomic_h__
-#define __CAAtomic_h__
-
-#if TARGET_OS_WIN32
-	#include <windows.h>
-	#include <intrin.h>
-	#pragma intrinsic(_InterlockedOr)
-	#pragma intrinsic(_InterlockedAnd)
-#else
-	#include <CoreFoundation/CFBase.h>
-	#include <libkern/OSAtomic.h>
-#endif
-
-inline void CAMemoryBarrier()
-{
-#if TARGET_OS_WIN32
-	MemoryBarrier();
-#else
-	OSMemoryBarrier();
-#endif
-}
-
-inline SInt32 CAAtomicAdd32Barrier(SInt32 theAmt, volatile SInt32* theValue)
-{
-#if TARGET_OS_WIN32
-	long lRetVal = InterlockedExchangeAdd((volatile long*)theValue, theAmt);
-	// InterlockedExchangeAdd returns the original value which differs from OSX version.
-	// At this point the addition would have occured and hence returning the new value
-	// to keep it sync with OSX.
-	return lRetVal + theAmt;
-#else
-	return OSAtomicAdd32Barrier(theAmt, (volatile int32_t *)theValue);
-#endif
-}
-
-inline SInt32 CAAtomicOr32Barrier(UInt32 theMask, volatile UInt32* theValue)
-{
-#if TARGET_OS_WIN32
-	// InterlockedAnd macro is not defined in x86 platform, and hence using the intrinsic
-	// function instead.
-	long j = _InterlockedOr((volatile long*)theValue, theMask);
-	// _InterlockedOr returns the original value which differs from OSX version.
-	// Returning the new value similar to OSX
-	return (SInt32)(j | theMask);
-#else
-	return OSAtomicOr32Barrier(theMask, (volatile uint32_t *)theValue);
-#endif
-}
-
-inline SInt32 CAAtomicAnd32Barrier(UInt32 theMask, volatile UInt32* theValue)
-{
-#if TARGET_OS_WIN32
-// InterlockedAnd macro is not defined in x86 platform, and hence using the intrinsic
-// function instead.
-	long j = _InterlockedAnd((volatile long*)theValue, theMask);
-	// _InterlockedAnd returns the original value which differs from OSX version.
-	// Returning the new value similar to OSX
-	return (SInt32)(j & theMask);
-#else
-	return OSAtomicAnd32Barrier(theMask, (volatile uint32_t *)theValue);
-#endif
-}
-
-inline bool CAAtomicCompareAndSwap32Barrier(SInt32 oldValue, SInt32 newValue, volatile SInt32 *theValue)
-{
-#if TARGET_OS_WIN32
-	// InterlockedCompareExchange returns the old value. But we need to return bool value.
-	long lRetVal = InterlockedCompareExchange((volatile long*)theValue, newValue, oldValue);
-// Hence we check if the new value is set and if it is we return true else false.
-// If theValue is equal to oldValue then the swap happens. Otherwise swap doesn't happen.
-	return (oldValue == lRetVal);
-#else
-	return OSAtomicCompareAndSwap32Barrier(oldValue, newValue, (volatile int32_t *)theValue);
-#endif
-}
-
-
-inline SInt32 CAAtomicIncrement32(volatile SInt32* theValue)
-{
-#if TARGET_OS_WIN32
-	return (SInt32)InterlockedIncrement((volatile long*)theValue);
-#else
-	return OSAtomicIncrement32((volatile int32_t *)theValue);
-#endif
-}
-
-inline SInt32 CAAtomicDecrement32(volatile SInt32* theValue)
-{
-#if TARGET_OS_WIN32
-	return (SInt32)InterlockedDecrement((volatile long*)theValue);
-#else
-	return OSAtomicDecrement32((volatile int32_t *)theValue);
-#endif
-}
-
-inline SInt32 CAAtomicIncrement32Barrier(volatile SInt32* theValue)
-{
-#if TARGET_OS_WIN32
-	return CAAtomicIncrement32(theValue);
-#else
-	return OSAtomicIncrement32Barrier((volatile int32_t *)theValue);
-#endif
-}
-
-inline SInt32 CAAtomicDecrement32Barrier(volatile SInt32* theValue)
-{
-#if TARGET_OS_WIN32
-	return CAAtomicDecrement32(theValue);
-#else
-	return OSAtomicDecrement32Barrier((volatile int32_t *)theValue);
-#endif
-}
-
-inline bool CAAtomicTestAndClearBarrier(int bitToClear, void* theAddress)
-{
-#if TARGET_OS_WIN32
-	BOOL bOldVal = InterlockedBitTestAndReset((long*)theAddress, bitToClear);
-	return (bOldVal ? true : false);
-#else
-	return OSAtomicTestAndClearBarrier(bitToClear, (volatile void *)theAddress);
-#endif
-}
-
-inline bool CAAtomicTestAndClear(int bitToClear, void* theAddress)
-{
-#if TARGET_OS_WIN32
-	BOOL bOldVal = CAAtomicTestAndClearBarrier(bitToClear, (long*)theAddress);
-	return (bOldVal ? true : false);
-#else
-	return OSAtomicTestAndClear(bitToClear, (volatile void *)theAddress);
-#endif
-}
-
-inline bool CAAtomicTestAndSetBarrier(int bitToSet, void* theAddress)
-{
-#if TARGET_OS_WIN32
-	BOOL bOldVal = InterlockedBitTestAndSet((long*)theAddress, bitToSet);
-	return (bOldVal ? true : false);
-#else
-	return OSAtomicTestAndSetBarrier(bitToSet, (volatile void *)theAddress);
-#endif
-}
-
-// int32_t flavors -- for C++ only since we can't overload in C
-// CFBase.h defines SInt32 as signed int which is similar to int32_t. If CFBase.h is included, then
-// this will generate redefinition error. But on Mac, CFBase.h, still includes MacTypes.h where
-// SInt32 is defined as signed long so this would work there.
-// So in order to fix the redefinition errors, we define these functions only if MacTypes.h is included.
-#if defined(__cplusplus) && defined(__MACTYPES__) && !__LP64__
-inline int32_t CAAtomicAdd32Barrier(int32_t theAmt, volatile int32_t* theValue)
-{
-	return CAAtomicAdd32Barrier(theAmt, (volatile SInt32 *)theValue);
-}
-
-inline int32_t CAAtomicOr32Barrier(uint32_t theMask, volatile uint32_t* theValue)
-{
-	return CAAtomicOr32Barrier(theMask, (volatile UInt32 *)theValue);
-}
-
-inline int32_t CAAtomicAnd32Barrier(uint32_t theMask, volatile uint32_t* theValue)
-{
-	return CAAtomicAnd32Barrier(theMask, (volatile UInt32 *)theValue);
-}
-
-inline bool CAAtomicCompareAndSwap32Barrier(int32_t oldValue, int32_t newValue, volatile int32_t *theValue)
-{
-	return CAAtomicCompareAndSwap32Barrier(oldValue, newValue, (volatile SInt32 *)theValue);
-}
-
-inline int32_t CAAtomicIncrement32(volatile int32_t* theValue)
-{
-	return CAAtomicIncrement32((volatile SInt32 *)theValue);
-}
-
-inline int32_t CAAtomicDecrement32(volatile int32_t* theValue)
-{
-	return CAAtomicDecrement32((volatile SInt32 *)theValue);
-}
-
-inline int32_t CAAtomicIncrement32Barrier(volatile int32_t* theValue)
-{
-	return CAAtomicIncrement32Barrier((volatile SInt32 *)theValue);
-}
-
-inline int32_t CAAtomicDecrement32Barrier(volatile int32_t* theValue)
-{
-	return CAAtomicDecrement32Barrier((volatile SInt32 *)theValue);
-}
-#endif // __cplusplus && !__LP64__
-
-#if __LP64__
-inline bool CAAtomicCompareAndSwap64Barrier( int64_t __oldValue, int64_t __newValue, volatile int64_t *__theValue )
-{
-	return OSAtomicCompareAndSwap64Barrier(__oldValue, __newValue, __theValue);
-}
-#endif
-
-inline bool CAAtomicCompareAndSwapPtrBarrier(void *__oldValue, void *__newValue, volatile void ** __theValue)
-{
-#if __LP64__
-	return CAAtomicCompareAndSwap64Barrier((int64_t)__oldValue, (int64_t)__newValue, (int64_t *)__theValue);
-#else
-	return CAAtomicCompareAndSwap32Barrier((int32_t)__oldValue, (int32_t)__newValue, (int32_t *)__theValue);
-#endif
-}
-
-/* Spinlocks.  These use memory barriers as required to synchronize access to shared
- * memory protected by the lock.  The lock operation spins, but employs various strategies
- * to back off if the lock is held, making it immune to most priority-inversion livelocks.
- * The try operation immediately returns false if the lock was held, true if it took the
- * lock.  The convention is that unlocked is zero, locked is nonzero.
- */
-#define	CA_SPINLOCK_INIT    0
-
-typedef int32_t CASpinLock;
-
-bool    CASpinLockTry( volatile CASpinLock *__lock );
-void    CASpinLockLock( volatile CASpinLock *__lock );
-void    CASpinLockUnlock( volatile CASpinLock *__lock );
-
-inline void    CASpinLockLock( volatile CASpinLock *__lock )
-{
-#if TARGET_OS_MAC
-	OSSpinLockLock(__lock);
-#else
-	while (CAAtomicTestAndSetBarrier(0, (void*)__lock))
-		usleep(1000); // ???
-#endif
-}
-
-inline void    CASpinLockUnlock( volatile CASpinLock *__lock )
-{
-#if TARGET_OS_MAC
-	OSSpinLockUnlock(__lock);
-#else
-	CAAtomicTestAndClearBarrier(0, (void*)__lock);
-#endif
-}
-
-inline bool    CASpinLockTry( volatile CASpinLock *__lock )
-{
-#if TARGET_OS_MAC
-	return OSSpinLockTry(__lock);
-#else
-	return (CAAtomicTestAndSetBarrier(0, (void*)__lock) == 0);
-#endif
-}
-
-
-#endif // __CAAtomic_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h
deleted file mode 100644
index 6ee083b..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
-     File: CAAtomicStack.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAAtomicStack_h__
-#define __CAAtomicStack_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <libkern/OSAtomic.h>
-#else
-	#include <CAAtomic.h>
-#endif
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4
-	#include <CoreServices/CoreServices.h>
-#endif
-
-//  linked list LIFO or FIFO (pop_all_reversed) stack, elements are pushed and popped atomically
-//  class T must implement T *& next().
-template <class T>
-class TAtomicStack {
-public:
-	TAtomicStack() : mHead(NULL) { }
-
-	// non-atomic routines, for use when initializing/deinitializing, operate NON-atomically
-	void	push_NA(T *item)
-	{
-		item->next() = mHead;
-		mHead = item;
-	}
-
-	T *		pop_NA()
-	{
-		T *result = mHead;
-		if (result)
-			mHead = result->next();
-		return result;
-	}
-
-	bool	empty() const { return mHead == NULL; }
-
-	T *		head() { return mHead; }
-
-	// atomic routines
-	void	push_atomic(T *item)
-	{
-		T *head_;
-		do {
-			head_ = mHead;
-			item->next() = head_;
-		} while (!compare_and_swap(head_, item, &mHead));
-	}
-
-	void	push_multiple_atomic(T *item)
-		// pushes entire linked list headed by item
-	{
-		T *head_, *p = item, *tail;
-		// find the last one -- when done, it will be linked to head
-		do {
-			tail = p;
-			p = p->next();
-		} while (p);
-		do {
-			head_ = mHead;
-			tail->next() = head_;
-		} while (!compare_and_swap(head_, item, &mHead));
-	}
-
-	T *		pop_atomic_single_reader()
-		// this may only be used when only one thread may potentially pop from the stack.
-		// if multiple threads may pop, this suffers from the ABA problem.
-		// <rdar://problem/4606346> TAtomicStack suffers from the ABA problem
-	{
-		T *result;
-		do {
-			if ((result = mHead) == NULL)
-				break;
-		} while (!compare_and_swap(result, result->next(), &mHead));
-		return result;
-	}
-
-	T *		pop_atomic()
-		// This is inefficient for large linked lists.
-		// prefer pop_all() to a series of calls to pop_atomic.
-		// push_multiple_atomic has to traverse the entire list.
-	{
-		T *result = pop_all();
-		if (result) {
-			T *next = result->next();
-			if (next)
-				// push all the remaining items back onto the stack
-				push_multiple_atomic(next);
-		}
-		return result;
-	}
-
-	T *		pop_all()
-	{
-		T *result;
-		do {
-			if ((result = mHead) == NULL)
-				break;
-		} while (!compare_and_swap(result, NULL, &mHead));
-		return result;
-	}
-
-	T*		pop_all_reversed()
-	{
-		TAtomicStack<T> reversed;
-		T *p = pop_all(), *next;
-		while (p != NULL) {
-			next = p->next();
-			reversed.push_NA(p);
-			p = next;
-		}
-		return reversed.mHead;
-	}
-
-	static bool	compare_and_swap(T *oldvalue, T *newvalue, T **pvalue)
-	{
-#if TARGET_OS_MAC
-	#if __LP64__
-			return ::OSAtomicCompareAndSwap64Barrier(int64_t(oldvalue), int64_t(newvalue), (int64_t *)pvalue);
-	#elif MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-			return ::OSAtomicCompareAndSwap32Barrier(int32_t(oldvalue), int32_t(newvalue), (int32_t *)pvalue);
-	#else
-			return ::CompareAndSwap(UInt32(oldvalue), UInt32(newvalue), (UInt32 *)pvalue);
-	#endif
-#else
-			//return ::CompareAndSwap(UInt32(oldvalue), UInt32(newvalue), (UInt32 *)pvalue);
-			return CAAtomicCompareAndSwap32Barrier(SInt32(oldvalue), SInt32(newvalue), (SInt32*)pvalue);
-#endif
-	}
-
-protected:
-	T *		mHead;
-};
-
-#if ((MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) && !TARGET_OS_WIN32)
-#include <libkern/OSAtomic.h>
-
-class CAAtomicStack {
-public:
-	CAAtomicStack(size_t nextPtrOffset) : mNextPtrOffset(nextPtrOffset) {
-		/*OSQueueHead h = OS_ATOMIC_QUEUE_INIT; mHead = h;*/
-		mHead.opaque1 = 0; mHead.opaque2 = 0;
-	}
-	// a subset of the above
-	void	push_atomic(void *p) { OSAtomicEnqueue(&mHead, p, mNextPtrOffset); }
-	void	push_NA(void *p) { push_atomic(p); }
-
-	void *	pop_atomic() { return OSAtomicDequeue(&mHead, mNextPtrOffset); }
-	void *	pop_atomic_single_reader() { return pop_atomic(); }
-	void *	pop_NA() { return pop_atomic(); }
-
-private:
-	OSQueueHead		mHead;
-	size_t			mNextPtrOffset;
-};
-
-// a more efficient subset of TAtomicStack using OSQueue.
-template <class T>
-class TAtomicStack2 {
-public:
-	TAtomicStack2() {
-		/*OSQueueHead h = OS_ATOMIC_QUEUE_INIT; mHead = h;*/
-		mHead.opaque1 = 0; mHead.opaque2 = 0;
-		mNextPtrOffset = -1;
-	}
-	void	push_atomic(T *item) {
-		if (mNextPtrOffset < 0) {
-			T **pnext = &item->next();	// hack around offsetof not working with C++
-			mNextPtrOffset = (Byte *)pnext - (Byte *)item;
-		}
-		OSAtomicEnqueue(&mHead, item, mNextPtrOffset);
-	}
-	void	push_NA(T *item) { push_atomic(item); }
-
-	T *		pop_atomic() { return (T *)OSAtomicDequeue(&mHead, mNextPtrOffset); }
-	T *		pop_atomic_single_reader() { return pop_atomic(); }
-	T *		pop_NA() { return pop_atomic(); }
-
-	// caution: do not try to implement pop_all_reversed here. the writer could add new elements
-	// while the reader is trying to pop old ones!
-
-private:
-	OSQueueHead		mHead;
-	ssize_t			mNextPtrOffset;
-};
-
-#else
-
-#define TAtomicStack2 TAtomicStack
-
-#endif // MAC_OS_X_VERSION_MAX_ALLOWED && !TARGET_OS_WIN32
-
-#endif // __CAAtomicStack_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp
deleted file mode 100644
index 8171e09..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-     File: CAAudioChannelLayout.cpp
- Abstract: CAAudioChannelLayout.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-//=============================================================================
-//	Includes
-//=============================================================================
-
-//	Self Include
-#include "CAAudioChannelLayout.h"
-#include "CAAutoDisposer.h"
-#include <stdlib.h>
-#include <string.h>
-
-//=============================================================================
-//	CAAudioChannelLayout
-//=============================================================================
-
-AudioChannelLayout*	CAAudioChannelLayout::Create(UInt32 inNumberChannelDescriptions)
-{
-	UInt32 theSize = CalculateByteSize(inNumberChannelDescriptions);
-	AudioChannelLayout* theAnswer = static_cast<AudioChannelLayout*>(CA_calloc(1, theSize));
-	if(theAnswer != NULL)
-	{
-		SetAllToUnknown(*theAnswer, inNumberChannelDescriptions);
-	}
-	return theAnswer;
-}
-
-void	CAAudioChannelLayout::Destroy(AudioChannelLayout* inChannelLayout)
-{
-	free(inChannelLayout);
-}
-
-void	CAAudioChannelLayout::SetAllToUnknown(AudioChannelLayout& outChannelLayout, UInt32 inNumberChannelDescriptions)
-{
-	outChannelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_UseChannelDescriptions;
-	outChannelLayout.mChannelBitmap = 0;
-	outChannelLayout.mNumberChannelDescriptions = inNumberChannelDescriptions;
-	for(UInt32 theChannelIndex = 0; theChannelIndex < inNumberChannelDescriptions; ++theChannelIndex)
-	{
-		outChannelLayout.mChannelDescriptions[theChannelIndex].mChannelLabel = kAudioChannelLabel_Unknown;
-		outChannelLayout.mChannelDescriptions[theChannelIndex].mChannelFlags = 0;
-		outChannelLayout.mChannelDescriptions[theChannelIndex].mCoordinates[0] = 0;
-		outChannelLayout.mChannelDescriptions[theChannelIndex].mCoordinates[1] = 0;
-		outChannelLayout.mChannelDescriptions[theChannelIndex].mCoordinates[2] = 0;
-	}
-}
-
-bool	operator== (const AudioChannelLayout &x, const AudioChannelLayout &y)
-{
-	// compare based on the number of channel descriptions present
-	// (this may be too strict a comparison if all you care about are matching layout tags)
-	UInt32 theSize1 = CAAudioChannelLayout::CalculateByteSize(x.mNumberChannelDescriptions);
-	UInt32 theSize2 = CAAudioChannelLayout::CalculateByteSize(y.mNumberChannelDescriptions);
-
-	if (theSize1 != theSize2)
-		return false;
-
-	return !memcmp (&x, &y, theSize1);
-}
-
-bool	operator!= (const AudioChannelLayout &x, const AudioChannelLayout &y)
-{
-	return !(x == y);
-}
-
-// counting the one bits in a word
-inline UInt32 CountOnes(UInt32 x)
-{
-	// secret magic algorithm for counting bits in a word.
-	UInt32 t;
-	x = x - ((x >> 1) & 0x55555555);
-	t = ((x >> 2) & 0x33333333);
-	x = (x & 0x33333333) + t;
-	x = (x + (x >> 4)) & 0x0F0F0F0F;
-	x = x + (x << 8);
-	x = x + (x << 16);
-	return x >> 24;
-}
-
-UInt32	CAAudioChannelLayout::NumberChannels (const AudioChannelLayout& inLayout)
-{
-	if (inLayout.mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelDescriptions)
-		return inLayout.mNumberChannelDescriptions;
-
-	if (inLayout.mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap)
-		return CountOnes (inLayout.mChannelBitmap);
-
-	return AudioChannelLayoutTag_GetNumberOfChannels(inLayout.mChannelLayoutTag);
-}
-
-void 	CAShowAudioChannelLayout (FILE* file, const AudioChannelLayout *layout)
-{
-	if (layout == NULL)
-	{
-		fprintf (file, "\tNULL layout\n");
-		return;
-	}
-	fprintf (file, "\tTag=0x%X, ", (int)layout->mChannelLayoutTag);
-	if (layout->mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelBitmap)
-		fprintf (file, "Using Bitmap:0x%X\n", (int)layout->mChannelBitmap);
-	else {
-		fprintf (file, "Num Chan Descs=%d\n", (int)layout->mNumberChannelDescriptions);
-		const AudioChannelDescription *desc = layout->mChannelDescriptions;
-		for (unsigned int i = 0; i < layout->mNumberChannelDescriptions; ++i, ++desc) {
-			fprintf (file, "\t\tLabel=%d, Flags=0x%X, ", (int)desc->mChannelLabel, (int)desc->mChannelFlags);
-			fprintf (file, "[az=%f,el=%f,dist=%f]\n", desc->mCoordinates[0], desc->mCoordinates[1], desc->mCoordinates[2]);
-		}
-	}
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.h
deleted file mode 100644
index acc5e2b..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
-     File: CAAudioChannelLayout.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !defined(__CAAudioChannelLayout_h__)
-#define __CAAudioChannelLayout_h__
-
-//=============================================================================
-//	Includes
-//=============================================================================
-
-//	System Includes
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-	#include <CoreFoundation/CoreFoundation.h>
-#else
-	#include <CoreAudioTypes.h>
-	#include <CoreFoundation.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "CADebugMacros.h"
-#include "CAAutoDisposer.h"
-
-#if !HAL_Build
-	#include "CAReferenceCounted.h"
-#endif
-
-//=============================================================================
-//	CAAudioChannelLayout
-//=============================================================================
-
-bool	operator== (const AudioChannelLayout &x, const AudioChannelLayout &y);
-bool	operator!= (const AudioChannelLayout &x, const AudioChannelLayout &y);
-
-extern "C" void 	CAShowAudioChannelLayout (FILE* file, const AudioChannelLayout *layout);
-
-class CAAudioChannelLayout
-{
-//	static Construction/Destruction
-public:
-	static AudioChannelLayout*	Create(UInt32 inNumberChannelDescriptions);
-	static void					Destroy(AudioChannelLayout* inChannelLayout);
-	static UInt32				CalculateByteSize(UInt32 inNumberChannelDescriptions) {
-									return SizeOf32(AudioChannelLayout) - SizeOf32(AudioChannelDescription) + (inNumberChannelDescriptions * SizeOf32(AudioChannelDescription));
-								}
-	static void					SetAllToUnknown(AudioChannelLayout& outChannelLayout, UInt32 inNumberChannelDescriptions);
-	static UInt32				NumberChannels(const AudioChannelLayout& inLayout);
-
-#if !HAL_Build
-// object methods
-public:
-								CAAudioChannelLayout ();
-
-								CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround);
-									// if inChooseSurround is false, then symmetrical speaker arrangements
-									// are chosen in place of surround layouts if there is a choice
-									// This call chooses layouts based on the expected defaults in
-									// AudioUnit usage
-								CAAudioChannelLayout (AudioChannelLayoutTag inTag);
-								CAAudioChannelLayout (const CAAudioChannelLayout &c);
-								CAAudioChannelLayout (const AudioChannelLayout* inChannelLayout);
-								~CAAudioChannelLayout();
-
-	CAAudioChannelLayout&		operator= (const AudioChannelLayout* inChannelLayout);
-	CAAudioChannelLayout&		operator= (const CAAudioChannelLayout& c);
-	bool						operator== (const CAAudioChannelLayout &c) const;
-	bool						operator!= (const CAAudioChannelLayout &c) const;
-
-	void						SetWithTag(AudioChannelLayoutTag inTag);
-
-	bool						IsValid() const { return NumberChannels() > 0; }
-	UInt32						Size() const { return mLayout ? mLayout->Size() : 0; }
-
-	UInt32						NumberChannels() const { return mLayout ? mLayout->NumberChannels() : 0; }
-
-	AudioChannelLayoutTag		Tag() const { return Layout().mChannelLayoutTag; }
-	const AudioChannelLayout&	Layout() const { return mLayout->Layout(); }
-	operator const AudioChannelLayout *() const { return &Layout(); }
-
-	void						Print () const { Print (stdout); }
-	void						Print (FILE* file) const;
-
-	OSStatus					Save (CFPropertyListRef *outData) const;
-	OSStatus					Restore (CFPropertyListRef &inData);
-
-private:
-	class RefCountedLayout : public CAReferenceCounted {
-		void *	operator new(size_t /* size */, size_t aclSize)
-		{
-			return CA_malloc(sizeof(RefCountedLayout) - sizeof(AudioChannelLayout) + aclSize);
-		}
-
-		void	operator delete(void *mem)
-		{
-			free(mem);
-		}
-
-
-		RefCountedLayout(UInt32 inDataSize) :
-			mByteSize(inDataSize)
-		{
-			memset(&mACL, 0, inDataSize);
-		}
-
-	public:
-		static RefCountedLayout *CreateWithNumberChannelDescriptions(unsigned nChannels) {
-								size_t size = CAAudioChannelLayout::CalculateByteSize(nChannels);
-								return new(size) RefCountedLayout((UInt32)size);
-							}
-
-		static RefCountedLayout *CreateWithLayout(const AudioChannelLayout *layout) {
-								size_t size = CAAudioChannelLayout::CalculateByteSize(layout->mNumberChannelDescriptions);
-								RefCountedLayout *acl = new(size) RefCountedLayout((UInt32)size);
-								memcpy(&acl->mACL, layout, size);
-								return acl;
-							}
-		static RefCountedLayout *CreateWithLayoutTag(AudioChannelLayoutTag layoutTag) {
-								RefCountedLayout *acl = CreateWithNumberChannelDescriptions(0);
-								acl->mACL.mChannelLayoutTag = layoutTag;
-								return acl;
-							}
-
-		const AudioChannelLayout & 	Layout() const { return mACL; }
-
-		UInt32						Size () const { return mByteSize; }
-
-		UInt32						NumberChannels() { return CAAudioChannelLayout::NumberChannels(Layout()); }
-
-	private:
-		const UInt32		mByteSize;
-		AudioChannelLayout 	mACL;
-		// * * * mACL is variable length and thus must be last * * *
-
-			// only the constructors can change the actual state of the layout
-		friend CAAudioChannelLayout::CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround);
-		friend OSStatus CAAudioChannelLayout::Restore (CFPropertyListRef &inData);
-		friend CAAudioChannelLayout& CAAudioChannelLayout::operator= (const AudioChannelLayout* inChannelLayout);
-		friend void CAAudioChannelLayout::SetWithTag(AudioChannelLayoutTag inTag);
-
-		AudioChannelLayout * 	GetLayout() { return &mACL; }
-
-	private:
-		// prohibited methods: private and unimplemented.
-		RefCountedLayout();
-		RefCountedLayout(const RefCountedLayout& c);
-		RefCountedLayout& operator=(const RefCountedLayout& c);
-	};
-
-	RefCountedLayout		*mLayout;
-#endif	//	HAL_Build
-
-};
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h
deleted file mode 100644
index bb8faf2..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
-     File: CAAutoDisposer.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !defined(__CAPtr_h__)
-#define __CAPtr_h__
-
-#include <stdlib.h>		// for malloc
-#include <new>			// for bad_alloc
-#include <string.h>		// for memset
-
-inline void* CA_malloc(size_t size)
-{
-	void* p = malloc(size);
-	if (!p && size) throw std::bad_alloc();
-	return p;
-}
-
-inline void* CA_realloc(void* old, size_t size)
-{
-#if TARGET_OS_WIN32
-	void* p = realloc(old, size);
-#else
-	void* p = reallocf(old, size); // reallocf ensures the old pointer is freed if memory is full (p is NULL).
-#endif
-	if (!p && size) throw std::bad_alloc();
-	return p;
-}
-
-#ifndef UINTPTR_MAX
-#if __LP64__
-#define UINTPTR_MAX	  18446744073709551615ULL
-#else
-#define UINTPTR_MAX	  4294967295U
-#endif
-#endif
-
-inline void* CA_calloc(size_t n, size_t size)
-{
-	// ensure that multiplication will not overflow
-	if (n && UINTPTR_MAX / n < size) throw std::bad_alloc();
-
-	size_t nsize = n*size;
-	void* p = malloc(nsize);
-	if (!p && nsize) throw std::bad_alloc();
-
-	memset(p, 0, nsize);
-	return p;
-}
-
-
-// helper class for automatic conversions
-template <typename T>
-struct CAPtrRef
-{
-	T* ptr_;
-
-	explicit CAPtrRef(T* ptr) : ptr_(ptr) {}
-};
-
-template <typename T>
-class CAAutoFree
-{
-private:
-	T* ptr_;
-
-public:
-
-	CAAutoFree() : ptr_(0) {}
-
-	explicit CAAutoFree(T* ptr) : ptr_(ptr) {}
-
-	template<typename U>
-	CAAutoFree(CAAutoFree<U>& that) : ptr_(that.release()) {} // take ownership
-
-	// C++ std says: a template constructor is never a copy constructor
-	CAAutoFree(CAAutoFree<T>& that) : ptr_(that.release()) {} // take ownership
-
-	CAAutoFree(size_t n, bool clear = false)
-		// this becomes an ambiguous call if n == 0
-		: ptr_(0)
-		{
-			size_t maxItems = ~size_t(0) / sizeof(T);
-			if (n > maxItems)
-				throw std::bad_alloc();
-
-			ptr_ = static_cast<T*>(clear ? CA_calloc(n, sizeof(T)) : CA_malloc(n * sizeof(T)));
-		}
-
-	~CAAutoFree() { free(); }
-
-	void alloc(size_t numItems, bool clear = false)
-	{
-		size_t maxItems = ~size_t(0) / sizeof(T);
-		if (numItems > maxItems) throw std::bad_alloc();
-
-		free();
-		ptr_ = static_cast<T*>(clear ? CA_calloc(numItems, sizeof(T)) : CA_malloc(numItems * sizeof(T)));
-	}
-
-	void allocBytes(size_t numBytes, bool clear = false)
-	{
-		free();
-		ptr_ = static_cast<T*>(clear ? CA_calloc(1, numBytes) : CA_malloc(numBytes));
-	}
-
-	void reallocBytes(size_t numBytes)
-	{
-		ptr_ = static_cast<T*>(CA_realloc(ptr_, numBytes));
-	}
-
-	void reallocItems(size_t numItems)
-	{
-		size_t maxItems = ~size_t(0) / sizeof(T);
-		if (numItems > maxItems) throw std::bad_alloc();
-
-		ptr_ = static_cast<T*>(CA_realloc(ptr_, numItems * sizeof(T)));
-	}
-
-	template <typename U>
-	CAAutoFree& operator=(CAAutoFree<U>& that)
-	{
-		set(that.release());	// take ownership
-		return *this;
-	}
-
-	CAAutoFree& operator=(CAAutoFree& that)
-	{
-		set(that.release());	// take ownership
-		return *this;
-	}
-
-	CAAutoFree& operator=(T* ptr)
-	{
-		set(ptr);
-		return *this;
-	}
-
-	template <typename U>
-	CAAutoFree& operator=(U* ptr)
-	{
-		set(ptr);
-		return *this;
-	}
-
-	T& operator*() const { return *ptr_; }
-	T* operator->() const { return ptr_; }
-
-	T* operator()() const { return ptr_; }
-	T* get() const { return ptr_; }
-	operator T*() const { return ptr_; }
-
-	bool operator==(CAAutoFree const& that) const { return ptr_ == that.ptr_; }
-	bool operator!=(CAAutoFree const& that) const { return ptr_ != that.ptr_; }
-	bool operator==(T* ptr) const { return ptr_ == ptr; }
-	bool operator!=(T* ptr) const { return ptr_ != ptr; }
-
-	T* release()
-	{
-		// release ownership
-		T* result = ptr_;
-		ptr_ = 0;
-		return result;
-	}
-
-	void set(T* ptr)
-	{
-		if (ptr != ptr_)
-		{
-			::free(ptr_);
-			ptr_ = ptr;
-		}
-	}
-
-	void free()
-	{
-		set(0);
-	}
-
-
-	// automatic conversions to allow assignment from results of functions.
-	// hard to explain. see auto_ptr implementation and/or Josuttis' STL book.
-	CAAutoFree(CAPtrRef<T> ref) : ptr_(ref.ptr_) { }
-
-	CAAutoFree& operator=(CAPtrRef<T> ref)
-	{
-		set(ref.ptr_);
-		return *this;
-	}
-
-	template<typename U>
-	operator CAPtrRef<U>()
-		{ return CAPtrRef<U>(release()); }
-
-	template<typename U>
-	operator CAAutoFree<U>()
-		{ return CAAutoFree<U>(release()); }
-
-};
-
-
-template <typename T>
-class CAAutoDelete
-{
-private:
-	T* ptr_;
-
-public:
-	CAAutoDelete() : ptr_(0) {}
-
-	explicit CAAutoDelete(T* ptr) : ptr_(ptr) {}
-
-	template<typename U>
-	CAAutoDelete(CAAutoDelete<U>& that) : ptr_(that.release()) {} // take ownership
-
-	// C++ std says: a template constructor is never a copy constructor
-	CAAutoDelete(CAAutoDelete<T>& that) : ptr_(that.release()) {} // take ownership
-
-	~CAAutoDelete() { free(); }
-
-	template <typename U>
-	CAAutoDelete& operator=(CAAutoDelete<U>& that)
-	{
-		set(that.release());	// take ownership
-		return *this;
-	}
-
-	CAAutoDelete& operator=(CAAutoDelete& that)
-	{
-		set(that.release());	// take ownership
-		return *this;
-	}
-
-	CAAutoDelete& operator=(T* ptr)
-	{
-		set(ptr);
-		return *this;
-	}
-
-	template <typename U>
-	CAAutoDelete& operator=(U* ptr)
-	{
-		set(ptr);
-		return *this;
-	}
-
-	T& operator*() const { return *ptr_; }
-	T* operator->() const { return ptr_; }
-
-	T* operator()() const { return ptr_; }
-	T* get() const { return ptr_; }
-	operator T*() const { return ptr_; }
-
-	bool operator==(CAAutoDelete const& that) const { return ptr_ == that.ptr_; }
-	bool operator!=(CAAutoDelete const& that) const { return ptr_ != that.ptr_; }
-	bool operator==(T* ptr) const { return ptr_ == ptr; }
-	bool operator!=(T* ptr) const { return ptr_ != ptr; }
-
-	T* release()
-	{
-		// release ownership
-		T* result = ptr_;
-		ptr_ = 0;
-		return result;
-	}
-
-	void set(T* ptr)
-	{
-		if (ptr != ptr_)
-		{
-			delete ptr_;
-			ptr_ = ptr;
-		}
-	}
-
-	void free()
-	{
-		set(0);
-	}
-
-
-	// automatic conversions to allow assignment from results of functions.
-	// hard to explain. see auto_ptr implementation and/or Josuttis' STL book.
-	CAAutoDelete(CAPtrRef<T> ref) : ptr_(ref.ptr_) { }
-
-	CAAutoDelete& operator=(CAPtrRef<T> ref)
-	{
-		set(ref.ptr_);
-		return *this;
-	}
-
-	template<typename U>
-	operator CAPtrRef<U>()
-		{ return CAPtrRef<U>(release()); }
-
-	template<typename U>
-	operator CAAutoFree<U>()
-		{ return CAAutoFree<U>(release()); }
-
-};
-
-
-template <typename T>
-class CAAutoArrayDelete
-{
-private:
-	T* ptr_;
-
-public:
-	CAAutoArrayDelete() : ptr_(0) {}
-
-	explicit CAAutoArrayDelete(T* ptr) : ptr_(ptr) {}
-
-	template<typename U>
-	CAAutoArrayDelete(CAAutoArrayDelete<U>& that) : ptr_(that.release()) {} // take ownership
-
-	// C++ std says: a template constructor is never a copy constructor
-	CAAutoArrayDelete(CAAutoArrayDelete<T>& that) : ptr_(that.release()) {} // take ownership
-
-	// this becomes an ambiguous call if n == 0
-	CAAutoArrayDelete(size_t n) : ptr_(new T[n]) {}
-
-	~CAAutoArrayDelete() { free(); }
-
-	void alloc(size_t numItems)
-	{
-		free();
-		ptr_ = new T [numItems];
-	}
-
-	template <typename U>
-	CAAutoArrayDelete& operator=(CAAutoArrayDelete<U>& that)
-	{
-		set(that.release());	// take ownership
-		return *this;
-	}
-
-	CAAutoArrayDelete& operator=(CAAutoArrayDelete& that)
-	{
-		set(that.release());	// take ownership
-		return *this;
-	}
-
-	CAAutoArrayDelete& operator=(T* ptr)
-	{
-		set(ptr);
-		return *this;
-	}
-
-	template <typename U>
-	CAAutoArrayDelete& operator=(U* ptr)
-	{
-		set(ptr);
-		return *this;
-	}
-
-	T& operator*() const { return *ptr_; }
-	T* operator->() const { return ptr_; }
-
-	T* operator()() const { return ptr_; }
-	T* get() const { return ptr_; }
-	operator T*() const { return ptr_; }
-
-	bool operator==(CAAutoArrayDelete const& that) const { return ptr_ == that.ptr_; }
-	bool operator!=(CAAutoArrayDelete const& that) const { return ptr_ != that.ptr_; }
-	bool operator==(T* ptr) const { return ptr_ == ptr; }
-	bool operator!=(T* ptr) const { return ptr_ != ptr; }
-
-	T* release()
-	{
-		// release ownership
-		T* result = ptr_;
-		ptr_ = 0;
-		return result;
-	}
-
-	void set(T* ptr)
-	{
-		if (ptr != ptr_)
-		{
-			delete [] ptr_;
-			ptr_ = ptr;
-		}
-	}
-
-	void free()
-	{
-		set(0);
-	}
-
-
-	// automatic conversions to allow assignment from results of functions.
-	// hard to explain. see auto_ptr implementation and/or Josuttis' STL book.
-	CAAutoArrayDelete(CAPtrRef<T> ref) : ptr_(ref.ptr_) { }
-
-	CAAutoArrayDelete& operator=(CAPtrRef<T> ref)
-	{
-		set(ref.ptr_);
-		return *this;
-	}
-
-	template<typename U>
-	operator CAPtrRef<U>()
-		{ return CAPtrRef<U>(release()); }
-
-	template<typename U>
-	operator CAAutoArrayDelete<U>()
-		{ return CAAutoFree<U>(release()); }
-
-};
-
-
-
-
-
-// convenience function
-template <typename T>
-void free(CAAutoFree<T>& p)
-{
-	p.free();
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-#if 0
-// example program showing ownership transfer
-
-CAAutoFree<char> source()
-{
-	// source allocates and returns ownership to the caller.
-	const char* str = "this is a test";
-	size_t size = strlen(str) + 1;
-	CAAutoFree<char> captr(size, false);
-	strlcpy(captr(), str, size);
-	printf("source %08X %08X '%s'\n", &captr, captr(), captr());
-	return captr;
-}
-
-void user(CAAutoFree<char> const& captr)
-{
-	// passed by const reference. user can access the pointer but does not take ownership.
-	printf("user: %08X %08X '%s'\n", &captr, captr(), captr());
-}
-
-void sink(CAAutoFree<char> captr)
-{
-	// passed by value. sink takes ownership and frees the pointer on return.
-	printf("sink: %08X %08X '%s'\n", &captr, captr(), captr());
-}
-
-
-int main (int argc, char * const argv[])
-{
-
-	CAAutoFree<char> captr(source());
-	printf("main captr A %08X %08X\n", &captr, captr());
-	user(captr);
-	sink(captr);
-	printf("main captr B %08X %08X\n", &captr, captr());
-    return 0;
-}
-#endif
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugMacros.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugMacros.h
deleted file mode 100644
index 044026b..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugMacros.h
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
-     File: CADebugMacros.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !defined(__CADebugMacros_h__)
-#define __CADebugMacros_h__
-
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-
-
-//=============================================================================
-//	Includes
-//=============================================================================
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-#else
-	#include "CoreAudioTypes.h"
-#endif
-
-//=============================================================================
-//	CADebugMacros
-//=============================================================================
-
-//#define	CoreAudio_StopOnFailure			1
-//#define	CoreAudio_TimeStampMessages		1
-//#define	CoreAudio_ThreadStampMessages	1
-//#define	CoreAudio_FlushDebugMessages	1
-
-#if TARGET_RT_BIG_ENDIAN
-	#define	CA4CCToCString(the4CC)					{ ((char*)&the4CC)[0], ((char*)&the4CC)[1], ((char*)&the4CC)[2], ((char*)&the4CC)[3], 0 }
-	#define CACopy4CCToCString(theCString, the4CC)	{ theCString[0] = ((char*)&the4CC)[0]; theCString[1] = ((char*)&the4CC)[1]; theCString[2] = ((char*)&the4CC)[2]; theCString[3] = ((char*)&the4CC)[3]; theCString[4] = 0; }
-#else
-	#define	CA4CCToCString(the4CC)					{ ((char*)&the4CC)[3], ((char*)&the4CC)[2], ((char*)&the4CC)[1], ((char*)&the4CC)[0], 0 }
-	#define CACopy4CCToCString(theCString, the4CC)	{ theCString[0] = ((char*)&the4CC)[3]; theCString[1] = ((char*)&the4CC)[2]; theCString[2] = ((char*)&the4CC)[1]; theCString[3] = ((char*)&the4CC)[0]; theCString[4] = 0; }
-#endif
-
-//	This is a macro that does a sizeof and casts the result to a UInt32. This is useful for all the
-//	places where -wshorten64-32 catches assigning a sizeof expression to a UInt32.
-//	For want of a better place to park this, we'll park it here.
-#define	SizeOf32(X)	((UInt32)sizeof(X))
-
-//	This is a macro that does a offsetof and casts the result to a UInt32. This is useful for all the
-//	places where -wshorten64-32 catches assigning an offsetof expression to a UInt32.
-//	For want of a better place to park this, we'll park it here.
-#define	OffsetOf32(X, Y)	((UInt32)offsetof(X, Y))
-
-//	This macro casts the expression to a UInt32. It is called out specially to allow us to track casts
-//	that have been added purely to avert -wshorten64-32 warnings on 64 bit platforms.
-//	For want of a better place to park this, we'll park it here.
-#define	ToUInt32(X)	((UInt32)(X))
-#define	ToSInt32(X)	((SInt32)(X))
-
-#pragma mark	Basic Definitions
-
-#if	DEBUG || CoreAudio_Debug
-	// can be used to break into debugger immediately, also see CADebugger
-	#define BusError()		{ long* p=NULL; *p=0; }
-
-	//	basic debugging print routines
-	#if	TARGET_OS_MAC && !TARGET_API_MAC_CARBON
-		extern void DebugStr(const unsigned char* debuggerMsg);
-		#define	DebugMessage(msg)	DebugStr("\p"msg)
-		#define DebugMessageN1(msg, N1)
-		#define DebugMessageN2(msg, N1, N2)
-		#define DebugMessageN3(msg, N1, N2, N3)
-	#else
-		#include "CADebugPrintf.h"
-
-		#if	(CoreAudio_FlushDebugMessages && !CoreAudio_UseSysLog) || defined(CoreAudio_UseSideFile)
-			#define	FlushRtn	,fflush(DebugPrintfFile)
-		#else
-			#define	FlushRtn
-		#endif
-
-		#if		CoreAudio_ThreadStampMessages
-			#include <pthread.h>
-			#include "CAHostTimeBase.h"
-			#if TARGET_RT_64_BIT
-				#define	DebugPrintfThreadIDFormat	"%16p"
-			#else
-				#define	DebugPrintfThreadIDFormat	"%8p"
-			#endif
-			#define	DebugMsg(inFormat, ...)	DebugPrintf("%17qd: " DebugPrintfThreadIDFormat " " inFormat, CAHostTimeBase::GetCurrentTimeInNanos(), pthread_self(), ## __VA_ARGS__) FlushRtn
-		#elif	CoreAudio_TimeStampMessages
-			#include "CAHostTimeBase.h"
-			#define	DebugMsg(inFormat, ...)	DebugPrintf("%17qd: " inFormat, CAHostTimeBase::GetCurrentTimeInNanos(), ## __VA_ARGS__) FlushRtn
-		#else
-			#define	DebugMsg(inFormat, ...)	DebugPrintf(inFormat, ## __VA_ARGS__) FlushRtn
-		#endif
-	#endif
-	void	DebugPrint(const char *fmt, ...);	// can be used like printf
-	#ifndef DEBUGPRINT
-		#define DEBUGPRINT(msg) DebugPrint msg		// have to double-parenthesize arglist (see Debugging.h)
-	#endif
-	#if VERBOSE
-		#define vprint(msg) DEBUGPRINT(msg)
-	#else
-		#define vprint(msg)
-	#endif
-
-	// Original macro keeps its function of turning on and off use of CADebuggerStop() for both asserts and throws.
-	// For backwards compat, it overrides any setting of the two sub-macros.
-	#if	CoreAudio_StopOnFailure
-		#include "CADebugger.h"
-		#undef CoreAudio_StopOnAssert
-		#define CoreAudio_StopOnAssert 1
-		#undef CoreAudio_StopOnThrow
-		#define CoreAudio_StopOnThrow 1
-		#define STOP	CADebuggerStop()
-	#else
-		#define STOP
-	#endif
-
-	#if CoreAudio_StopOnAssert
-		#if !CoreAudio_StopOnFailure
-			#include "CADebugger.h"
-			#define STOP
-		#endif
-		#define __ASSERT_STOP CADebuggerStop()
-	#else
-		#define __ASSERT_STOP
-	#endif
-
-	#if CoreAudio_StopOnThrow
-		#if !CoreAudio_StopOnFailure
-			#include "CADebugger.h"
-			#define STOP
-		#endif
-		#define __THROW_STOP CADebuggerStop()
-	#else
-		#define __THROW_STOP
-	#endif
-
-#else
-	#define	DebugMsg(inFormat, ...)
-	#ifndef DEBUGPRINT
-		#define DEBUGPRINT(msg)
-	#endif
-	#define vprint(msg)
-	#define	STOP
-	#define __ASSERT_STOP
-	#define __THROW_STOP
-#endif
-
-//	Old-style numbered DebugMessage calls are implemented in terms of DebugMsg() now
-#define	DebugMessage(msg)										DebugMsg(msg)
-#define DebugMessageN1(msg, N1)									DebugMsg(msg, N1)
-#define DebugMessageN2(msg, N1, N2)								DebugMsg(msg, N1, N2)
-#define DebugMessageN3(msg, N1, N2, N3)							DebugMsg(msg, N1, N2, N3)
-#define DebugMessageN4(msg, N1, N2, N3, N4)						DebugMsg(msg, N1, N2, N3, N4)
-#define DebugMessageN5(msg, N1, N2, N3, N4, N5)					DebugMsg(msg, N1, N2, N3, N4, N5)
-#define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6)				DebugMsg(msg, N1, N2, N3, N4, N5, N6)
-#define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7)			DebugMsg(msg, N1, N2, N3, N4, N5, N6, N7)
-#define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8)		DebugMsg(msg, N1, N2, N3, N4, N5, N6, N7, N8)
-#define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9)	DebugMsg(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9)
-
-void	LogError(const char *fmt, ...);			// writes to syslog (and stderr if debugging)
-void	LogWarning(const char *fmt, ...);		// writes to syslog (and stderr if debugging)
-
-#define	NO_ACTION	(void)0
-
-#if	DEBUG || CoreAudio_Debug
-
-#pragma mark	Debug Macros
-
-#define	Assert(inCondition, inMessage)													\
-			if(!(inCondition))															\
-			{																			\
-				DebugMessage(inMessage);												\
-				__ASSERT_STOP;																	\
-			}
-
-#define	AssertFileLine(inCondition, inMessage)											\
-			if(!(inCondition))															\
-			{																			\
-				DebugMessageN3("%s, line %d: %s", __FILE__, __LINE__, inMessage);		\
-				__ASSERT_STOP;															\
-			}
-
-#define	AssertNoError(inError, inMessage)												\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					char __4CC[5] = CA4CCToCString(__Err);								\
-					DebugMessageN2(inMessage ", Error: %d (%s)", (int)__Err, __4CC);		\
-					__ASSERT_STOP;														\
-				}																		\
-			}
-
-#define	AssertNoKernelError(inError, inMessage)											\
-			{																			\
-				unsigned int __Err = (unsigned int)(inError);							\
-				if(__Err != 0)															\
-				{																		\
-					DebugMessageN1(inMessage ", Error: 0x%X", __Err);					\
-					__ASSERT_STOP;														\
-				}																		\
-			}
-
-#define	AssertNotNULL(inPtr, inMessage)													\
-			{																			\
-				if((inPtr) == NULL)														\
-				{																		\
-					DebugMessage(inMessage);											\
-					__ASSERT_STOP;														\
-				}																		\
-			}
-
-#define	FailIf(inCondition, inHandler, inMessage)										\
-			if(inCondition)																\
-			{																			\
-				DebugMessage(inMessage);												\
-				STOP;																	\
-				goto inHandler;															\
-			}
-
-#define	FailWithAction(inCondition, inAction, inHandler, inMessage)						\
-			if(inCondition)																\
-			{																			\
-				DebugMessage(inMessage);												\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfNULL(inPointer, inAction, inHandler, inMessage)							\
-			if((inPointer) == NULL)														\
-			{																			\
-				DebugMessage(inMessage);												\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfKernelError(inKernelError, inAction, inHandler, inMessage)				\
-			{																			\
-				unsigned int __Err = (inKernelError);									\
-				if(__Err != 0)															\
-				{																		\
-					DebugMessageN1(inMessage ", Error: 0x%X", __Err);					\
-					STOP;																\
-					{ inAction; }														\
-					goto inHandler;														\
-				}																		\
-			}
-
-#define	FailIfError(inError, inAction, inHandler, inMessage)							\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					char __4CC[5] = CA4CCToCString(__Err);								\
-					DebugMessageN2(inMessage ", Error: %ld (%s)", (long int)__Err, __4CC);	\
-					STOP;																\
-					{ inAction; }														\
-					goto inHandler;														\
-				}																		\
-			}
-
-#define	FailIfNoMessage(inCondition, inHandler, inMessage)								\
-			if(inCondition)																\
-			{																			\
-				STOP;																	\
-				goto inHandler;															\
-			}
-
-#define	FailWithActionNoMessage(inCondition, inAction, inHandler, inMessage)			\
-			if(inCondition)																\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfNULLNoMessage(inPointer, inAction, inHandler, inMessage)					\
-			if((inPointer) == NULL)														\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfKernelErrorNoMessage(inKernelError, inAction, inHandler, inMessage)		\
-			{																			\
-				unsigned int __Err = (inKernelError);									\
-				if(__Err != 0)															\
-				{																		\
-					STOP;																\
-					{ inAction; }														\
-					goto inHandler;														\
-				}																		\
-			}
-
-#define	FailIfErrorNoMessage(inError, inAction, inHandler, inMessage)					\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					STOP;																\
-					{ inAction; }														\
-					goto inHandler;														\
-				}																		\
-			}
-
-#if defined(__cplusplus)
-
-#define Throw(inException)  __THROW_STOP; throw (inException)
-
-#define	ThrowIf(inCondition, inException, inMessage)									\
-			if(inCondition)																\
-			{																			\
-				DebugMessage(inMessage);												\
-				Throw(inException);														\
-			}
-
-#define	ThrowIfNULL(inPointer, inException, inMessage)									\
-			if((inPointer) == NULL)														\
-			{																			\
-				DebugMessage(inMessage);												\
-				Throw(inException);														\
-			}
-
-#define	ThrowIfKernelError(inKernelError, inException, inMessage)						\
-			{																			\
-				int __Err = (inKernelError);											\
-				if(__Err != 0)															\
-				{																		\
-					DebugMessageN1(inMessage ", Error: 0x%X", __Err);					\
-					Throw(inException);													\
-				}																		\
-			}
-
-#define	ThrowIfError(inError, inException, inMessage)									\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					char __4CC[5] = CA4CCToCString(__Err);								\
-					DebugMessageN2(inMessage ", Error: %d (%s)", (int)__Err, __4CC);	\
-					Throw(inException);													\
-				}																		\
-			}
-
-#if TARGET_OS_WIN32
-#define	ThrowIfWinError(inError, inException, inMessage)								\
-			{																			\
-				HRESULT __Err = (inError);												\
-				if(FAILED(__Err))														\
-				{																		\
-					DebugMessageN2(inMessage ", Code: %d, Facility: 0x%X", HRESULT_CODE(__Err), HRESULT_FACILITY(__Err));			\
-					Throw(inException);													\
-				}																		\
-			}
-#endif
-
-#define	SubclassResponsibility(inMethodName, inException)								\
-			{																			\
-				DebugMessage(inMethodName": Subclasses must implement this method");	\
-				Throw(inException);														\
-			}
-
-#endif	//	defined(__cplusplus)
-
-#else
-
-#pragma mark	Release Macros
-
-#define	Assert(inCondition, inMessage)													\
-			if(!(inCondition))															\
-			{																			\
-				__ASSERT_STOP;															\
-			}
-
-#define AssertFileLine(inCondition, inMessage) Assert(inCondition, inMessage)
-
-#define	AssertNoError(inError, inMessage)												\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					__ASSERT_STOP;														\
-				}																		\
-			}
-
-#define	AssertNoKernelError(inError, inMessage)											\
-			{																			\
-				unsigned int __Err = (unsigned int)(inError);							\
-				if(__Err != 0)															\
-				{																		\
-					__ASSERT_STOP;														\
-				}																		\
-			}
-
-#define	AssertNotNULL(inPtr, inMessage)													\
-			{																			\
-				if((inPtr) == NULL)														\
-				{																		\
-					__ASSERT_STOP;														\
-				}																		\
-			}
-
-#define	FailIf(inCondition, inHandler, inMessage)										\
-			if(inCondition)																\
-			{																			\
-				STOP;																	\
-				goto inHandler;															\
-			}
-
-#define	FailWithAction(inCondition, inAction, inHandler, inMessage)						\
-			if(inCondition)																\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfNULL(inPointer, inAction, inHandler, inMessage)							\
-			if((inPointer) == NULL)														\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfKernelError(inKernelError, inAction, inHandler, inMessage)				\
-			if((inKernelError) != 0)													\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfError(inError, inAction, inHandler, inMessage)							\
-			if((inError) != 0)															\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfNoMessage(inCondition, inHandler, inMessage)								\
-			if(inCondition)																\
-			{																			\
-				STOP;																	\
-				goto inHandler;															\
-			}
-
-#define	FailWithActionNoMessage(inCondition, inAction, inHandler, inMessage)			\
-			if(inCondition)																\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfNULLNoMessage(inPointer, inAction, inHandler, inMessage)					\
-			if((inPointer) == NULL)														\
-			{																			\
-				STOP;																	\
-				{ inAction; }															\
-				goto inHandler;															\
-			}
-
-#define	FailIfKernelErrorNoMessage(inKernelError, inAction, inHandler, inMessage)		\
-			{																			\
-				unsigned int __Err = (inKernelError);									\
-				if(__Err != 0)															\
-				{																		\
-					STOP;																\
-					{ inAction; }														\
-					goto inHandler;														\
-				}																		\
-			}
-
-#define	FailIfErrorNoMessage(inError, inAction, inHandler, inMessage)					\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					STOP;																\
-					{ inAction; }														\
-					goto inHandler;														\
-				}																		\
-			}
-
-#if defined(__cplusplus)
-
-#define Throw(inException)  __THROW_STOP; throw (inException)
-
-#define	ThrowIf(inCondition, inException, inMessage)									\
-			if(inCondition)																\
-			{																			\
-				Throw(inException);														\
-			}
-
-#define	ThrowIfNULL(inPointer, inException, inMessage)									\
-			if((inPointer) == NULL)														\
-			{																			\
-				Throw(inException);														\
-			}
-
-#define	ThrowIfKernelError(inKernelError, inException, inMessage)						\
-			{																			\
-				int __Err = (inKernelError);											\
-				if(__Err != 0)															\
-				{																		\
-					Throw(inException);													\
-				}																		\
-			}
-
-#define	ThrowIfError(inError, inException, inMessage)									\
-			{																			\
-				SInt32 __Err = (inError);												\
-				if(__Err != 0)															\
-				{																		\
-					Throw(inException);													\
-				}																		\
-			}
-
-#if TARGET_OS_WIN32
-#define	ThrowIfWinError(inError, inException, inMessage)								\
-			{																			\
-				HRESULT __Err = (inError);												\
-				if(FAILED(__Err))														\
-				{																		\
-					Throw(inException);													\
-				}																		\
-			}
-#endif
-
-#define	SubclassResponsibility(inMethodName, inException)								\
-			{																			\
-				Throw(inException);														\
-			}
-
-#endif	//	defined(__cplusplus)
-
-#endif  //  DEBUG || CoreAudio_Debug
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugPrintf.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugPrintf.h
deleted file mode 100644
index 37bad12..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CADebugPrintf.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-     File: CADebugPrintf.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !defined(__CADebugPrintf_h__)
-#define __CADebugPrintf_h__
-
-//=============================================================================
-//	Includes
-//=============================================================================
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-#else
-	#include "CoreAudioTypes.h"
-#endif
-
-//=============================================================================
-//	Macros to redirect debugging output to various logging services
-//=============================================================================
-
-//#define	CoreAudio_UseSysLog		1
-//#define	CoreAudio_UseSideFile	"/CoreAudio-%d.txt"
-
-#if	DEBUG || CoreAudio_Debug
-
-	#if	TARGET_OS_WIN32
-		#if defined(__cplusplus)
-		extern "C"
-		#endif
-		extern int CAWin32DebugPrintf(char* inFormat, ...);
-		#define	DebugPrintfRtn			CAWin32DebugPrintf
-		#define	DebugPrintfFile
-		#define	DebugPrintfLineEnding	"\n"
-		#define	DebugPrintfFileComma
-	#else
-		#if	CoreAudio_UseSysLog
-			#include <sys/syslog.h>
-			#define	DebugPrintfRtn	syslog
-			#define	DebugPrintfFile	LOG_NOTICE
-			#define	DebugPrintfLineEnding	""
-			#define	DebugPrintfFileComma	DebugPrintfFile,
-		#elif defined(CoreAudio_UseSideFile)
-			#include <stdio.h>
-			#if defined(__cplusplus)
-			extern "C"
-			#endif
-			void OpenDebugPrintfSideFile();
-			extern FILE* sDebugPrintfSideFile;
-			#define	DebugPrintfRtn	fprintf
-			#define	DebugPrintfFile	((sDebugPrintfSideFile != NULL) ? sDebugPrintfSideFile : stderr)
-			#define	DebugPrintfLineEnding	"\n"
-			#define	DebugPrintfFileComma	DebugPrintfFile,
-		#else
-			#include <stdio.h>
-			#define	DebugPrintfRtn	fprintf
-			#define	DebugPrintfFile	stderr
-			#define	DebugPrintfLineEnding	"\n"
-			#define	DebugPrintfFileComma	DebugPrintfFile,
-		#endif
-	#endif
-
-	#define	DebugPrintf(inFormat, ...)	DebugPrintfRtn(DebugPrintfFileComma inFormat DebugPrintfLineEnding, ## __VA_ARGS__)
-#else
-	#define	DebugPrintfRtn
-	#define	DebugPrintfFile
-	#define	DebugPrintfLineEnding
-	#define	DebugPrintfFileComma
-	#define	DebugPrintf(inFormat, ...)
-#endif
-
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h
deleted file mode 100644
index 1c207f1..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-     File: CAException.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !defined(__CAException_h__)
-#define __CAException_h__
-
-//=============================================================================
-//	Includes
-//=============================================================================
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-#else
-	#include "CoreAudioTypes.h"
-#endif
-
-//=============================================================================
-//	CAException
-//=============================================================================
-
-class CAException
-{
-
-public:
-					CAException(OSStatus inError) : mError(inError) {}
-					CAException(const CAException& inException) : mError(inException.mError) {}
-	CAException&	operator=(const CAException& inException) { mError = inException.mError; return *this; }
-					~CAException() {}
-
-	OSStatus		GetError() const { return mError; }
-
-protected:
-	OSStatus		mError;
-};
-
-#define	CATry								try{
-#define CACatch								} catch(...) {}
-#define	CASwallowException(inExpression)	try { inExpression; } catch(...) {}
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h
deleted file mode 100644
index 5098308..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-     File: CAHostTimeBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#if !defined(__CAHostTimeBase_h__)
-#define __CAHostTimeBase_h__
-
-//=============================================================================
-//	Includes
-//=============================================================================
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-#else
-	#include <CoreAudioTypes.h>
-#endif
-
-#if TARGET_OS_MAC
-	#include <mach/mach_time.h>
-	#include <pthread.h>
-#elif TARGET_OS_WIN32
-	#include <windows.h>
-	#include "WinPThreadDefs.h"
-#else
-	#error	Unsupported operating system
-#endif
-
-#include "CADebugPrintf.h"
-
-//=============================================================================
-//	CAHostTimeBase
-//
-//	This class provides platform independent access to the host's time base.
-//=============================================================================
-
-#if CoreAudio_Debug
-//	#define Log_Host_Time_Base_Parameters	1
-//	#define Track_Host_TimeBase				1
-#endif
-
-class	CAHostTimeBase
-{
-
-public:
-	static UInt64			ConvertToNanos(UInt64 inHostTime);
-	static UInt64			ConvertFromNanos(UInt64 inNanos);
-
-	static UInt64			GetTheCurrentTime();
-#if TARGET_OS_MAC
-	static UInt64			GetCurrentTime() { return GetTheCurrentTime(); }
-#endif
-	static UInt64			GetCurrentTimeInNanos();
-
-	static Float64			GetFrequency() { pthread_once(&sIsInited, Initialize); return sFrequency; }
-	static Float64			GetInverseFrequency() { pthread_once(&sIsInited, Initialize); return sInverseFrequency; }
-	static UInt32			GetMinimumDelta() { pthread_once(&sIsInited, Initialize); return sMinDelta; }
-
-	static UInt64			AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime);
-	static SInt64			HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime);
-
-	static UInt64			MultiplyByRatio(UInt64 inMuliplicand, UInt32 inNumerator, UInt32 inDenominator);
-
-private:
-	static void				Initialize();
-
-	static pthread_once_t	sIsInited;
-
-	static Float64			sFrequency;
-	static Float64			sInverseFrequency;
-	static UInt32			sMinDelta;
-	static UInt32			sToNanosNumerator;
-	static UInt32			sToNanosDenominator;
-#if Track_Host_TimeBase
-	static UInt64			sLastTime;
-#endif
-};
-
-inline UInt64	CAHostTimeBase::GetTheCurrentTime()
-{
-	UInt64 theTime = 0;
-
-	#if TARGET_OS_MAC
-		theTime = mach_absolute_time();
-	#elif TARGET_OS_WIN32
-		LARGE_INTEGER theValue;
-		QueryPerformanceCounter(&theValue);
-		theTime = *((UInt64*)&theValue);
-	#endif
-
-	#if	Track_Host_TimeBase
-		if(sLastTime != 0)
-		{
-			if(theTime <= sLastTime)
-			{
-				DebugPrintf("CAHostTimeBase::GetTheCurrentTime: the current time is earlier than the last time, now: %qd, then: %qd", theTime, sLastTime);
-			}
-			sLastTime = theTime;
-		}
-		else
-		{
-			sLastTime = theTime;
-		}
-	#endif
-
-	return theTime;
-}
-
-inline UInt64	CAHostTimeBase::ConvertToNanos(UInt64 inHostTime)
-{
-	pthread_once(&sIsInited, Initialize);
-
-	UInt64 theAnswer = MultiplyByRatio(inHostTime, sToNanosNumerator, sToNanosDenominator);
-	#if CoreAudio_Debug
-		if(((sToNanosNumerator > sToNanosDenominator) && (theAnswer < inHostTime)) || ((sToNanosDenominator > sToNanosNumerator) && (theAnswer > inHostTime)))
-		{
-			DebugPrintf("CAHostTimeBase::ConvertToNanos: The conversion wrapped");
-		}
-	#endif
-
-	return theAnswer;
-}
-
-inline UInt64	CAHostTimeBase::ConvertFromNanos(UInt64 inNanos)
-{
-	pthread_once(&sIsInited, Initialize);
-
-	UInt64 theAnswer = MultiplyByRatio(inNanos, sToNanosDenominator, sToNanosNumerator);
-	#if CoreAudio_Debug
-		if(((sToNanosDenominator > sToNanosNumerator) && (theAnswer < inNanos)) || ((sToNanosNumerator > sToNanosDenominator) && (theAnswer > inNanos)))
-		{
-			DebugPrintf("CAHostTimeBase::ConvertFromNanos: The conversion wrapped");
-		}
-	#endif
-
-	return theAnswer;
-}
-
-inline UInt64	CAHostTimeBase::GetCurrentTimeInNanos()
-{
-	return ConvertToNanos(GetTheCurrentTime());
-}
-
-inline UInt64	CAHostTimeBase::AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime)
-{
-	UInt64 theAnswer;
-
-	if(inStartTime <= inEndTime)
-	{
-		theAnswer = inEndTime - inStartTime;
-	}
-	else
-	{
-		theAnswer = inStartTime - inEndTime;
-	}
-
-	return ConvertToNanos(theAnswer);
-}
-
-inline SInt64	CAHostTimeBase::HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime)
-{
-	SInt64 theAnswer;
-	SInt64 theSign = 1;
-
-	if(inStartTime <= inEndTime)
-	{
-		theAnswer = static_cast<SInt64>(inEndTime - inStartTime);
-	}
-	else
-	{
-		theAnswer = static_cast<SInt64>(inStartTime - inEndTime);
-		theSign = -1;
-	}
-
-	return theSign * static_cast<SInt64>(ConvertToNanos(static_cast<UInt64>(theAnswer)));
-}
-
-inline UInt64	CAHostTimeBase::MultiplyByRatio(UInt64 inMuliplicand, UInt32 inNumerator, UInt32 inDenominator)
-{
-#if TARGET_OS_MAC && TARGET_RT_64_BIT
-	__uint128_t theAnswer = inMuliplicand;
-#else
-	long double theAnswer = inMuliplicand;
-#endif
-	if(inNumerator != inDenominator)
-	{
-		theAnswer *= inNumerator;
-		theAnswer /= inDenominator;
-	}
-	return static_cast<UInt64>(theAnswer);
-}
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMath.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMath.h
deleted file mode 100644
index d291d1f..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMath.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-     File: CAMath.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAMath_h__
-#define __CAMath_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-#else
-	#include <CoreAudioTypes.h>
-#endif
-
-inline bool fiszero(Float64 f) { return (f == 0.); }
-inline bool fiszero(Float32 f) { return (f == 0.f); }
-
-inline bool fnonzero(Float64 f) { return !fiszero(f); }
-inline bool fnonzero(Float32 f) { return !fiszero(f); }
-
-inline bool fequal(const Float64 &a, const Float64 &b) { return a == b; }
-inline bool fequal(const Float32 &a, const Float32 &b) { return a == b; }
-
-inline bool fnotequal(const Float64 &a, const Float64 &b) { return !fequal(a, b); }
-inline bool fnotequal(const Float32 &a, const Float32 &b) { return !fequal(a, b); }
-
-#endif // __CAMath_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.cpp
deleted file mode 100644
index e3d3b83..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
-     File: CAMutex.cpp
- Abstract: CAMutex.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-//==================================================================================================
-//	Includes
-//==================================================================================================
-
-//	Self Include
-#include "CAMutex.h"
-
-#if TARGET_OS_MAC
-	#include <errno.h>
-#endif
-
-//	PublicUtility Includes
-#include "CADebugMacros.h"
-#include "CAException.h"
-#include "CAHostTimeBase.h"
-
-//==================================================================================================
-//	Logging
-//==================================================================================================
-
-#if CoreAudio_Debug
-//	#define	Log_Ownership		1
-//	#define	Log_Errors			1
-//	#define Log_LongLatencies	1
-//	#define LongLatencyThreshholdNS	1000000ULL	// nanoseconds
-#endif
-
-//==================================================================================================
-//	CAMutex
-//==================================================================================================
-
-CAMutex::CAMutex(const char* inName)
-:
-	mName(inName),
-	mOwner(0)
-{
-#if TARGET_OS_MAC
-	OSStatus theError = pthread_mutex_init(&mMutex, NULL);
-	ThrowIf(theError != 0, CAException(theError), "CAMutex::CAMutex: Could not init the mutex");
-
-	#if	Log_Ownership
-		DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::CAMutex: creating %s, owner: %p\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), mName, mOwner);
-	#endif
-#elif TARGET_OS_WIN32
-	mMutex = CreateMutex(NULL, false, NULL);
-	ThrowIfNULL(mMutex, CAException(GetLastError()), "CAMutex::CAMutex: could not create the mutex.");
-
-	#if	Log_Ownership
-		DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::CAMutex: creating %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), mName, mOwner);
-	#endif
-#endif
-}
-
-CAMutex::~CAMutex()
-{
-#if TARGET_OS_MAC
-	#if	Log_Ownership
-		DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::~CAMutex: destroying %s, owner: %p\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), mName, mOwner);
-	#endif
-	pthread_mutex_destroy(&mMutex);
-#elif TARGET_OS_WIN32
-	#if	Log_Ownership
-		DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::~CAMutex: destroying %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), mName, mOwner);
-	#endif
-	if(mMutex != NULL)
-	{
-		CloseHandle(mMutex);
-	}
-#endif
-}
-
-bool	CAMutex::Lock()
-{
-	bool theAnswer = false;
-
-#if TARGET_OS_MAC
-	pthread_t theCurrentThread = pthread_self();
-	if(!pthread_equal(theCurrentThread, mOwner))
-	{
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Lock: thread %p is locking %s, owner: %p\n", theCurrentThread, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), theCurrentThread, mName, mOwner);
-		#endif
-
-		#if Log_LongLatencies
-			UInt64 lockTryTime = CAHostTimeBase::GetCurrentTimeInNanos();
-		#endif
-
-		OSStatus theError = pthread_mutex_lock(&mMutex);
-		ThrowIf(theError != 0, CAException(theError), "CAMutex::Lock: Could not lock the mutex");
-		mOwner = theCurrentThread;
-		theAnswer = true;
-
-		#if Log_LongLatencies
-			UInt64 lockAcquireTime = CAHostTimeBase::GetCurrentTimeInNanos();
-			if (lockAcquireTime - lockTryTime >= LongLatencyThresholdNS)
-				DebugPrintfRtn(DebugPrintfFileComma "Thread %p took %.6fs to acquire the lock %s\n", theCurrentThread, (lockAcquireTime - lockTryTime) * 1.0e-9 /* nanos to seconds */, mName);
-		#endif
-
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Lock: thread %p has locked %s, owner: %p\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), pthread_self(), mName, mOwner);
-		#endif
-	}
-#elif TARGET_OS_WIN32
-	if(mOwner != GetCurrentThreadId())
-	{
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Lock: thread %lu is locking %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-		#endif
-
-		OSStatus theError = WaitForSingleObject(mMutex, INFINITE);
-		ThrowIfError(theError, CAException(theError), "CAMutex::Lock: could not lock the mutex");
-		mOwner = GetCurrentThreadId();
-		theAnswer = true;
-
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Lock: thread %lu has locked %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-		#endif
-	}
-#endif
-
-	return theAnswer;
-}
-
-void	CAMutex::Unlock()
-{
-#if TARGET_OS_MAC
-	if(pthread_equal(pthread_self(), mOwner))
-	{
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Unlock: thread %p is unlocking %s, owner: %p\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), pthread_self(), mName, mOwner);
-		#endif
-
-		mOwner = 0;
-		OSStatus theError = pthread_mutex_unlock(&mMutex);
-		ThrowIf(theError != 0, CAException(theError), "CAMutex::Unlock: Could not unlock the mutex");
-
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Unlock: thread %p has unlocked %s, owner: %p\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), pthread_self(), mName, mOwner);
-		#endif
-	}
-	else
-	{
-		DebugMessage("CAMutex::Unlock: A thread is attempting to unlock a Mutex it doesn't own");
-	}
-#elif TARGET_OS_WIN32
-	if(mOwner == GetCurrentThreadId())
-	{
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Unlock: thread %lu is unlocking %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-		#endif
-
-		mOwner = 0;
-		bool wasReleased = ReleaseMutex(mMutex);
-		ThrowIf(!wasReleased, CAException(GetLastError()), "CAMutex::Unlock: Could not unlock the mutex");
-
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Unlock: thread %lu has unlocked %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-		#endif
-	}
-	else
-	{
-		DebugMessage("CAMutex::Unlock: A thread is attempting to unlock a Mutex it doesn't own");
-	}
-#endif
-}
-
-bool	CAMutex::Try(bool& outWasLocked)
-{
-	bool theAnswer = false;
-	outWasLocked = false;
-
-#if TARGET_OS_MAC
-	pthread_t theCurrentThread = pthread_self();
-	if(!pthread_equal(theCurrentThread, mOwner))
-	{
-		//	this means the current thread doesn't already own the lock
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Try: thread %p is try-locking %s, owner: %p\n", theCurrentThread, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), theCurrentThread, mName, mOwner);
-		#endif
-
-		//	go ahead and call trylock to see if we can lock it.
-		int theError = pthread_mutex_trylock(&mMutex);
-		if(theError == 0)
-		{
-			//	return value of 0 means we successfully locked the lock
-			mOwner = theCurrentThread;
-			theAnswer = true;
-			outWasLocked = true;
-
-			#if	Log_Ownership
-				DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Try: thread %p has locked %s, owner: %p\n", theCurrentThread, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), theCurrentThread, mName, mOwner);
-			#endif
-		}
-		else if(theError == EBUSY)
-		{
-			//	return value of EBUSY means that the lock was already locked by another thread
-			theAnswer = false;
-			outWasLocked = false;
-
-			#if	Log_Ownership
-				DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: CAMutex::Try: thread %p failed to lock %s, owner: %p\n", theCurrentThread, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), theCurrentThread, mName, mOwner);
-			#endif
-		}
-		else
-		{
-			//	any other return value means something really bad happenned
-			ThrowIfError(theError, CAException(theError), "CAMutex::Try: call to pthread_mutex_trylock failed");
-		}
-	}
-	else
-	{
-		//	this means the current thread already owns the lock
-		theAnswer = true;
-		outWasLocked = false;
-	}
-#elif TARGET_OS_WIN32
-	if(mOwner != GetCurrentThreadId())
-	{
-		//	this means the current thread doesn't own the lock
-		#if	Log_Ownership
-			DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Try: thread %lu is try-locking %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-		#endif
-
-		//	try to acquire the mutex
-		OSStatus theError = WaitForSingleObject(mMutex, 0);
-		if(theError == WAIT_OBJECT_0)
-		{
-			//	this means we successfully locked the lock
-			mOwner = GetCurrentThreadId();
-			theAnswer = true;
-			outWasLocked = true;
-
-			#if	Log_Ownership
-				DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Try: thread %lu has locked %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-			#endif
-		}
-		else if(theError == WAIT_TIMEOUT)
-		{
-			//	this means that the lock was already locked by another thread
-			theAnswer = false;
-			outWasLocked = false;
-
-			#if	Log_Ownership
-				DebugPrintfRtn(DebugPrintfFileComma "%lu %.4f: CAMutex::Try: thread %lu failed to lock %s, owner: %lu\n", GetCurrentThreadId(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), GetCurrentThreadId(), mName, mOwner);
-			#endif
-		}
-		else
-		{
-			//	any other return value means something really bad happenned
-			ThrowIfError(theError, CAException(GetLastError()), "CAMutex::Try: call to lock the mutex failed");
-		}
-	}
-	else
-	{
-		//	this means the current thread already owns the lock
-		theAnswer = true;
-		outWasLocked = false;
-	}
-#endif
-
-	return theAnswer;
-}
-
-bool	CAMutex::IsFree() const
-{
-	return mOwner == 0;
-}
-
-bool	CAMutex::IsOwnedByCurrentThread() const
-{
-	bool theAnswer = true;
-
-#if TARGET_OS_MAC
-	theAnswer = pthread_equal(pthread_self(), mOwner);
-#elif TARGET_OS_WIN32
-	theAnswer = (mOwner == GetCurrentThreadId());
-#endif
-
-	return theAnswer;
-}
-
-
-CAMutex::Unlocker::Unlocker(CAMutex& inMutex)
-:	mMutex(inMutex),
-	mNeedsLock(false)
-{
-	Assert(mMutex.IsOwnedByCurrentThread(), "Major problem: Unlocker attempted to unlock a mutex not owned by the current thread!");
-
-	mMutex.Unlock();
-	mNeedsLock = true;
-}
-
-CAMutex::Unlocker::~Unlocker()
-{
-	if(mNeedsLock)
-	{
-		mMutex.Lock();
-	}
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.h
deleted file mode 100644
index ea36813..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMutex.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-     File: CAMutex.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAMutex_h__
-#define __CAMutex_h__
-
-//==================================================================================================
-//	Includes
-//==================================================================================================
-
-//	System Includes
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-#else
-	#include <CoreAudioTypes.h>
-#endif
-
-#if TARGET_OS_MAC
-	#include <pthread.h>
-#elif TARGET_OS_WIN32
-	#include <windows.h>
-#else
-	#error	Unsupported operating system
-#endif
-
-//==================================================================================================
-//	A recursive mutex.
-//==================================================================================================
-
-class	CAMutex
-{
-//	Construction/Destruction
-public:
-					CAMutex(const char* inName);
-	virtual			~CAMutex();
-
-//	Actions
-public:
-	virtual bool	Lock();
-	virtual void	Unlock();
-	virtual bool	Try(bool& outWasLocked);	// returns true if lock is free, false if not
-
-	virtual bool	IsFree() const;
-	virtual bool	IsOwnedByCurrentThread() const;
-
-//	Implementation
-protected:
-	const char*		mName;
-#if TARGET_OS_MAC
-	pthread_t		mOwner;
-	pthread_mutex_t	mMutex;
-#elif TARGET_OS_WIN32
-	UInt32			mOwner;
-	HANDLE			mMutex;
-#endif
-
-//	Helper class to manage taking and releasing recursively
-public:
-	class			Locker
-	{
-
-	//	Construction/Destruction
-	public:
-					Locker(CAMutex& inMutex) : mMutex(&inMutex), mNeedsRelease(false) { mNeedsRelease = mMutex->Lock(); }
-					Locker(CAMutex* inMutex) : mMutex(inMutex), mNeedsRelease(false) { mNeedsRelease = (mMutex != NULL && mMutex->Lock()); }
-						// in this case the mutex can be null
-					~Locker() { if(mNeedsRelease) { mMutex->Unlock(); } }
-
-
-	private:
-					Locker(const Locker&);
-		Locker&		operator=(const Locker&);
-
-	//	Implementation
-	private:
-		CAMutex*	mMutex;
-		bool		mNeedsRelease;
-
-	};
-
-// Unlocker
-	class Unlocker
-	{
-	public:
-						Unlocker(CAMutex& inMutex);
-						~Unlocker();
-
-	private:
-		CAMutex&	mMutex;
-		bool		mNeedsLock;
-
-		// Hidden definitions of copy ctor, assignment operator
-		Unlocker(const Unlocker& copy);				// Not implemented
-		Unlocker& operator=(const Unlocker& copy);	// Not implemented
-	};
-
-// you can use this with Try - if you take the lock in try, pass in the outWasLocked var
-	class Tryer {
-
-	//	Construction/Destruction
-	public:
-		Tryer (CAMutex &mutex) : mMutex(mutex), mNeedsRelease(false), mHasLock(false) { mHasLock = mMutex.Try (mNeedsRelease); }
-		~Tryer () { if (mNeedsRelease) mMutex.Unlock(); }
-
-		bool HasLock () const { return mHasLock; }
-
-	private:
-					Tryer(const Tryer&);
-		Tryer&		operator=(const Tryer&);
-
-	//	Implementation
-	private:
-		CAMutex &		mMutex;
-		bool			mNeedsRelease;
-		bool			mHasLock;
-	};
-};
-
-
-#endif // __CAMutex_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAReferenceCounted.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAReferenceCounted.h
deleted file mode 100644
index e16c3b4..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAReferenceCounted.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-     File: CAReferenceCounted.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAReferenceCounted_h__
-#define __CAReferenceCounted_h__
-
-#include "CAAtomic.h"
-
-// base class for reference-counted objects
-class CAReferenceCounted {
-public:
-	CAReferenceCounted() : mRefCount(1) {}
-
-	void	retain() { CAAtomicIncrement32(&mRefCount); }
-
-	void	release()
-			{
-				SInt32 rc = CAAtomicDecrement32(&mRefCount);
-				if (rc == 0) {
-					releaseObject();
-				}
-			}
-
-
-	class Retainer {
-	public:
-		Retainer(CAReferenceCounted *obj) : mObject(obj) { mObject->retain(); }
-		~Retainer() { mObject->release(); }
-
-	private:
-		CAReferenceCounted *	mObject;
-	};
-
-protected:
-    virtual	~CAReferenceCounted() { }
-
-	virtual void releaseObject ()
-			{
-				delete this;
-			}
-
-#if DEBUG
-public:
-#endif
-	SInt32	GetReferenceCount() const { return mRefCount; }
-private:
-	SInt32		mRefCount;
-
-	CAReferenceCounted(const CAReferenceCounted &a);
-	CAReferenceCounted &operator=(const CAReferenceCounted &a);
-};
-
-
-#endif // __CAReferenceCounted_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp
deleted file mode 100644
index dc1a579..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp
+++ /dev/null
@@ -1,879 +0,0 @@
-/*
-     File: CAStreamBasicDescription.cpp
- Abstract: CAStreamBasicDescription.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "CAStreamBasicDescription.h"
-#include "CAMath.h"
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreFoundation/CFByteOrder.h>
-#else
-	#include <CFByteOrder.h>
-#endif
-
-#pragma mark	This file needs to compile on earlier versions of the OS, so please keep that in mind when editing it
-
-char *CAStringForOSType (OSType t, char *writeLocation, size_t bufsize)
-{
-	if (bufsize > 0) {
-		char *p = writeLocation, *pend = writeLocation + bufsize;
-		union { UInt32 i; unsigned char str[4]; } u;
-		unsigned char *q = u.str;
-		u.i = CFSwapInt32HostToBig(t);
-
-		bool hasNonPrint = false;
-		for (int i = 0; i < 4; ++i) {
-			if (!(isprint(*q) && *q != '\\')) {
-				hasNonPrint = true;
-				break;
-			}
-            q++;
-		}
-        q = u.str;
-
-		if (hasNonPrint)
-			p += snprintf (p, pend - p, "0x");
-		else if (p < pend)
-			*p++ = '\'';
-
-		for (int i = 0; i < 4 && p < pend; ++i) {
-			if (hasNonPrint) {
-				p += snprintf(p, pend - p, "%02X", *q++);
-			} else {
-				*p++ = *q++;
-			}
-		}
-		if (!hasNonPrint && p < pend)
-			*p++ = '\'';
-		if (p >= pend) p -= 1;
-		*p = '\0';
-	}
-	return writeLocation;
-}
-
-
-const AudioStreamBasicDescription	CAStreamBasicDescription::sEmpty = { 0.0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-CAStreamBasicDescription::CAStreamBasicDescription()
-{
-	memset (this, 0, sizeof(AudioStreamBasicDescription));
-}
-
-CAStreamBasicDescription::CAStreamBasicDescription(const AudioStreamBasicDescription &desc)
-{
-	SetFrom(desc);
-}
-
-
-CAStreamBasicDescription::CAStreamBasicDescription(double inSampleRate,		UInt32 inFormatID,
-									UInt32 inBytesPerPacket,	UInt32 inFramesPerPacket,
-									UInt32 inBytesPerFrame,		UInt32 inChannelsPerFrame,
-									UInt32 inBitsPerChannel,	UInt32 inFormatFlags)
-{
-	mSampleRate = inSampleRate;
-	mFormatID = inFormatID;
-	mBytesPerPacket = inBytesPerPacket;
-	mFramesPerPacket = inFramesPerPacket;
-	mBytesPerFrame = inBytesPerFrame;
-	mChannelsPerFrame = inChannelsPerFrame;
-	mBitsPerChannel = inBitsPerChannel;
-	mFormatFlags = inFormatFlags;
-	mReserved = 0;
-}
-
-char *CAStreamBasicDescription::AsString(char *buf, size_t _bufsize, bool brief /*=false*/) const
-{
-	int bufsize = (int)_bufsize;	// must be signed to protect against overflow
-	char *theBuffer = buf;
-	int nc;
-	char formatID[24];
-	CAStringForOSType(mFormatID, formatID, sizeof(formatID));
-	if (brief) {
-		CommonPCMFormat com;
-		bool interleaved;
-		if (IdentifyCommonPCMFormat(com, &interleaved) && com != kPCMFormatOther) {
-			const char *desc;
-			switch (com) {
-			case kPCMFormatInt16:
-				desc = "Int16";
-				break;
-			case kPCMFormatFixed824:
-				desc = "Int8.24";
-				break;
-			case kPCMFormatFloat32:
-				desc = "Float32";
-				break;
-			case kPCMFormatFloat64:
-				desc = "Float64";
-				break;
-			default:
-				desc = NULL;
-				break;
-			}
-			if (desc) {
-				const char *inter ="";
-				if (mChannelsPerFrame > 1)
-					inter = !interleaved ? ", non-inter" : ", inter";
-				snprintf(buf, static_cast<size_t>(bufsize), "%2d ch, %6.0f Hz, %s%s", (int)mChannelsPerFrame, mSampleRate, desc, inter);
-				return theBuffer;
-			}
-		}
-		if (mChannelsPerFrame == 0 && mSampleRate == 0.0 && mFormatID == 0) {
-			snprintf(buf, static_cast<size_t>(bufsize), "%2d ch, %6.0f Hz", (int)mChannelsPerFrame, mSampleRate);
-			return theBuffer;
-		}
-	}
-
-	nc = snprintf(buf, static_cast<size_t>(bufsize), "%2d ch, %6.0f Hz, %s (0x%08X) ", (int)NumberChannels(), mSampleRate, formatID, (int)mFormatFlags);
-	buf += nc; if ((bufsize -= nc) <= 0) goto exit;
-	if (mFormatID == kAudioFormatLinearPCM) {
-		bool isInt = !(mFormatFlags & kLinearPCMFormatFlagIsFloat);
-		int wordSize = static_cast<int>(SampleWordSize());
-		const char *endian = (wordSize > 1) ?
-			((mFormatFlags & kLinearPCMFormatFlagIsBigEndian) ? " big-endian" : " little-endian" ) : "";
-		const char *sign = isInt ?
-			((mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) ? " signed" : " unsigned") : "";
-		const char *floatInt = isInt ? "integer" : "float";
-		char packed[32];
-		if (wordSize > 0 && PackednessIsSignificant()) {
-			if (mFormatFlags & kLinearPCMFormatFlagIsPacked)
-				snprintf(packed, sizeof(packed), "packed in %d bytes", wordSize);
-			else
-				snprintf(packed, sizeof(packed), "unpacked in %d bytes", wordSize);
-		} else
-			packed[0] = '\0';
-		const char *align = (wordSize > 0 && AlignmentIsSignificant()) ?
-			((mFormatFlags & kLinearPCMFormatFlagIsAlignedHigh) ? " high-aligned" : " low-aligned") : "";
-		const char *deinter = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) ? ", deinterleaved" : "";
-		const char *commaSpace = (packed[0]!='\0') || (align[0]!='\0') ? ", " : "";
-		char bitdepth[20];
-
-		int fracbits = (mFormatFlags & kLinearPCMFormatFlagsSampleFractionMask) >> kLinearPCMFormatFlagsSampleFractionShift;
-		if (fracbits > 0)
-			snprintf(bitdepth, sizeof(bitdepth), "%d.%d", (int)mBitsPerChannel - fracbits, fracbits);
-		else
-			snprintf(bitdepth, sizeof(bitdepth), "%d", (int)mBitsPerChannel);
-
-		/*nc =*/ snprintf(buf, static_cast<size_t>(bufsize), "%s-bit%s%s %s%s%s%s%s",
-			bitdepth, endian, sign, floatInt,
-			commaSpace, packed, align, deinter);
-		// buf += nc; if ((bufsize -= nc) <= 0) goto exit;
-	} else if (mFormatID == kAudioFormatAppleLossless) {
-		int sourceBits = 0;
-		switch (mFormatFlags)
-		{
-			case 1:	//	kAppleLosslessFormatFlag_16BitSourceData
-				sourceBits = 16;
-				break;
-    		case 2:	//	kAppleLosslessFormatFlag_20BitSourceData
-    			sourceBits = 20;
-    			break;
-    		case 3:	//	kAppleLosslessFormatFlag_24BitSourceData
-    			sourceBits = 24;
-    			break;
-    		case 4:	//	kAppleLosslessFormatFlag_32BitSourceData
-    			sourceBits = 32;
-    			break;
-		}
-		if (sourceBits)
-			nc = snprintf(buf, static_cast<size_t>(bufsize), "from %d-bit source, ", sourceBits);
-		else
-			nc = snprintf(buf, static_cast<size_t>(bufsize), "from UNKNOWN source bit depth, ");
-		buf += nc; if ((bufsize -= nc) <= 0) goto exit;
-		/*nc =*/ snprintf(buf, static_cast<size_t>(bufsize), "%d frames/packet", (int)mFramesPerPacket);
-		//	buf += nc; if ((bufsize -= nc) <= 0) goto exit;
-	}
-	else
-		/*nc =*/ snprintf(buf, static_cast<size_t>(bufsize), "%d bits/channel, %d bytes/packet, %d frames/packet, %d bytes/frame",
-			(int)mBitsPerChannel, (int)mBytesPerPacket, (int)mFramesPerPacket, (int)mBytesPerFrame);
-exit:
-	return theBuffer;
-}
-
-void	CAStreamBasicDescription::NormalizeLinearPCMFormat(AudioStreamBasicDescription& ioDescription)
-{
-	//  the only thing that changes is to make mixable linear PCM into the canonical linear PCM format
-	if((ioDescription.mFormatID == kAudioFormatLinearPCM) && ((ioDescription.mFormatFlags & kIsNonMixableFlag) == 0))
-	{
-		//  the canonical linear PCM format
-		ioDescription.mFormatFlags = kAudioFormatFlagsCanonical;
-		ioDescription.mBytesPerPacket = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame;
-		ioDescription.mFramesPerPacket = 1;
-		ioDescription.mBytesPerFrame = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame;
-		ioDescription.mBitsPerChannel = 8 * SizeOf32(AudioSampleType);
-	}
-}
-
-void	CAStreamBasicDescription::NormalizeLinearPCMFormat(bool inNativeEndian, AudioStreamBasicDescription& ioDescription)
-{
-	//  the only thing that changes is to make mixable linear PCM into the canonical linear PCM format
-	if((ioDescription.mFormatID == kAudioFormatLinearPCM) && ((ioDescription.mFormatFlags & kIsNonMixableFlag) == 0))
-	{
-		//  the canonical linear PCM format
-		ioDescription.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked;
-		if(inNativeEndian)
-		{
-#if TARGET_RT_BIG_ENDIAN
-			ioDescription.mFormatFlags |= kAudioFormatFlagIsBigEndian;
-#endif
-		}
-		else
-		{
-#if TARGET_RT_LITTLE_ENDIAN
-			ioDescription.mFormatFlags |= kAudioFormatFlagIsBigEndian;
-#endif
-		}
-		ioDescription.mBytesPerPacket = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame;
-		ioDescription.mFramesPerPacket = 1;
-		ioDescription.mBytesPerFrame = SizeOf32(AudioSampleType) * ioDescription.mChannelsPerFrame;
-		ioDescription.mBitsPerChannel = 8 * SizeOf32(AudioSampleType);
-	}
-}
-
-void	CAStreamBasicDescription::ResetFormat(AudioStreamBasicDescription& ioDescription)
-{
-	ioDescription.mSampleRate = 0;
-	ioDescription.mFormatID = 0;
-	ioDescription.mBytesPerPacket = 0;
-	ioDescription.mFramesPerPacket = 0;
-	ioDescription.mBytesPerFrame = 0;
-	ioDescription.mChannelsPerFrame = 0;
-	ioDescription.mBitsPerChannel = 0;
-	ioDescription.mFormatFlags = 0;
-}
-
-void	CAStreamBasicDescription::FillOutFormat(AudioStreamBasicDescription& ioDescription, const AudioStreamBasicDescription& inTemplateDescription)
-{
-	if(fiszero(ioDescription.mSampleRate))
-	{
-		ioDescription.mSampleRate = inTemplateDescription.mSampleRate;
-	}
-	if(ioDescription.mFormatID == 0)
-	{
-		ioDescription.mFormatID = inTemplateDescription.mFormatID;
-	}
-	if(ioDescription.mFormatFlags == 0)
-	{
-		ioDescription.mFormatFlags = inTemplateDescription.mFormatFlags;
-	}
-	if(ioDescription.mBytesPerPacket == 0)
-	{
-		ioDescription.mBytesPerPacket = inTemplateDescription.mBytesPerPacket;
-	}
-	if(ioDescription.mFramesPerPacket == 0)
-	{
-		ioDescription.mFramesPerPacket = inTemplateDescription.mFramesPerPacket;
-	}
-	if(ioDescription.mBytesPerFrame == 0)
-	{
-		ioDescription.mBytesPerFrame = inTemplateDescription.mBytesPerFrame;
-	}
-	if(ioDescription.mChannelsPerFrame == 0)
-	{
-		ioDescription.mChannelsPerFrame = inTemplateDescription.mChannelsPerFrame;
-	}
-	if(ioDescription.mBitsPerChannel == 0)
-	{
-		ioDescription.mBitsPerChannel = inTemplateDescription.mBitsPerChannel;
-	}
-}
-
-void	CAStreamBasicDescription::GetSimpleName(const AudioStreamBasicDescription& inDescription, char* outName, UInt32 inMaxNameLength, bool inAbbreviate, bool inIncludeSampleRate)
-{
-	if(inIncludeSampleRate)
-	{
-		int theCharactersWritten = snprintf(outName, inMaxNameLength, "%.0f ", inDescription.mSampleRate);
-		outName += theCharactersWritten;
-		inMaxNameLength -= static_cast<UInt32>(theCharactersWritten);
-	}
-
-	switch(inDescription.mFormatID)
-	{
-		case kAudioFormatLinearPCM:
-			{
-				const char* theEndianString = NULL;
-				if((inDescription.mFormatFlags & kAudioFormatFlagIsBigEndian) != 0)
-				{
-					#if	TARGET_RT_LITTLE_ENDIAN
-						theEndianString = "Big Endian";
-					#endif
-				}
-				else
-				{
-					#if	TARGET_RT_BIG_ENDIAN
-						theEndianString = "Little Endian";
-					#endif
-				}
-
-				const char* theKindString = NULL;
-				if((inDescription.mFormatFlags & kAudioFormatFlagIsFloat) != 0)
-				{
-					theKindString = (inAbbreviate ? "Float" : "Floating Point");
-				}
-				else if((inDescription.mFormatFlags & kAudioFormatFlagIsSignedInteger) != 0)
-				{
-					theKindString = (inAbbreviate ? "SInt" : "Signed Integer");
-				}
-				else
-				{
-					theKindString = (inAbbreviate ? "UInt" : "Unsigned Integer");
-				}
-
-				const char* thePackingString = NULL;
-				if((inDescription.mFormatFlags & kAudioFormatFlagIsPacked) == 0)
-				{
-					if((inDescription.mFormatFlags & kAudioFormatFlagIsAlignedHigh) != 0)
-					{
-						thePackingString = "High";
-					}
-					else
-					{
-						thePackingString = "Low";
-					}
-				}
-
-				const char* theMixabilityString = NULL;
-				if((inDescription.mFormatFlags & kIsNonMixableFlag) == 0)
-				{
-					theMixabilityString = "Mixable";
-				}
-				else
-				{
-					theMixabilityString = "Unmixable";
-				}
-
-				if(inAbbreviate)
-				{
-					if(theEndianString != NULL)
-					{
-						if(thePackingString != NULL)
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Ch %s %s %s%d/%s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theEndianString, thePackingString, theKindString, (int)inDescription.mBitsPerChannel, theKindString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8);
-						}
-						else
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Ch %s %s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theEndianString, theKindString, (int)inDescription.mBitsPerChannel);
-						}
-					}
-					else
-					{
-						if(thePackingString != NULL)
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Ch %s %s%d/%s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, thePackingString, theKindString, (int)inDescription.mBitsPerChannel, theKindString, (int)((inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8));
-						}
-						else
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Ch %s%d", theMixabilityString, (int)inDescription.mChannelsPerFrame, theKindString, (int)inDescription.mBitsPerChannel);
-						}
-					}
-				}
-				else
-				{
-					if(theEndianString != NULL)
-					{
-						if(thePackingString != NULL)
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s %s Aligned %s in %d Bits", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theEndianString, theKindString, thePackingString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8);
-						}
-						else
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s %s", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theEndianString, theKindString);
-						}
-					}
-					else
-					{
-						if(thePackingString != NULL)
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s Aligned %s in %d Bits", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theKindString, thePackingString, (int)(inDescription.mBytesPerFrame / inDescription.mChannelsPerFrame) * 8);
-						}
-						else
-						{
-							snprintf(outName, inMaxNameLength, "%s %d Channel %d Bit %s", theMixabilityString, (int)inDescription.mChannelsPerFrame, (int)inDescription.mBitsPerChannel, theKindString);
-						}
-					}
-				}
-			}
-			break;
-
-		case kAudioFormatAC3:
-			strlcpy(outName, "AC-3", sizeof(outName));
-			break;
-
-		case kAudioFormat60958AC3:
-			strlcpy(outName, "AC-3 for SPDIF", sizeof(outName));
-			break;
-
-		default:
-			CACopy4CCToCString(outName, inDescription.mFormatID);
-			break;
-	};
-}
-
-#if CoreAudio_Debug
-#include "CALogMacros.h"
-
-void	CAStreamBasicDescription::PrintToLog(const AudioStreamBasicDescription& inDesc)
-{
-	PrintFloat		("  Sample Rate:        ", inDesc.mSampleRate);
-	Print4CharCode	("  Format ID:          ", inDesc.mFormatID);
-	PrintHex		("  Format Flags:       ", inDesc.mFormatFlags);
-	PrintInt		("  Bytes per Packet:   ", inDesc.mBytesPerPacket);
-	PrintInt		("  Frames per Packet:  ", inDesc.mFramesPerPacket);
-	PrintInt		("  Bytes per Frame:    ", inDesc.mBytesPerFrame);
-	PrintInt		("  Channels per Frame: ", inDesc.mChannelsPerFrame);
-	PrintInt		("  Bits per Channel:   ", inDesc.mBitsPerChannel);
-}
-#endif
-
-bool	operator<(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
-{
-	bool theAnswer = false;
-	bool isDone = false;
-
-	//	note that if either side is 0, that field is skipped
-
-	//	format ID is the first order sort
-	if((!isDone) && ((x.mFormatID != 0) && (y.mFormatID != 0)))
-	{
-		if(x.mFormatID != y.mFormatID)
-		{
-			//	formats are sorted numerically except that linear
-			//	PCM is always first
-			if(x.mFormatID == kAudioFormatLinearPCM)
-			{
-				theAnswer = true;
-			}
-			else if(y.mFormatID == kAudioFormatLinearPCM)
-			{
-				theAnswer = false;
-			}
-			else
-			{
-				theAnswer = x.mFormatID < y.mFormatID;
-			}
-			isDone = true;
-		}
-	}
-
-
-	//  mixable is always better than non-mixable for linear PCM and should be the second order sort item
-	if((!isDone) && ((x.mFormatID == kAudioFormatLinearPCM) && (y.mFormatID == kAudioFormatLinearPCM)))
-	{
-		if(((x.mFormatFlags & kIsNonMixableFlag) == 0) && ((y.mFormatFlags & kIsNonMixableFlag) != 0))
-		{
-			theAnswer = true;
-			isDone = true;
-		}
-		else if(((x.mFormatFlags & kIsNonMixableFlag) != 0) && ((y.mFormatFlags & kIsNonMixableFlag) == 0))
-		{
-			theAnswer = false;
-			isDone = true;
-		}
-	}
-
-	//	floating point vs integer for linear PCM only
-	if((!isDone) && ((x.mFormatID == kAudioFormatLinearPCM) && (y.mFormatID == kAudioFormatLinearPCM)))
-	{
-		if((x.mFormatFlags & kAudioFormatFlagIsFloat) != (y.mFormatFlags & kAudioFormatFlagIsFloat))
-		{
-			//	floating point is better than integer
-			theAnswer = y.mFormatFlags & kAudioFormatFlagIsFloat;
-			isDone = true;
-		}
-	}
-
-	//	bit depth
-	if((!isDone) && ((x.mBitsPerChannel != 0) && (y.mBitsPerChannel != 0)))
-	{
-		if(x.mBitsPerChannel != y.mBitsPerChannel)
-		{
-			//	deeper bit depths are higher quality
-			theAnswer = x.mBitsPerChannel < y.mBitsPerChannel;
-			isDone = true;
-		}
-	}
-
-	//	sample rate
-	if((!isDone) && fnonzero(x.mSampleRate) && fnonzero(y.mSampleRate))
-	{
-		if(fnotequal(x.mSampleRate, y.mSampleRate))
-		{
-			//	higher sample rates are higher quality
-			theAnswer = x.mSampleRate < y.mSampleRate;
-			isDone = true;
-		}
-	}
-
-	//	number of channels
-	if((!isDone) && ((x.mChannelsPerFrame != 0) && (y.mChannelsPerFrame != 0)))
-	{
-		if(x.mChannelsPerFrame != y.mChannelsPerFrame)
-		{
-			//	more channels is higher quality
-			theAnswer = x.mChannelsPerFrame < y.mChannelsPerFrame;
-			//isDone = true;
-		}
-	}
-
-	return theAnswer;
-}
-
-void CAStreamBasicDescription::ModifyFormatFlagsForMatching(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y, UInt32& xFlags, UInt32& yFlags, bool converterOnly )
-{
-    // match wildcards
-	if (x.mFormatID == 0 || y.mFormatID == 0 || xFlags == 0 || yFlags == 0)
-    {
-		// Obliterate all flags.
-        xFlags = yFlags = 0;
-        return;
-    }
-
-    if (x.mFormatID == kAudioFormatLinearPCM) {
-        // knock off the all clear flag
-        xFlags = xFlags & ~kAudioFormatFlagsAreAllClear;
-        yFlags = yFlags & ~kAudioFormatFlagsAreAllClear;
-
-        // if both kAudioFormatFlagIsPacked bits are set, then we don't care about the kAudioFormatFlagIsAlignedHigh bit.
-        if (xFlags & yFlags & kAudioFormatFlagIsPacked) {
-            xFlags = xFlags & ~static_cast<UInt32>(kAudioFormatFlagIsAlignedHigh);
-            yFlags = yFlags & ~static_cast<UInt32>(kAudioFormatFlagIsAlignedHigh);
-        }
-
-        // if both kAudioFormatFlagIsFloat bits are set, then we don't care about the kAudioFormatFlagIsSignedInteger bit.
-        if (xFlags & yFlags & kAudioFormatFlagIsFloat) {
-            xFlags = xFlags & ~static_cast<UInt32>(kAudioFormatFlagIsSignedInteger);
-            yFlags = yFlags & ~static_cast<UInt32>(kAudioFormatFlagIsSignedInteger);
-        }
-
-        //	if the bit depth is 8 bits or less and the format is packed, we don't care about endianness
-        if((x.mBitsPerChannel <= 8) && ((xFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked))
-        {
-            xFlags = xFlags & ~static_cast<UInt32>(kAudioFormatFlagIsBigEndian);
-        }
-        if((y.mBitsPerChannel <= 8) && ((yFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked))
-        {
-            yFlags = yFlags & ~static_cast<UInt32>(kAudioFormatFlagIsBigEndian);
-        }
-
-        //	if the number of channels is 1, we don't care about non-interleavedness
-        if (x.mChannelsPerFrame == 1 && y.mChannelsPerFrame == 1) {
-            xFlags &= ~static_cast<UInt32>(kLinearPCMFormatFlagIsNonInterleaved);
-            yFlags &= ~static_cast<UInt32>(kLinearPCMFormatFlagIsNonInterleaved);
-        }
-
-        if (converterOnly) {
-            CAStreamBasicDescription cas_x = CAStreamBasicDescription(x);
-            CAStreamBasicDescription cas_y = CAStreamBasicDescription(y);
-            if (!cas_x.PackednessIsSignificant() && !cas_y.PackednessIsSignificant()) {
-                xFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsPacked);
-                yFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsPacked);
-            }
-            if (!cas_x.AlignmentIsSignificant() && !cas_y.AlignmentIsSignificant()) {
-                xFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsAlignedHigh);
-                yFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsAlignedHigh);
-            }
-            // We don't care about whether the streams are mixable in this case
-            xFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsNonMixable);
-            yFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsNonMixable);
-        }
-    }
-}
-
-static bool MatchFormatFlags(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
-{
-	UInt32 xFlags = x.mFormatFlags;
-	UInt32 yFlags = y.mFormatFlags;
-
-    CAStreamBasicDescription::ModifyFormatFlagsForMatching(x, y, xFlags, yFlags, false);
-	return xFlags == yFlags;
-}
-
-bool	operator==(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
-{
-	//	the semantics for equality are:
-	//		1) Values must match exactly -- except for PCM format flags, see above.
-	//		2) wildcard's are ignored in the comparison
-
-#define MATCH(name) ((x.name) == 0 || (y.name) == 0 || (x.name) == (y.name))
-
-	return
-    //	check all but the format flags
-    CAStreamBasicDescription::FlagIndependentEquivalence(x, y)
-    //	check the format flags
-    && MatchFormatFlags(x, y);
-}
-
-bool    CAStreamBasicDescription::FlagIndependentEquivalence(const AudioStreamBasicDescription &x, const AudioStreamBasicDescription &y)
-{
-    return
-    //	check the sample rate
-    (fiszero(x.mSampleRate) || fiszero(y.mSampleRate) || fequal(x.mSampleRate, y.mSampleRate))
-
-    //	check the format ids
-    && MATCH(mFormatID)
-
-    //	check the bytes per packet
-    && MATCH(mBytesPerPacket)
-
-    //	check the frames per packet
-    && MATCH(mFramesPerPacket)
-
-    //	check the bytes per frame
-    && MATCH(mBytesPerFrame)
-
-    //	check the channels per frame
-    && MATCH(mChannelsPerFrame)
-
-    //	check the channels per frame
-    && MATCH(mBitsPerChannel) ;
-}
-
-bool	CAStreamBasicDescription::IsEqual(const AudioStreamBasicDescription &other, bool interpretingWildcards) const
-{
-	if (interpretingWildcards)
-		return *this == other;
-	return memcmp(this, &other, offsetof(AudioStreamBasicDescription, mReserved)) == 0;
-}
-
-bool    CAStreamBasicDescription::IsFunctionallyEquivalent(const AudioStreamBasicDescription &x, const AudioStreamBasicDescription &y)
-{
-    UInt32 xFlags = x.mFormatFlags, yFlags = y.mFormatFlags;
-    CAStreamBasicDescription::ModifyFormatFlagsForMatching(x, y, xFlags, yFlags, true);
-
-    return
-    // check all but the format flags
-    CAStreamBasicDescription::FlagIndependentEquivalence(x, y)
-    // check the format flags with converter focus
-    && (xFlags == yFlags);
-
-}
-
-bool SanityCheck(const AudioStreamBasicDescription& x)
-{
-	// This function returns false if there are sufficiently insane values in any field.
-	// It is very conservative so even some very unlikely values will pass.
-	// This is just meant to catch the case where the data from a file is corrupted.
-
-	return
-		(x.mSampleRate >= 0.)
-		&& (x.mSampleRate < 3e6)	// SACD sample rate is 2.8224 MHz
-		&& (x.mBytesPerPacket < 1000000)
-		&& (x.mFramesPerPacket < 1000000)
-		&& (x.mBytesPerFrame < 1000000)
-		&& (x.mChannelsPerFrame <= 1024)
-		&& (x.mBitsPerChannel <= 1024)
-		&& (x.mFormatID != 0)
-		&& !(x.mFormatID == kAudioFormatLinearPCM && (x.mFramesPerPacket != 1 || x.mBytesPerPacket != x.mBytesPerFrame));
-}
-
-bool CAStreamBasicDescription::FromText(const char *inTextDesc, AudioStreamBasicDescription &fmt)
-{
-	const char *p = inTextDesc;
-
-	memset(&fmt, 0, sizeof(fmt));
-
-	bool isPCM = true;	// until proven otherwise
-	UInt32 pcmFlags = kAudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger;
-
-	if (p[0] == '-')	// previously we required a leading dash on PCM formats
-		++p;
-
-	if (p[0] == 'B' && p[1] == 'E') {
-		pcmFlags |= kLinearPCMFormatFlagIsBigEndian;
-		p += 2;
-	} else if (p[0] == 'L' && p[1] == 'E') {
-		p += 2;
-	} else {
-		// default is native-endian
-#if TARGET_RT_BIG_ENDIAN
-		pcmFlags |= kLinearPCMFormatFlagIsBigEndian;
-#endif
-	}
-	if (p[0] == 'F') {
-		pcmFlags = (pcmFlags & ~static_cast<UInt32>(kAudioFormatFlagIsSignedInteger)) | kAudioFormatFlagIsFloat;
-		++p;
-	} else {
-		if (p[0] == 'U') {
-			pcmFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsSignedInteger);
-			++p;
-		}
-		if (p[0] == 'I')
-			++p;
-		else {
-			// it's not PCM; presumably some other format (NOT VALIDATED; use AudioFormat for that)
-			isPCM = false;
-			p = inTextDesc;	// go back to the beginning
-			char buf[4] = { ' ',' ',' ',' ' };
-			for (int i = 0; i < 4; ++i) {
-				if (*p != '\\') {
-					if ((buf[i] = *p++) == '\0') {
-						// special-case for 'aac'
-						if (i != 3) return false;
-						--p;	// keep pointing at the terminating null
-						buf[i] = ' ';
-						break;
-					}
-				} else {
-					// "\xNN" is a hex byte
-					if (*++p != 'x') return false;
-					int x;
-					if (sscanf(++p, "%02X", &x) != 1) return false;
-					buf[i] = static_cast<char>(x);
-					p += 2;
-				}
-			}
-
-			if (strchr("-@/#", buf[3])) {
-				// further special-casing for 'aac'
-				buf[3] = ' ';
-				--p;
-			}
-
-			memcpy(&fmt.mFormatID, buf, 4);
-			fmt.mFormatID = CFSwapInt32BigToHost(fmt.mFormatID);
-		}
-	}
-
-	if (isPCM) {
-		fmt.mFormatID = kAudioFormatLinearPCM;
-		fmt.mFormatFlags = pcmFlags;
-		fmt.mFramesPerPacket = 1;
-		fmt.mChannelsPerFrame = 1;
-		UInt32 bitdepth = 0, fracbits = 0;
-		while (isdigit(*p))
-			bitdepth = 10 * bitdepth + static_cast<UInt32>(*p++ - '0');
-		if (*p == '.') {
-			++p;
-			if (!isdigit(*p)) {
-				fprintf(stderr, "Expected fractional bits following '.'\n");
-				goto Bail;
-			}
-			while (isdigit(*p))
-				fracbits = 10 * fracbits + static_cast<UInt32>(*p++ - '0');
-			bitdepth += fracbits;
-			fmt.mFormatFlags |= (fracbits << kLinearPCMFormatFlagsSampleFractionShift);
-		}
-		fmt.mBitsPerChannel = bitdepth;
-		fmt.mBytesPerPacket = fmt.mBytesPerFrame = (bitdepth + 7) / 8;
-		if (bitdepth & 7) {
-			// assume unpacked. (packed odd bit depths are describable but not supported in AudioConverter.)
-			fmt.mFormatFlags &= ~static_cast<UInt32>(kLinearPCMFormatFlagIsPacked);
-			// alignment matters; default to high-aligned. use ':L_' for low.
-			fmt.mFormatFlags |= kLinearPCMFormatFlagIsAlignedHigh;
-		}
-	}
-	if (*p == '@') {
-		++p;
-		while (isdigit(*p))
-			fmt.mSampleRate = 10 * fmt.mSampleRate + (*p++ - '0');
-	}
-	if (*p == '/') {
-		UInt32 flags = 0;
-		while (true) {
-			char c = *++p;
-			if (c >= '0' && c <= '9')
-				flags = (flags << 4) | static_cast<UInt32>(c - '0');
-			else if (c >= 'A' && c <= 'F')
-				flags = (flags << 4) | static_cast<UInt32>(c - 'A' + 10);
-			else if (c >= 'a' && c <= 'f')
-				flags = (flags << 4) | static_cast<UInt32>(c - 'a' + 10);
-			else break;
-		}
-		fmt.mFormatFlags = flags;
-	}
-	if (*p == '#') {
-		++p;
-		while (isdigit(*p))
-			fmt.mFramesPerPacket = 10 * fmt.mFramesPerPacket + static_cast<UInt32>(*p++ - '0');
-	}
-	if (*p == ':') {
-		++p;
-		fmt.mFormatFlags &= ~static_cast<UInt32>(kLinearPCMFormatFlagIsPacked);
-		if (*p == 'L')
-			fmt.mFormatFlags &= ~static_cast<UInt32>(kLinearPCMFormatFlagIsAlignedHigh);
-		else if (*p == 'H')
-			fmt.mFormatFlags |= kLinearPCMFormatFlagIsAlignedHigh;
-		else
-			goto Bail;
-		++p;
-		UInt32 bytesPerFrame = 0;
-		while (isdigit(*p))
-			bytesPerFrame = 10 * bytesPerFrame + static_cast<UInt32>(*p++ - '0');
-		fmt.mBytesPerFrame = fmt.mBytesPerPacket = bytesPerFrame;
-	}
-	if (*p == ',') {
-		++p;
-		int ch = 0;
-		while (isdigit(*p))
-			ch = 10 * ch + (*p++ - '0');
-		fmt.mChannelsPerFrame = static_cast<UInt32>(ch);
-		if (*p == 'D') {
-			++p;
-			if (fmt.mFormatID != kAudioFormatLinearPCM) {
-				fprintf(stderr, "non-interleaved flag invalid for non-PCM formats\n");
-				goto Bail;
-			}
-			fmt.mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
-		} else {
-			if (*p == 'I') ++p;	// default
-			if (fmt.mFormatID == kAudioFormatLinearPCM)
-				fmt.mBytesPerPacket = fmt.mBytesPerFrame *= static_cast<UInt32>(ch);
-		}
-	}
-	if (*p != '\0') {
-		fprintf(stderr, "extra characters at end of format string: %s\n", p);
-		goto Bail;
-	}
-	return true;
-
-Bail:
-	fprintf(stderr, "Invalid format string: %s\n", inTextDesc);
-	fprintf(stderr, "Syntax of format strings is: \n");
-	return false;
-}
-
-const char *CAStreamBasicDescription::sTextParsingUsageString =
-	"format[@sample_rate_hz][/format_flags][#frames_per_packet][:LHbytesPerFrame][,channelsDI].\n"
-	"Format for PCM is [-][BE|LE]{F|I|UI}{bitdepth}; else a 4-char format code (e.g. aac, alac).\n";
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.h
deleted file mode 100644
index d80dbfb..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.h
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
-     File: CAStreamBasicDescription.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAStreamBasicDescription_h__
-#define __CAStreamBasicDescription_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-	#include <CoreFoundation/CoreFoundation.h>
-#else
-	#include "CoreAudioTypes.h"
-	#include "CoreFoundation.h"
-#endif
-
-#include "CADebugMacros.h"
-#include <string.h>	// for memset, memcpy
-#include <stdio.h>	// for FILE *
-
-#pragma mark	This file needs to compile on more earlier versions of the OS, so please keep that in mind when editing it
-
-extern char *CAStringForOSType (OSType t, char *writeLocation, size_t bufsize);
-
-// define Leopard specific symbols for backward compatibility if applicable
-#if COREAUDIOTYPES_VERSION < 1050
-typedef Float32 AudioSampleType;
-enum { kAudioFormatFlagsCanonical = kAudioFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked };
-#endif
-#if COREAUDIOTYPES_VERSION < 1051
-typedef Float32 AudioUnitSampleType;
-enum {
-	kLinearPCMFormatFlagsSampleFractionShift    = 7,
-	kLinearPCMFormatFlagsSampleFractionMask     = (0x3F << kLinearPCMFormatFlagsSampleFractionShift),
-};
-#endif
-
-//	define the IsMixable format flag for all versions of the system
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
-	enum { kIsNonMixableFlag = kAudioFormatFlagIsNonMixable };
-#else
-	enum { kIsNonMixableFlag = (1L << 6) };
-#endif
-
-//=============================================================================
-//	CAStreamBasicDescription
-//
-//	This is a wrapper class for the AudioStreamBasicDescription struct.
-//	It adds a number of convenience routines, but otherwise adds nothing
-//	to the footprint of the original struct.
-//=============================================================================
-class CAStreamBasicDescription :
-	public AudioStreamBasicDescription
-{
-
-//	Constants
-public:
-	static const AudioStreamBasicDescription	sEmpty;
-
-	enum CommonPCMFormat {
-		kPCMFormatOther		= 0,
-		kPCMFormatFloat32	= 1,
-		kPCMFormatInt16		= 2,
-		kPCMFormatFixed824	= 3,
-		kPCMFormatFloat64	= 4
-	};
-
-//	Construction/Destruction
-public:
-	CAStreamBasicDescription();
-
-	CAStreamBasicDescription(const AudioStreamBasicDescription &desc);
-
-	CAStreamBasicDescription(		double inSampleRate,		UInt32 inFormatID,
-									UInt32 inBytesPerPacket,	UInt32 inFramesPerPacket,
-									UInt32 inBytesPerFrame,		UInt32 inChannelsPerFrame,
-									UInt32 inBitsPerChannel,	UInt32 inFormatFlags);
-
-	CAStreamBasicDescription(	double inSampleRate, UInt32 inNumChannels, CommonPCMFormat pcmf, bool inIsInterleaved) {
-		unsigned wordsize;
-
-		mSampleRate = inSampleRate;
-		mFormatID = kAudioFormatLinearPCM;
-		mFormatFlags = kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
-		mFramesPerPacket = 1;
-		mChannelsPerFrame = inNumChannels;
-		mBytesPerFrame = mBytesPerPacket = 0;
-		mReserved = 0;
-
-		switch (pcmf) {
-		default:
-			return;
-		case kPCMFormatFloat32:
-			wordsize = 4;
-			mFormatFlags |= kAudioFormatFlagIsFloat;
-			break;
-		case kPCMFormatFloat64:
-			wordsize = 8;
-			mFormatFlags |= kAudioFormatFlagIsFloat;
-			break;
-		case kPCMFormatInt16:
-			wordsize = 2;
-			mFormatFlags |= kAudioFormatFlagIsSignedInteger;
-			break;
-		case kPCMFormatFixed824:
-			wordsize = 4;
-			mFormatFlags |= kAudioFormatFlagIsSignedInteger | (24 << kLinearPCMFormatFlagsSampleFractionShift);
-			break;
-		}
-		mBitsPerChannel = wordsize * 8;
-		if (inIsInterleaved)
-			mBytesPerFrame = mBytesPerPacket = wordsize * inNumChannels;
-		else {
-			mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
-			mBytesPerFrame = mBytesPerPacket = wordsize;
-		}
-	}
-
-//	Assignment
-	CAStreamBasicDescription&	operator=(const AudioStreamBasicDescription& v) { SetFrom(v); return *this; }
-
-	void	SetFrom(const AudioStreamBasicDescription &desc)
-	{
-		memcpy(this, &desc, sizeof(AudioStreamBasicDescription));
-	}
-
-	bool		FromText(const char *inTextDesc) { return FromText(inTextDesc, *this); }
-	static bool	FromText(const char *inTextDesc, AudioStreamBasicDescription &outDesc);
-					// return true if parsing was successful
-
-	static const char *sTextParsingUsageString;
-
-	// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-	//
-	// interrogation
-
-	bool	IsPCM() const { return mFormatID == kAudioFormatLinearPCM; }
-
-	bool	PackednessIsSignificant() const
-	{
-		Assert(IsPCM(), "PackednessIsSignificant only applies for PCM");
-		return (SampleWordSize() << 3) != mBitsPerChannel;
-	}
-
-	bool	AlignmentIsSignificant() const
-	{
-		return PackednessIsSignificant() || (mBitsPerChannel & 7) != 0;
-	}
-
-	bool	IsInterleaved() const
-	{
-		return !(mFormatFlags & kAudioFormatFlagIsNonInterleaved);
-	}
-
-	bool	IsSignedInteger() const
-	{
-		return IsPCM() && (mFormatFlags & kAudioFormatFlagIsSignedInteger);
-	}
-
-	bool	IsFloat() const
-	{
-		return IsPCM() && (mFormatFlags & kAudioFormatFlagIsFloat);
-	}
-
-	bool	IsNativeEndian() const
-	{
-		return (mFormatFlags & kAudioFormatFlagIsBigEndian) == kAudioFormatFlagsNativeEndian;
-	}
-
-	// for sanity with interleaved/deinterleaved possibilities, never access mChannelsPerFrame, use these:
-	UInt32	NumberInterleavedChannels() const	{ return IsInterleaved() ? mChannelsPerFrame : 1; }
-	UInt32	NumberChannelStreams() const		{ return IsInterleaved() ? 1 : mChannelsPerFrame; }
-	UInt32	NumberChannels() const				{ return mChannelsPerFrame; }
-	UInt32	SampleWordSize() const				{
-			return (mBytesPerFrame > 0 && NumberInterleavedChannels()) ? mBytesPerFrame / NumberInterleavedChannels() :  0;
-	}
-
-	UInt32	FramesToBytes(UInt32 nframes) const	{ return nframes * mBytesPerFrame; }
-	UInt32	BytesToFrames(UInt32 nbytes) const	{
-		Assert(mBytesPerFrame > 0, "bytesPerFrame must be > 0 in BytesToFrames");
-		return nbytes / mBytesPerFrame;
-	}
-
-	bool	SameChannelsAndInterleaving(const CAStreamBasicDescription &a) const
-	{
-		return this->NumberChannels() == a.NumberChannels() && this->IsInterleaved() == a.IsInterleaved();
-	}
-
-	bool	IdentifyCommonPCMFormat(CommonPCMFormat &outFormat, bool *outIsInterleaved=NULL) const
-	{	// return true if it's a valid PCM format.
-
-		outFormat = kPCMFormatOther;
-		// trap out patently invalid formats.
-		if (mFormatID != kAudioFormatLinearPCM || mFramesPerPacket != 1 || mBytesPerFrame != mBytesPerPacket || mBitsPerChannel/8 > mBytesPerFrame || mChannelsPerFrame == 0)
-			return false;
-		bool interleaved = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0;
-		if (outIsInterleaved != NULL) *outIsInterleaved = interleaved;
-		unsigned wordsize = mBytesPerFrame;
-		if (interleaved) {
-			if (wordsize % mChannelsPerFrame != 0) return false;
-			wordsize /= mChannelsPerFrame;
-		}
-
-		if ((mFormatFlags & kAudioFormatFlagIsBigEndian) == kAudioFormatFlagsNativeEndian
-		&& wordsize * 8 == mBitsPerChannel) {
-			// packed and native endian, good
-			if (mFormatFlags & kLinearPCMFormatFlagIsFloat) {
-				// float: reject nonsense bits
-				if (mFormatFlags & (kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagsSampleFractionMask))
-					return false;
-				if (wordsize == 4)
-					outFormat = kPCMFormatFloat32;
-				if (wordsize == 8)
-					outFormat = kPCMFormatFloat64;
-			} else if (mFormatFlags & kLinearPCMFormatFlagIsSignedInteger) {
-				// signed int
-				unsigned fracbits = (mFormatFlags & kLinearPCMFormatFlagsSampleFractionMask) >> kLinearPCMFormatFlagsSampleFractionShift;
-				if (wordsize == 4 && fracbits == 24)
-					outFormat = kPCMFormatFixed824;
-				else if (wordsize == 2 && fracbits == 0)
-					outFormat = kPCMFormatInt16;
-			}
-		}
-		return true;
-	}
-
-	bool IsCommonFloat32(bool *outIsInterleaved=NULL) const {
-		CommonPCMFormat fmt;
-		return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatFloat32;
-	}
-	bool IsCommonFloat64(bool *outIsInterleaved=NULL) const {
-		CommonPCMFormat fmt;
-		return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatFloat64;
-	}
-	bool IsCommonFixed824(bool *outIsInterleaved=NULL) const {
-		CommonPCMFormat fmt;
-		return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatFixed824;
-	}
-	bool IsCommonInt16(bool *outIsInterleaved=NULL) const {
-		CommonPCMFormat fmt;
-		return IdentifyCommonPCMFormat(fmt, outIsInterleaved) && fmt == kPCMFormatInt16;
-	}
-
-	// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-	//
-	//	manipulation
-
-	void	SetCanonical(UInt32 nChannels, bool interleaved)
-				// note: leaves sample rate untouched
-	{
-		mFormatID = kAudioFormatLinearPCM;
-		UInt32 sampleSize = SizeOf32(AudioSampleType);
-		mFormatFlags = kAudioFormatFlagsCanonical;
-		mBitsPerChannel = 8 * sampleSize;
-		mChannelsPerFrame = nChannels;
-		mFramesPerPacket = 1;
-		if (interleaved)
-			mBytesPerPacket = mBytesPerFrame = nChannels * sampleSize;
-		else {
-			mBytesPerPacket = mBytesPerFrame = sampleSize;
-			mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
-		}
-	}
-
-	bool	IsCanonical() const
-	{
-		if (mFormatID != kAudioFormatLinearPCM) return false;
-		UInt32 reqFormatFlags;
-		UInt32 flagsMask = (kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagsSampleFractionMask);
-		bool interleaved = (mFormatFlags & kAudioFormatFlagIsNonInterleaved) == 0;
-		unsigned sampleSize = SizeOf32(AudioSampleType);
-		reqFormatFlags = kAudioFormatFlagsCanonical;
-		UInt32 reqFrameSize = interleaved ? (mChannelsPerFrame * sampleSize) : sampleSize;
-
-		return ((mFormatFlags & flagsMask) == reqFormatFlags
-			&& mBitsPerChannel == 8 * sampleSize
-			&& mFramesPerPacket == 1
-			&& mBytesPerFrame == reqFrameSize
-			&& mBytesPerPacket == reqFrameSize);
-	}
-
-	void	SetAUCanonical(UInt32 nChannels, bool interleaved)
-	{
-		mFormatID = kAudioFormatLinearPCM;
-#if CA_PREFER_FIXED_POINT
-		mFormatFlags = kAudioFormatFlagsCanonical | (kAudioUnitSampleFractionBits << kLinearPCMFormatFlagsSampleFractionShift);
-#else
-		mFormatFlags = kAudioFormatFlagsCanonical;
-#endif
-		mChannelsPerFrame = nChannels;
-		mFramesPerPacket = 1;
-		mBitsPerChannel = 8 * SizeOf32(AudioUnitSampleType);
-		if (interleaved)
-			mBytesPerPacket = mBytesPerFrame = nChannels * SizeOf32(AudioUnitSampleType);
-		else {
-			mBytesPerPacket = mBytesPerFrame = SizeOf32(AudioUnitSampleType);
-			mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
-		}
-	}
-
-	void	ChangeNumberChannels(UInt32 nChannels, bool interleaved)
-				// alter an existing format
-	{
-		Assert(IsPCM(), "ChangeNumberChannels only works for PCM formats");
-		UInt32 wordSize = SampleWordSize();	// get this before changing ANYTHING
-		if (wordSize == 0)
-			wordSize = (mBitsPerChannel + 7) / 8;
-		mChannelsPerFrame = nChannels;
-		mFramesPerPacket = 1;
-		if (interleaved) {
-			mBytesPerPacket = mBytesPerFrame = nChannels * wordSize;
-			mFormatFlags &= ~static_cast<UInt32>(kAudioFormatFlagIsNonInterleaved);
-		} else {
-			mBytesPerPacket = mBytesPerFrame = wordSize;
-			mFormatFlags |= kAudioFormatFlagIsNonInterleaved;
-		}
-	}
-
-	// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
-	//
-	//	other
-
-	bool            IsEqual(const AudioStreamBasicDescription &other, bool interpretingWildcards=true) const;
-	static bool     FlagIndependentEquivalence(const AudioStreamBasicDescription &x, const AudioStreamBasicDescription &y);
-    static bool     IsFunctionallyEquivalent(const AudioStreamBasicDescription &x, const AudioStreamBasicDescription &y);
-
-	void	Print() const {
-		Print (stdout);
-	}
-
-	void	Print(FILE* file) const {
-		PrintFormat (file, "", "AudioStreamBasicDescription:");
-	}
-
-	void	PrintFormat(FILE *f, const char *indent, const char *name) const {
-		char buf[256];
-		fprintf(f, "%s%s %s\n", indent, name, AsString(buf, sizeof(buf)));
-	}
-
-	void	PrintFormat2(FILE *f, const char *indent, const char *name) const { // no trailing newline
-		char buf[256];
-		fprintf(f, "%s%s %s", indent, name, AsString(buf, sizeof(buf)));
-	}
-
-	char *	AsString(char *buf, size_t bufsize, bool brief=false) const;
-
-	static void Print (const AudioStreamBasicDescription &inDesc)
-	{
-		CAStreamBasicDescription desc(inDesc);
-		desc.Print ();
-	}
-
-	OSStatus			Save(CFPropertyListRef *outData) const;
-
-	OSStatus			Restore(CFPropertyListRef &inData);
-
-//	Operations
-	static bool			IsMixable(const AudioStreamBasicDescription& inDescription) { return (inDescription.mFormatID == kAudioFormatLinearPCM) && ((inDescription.mFormatFlags & kIsNonMixableFlag) == 0); }
-	static void			NormalizeLinearPCMFormat(AudioStreamBasicDescription& ioDescription);
-	static void			NormalizeLinearPCMFormat(bool inNativeEndian, AudioStreamBasicDescription& ioDescription);
-	static void			ResetFormat(AudioStreamBasicDescription& ioDescription);
-	static void			FillOutFormat(AudioStreamBasicDescription& ioDescription, const AudioStreamBasicDescription& inTemplateDescription);
-	static void			GetSimpleName(const AudioStreamBasicDescription& inDescription, char* outName, UInt32 inMaxNameLength, bool inAbbreviate, bool inIncludeSampleRate = false);
-    static void         ModifyFormatFlagsForMatching(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y, UInt32& xFlags, UInt32& yFlags, bool converterOnly);
-
-#if CoreAudio_Debug
-	static void			PrintToLog(const AudioStreamBasicDescription& inDesc);
-#endif
-};
-
-bool		operator<(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y);
-bool		operator==(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y);
-#if TARGET_OS_MAC || (TARGET_OS_WIN32 && (_MSC_VER > 600))
-inline bool	operator!=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !(x == y); }
-inline bool	operator<=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return (x < y) || (x == y); }
-inline bool	operator>=(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !(x < y); }
-inline bool	operator>(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y) { return !((x < y) || (x == y)); }
-#endif
-
-bool SanityCheck(const AudioStreamBasicDescription& x);
-
-
-#endif // __CAStreamBasicDescription_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAThreadSafeList.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAThreadSafeList.h
deleted file mode 100644
index 479f519..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAThreadSafeList.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
-     File: CAThreadSafeList.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAThreadSafeList_h__
-#define __CAThreadSafeList_h__
-
-#include "CAAtomicStack.h"
-
-//  linked list of T's
-//	T must define operator ==
-template <class T>
-class TThreadSafeList {
-private:
-	enum EEventType { kAdd, kRemove, kClear };
-	class Node {
-	public:
-		Node *		mNext;
-		EEventType	mEventType;
-		T			mObject;
-
-		Node *&	next() { return mNext; }
-	};
-
-public:
-	class iterator {
-	public:
-		iterator() { }
-		iterator(Node *n) : mNode(n) { }
-
-		bool operator == (const iterator &other) const { return this->mNode == other.mNode; }
-		bool operator != (const iterator &other) const { return this->mNode != other.mNode; }
-
-		T & operator * () const { return mNode->mObject; }
-
-		iterator & operator ++ () { mNode = mNode->next(); return *this; }	// preincrement
-		iterator operator ++ (int) { iterator tmp = *this; mNode = mNode->next(); return tmp; } // postincrement
-
-	private:
-		Node *		mNode;
-	};
-
-	TThreadSafeList() { }
-	~TThreadSafeList()
-	{
-		mActiveList.free_all();
-		mPendingList.free_all();
-		mFreeList.free_all();
-	}
-
-	// These may be called on any thread
-
-	void	deferred_add(const T &obj)	// can be called on any thread
-	{
-		Node *node = AllocNode();
-		node->mEventType = kAdd;
-		node->mObject = obj;
-		mPendingList.push_atomic(node);
-		//mPendingList.dump("pending after add");
-	}
-
-	void	deferred_remove(const T &obj)	// can be called on any thread
-	{
-		Node *node = AllocNode();
-		node->mEventType = kRemove;
-		node->mObject = obj;
-		mPendingList.push_atomic(node);
-		//mPendingList.dump("pending after remove");
-	}
-
-	void	deferred_clear()					// can be called on any thread
-	{
-		Node *node = AllocNode();
-		node->mEventType = kClear;
-		mPendingList.push_atomic(node);
-	}
-
-	// These must be called from only one thread
-
-	void	update()		// must only be called from one thread
-	{
-		NodeStack reversed;
-		Node *event, *node, *next;
-		bool workDone = false;
-
-		// reverse the events so they are in order
-		event = mPendingList.pop_all();
-		while (event != NULL) {
-			next = event->mNext;
-			reversed.push_NA(event);
-			event = next;
-			workDone = true;
-		}
-		if (workDone) {
-			//reversed.dump("pending popped");
-			//mActiveList.dump("active before update");
-
-			// now process them
-			while ((event = reversed.pop_NA()) != NULL) {
-				switch (event->mEventType) {
-				case kAdd:
-					{
-						Node **pnode;
-						bool needToInsert = true;
-						for (pnode = mActiveList.phead(); *pnode != NULL; pnode = &node->mNext) {
-							node = *pnode;
-							if (node->mObject == event->mObject) {
-								//printf("already active!!!\n");
-								FreeNode(event);
-								needToInsert = false;
-								break;
-							}
-						}
-						if (needToInsert) {
-							// link the new event in at the end of the active list
-							*pnode = event;
-							event->mNext = NULL;
-						}
-					}
-					break;
-				case kRemove:
-					// find matching node in the active list, remove it
-					for (Node **pnode = mActiveList.phead(); *pnode != NULL; ) {
-						node = *pnode;
-						if (node->mObject == event->mObject) {
-							*pnode = node->mNext;	// remove from linked list
-							FreeNode(node);
-							break;
-						}
-						pnode = &node->mNext;
-					}
-					// dispose the request node
-					FreeNode(event);
-					break;
-				case kClear:
-					for (node = mActiveList.head(); node != NULL; ) {
-						next = node->mNext;
-						FreeNode(node);
-						node = next;
-					}
-					FreeNode(event);
-					break;
-				default:
-					//printf("invalid node type %d!\n", event->mEventType);
-					break;
-				}
-			}
-			//mActiveList.dump("active after update");
-		}
-	}
-
-	iterator begin() const {
-		//mActiveList.dump("active at begin");
-		return iterator(mActiveList.head());
-	}
-	iterator end() const { return iterator(NULL); }
-
-
-private:
-	Node *	AllocNode()
-	{
-		Node *node = mFreeList.pop_atomic();
-		if (node == NULL)
-			node = (Node *)CA_malloc(sizeof(Node));
-		return node;
-	}
-
-	void	FreeNode(Node *node)
-	{
-		mFreeList.push_atomic(node);
-	}
-
-private:
-	class NodeStack : public TAtomicStack<Node> {
-	public:
-		void free_all() {
-			Node *node;
-			while ((node = this->pop_NA()) != NULL)
-				free(node);
-		}
-
-		Node **	phead() { return &this->mHead; }
-		Node *	head() const { return this->mHead; }
-	};
-
-	NodeStack	mActiveList;	// what's actually in the container - only accessed on one thread
-	NodeStack	mPendingList;	// add or remove requests - threadsafe
-	NodeStack	mFreeList;		// free nodes for reuse - threadsafe
-};
-
-#endif // __CAThreadSafeList_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.cpp
deleted file mode 100644
index 9b651cd..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.cpp
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-     File: CAVectorUnit.cpp
- Abstract: CAVectorUnit.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "CAVectorUnit.h"
-
-#if !TARGET_OS_WIN32
-	#include <sys/sysctl.h>
-#elif HAS_IPP
-	#include "ippdefs.h"
-	#include "ippcore.h"
-#endif
-
-int gCAVectorUnitType = kVecUninitialized;
-
-#if TARGET_OS_WIN32
-// Use cpuid to check if SSE2 is available.
-// Before calling this function make sure cpuid is available
-static SInt32 IsSSE2Available()
-{
-	int return_value;
-
-	{
-		int r_edx;
-		_asm
-		{
-			mov eax, 0x01
-			cpuid
-			mov r_edx, edx
-		}
-		return_value = (r_edx >> 26) & 0x1;
-	}
-	return return_value;
-}
-
-// Use cpuid to check if SSE3 is available.
-// Before calling this function make sure cpuid is available
-static SInt32 IsSSE3Available()
-{
-	SInt32 return_value;
-
-	{
-		SInt32 r_ecx;
-		_asm
-		{
-			mov eax, 0x01
-			cpuid
-			mov r_ecx, ecx
-		}
-		return_value = r_ecx & 0x1;
-	}
-	return return_value;
-}
-
-// Return true if the cpuid instruction is available.
-// The cpuid instruction is available if bit 21 in the EFLAGS register can be changed
-// This function may not work on Intel CPUs prior to Pentium (didn't test)
-static bool IsCpuidAvailable()
-{
-	SInt32 return_value = 0x0;
-	_asm{
-		pushfd    ;			//push original EFLAGS
-		pop eax   ;			//get original EFLAGS
-		mov ecx, eax   ;	//save original EFLAGS
-		xor eax, 200000h  ; //flip ID bit in EFLAGS
-		push eax   ;		//save new EFLAGS value on stack
-		popfd    ;			//replace current EFLAGS value
-		pushfd    ;			//get new EFLAGS
-		pop eax   ;			//store new EFLAGS in EAX
-		xor eax, ecx   ;
-		je end_cpuid_identify  ; //can't toggle ID bit
-		mov return_value, 0x1;
-end_cpuid_identify:
-		nop;
-		}
-		return return_value;
-}
-
-#endif
-
-SInt32	CAVectorUnit_Examine()
-{
-	int result = kVecNone;
-
-#if TARGET_OS_WIN32
-#if HAS_IPP
-	// Initialize the static IPP library! This needs to be done before
-	// any IPP function calls, otherwise we may have a performance penalty
-	int status = ippStaticInit();
-	if ( status == ippStsNonIntelCpu )
-	{
-		IppCpuType cpuType = ippGetCpuType();
-		if ( cpuType >= ippCpuSSE || cpuType <= ippCpuSSE42 )
-			ippStaticInitCpu( cpuType );
-	}
-#endif
-	{
-		// On Windows we use cpuid to detect the vector unit because it works on Intel and AMD.
-		// The IPP library does not detect SSE on AMD processors.
-		if (IsCpuidAvailable())
-		{
-			if(IsSSE3Available())
-			{
-				result = kVecSSE3;
-			}
-			else if(IsSSE2Available())
-			{
-				result = kVecSSE2;
-			}
-		}
-	}
-#elif TARGET_OS_MAC
-#if DEBUG
-	if (getenv("CA_NoVector")) {
-		fprintf(stderr, "CA_NoVector set; Vector unit optimized routines will be bypassed\n");
-		return result;
-	}
-	else
-#endif
-	{
-	#if (TARGET_CPU_PPC || TARGET_CPU_PPC64)
-		int sels[2] = { CTL_HW, HW_VECTORUNIT };
-		int vType = 0; //0 == scalar only
-		size_t length = sizeof(vType);
-		int error = sysctl(sels, 2, &vType, &length, NULL, 0);
-		if (!error && vType > 0)
-			result = kVecAltivec;
-	#elif (TARGET_CPU_X86 || TARGET_CPU_X86_64)
-		static const struct { const char* kName; const int kVectype; } kStringVectypes[] = {
-			{ "hw.optional.avx1_0", kVecAVX1 }, { "hw.optional.sse3", kVecSSE3 }, { "hw.optional.sse2", kVecSSE2 }
-		};
-		static const size_t kNumStringVectypes = sizeof(kStringVectypes)/sizeof(kStringVectypes[0]);
-		int i = 0, answer = 0;
-		while(i != kNumStringVectypes)
-		{
-			size_t length = sizeof(answer);
-			int error = sysctlbyname(kStringVectypes[i].kName, &answer, &length, NULL, 0);
-			if (!error && answer)
-			{
-				result = kStringVectypes[i].kVectype;
-				break;
-			}
-			++i;
-		};
-	#elif CA_ARM_NEON
-		result = kVecNeon;
-	#endif
-	}
-#endif
-	gCAVectorUnitType = result;
-	return result;
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.h
deleted file mode 100644
index 6693392..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-     File: CAVectorUnit.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAVectorUnit_h__
-#define __CAVectorUnit_h__
-
-#include <TargetConditionals.h>
-#include "CAVectorUnitTypes.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreFoundation/CFBase.h>
-#else
-	#include "CFBase.h"
-#endif
-
-// Unify checks for vector units.
-// Allow setting an environment variable "CA_NoVector" to turn off vectorized code at runtime (very useful for performance testing).
-
-extern int gCAVectorUnitType;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern SInt32 CAVectorUnit_Examine();	// expensive. use GetType() for lazy initialization and caching.
-
-static inline SInt32 CAVectorUnit_GetType()
-{
-	int x = gCAVectorUnitType;
-	return (x != kVecUninitialized) ? x : CAVectorUnit_Examine();
-}
-
-static inline Boolean CAVectorUnit_HasVectorUnit()
-{
-	return CAVectorUnit_GetType() > kVecNone;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#ifdef __cplusplus
-class CAVectorUnit {
-public:
-	static SInt32		GetVectorUnitType() { return CAVectorUnit_GetType(); }
-	static bool			HasVectorUnit() { return GetVectorUnitType() > kVecNone; }
-	static bool			HasAltivec() { return GetVectorUnitType() == kVecAltivec; }
-	static bool			HasSSE2() { return GetVectorUnitType() >= kVecSSE2; }
-	static bool			HasSSE3() { return GetVectorUnitType() >= kVecSSE3; }
-	static bool			HasAVX1() { return GetVectorUnitType() >= kVecAVX1; }
-	static bool			HasNeon() { return GetVectorUnitType() == kVecNeon; }
-};
-#endif
-
-#endif // __CAVectorUnit_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h
deleted file mode 100644
index 5181f60..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-     File: CAVectorUnitTypes.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAVectorUnitTypes_h__
-#define __CAVectorUnitTypes_h__
-
-enum {
-	kVecUninitialized = -1,
-	kVecNone = 0,
-	kVecAltivec = 1,
-	kVecSSE2 = 100,
-	kVecSSE3 = 101,
-	kVecAVX1 = 110,
-	kVecNeon = 200
-};
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h
deleted file mode 100644
index 4027cb8..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
-     File: CAXException.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CAXException_h__
-#define __CAXException_h__
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreFoundation/CoreFoundation.h>
-#else
-	#include <ConditionalMacros.h>
-	#include <CoreFoundation.h>
-#endif
-#include "CADebugMacros.h"
-#include <ctype.h>
-//#include <stdio.h>
-#include <string.h>
-
-
-class CAX4CCString {
-public:
-	CAX4CCString(OSStatus error) {
-		// see if it appears to be a 4-char-code
-		UInt32 beErr = CFSwapInt32HostToBig(error);
-		char *str = mStr;
-		memcpy(str + 1, &beErr, 4);
-		if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
-			str[0] = str[5] = '\'';
-			str[6] = '\0';
-		} else if (error > -200000 && error < 200000)
-			// no, format it as an integer
-			snprintf(str, sizeof(mStr), "%d", (int)error);
-		else
-			snprintf(str, sizeof(mStr), "0x%x", (int)error);
-	}
-	const char *get() const { return mStr; }
-	operator const char *() const { return mStr; }
-private:
-	char mStr[16];
-};
-
-class CAX4CCStringNoQuote {
-public:
-	CAX4CCStringNoQuote(OSStatus error) {
-		// see if it appears to be a 4-char-code
-		UInt32 beErr = CFSwapInt32HostToBig(error);
-		char *str = mStr;
-		memcpy(str, &beErr, 4);
-		if (isprint(str[0]) && isprint(str[1]) && isprint(str[2]) && isprint(str[3])) {
-			str[4] = '\0';
-		} else if (error > -200000 && error < 200000)
-			// no, format it as an integer
-			snprintf(str, sizeof(mStr), "%d", (int)error);
-		else
-			snprintf(str, sizeof(mStr), "0x%x", (int)error);
-	}
-	const char *get() const { return mStr; }
-	operator const char *() const { return mStr; }
-private:
-	char mStr[16];
-};
-
-
-// An extended exception class that includes the name of the failed operation
-class CAXException {
-public:
-	CAXException(const char *operation, OSStatus err) :
-		mError(err)
-		{
-			if (operation == NULL)
-				mOperation[0] = '\0';
-			else if (strlen(operation) >= sizeof(mOperation)) {
-				memcpy(mOperation, operation, sizeof(mOperation) - 1);
-				mOperation[sizeof(mOperation) - 1] = '\0';
-			} else
-
-			strlcpy(mOperation, operation, sizeof(mOperation));
-		}
-
-	char *FormatError(char *str, size_t strsize) const
-	{
-		return FormatError(str, strsize, mError);
-	}
-
-	char				mOperation[256];
-	const OSStatus		mError;
-
-	// -------------------------------------------------
-
-	typedef void (*WarningHandler)(const char *msg, OSStatus err);
-
-	static char *FormatError(char *str, size_t strsize, OSStatus error)
-	{
-		strlcpy(str, CAX4CCString(error), strsize);
-		return str;
-	}
-
-	static void Warning(const char *s, OSStatus error)
-	{
-		if (sWarningHandler)
-			(*sWarningHandler)(s, error);
-	}
-
-	static void SetWarningHandler(WarningHandler f) { sWarningHandler = f; }
-private:
-	static WarningHandler	sWarningHandler;
-};
-
-#if	DEBUG || CoreAudio_Debug
-	#define XThrowIfError(error, operation)										\
-		do {																	\
-			OSStatus __err = error;												\
-			if (__err) {														\
-				DebugMessageN4("%s:%d: about to throw %s: %s", __FILE__, __LINE__, CAX4CCString(__err).get(), operation);\
-				__THROW_STOP;															\
-				throw CAXException(operation, __err);							\
-			}																	\
-		} while (0)
-
-	#define XThrowIf(condition, error, operation)								\
-		do {																	\
-			if (condition) {													\
-				OSStatus __err = error;											\
-				DebugMessageN4("%s:%d: about to throw %s: %s", __FILE__, __LINE__, CAX4CCString(__err).get(), operation);\
-				__THROW_STOP;															\
-				throw CAXException(operation, __err);							\
-			}																	\
-		} while (0)
-
-	#define XRequireNoError(error, label)										\
-		do {																	\
-			OSStatus __err = error;												\
-			if (__err) {														\
-				DebugMessageN4("%s:%d: about to throw %s: %s", __FILE__, __LINE__, CAX4CCString(__err).get(), #error);\
-				STOP;															\
-				goto label;														\
-			}																	\
-		} while (0)
-
-	#define XAssert(assertion)													\
-		do {																	\
-			if (!(assertion)) {													\
-				DebugMessageN3("%s:%d: error: failed assertion: %s", __FILE__, __LINE__, #assertion);		\
-				__ASSERT_STOP;															\
-			}																	\
-		} while (0)
-
-	#define XAssertNoError(error)												\
-		do {																	\
-			OSStatus __err = error;												\
-			if (__err) {														\
-				DebugMessageN4("%s:%d: error %s: %s", __FILE__, __LINE__, CAX4CCString(__err).get(), #error);\
-				STOP;															\
-			}																	\
-		} while (0)
-
-	#define ca_require_noerr(errorCode, exceptionLabel)							\
-		do																		\
-		{																		\
-			int evalOnceErrorCode = (errorCode);								\
-			if ( __builtin_expect(0 != evalOnceErrorCode, 0) )					\
-			{																	\
-				DebugMessageN5("ca_require_noerr: [%s, %d] (goto %s;) %s:%d",	\
-					#errorCode,	evalOnceErrorCode,		 						\
-					#exceptionLabel,											\
-					__FILE__,													\
-					__LINE__);													\
-				goto exceptionLabel;											\
-			}																	\
-		} while ( 0 )
-
-	#define ca_verify_noerr(errorCode)											\
-		do																		\
-		{																		\
-			int evalOnceErrorCode = (errorCode);								\
-			if ( __builtin_expect(0 != evalOnceErrorCode, 0) )					\
-			{																	\
-				DebugMessageN4("ca_verify_noerr: [%s, %d] %s:%d",				\
-					#errorCode,	evalOnceErrorCode,								\
-					__FILE__,													\
-					__LINE__);													\
-			}																	\
-		} while ( 0 )
-
-	#define ca_debug_string(message)											\
-		do																		\
-		{																		\
-			DebugMessageN3("ca_debug_string: %s %s:%d",							\
-				message,														\
-				__FILE__,														\
-				__LINE__);														\
-		} while ( 0 )
-
-
-	#define ca_verify(assertion)												\
-		do																		\
-		{																		\
-			if ( __builtin_expect(!(assertion), 0) )							\
-			{																	\
-				DebugMessageN3("ca_verify: %s %s:%d",							\
-					#assertion,													\
-					__FILE__,													\
-					__LINE__);													\
-			}																	\
-		} while ( 0 )
-
-	#define ca_require(assertion, exceptionLabel)								\
-		do																		\
-		{																		\
-			if ( __builtin_expect(!(assertion), 0) )							\
-			{																	\
-				DebugMessageN4("ca_require: %s %s %s:%d",						\
-					#assertion,													\
-					#exceptionLabel,											\
-					__FILE__,													\
-					__LINE__);													\
-				goto exceptionLabel;											\
-			}																	\
-		} while ( 0 )
-
-   #define ca_check(assertion)													\
-      do																		\
-      {																			\
-          if ( __builtin_expect(!(assertion), 0) )								\
-          {																		\
-              DebugMessageN3("ca_check: %s %s:%d",							\
-                  #assertion,													\
-                  __FILE__,														\
-                  __LINE__);													\
-          }																		\
-      } while ( 0 )
-
-#else
-	#define XThrowIfError(error, operation)										\
-		do {																	\
-			OSStatus __err = error;												\
-			if (__err) {														\
-				throw CAXException(operation, __err);							\
-			}																	\
-		} while (0)
-
-	#define XThrowIf(condition, error, operation)								\
-		do {																	\
-			if (condition) {													\
-				OSStatus __err = error;											\
-				throw CAXException(operation, __err);							\
-			}																	\
-		} while (0)
-
-	#define XRequireNoError(error, label)										\
-		do {																	\
-			OSStatus __err = error;												\
-			if (__err) {														\
-				goto label;														\
-			}																	\
-		} while (0)
-
-	#define XAssert(assertion)													\
-		do {																	\
-			if (!(assertion)) {													\
-			}																	\
-		} while (0)
-
-	#define XAssertNoError(error)												\
-		do {																	\
-			/*OSStatus __err =*/ error;											\
-		} while (0)
-
-	#define ca_require_noerr(errorCode, exceptionLabel)							\
-		do																		\
-		{																		\
-			if ( __builtin_expect(0 != (errorCode), 0) )						\
-			{																	\
-				goto exceptionLabel;											\
-			}																	\
-		} while ( 0 )
-
-	#define ca_verify_noerr(errorCode)											\
-		do																		\
-		{																		\
-			if ( 0 != (errorCode) )												\
-			{																	\
-			}																	\
-		} while ( 0 )
-
-	#define ca_debug_string(message)
-
-	#define ca_verify(assertion)												\
-		do																		\
-		{																		\
-			if ( !(assertion) )													\
-			{																	\
-			}																	\
-		} while ( 0 )
-
-	#define ca_require(assertion, exceptionLabel)								\
-		do																		\
-		{																		\
-			if ( __builtin_expect(!(assertion), 0) )							\
-			{																	\
-				goto exceptionLabel;											\
-			}																	\
-		} while ( 0 )
-
-   #define ca_check(assertion)													\
-		do																		\
-		{																		\
-			if ( !(assertion) )													\
-			{																	\
-			}																	\
-		} while ( 0 )
-
-
-#endif
-
-#define XThrow(error, operation) XThrowIf(true, error, operation)
-#define XThrowIfErr(error) XThrowIfError(error, #error)
-
-#endif // __CAXException_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.cpp
deleted file mode 100644
index dfa9e65..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-     File: CarbonEventHandler.cpp
- Abstract: CarbonEventHandler.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-
-#include "../../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-#include "CarbonEventHandler.h"
-
-static pascal OSStatus TheEventHandler(EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData)
-{
-	CarbonEventHandler *handler = (CarbonEventHandler *)inUserData;
-	if (handler->HandleEvent(inHandlerRef, inEvent))
-		return noErr;
-	else return eventNotHandledErr;
-}
-
-CarbonEventHandler::CarbonEventHandler() :
-	mHandlers(NULL)
-{
-}
-
-CarbonEventHandler::~CarbonEventHandler()
-{
-	if (mHandlers != NULL) {
-		int count = static_cast<int>(CFDictionaryGetCount(mHandlers));
-		EventHandlerRef *theHandlers = (EventHandlerRef*) malloc(count * sizeof(EventHandlerRef));
-		CFDictionaryGetKeysAndValues(mHandlers, NULL, (const void **)theHandlers);
-
-		for (int i = 0; i < count; i++)
-			RemoveEventHandler(theHandlers[i]);
-		CFDictionaryRemoveAllValues(mHandlers);
-		CFRelease (mHandlers);
-		free(theHandlers);
-	}
-}
-
-void	CarbonEventHandler::WantEventTypes(EventTargetRef target, UInt32 inNumTypes, const EventTypeSpec *inList)
-{
-	if (mHandlers == NULL)
-		mHandlers = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
-
-	EventHandlerRef handler;
-
-	if (CFDictionaryGetValueIfPresent (mHandlers, target, (const void **)&handler))	// if there is already a handler for the target, add the type
-		verify_noerr(AddEventTypesToHandler(handler, inNumTypes, inList));
-	else {
-		verify_noerr(InstallEventHandler(target, TheEventHandler, inNumTypes, inList, this, &handler));
-		CFDictionaryAddValue(mHandlers, target, handler);
-	}
-}
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.h
deleted file mode 100644
index 4ba4995..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-     File: CarbonEventHandler.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __CarbonEventHandler_h__
-#define __CarbonEventHandler_h__
-
-#include <Carbon/Carbon.h>
-
-	/*! @class CarbonEventHandler */
-class CarbonEventHandler {
-public:
-	/*! @ctor CarbonEventHandler */
-	CarbonEventHandler();
-	/*! @dtor ~CarbonEventHandler */
-	virtual ~CarbonEventHandler();
-
-	/*! @method WantEventTypes */
-	virtual void	WantEventTypes(EventTargetRef target, UInt32 inNumTypes, const EventTypeSpec *inList);
-
-	/*! @method HandleEvent */
-	virtual bool	HandleEvent(EventHandlerCallRef inHandlerRef, EventRef event) = 0;
-
-protected:
-	/*! @var mHandlers */
-	CFMutableDictionaryRef mHandlers;
-};
-
-#endif // __CarbonEventHandler_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.cpp
deleted file mode 100644
index 50a5438..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
-     File: ComponentBase.cpp
- Abstract: ComponentBase.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "ComponentBase.h"
-#include "CAXException.h"
-
-#if TARGET_OS_MAC
-pthread_mutex_t ComponentInitLocker::sComponentOpenMutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_once_t ComponentInitLocker::sOnce = PTHREAD_ONCE_INIT;
-
-void ComponentInitLocker::InitComponentInitLocker()
-{
-	// have to do this because OS X lacks PTHREAD_MUTEX_RECURSIVE_INITIALIZER_NP
-	pthread_mutexattr_t attr;
-	pthread_mutexattr_init(&attr);
-	pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
-	pthread_mutex_init(&sComponentOpenMutex, &attr);
-	pthread_mutexattr_destroy(&attr);
-}
-
-#elif TARGET_OS_WIN32
-CAGuard	ComponentInitLocker::sComponentOpenGuard("sComponentOpenGuard");
-#endif
-
-ComponentBase::EInstanceType ComponentBase::sNewInstanceType;
-
-static OSStatus CB_GetComponentDescription (const AudioComponentInstance inInstance, AudioComponentDescription * outDesc);
-#if !CA_USE_AUDIO_PLUGIN_ONLY && !TARGET_OS_WIN32
-	static OSStatus CMgr_GetComponentDescription (const AudioComponentInstance inInstance, AudioComponentDescription * outDesc);
-#endif
-
-ComponentBase::ComponentBase(AudioComponentInstance inInstance)
-	: mComponentInstance(inInstance),
-	  mInstanceType(sNewInstanceType)
-{
-	GetComponentDescription();
-}
-
-ComponentBase::~ComponentBase()
-{
-}
-
-void			ComponentBase::PostConstructor()
-{
-}
-
-void			ComponentBase::PreDestructor()
-{
-}
-
-#define ACPI	((AudioComponentPlugInInstance *)self)
-#define ACImp	((ComponentBase *)&ACPI->mInstanceStorage)
-
-OSStatus ComponentBase::AP_Open(void *self, AudioUnit compInstance)
-{
-	OSStatus result = noErr;
-	try {
-		ComponentInitLocker lock;
-
-		ComponentBase::sNewInstanceType = ComponentBase::kAudioComponentInstance;
-		ComponentBase *cb = (ComponentBase *)(*ACPI->mConstruct)(&ACPI->mInstanceStorage, compInstance);
-		cb->PostConstructor();	// allows base class to do additional initialization
-		// once the derived class is fully constructed
-		result = noErr;
-	}
-	COMPONENT_CATCH
-	if (result)
-		delete ACPI;
-	return result;
-}
-
-OSStatus ComponentBase::AP_Close(void *self)
-{
-	OSStatus result = noErr;
-	try {
-		if (ACImp) {
-			ACImp->PreDestructor();
-			(*ACPI->mDestruct)(&ACPI->mInstanceStorage);
-			free(self);
-		}
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-OSStatus		ComponentBase::Version()
-{
-	return 0x00000001;
-}
-
-OSStatus		ComponentBase::ComponentEntryDispatch(ComponentParameters *p, ComponentBase *This)
-{
-	if (This == NULL) return kAudio_ParamError;
-
-	OSStatus result = noErr;
-
-	switch (p->what) {
-	case kComponentCloseSelect:
-		This->PreDestructor();
-		delete This;
-		break;
-
-	case kComponentVersionSelect:
-		result = This->Version();
-		break;
-
-	case kComponentCanDoSelect:
-		switch (GetSelectorForCanDo(p)) {
-		case kComponentOpenSelect:
-		case kComponentCloseSelect:
-		case kComponentVersionSelect:
-		case kComponentCanDoSelect:
-			return 1;
-		default:
-			return 0;
-		}
-
-	default:
-		result = badComponentSelector;
-		break;
-	}
-	return result;
-}
-
-SInt16		ComponentBase::GetSelectorForCanDo(ComponentParameters *params)
-{
-	if (params->what != kComponentCanDoSelect) return 0;
-
-	#if TARGET_CPU_X86
-		SInt16 sel = params->params[0];
-	#elif TARGET_CPU_X86_64
-		SInt16 sel = params->params[1];
-	#elif TARGET_CPU_PPC
-		SInt16 sel = (params->params[0] >> 16);
-	#else
-		SInt16 sel = params->params[0];
-	#endif
-
-	return sel;
-/*
-		printf ("flags:%d, paramSize: %d, what: %d\n\t", params->flags, params->paramSize, params->what);
-		for (int i = 0; i < params->paramSize; ++i) {
-			printf ("[%d]:%d(0x%x), ", i, params->params[i], params->params[i]);
-		}
-		printf("\n\tsel:%d\n", sel);
-*/
-}
-
-#endif
-
-#if CA_DO_NOT_USE_AUDIO_COMPONENT
-static OSStatus ComponentBase_GetComponentDescription (const AudioComponentInstance & inInstance, AudioComponentDescription &outDesc);
-#endif
-
-AudioComponentDescription ComponentBase::GetComponentDescription() const
-{
-	AudioComponentDescription desc;
-	OSStatus result = 1;
-
-	if (IsPluginObject()) {
-		ca_require_noerr(result = CB_GetComponentDescription (mComponentInstance, &desc), home);
-	}
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	else {
-		ca_require_noerr(result = CMgr_GetComponentDescription (mComponentInstance, &desc), home);
-	}
-#endif
-
-home:
-	if (result)
-		memset (&desc, 0, sizeof(AudioComponentDescription));
-
-	return desc;
-}
-
-#if CA_USE_AUDIO_PLUGIN_ONLY
-// everything we need is there and we should be linking against it
-static OSStatus CB_GetComponentDescription (const AudioComponentInstance inInstance, AudioComponentDescription * outDesc)
-{
-	AudioComponent comp = AudioComponentInstanceGetComponent(inInstance);
-	if (comp)
-		return AudioComponentGetDescription(comp, outDesc);
-
-	return kAudio_ParamError;
-}
-
-#elif !TARGET_OS_WIN32
-// these are the direct dependencies on ComponentMgr calls that an AU
-// that is a component mgr is dependent on
-
-// these are dynamically loaded so that these calls will work on Leopard
-#include <dlfcn.h>
-
-static OSStatus CB_GetComponentDescription (const AudioComponentInstance inInstance, AudioComponentDescription * outDesc)
-{
-	typedef AudioComponent (*AudioComponentInstanceGetComponentProc) (AudioComponentInstance);
-	static AudioComponentInstanceGetComponentProc aciGCProc = NULL;
-
-	typedef OSStatus (*AudioComponentGetDescriptionProc)(AudioComponent, AudioComponentDescription *);
-	static AudioComponentGetDescriptionProc acGDProc = NULL;
-
-	static int doneInit = 0;
-	if (doneInit == 0) {
-		doneInit = 1;
-		void* theImage = dlopen("/System/Library/Frameworks/AudioUnit.framework/AudioUnit", RTLD_LAZY);
-		if (theImage != NULL)
-		{
-			aciGCProc = (AudioComponentInstanceGetComponentProc)dlsym (theImage, "AudioComponentInstanceGetComponent");
-			if (aciGCProc) {
-				acGDProc = (AudioComponentGetDescriptionProc)dlsym (theImage, "AudioComponentGetDescription");
-			}
-		}
-	}
-
-	OSStatus result = kAudio_UnimplementedError;
-	if (acGDProc && aciGCProc) {
-		AudioComponent comp = (*aciGCProc)(inInstance);
-		if (comp)
-			result = (*acGDProc)(comp, outDesc);
-	}
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	else {
-		result = CMgr_GetComponentDescription (inInstance, outDesc);
-	}
-#endif
-
-	return result;
-}
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-// these are the direct dependencies on ComponentMgr calls that an AU
-// that is a component mgr is dependent on
-
-// these are dynamically loaded
-
-#include <CoreServices/CoreServices.h>
-#include <AudioUnit/AudioUnit.h>
-#include "CAXException.h"
-#include "ComponentBase.h"
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Component Manager
-// Used for fast dispatch with audio units
-typedef Handle (*GetComponentInstanceStorageProc)(ComponentInstance aComponentInstance);
-static GetComponentInstanceStorageProc sGetComponentInstanceStorageProc = NULL;
-
-typedef OSErr (*GetComponentInfoProc)(Component, ComponentDescription *, void*, void*, void*);
-static GetComponentInfoProc sGetComponentInfoProc = NULL;
-
-typedef void (*SetComponentInstanceStorageProc)(ComponentInstance, Handle);
-static SetComponentInstanceStorageProc sSetComponentInstanceStorageProc = NULL;
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-static void CSInitOnce(void* /*unused*/)
-{
-	void *theImage = dlopen("/System/Library/Frameworks/CoreServices.framework/CoreServices", RTLD_LAZY);
-	if (!theImage) return;
-
-	sGetComponentInstanceStorageProc = (GetComponentInstanceStorageProc) dlsym(theImage, "GetComponentInstanceStorage");
-	sGetComponentInfoProc = (GetComponentInfoProc)dlsym (theImage, "GetComponentInfo");
-	sSetComponentInstanceStorageProc = (SetComponentInstanceStorageProc) dlsym(theImage, "SetComponentInstanceStorage");
-}
-
-#if TARGET_OS_MAC
-
-#include <dispatch/dispatch.h>
-
-static dispatch_once_t sCSInitOnce = 0;
-
-static void CSInit ()
-{
-	dispatch_once_f(&sCSInitOnce, NULL, CSInitOnce);
-}
-
-#else
-
-static void CSInit ()
-{
-	static int sDoCSLoad = 1;
-	if (sDoCSLoad) {
-		sDoCSLoad = 0;
-		CSInitOnce(NULL);
-	}
-}
-
-#endif
-
-OSStatus CMgr_GetComponentDescription (const AudioComponentInstance inInstance, AudioComponentDescription * outDesc)
-{
-	CSInit();
-	if (sGetComponentInfoProc)
-		return (*sGetComponentInfoProc)((Component)inInstance, (ComponentDescription*)outDesc, NULL, NULL, NULL);
-	return kAudio_UnimplementedError;
-}
-
-Handle CMgr_GetComponentInstanceStorage(ComponentInstance aComponentInstance)
-{
-	CSInit();
-	if (sGetComponentInstanceStorageProc)
-		return (*sGetComponentInstanceStorageProc)(aComponentInstance);
-	return NULL;
-}
-
-void CMgr_SetComponentInstanceStorage(ComponentInstance aComponentInstance, Handle theStorage)
-{
-	CSInit();
-	if (sSetComponentInstanceStorageProc)
-		(*sSetComponentInstanceStorageProc)(aComponentInstance, theStorage);
-}
-#endif // !CA_USE_AUDIO_PLUGIN_ONLY
-
-#else
-//#include "ComponentManagerDependenciesWin.h"
-// everything we need is there and we should be linking against it
-static OSStatus CB_GetComponentDescription (const AudioComponentInstance inInstance, AudioComponentDescription * outDesc)
-{
-	AudioComponent comp = AudioComponentInstanceGetComponent(inInstance);
-	if (comp)
-		return AudioComponentGetDescription(comp, outDesc);
-
-	return kAudio_ParamError;
-}
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.h
deleted file mode 100644
index 6eb0321..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.h
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-     File: ComponentBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __ComponentBase_h__
-#define __ComponentBase_h__
-
-#include <new>
-#include "CADebugMacros.h"
-#include "CAXException.h"
-
-#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
-	#include <CoreAudio/CoreAudioTypes.h>
-	#include <AudioUnit/AudioUnit.h>
-
-	#if !CA_USE_AUDIO_PLUGIN_ONLY
-		#include <CoreServices/../Frameworks/CarbonCore.framework/Headers/Components.h>
-
-		#if	(MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_5)
-			#define AudioComponentInstance			ComponentInstance
-			#define AudioComponentDescription		ComponentDescription
-			#define	AudioComponent					Component
-		#endif
-		Handle CMgr_GetComponentInstanceStorage(ComponentInstance aComponentInstance);
-		void CMgr_SetComponentInstanceStorage(ComponentInstance aComponentInstance, Handle theStorage);
-	#endif
-
-	#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
-		typedef Float32 AudioUnitParameterValue;
-	#endif
-	#if COREAUDIOTYPES_VERSION < 1051
-		typedef Float32 AudioUnitSampleType;
-	#endif
-
-	#if !TARGET_OS_WIN32
-		#include <pthread.h>
-	#endif
-
-	#if TARGET_OS_WIN32
-		#include "CAGuard.h"
-	#endif
-#else
-	#include "CoreAudioTypes.h"
-	#if !CA_USE_AUDIO_PLUGIN_ONLY
-		#include "ComponentManagerDependenciesWin.h"
-	#endif
-	#include "AudioUnit.h"
-	#include "CAGuard.h"
-#endif
-
-#ifndef COMPONENT_THROW
-	#if VERBOSE_COMPONENT_THROW
-		#define COMPONENT_THROW(throw_err) \
-			do { DebugMessage(#throw_err); throw static_cast<OSStatus>(throw_err); } while (0)
-	#else
-		#define COMPONENT_THROW(throw_err) \
-			throw static_cast<OSStatus>(throw_err)
-	#endif
-#endif
-
-#define COMPONENT_CATCH \
-	catch (const CAXException &ex) { result = ex.mError; } \
-	catch (std::bad_alloc &) { result = kAudio_MemFullError; } \
-	catch (OSStatus catch_err) { result = catch_err; } \
-	catch (OSErr catch_err) { result = catch_err; } \
-	catch (...) { result = -1; }
-
-/*! @class ComponentBase */
-class ComponentBase {
-public:
-	// classic MacErrors
-	enum { noErr = 0};
-
-	/*! @ctor ComponentBase */
-				ComponentBase(AudioComponentInstance inInstance);
-
-	/*! @dtor ~ComponentBase */
-	virtual 	~ComponentBase();
-
-	/*! @method PostConstructor */
-	virtual void			PostConstructor();
-
-	/*! @method PreDestructor */
-	virtual void			PreDestructor();
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	/*! @method Version */
-	virtual OSStatus		Version();
-
-	/*! @method ComponentEntryDispatch */
-	static OSStatus		ComponentEntryDispatch(ComponentParameters *p, ComponentBase *This);
-
-	/*! GetSelectorForCanDo */
-	static SInt16		GetSelectorForCanDo(ComponentParameters *params);
-#endif
-
-	/*! @method GetComponentInstance */
-	AudioComponentInstance		GetComponentInstance() const { return mComponentInstance; }
-
-	/*! @method GetComponentDescription */
-	AudioComponentDescription	GetComponentDescription() const;
-
-	// This global variable is so that new instances know how they were instantiated: via the Component Manager,
-	// or as AudioComponents. It's ugly, but preferable to altering the constructor of every class in the hierarchy.
-	// It's safe because construction is protected by ComponentInitLocker.
-	enum EInstanceType { kComponentMgrInstance, kAudioComponentInstance };
-	static EInstanceType sNewInstanceType;
-
-	/*! @method IsPluginObject */
-	bool			IsPluginObject () const { return mInstanceType == kAudioComponentInstance; }
-	/*! @method IsCMgrObject */
-	bool			IsCMgrObject () const { return mInstanceType == kComponentMgrInstance; }
-
-	/*! @method AP_Open */
-	static OSStatus AP_Open(void *self, AudioUnit compInstance);
-
-	/*! @method AP_Close */
-	static OSStatus AP_Close(void *self);
-
-protected:
-	/*! @var mComponentInstance */
-	AudioComponentInstance		mComponentInstance;
-	EInstanceType				mInstanceType;
-};
-
-class ComponentInitLocker
-{
-#if TARGET_OS_MAC
-public:
-	ComponentInitLocker()
-	{
-		pthread_once(&sOnce, InitComponentInitLocker);
-		pthread_mutex_lock(&sComponentOpenMutex);
-		mPreviousNewInstanceType = ComponentBase::sNewInstanceType;
-	}
-	~ComponentInitLocker()
-	{
-		ComponentBase::sNewInstanceType = mPreviousNewInstanceType;
-		pthread_mutex_unlock(&sComponentOpenMutex);
-	}
-
-	// There are situations (11844772) where we need to be able to release the lock early.
-	class Unlocker {
-	public:
-		Unlocker()
-		{
-			pthread_mutex_unlock(&sComponentOpenMutex);
-		}
-		~Unlocker()
-		{
-			pthread_mutex_lock(&sComponentOpenMutex);
-		}
-	};
-
-private:
-	static pthread_mutex_t sComponentOpenMutex;
-	static pthread_once_t sOnce;
-	static void InitComponentInitLocker();
-
-#elif TARGET_OS_WIN32
-public:
-	bool sNeedsUnlocking;
-	ComponentInitLocker() { sNeedsUnlocking = sComponentOpenGuard.Lock(); }
-	~ComponentInitLocker() { if(sNeedsUnlocking) { sComponentOpenGuard.Unlock(); } }
-private:
-	static CAGuard	sComponentOpenGuard;
-#endif
-
-private:
-	ComponentBase::EInstanceType	mPreviousNewInstanceType;
-};
-
-/*! @class AudioComponentPlugInInstance */
-struct AudioComponentPlugInInstance {
-	AudioComponentPlugInInterface		mPlugInInterface;
-	void *								(*mConstruct)(void *memory, AudioComponentInstance ci);
-	void								(*mDestruct)(void *memory);
-	void *								mPad[2];				// pad to a 16-byte boundary (in either 32 or 64 bit mode)
-	UInt32								mInstanceStorage;		// the ACI implementation object is constructed into this memory
-																// this member is just a placeholder. it is aligned to a 16byte boundary
-};
-
-/*! @class APFactory */
-template <class APMethodLookup, class Implementor>
-class APFactory {
-public:
-	static void *Construct(void *memory, AudioComponentInstance compInstance)
-	{
-		return new(memory) Implementor(compInstance);
-	}
-
-	static void Destruct(void *memory)
-	{
-		((Implementor *)memory)->~Implementor();
-	}
-
-	// This is the AudioComponentFactoryFunction. It returns an AudioComponentPlugInInstance.
-	// The actual implementation object is not created until Open().
-	static AudioComponentPlugInInterface *Factory(const AudioComponentDescription * /* inDesc */)
-	{
-		AudioComponentPlugInInstance *acpi =
-				(AudioComponentPlugInInstance *)malloc( offsetof(AudioComponentPlugInInstance, mInstanceStorage) + sizeof(Implementor) );
-		acpi->mPlugInInterface.Open = ComponentBase::AP_Open;
-		acpi->mPlugInInterface.Close = ComponentBase::AP_Close;
-		acpi->mPlugInInterface.Lookup = APMethodLookup::Lookup;
-		acpi->mPlugInInterface.reserved = NULL;
-		acpi->mConstruct = Construct;
-		acpi->mDestruct = Destruct;
-		acpi->mPad[0] = NULL;
-		acpi->mPad[1] = NULL;
-		return (AudioComponentPlugInInterface*)acpi;
-	}
-
-	// This is for runtime registration (not for plug-ins loaded from bundles).
-	static AudioComponent Register(UInt32 type, UInt32 subtype, UInt32 manuf, CFStringRef name, UInt32 vers, UInt32 flags=0)
-	{
-		AudioComponentDescription desc = { type, subtype, manuf, flags, 0 };
-		return AudioComponentRegister(&desc, name, vers, Factory);
-	}
-};
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-/*! @class ComponentEntryPoint
- *	@discussion This is only used for a component manager version
-*/
-template <class Class>
-class ComponentEntryPoint {
-public:
-	/*! @method Dispatch */
-	static OSStatus Dispatch(ComponentParameters *params, Class *obj)
-	{
-		OSStatus result = noErr;
-
-		try {
-			if (params->what == kComponentOpenSelect) {
-				// solve a host of initialization thread safety issues.
-				ComponentInitLocker lock;
-
-				ComponentBase::sNewInstanceType = ComponentBase::kComponentMgrInstance;
-				ComponentInstance ci = (ComponentInstance)(params->params[0]);
-				Class *This = new Class((AudioComponentInstance)ci);
-				This->PostConstructor();	// allows base class to do additional initialization
-											// once the derived class is fully constructed
-
-				CMgr_SetComponentInstanceStorage(ci, (Handle)This);
-			} else
-				result = Class::ComponentEntryDispatch(params, obj);
-		}
-		COMPONENT_CATCH
-
-		return result;
-	}
-
-	/*! @method Register */
-	static Component Register(OSType compType, OSType subType, OSType manufacturer)
-	{
-		ComponentDescription	description = {compType, subType, manufacturer, 0, 0};
-		Component	component = RegisterComponent(&description, (ComponentRoutineUPP) Dispatch, registerComponentGlobal, NULL, NULL, NULL);
-		if (component != NULL) {
-			SetDefaultComponent(component, defaultComponentAnyFlagsAnyManufacturerAnySubType);
-		}
-		return component;
-	}
-};
-
-// NOTE: Component Mgr is deprecated in ML.
-// this macro should not be used with new audio components
-// it is only for backwards compatibility with Lion and SL.
-// this macro registers both a plugin and a component mgr version.
-#define AUDIOCOMPONENT_ENTRY(FactoryType, Class) \
-    extern "C" OSStatus Class##Entry(ComponentParameters *params, Class *obj); \
-    extern "C" OSStatus Class##Entry(ComponentParameters *params, Class *obj) { \
-        return ComponentEntryPoint<Class>::Dispatch(params, obj); \
-    } \
-    extern "C" void * Class##Factory(const AudioComponentDescription *inDesc); \
-    extern "C" void * Class##Factory(const AudioComponentDescription *inDesc) { \
-        return FactoryType<Class>::Factory(inDesc); \
-    }
-    // the only component we still support are the carbon based view components
-    // you should be using this macro now to exclusively register those types
-#define VIEW_COMPONENT_ENTRY(Class) \
-    extern "C" OSStatus Class##Entry(ComponentParameters *params, Class *obj); \
-    extern "C" OSStatus Class##Entry(ComponentParameters *params, Class *obj) { \
-        return ComponentEntryPoint<Class>::Dispatch(params, obj); \
-    }
-
-	/*! @class ComponentRegistrar */
-template <class Class, OSType Type, OSType Subtype, OSType Manufacturer>
-class ComponentRegistrar {
-public:
-	/*! @ctor ComponentRegistrar */
-	ComponentRegistrar() { ComponentEntryPoint<Class>::Register(Type, Subtype, Manufacturer); }
-};
-
-#define	COMPONENT_REGISTER(Class,Type,Subtype,Manufacturer) \
-	static ComponentRegistrar<Class, Type, Subtype, Manufacturer>	gRegistrar##Class
-#else
-#define COMPONENT_ENTRY(Class)
-#define COMPONENT_REGISTER(Class)
-// this macro is used to generate the Entry Point for a given Audio Plugin
-// you should be using this macro now with audio components
-#define AUDIOCOMPONENT_ENTRY(FactoryType, Class) \
-    extern "C" void * Class##Factory(const AudioComponentDescription *inDesc); \
-    extern "C" void * Class##Factory(const AudioComponentDescription *inDesc) { \
-        return FactoryType<Class>::Factory(inDesc); \
-    }
-
-#endif // !CA_USE_AUDIO_PLUGIN_ONLY
-
-
-#endif // __ComponentBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp
deleted file mode 100644
index 8acf8ca..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-     File: MusicDeviceBase.cpp
- Abstract: MusicDeviceBase.h
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#include "MusicDeviceBase.h"
-
-// compatibility with older OS SDK releases
-typedef OSStatus
-(*TEMP_MusicDeviceMIDIEventProc)(	void *			inComponentStorage,
-							UInt32					inStatus,
-							UInt32					inData1,
-							UInt32					inData2,
-							UInt32					inOffsetSampleFrame);
-
-typedef OSStatus
-(*TEMP_MusicDeviceStartNoteProc)(	void *				inComponentStorage,
-						MusicDeviceInstrumentID			inInstrument,
-						MusicDeviceGroupID				inGroupID,
-						NoteInstanceID *				outNoteInstanceID,
-						UInt32							inOffsetSampleFrame,
-						const MusicDeviceNoteParams *	inParams);
-
-typedef OSStatus
-(*TEMP_MusicDeviceStopNoteProc)(void *					inComponentStorage,
-						MusicDeviceGroupID				inGroupID,
-						NoteInstanceID					inNoteInstanceID,
-						UInt32							inOffsetSampleFrame);
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-
-static OSStatus		MusicDeviceBaseMIDIEvent(void *			inComponentStorage,
-						UInt32				inStatus,
-						UInt32				inData1,
-						UInt32				inData2,
-						UInt32				inOffsetSampleFrame);
-
-static OSStatus		MusicDeviceBaseStartNote(	void *		inComponentStorage,
-						MusicDeviceInstrumentID			inInstrument,
-						MusicDeviceGroupID				inGroupID,
-						NoteInstanceID *				outNoteInstanceID,
-						UInt32							inOffsetSampleFrame,
-						const MusicDeviceNoteParams *	inParams);
-
-static OSStatus		MusicDeviceBaseStopNote(void *			inComponentStorage,
-						MusicDeviceGroupID				inGroupID,
-						NoteInstanceID					inNoteInstanceID,
-						UInt32							inOffsetSampleFrame);
-
-#endif
-
-MusicDeviceBase::MusicDeviceBase(AudioComponentInstance			inInstance,
-									UInt32						numInputs,
-									UInt32						numOutputs,
-									UInt32						numGroups)
-	: AUBase(inInstance, numInputs, numOutputs, numGroups),
-	  AUMIDIBase(this)
-{
-}
-
-OSStatus			MusicDeviceBase::GetPropertyInfo(AudioUnitPropertyID	inID,
-							AudioUnitScope				inScope,
-							AudioUnitElement			inElement,
-							UInt32 &				outDataSize,
-							Boolean &				outWritable)
-{
-	OSStatus result;
-
-	switch (inID)
-	{
-#if !TARGET_OS_IPHONE
-		case kMusicDeviceProperty_InstrumentCount:
-			if (inScope != kAudioUnitScope_Global) return kAudioUnitErr_InvalidScope;
-			outDataSize = sizeof(UInt32);
-			outWritable = false;
-			result = noErr;
-			break;
-#endif
-		default:
-			result = AUBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
-
-			if (result == kAudioUnitErr_InvalidProperty)
-				result = AUMIDIBase::DelegateGetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
-			break;
-	}
-	return result;
-}
-
-OSStatus			MusicDeviceBase::GetProperty(	AudioUnitPropertyID			inID,
-							AudioUnitScope 				inScope,
-							AudioUnitElement		 	inElement,
-							void *					outData)
-{
-	OSStatus result;
-
-	switch (inID)
-	{
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-		case kAudioUnitProperty_FastDispatch:
-			if (!IsCMgrObject()) return kAudioUnitErr_InvalidProperty;
-			if (inElement == kMusicDeviceMIDIEventSelect) {
-				*(TEMP_MusicDeviceMIDIEventProc *)outData = MusicDeviceBaseMIDIEvent;
-				return noErr;
-			}
-			else if (inElement == kMusicDeviceStartNoteSelect) {
-				*(TEMP_MusicDeviceStartNoteProc *)outData = MusicDeviceBaseStartNote;
-				return noErr;
-			}
-			else if (inElement == kMusicDeviceStopNoteSelect) {
-				*(TEMP_MusicDeviceStopNoteProc *)outData = MusicDeviceBaseStopNote;
-				return noErr;
-			}
-			return kAudioUnitErr_InvalidElement;
-#endif
-
-#if !TARGET_OS_IPHONE
-		case kMusicDeviceProperty_InstrumentCount:
-			if (inScope != kAudioUnitScope_Global) return kAudioUnitErr_InvalidScope;
-			return GetInstrumentCount (*(UInt32*)outData);
-#endif
-		default:
-			result = AUBase::GetProperty (inID, inScope, inElement, outData);
-
-			if (result == kAudioUnitErr_InvalidProperty)
-				result = AUMIDIBase::DelegateGetProperty (inID, inScope, inElement, outData);
-	}
-
-	return result;
-}
-
-
-OSStatus			MusicDeviceBase::SetProperty(	AudioUnitPropertyID 			inID,
-							AudioUnitScope 				inScope,
-							AudioUnitElement 			inElement,
-							const void *				inData,
-							UInt32 					inDataSize)
-
-{
-
-	OSStatus result = AUBase::SetProperty (inID, inScope, inElement, inData, inDataSize);
-
-	if (result == kAudioUnitErr_InvalidProperty)
-		result = AUMIDIBase::DelegateSetProperty (inID, inScope, inElement, inData, inDataSize);
-
-	return result;
-}
-
-// For a MusicDevice that doesn't support separate instruments (ie. is mono-timbral)
-// then this call should return an instrument count of zero and noErr
-OSStatus			MusicDeviceBase::GetInstrumentCount (UInt32 &outInstCount) const
-{
-	outInstCount = 0;
-	return noErr;
-}
-
-OSStatus	MusicDeviceBase::HandleNoteOn(	UInt8 	inChannel,
-											UInt8 	inNoteNumber,
-											UInt8 	inVelocity,
-											UInt32 	inStartFrame)
-{
-	MusicDeviceNoteParams params;
-	params.argCount = 2;
-	params.mPitch = inNoteNumber;
-	params.mVelocity = inVelocity;
-	return StartNote (kMusicNoteEvent_UseGroupInstrument, inChannel, NULL, inStartFrame, params);
-}
-
-OSStatus	MusicDeviceBase::HandleNoteOff(	UInt8 	inChannel,
-											UInt8 	inNoteNumber,
-											UInt8 	inVelocity,
-											UInt32 	inStartFrame)
-{
-	return StopNote (inChannel, inNoteNumber, inStartFrame);
-}
-
-OSStatus
-MusicDeviceBase::HandleStartNoteMessage (MusicDeviceInstrumentID		inInstrument,
-										MusicDeviceGroupID				inGroupID,
-										NoteInstanceID *				outNoteInstanceID,
-										UInt32							inOffsetSampleFrame,
-										const MusicDeviceNoteParams *	inParams)
-{
-	if (inParams == NULL || outNoteInstanceID == NULL) return kAudio_ParamError;
-
-	if (!IsInitialized()) return kAudioUnitErr_Uninitialized;
-
-	return StartNote (inInstrument, inGroupID, outNoteInstanceID, inOffsetSampleFrame, *inParams);
-}
-
-#if TARGET_OS_MAC
-	#if __LP64__
-		// comp instance, parameters in forward order
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_index + 1];
-	#else
-		// parameters in reverse order, then comp instance
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_nparams - 1 - _index];
-	#endif
-#elif TARGET_OS_WIN32
-		// (no comp instance), parameters in forward order
-		#define PARAM(_typ, _name, _index, _nparams) \
-			_typ _name = *(_typ *)&params->params[_index];
-#endif
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-OSStatus			MusicDeviceBase::ComponentEntryDispatch(	ComponentParameters *		params,
-																MusicDeviceBase *			This)
-{
-	if (This == NULL) return kAudio_ParamError;
-
-	OSStatus result;
-
-	switch (params->what) {
-	case kMusicDeviceMIDIEventSelect:
-	case kMusicDeviceSysExSelect:
-		{
-			result = AUMIDIBase::ComponentEntryDispatch (params, This);
-		}
-		break;
-	case kMusicDevicePrepareInstrumentSelect:
-		{
-			PARAM(MusicDeviceInstrumentID, inInstrument, 0, 1);
-			result = This->PrepareInstrument(inInstrument);
-		}
-		break;
-	case kMusicDeviceReleaseInstrumentSelect:
-		{
-			PARAM(MusicDeviceInstrumentID, inInstrument, 0, 1);
-			result = This->ReleaseInstrument(inInstrument);
-		}
-		break;
-	case kMusicDeviceStartNoteSelect:
-		{
-			PARAM(MusicDeviceInstrumentID, pbinInstrument, 0, 5);
-			PARAM(MusicDeviceGroupID, pbinGroupID, 1, 5);
-			PARAM(NoteInstanceID *, pboutNoteInstanceID, 2, 5);
-			PARAM(UInt32, pbinOffsetSampleFrame, 3, 5);
-			PARAM(const MusicDeviceNoteParams *, pbinParams, 4, 5);
-			result = This->HandleStartNoteMessage(pbinInstrument, pbinGroupID, pboutNoteInstanceID, pbinOffsetSampleFrame, pbinParams);
-		}
-		break;
-	case kMusicDeviceStopNoteSelect:
-		{
-			PARAM(MusicDeviceGroupID, pbinGroupID, 0, 3);
-			PARAM(NoteInstanceID, pbinNoteInstanceID, 1, 3);
-			PARAM(UInt32, pbinOffsetSampleFrame, 2, 3);
-			result = This->StopNote(pbinGroupID, pbinNoteInstanceID, pbinOffsetSampleFrame);
-		}
-		break;
-
-	default:
-		result = AUBase::ComponentEntryDispatch(params, This);
-		break;
-	}
-
-	return result;
-}
-#endif
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-
-// fast dispatch
-static OSStatus		MusicDeviceBaseMIDIEvent(void *					inComponentStorage,
-						UInt32					inStatus,
-						UInt32					inData1,
-						UInt32					inData2,
-						UInt32					inOffsetSampleFrame)
-{
-	OSStatus result = noErr;
-	try {
-		MusicDeviceBase *This = static_cast<MusicDeviceBase *>(inComponentStorage);
-		if (This == NULL) return kAudio_ParamError;
-		result = This->MIDIEvent(inStatus, inData1, inData2, inOffsetSampleFrame);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-OSStatus		MusicDeviceBaseStartNote(	void *		inComponentStorage,
-						MusicDeviceInstrumentID			inInstrument,
-						MusicDeviceGroupID				inGroupID,
-						NoteInstanceID *				outNoteInstanceID,
-						UInt32							inOffsetSampleFrame,
-						const MusicDeviceNoteParams *	inParams)
-{
-	OSStatus result = noErr;
-	try {
-		if (inParams == NULL || outNoteInstanceID == NULL) return kAudio_ParamError;
-		MusicDeviceBase *This = static_cast<MusicDeviceBase *>(inComponentStorage);
-		if (This == NULL) return kAudio_ParamError;
-		result = This->StartNote(inInstrument, inGroupID, outNoteInstanceID, inOffsetSampleFrame, *inParams);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-OSStatus		MusicDeviceBaseStopNote(void *			inComponentStorage,
-						MusicDeviceGroupID				inGroupID,
-						NoteInstanceID					inNoteInstanceID,
-						UInt32							inOffsetSampleFrame)
-{
-	OSStatus result = noErr;
-	try {
-		MusicDeviceBase *This = static_cast<MusicDeviceBase *>(inComponentStorage);
-		if (This == NULL) return kAudio_ParamError;
-		result = This->StopNote(inGroupID, inNoteInstanceID, inOffsetSampleFrame);
-	}
-	COMPONENT_CATCH
-	return result;
-}
-
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.h b/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.h
deleted file mode 100644
index 475bab3..0000000
--- a/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-     File: MusicDeviceBase.h
- Abstract: Part of CoreAudio Utility Classes
-  Version: 1.1
-
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple
- Inc. ("Apple") in consideration of your agreement to the following
- terms, and your use, installation, modification or redistribution of
- this Apple software constitutes acceptance of these terms.  If you do
- not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and
- subject to these terms, Apple grants you a personal, non-exclusive
- license, under Apple's copyrights in this original Apple software (the
- "Apple Software"), to use, reproduce, modify and redistribute the Apple
- Software, with or without modifications, in source and/or binary forms;
- provided that if you redistribute the Apple Software in its entirety and
- without modifications, you must retain this notice and the following
- text and disclaimers in all such redistributions of the Apple Software.
- Neither the name, trademarks, service marks or logos of Apple Inc. may
- be used to endorse or promote products derived from the Apple Software
- without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or
- implied, are granted by Apple herein, including but not limited to any
- patent rights that may be infringed by your derivative works or by other
- works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE
- MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
- THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
- OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
- MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
- AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
- STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-
- Copyright (C) 2014 Apple Inc. All Rights Reserved.
-
-*/
-#ifndef __MusicDeviceBase_h__
-#define __MusicDeviceBase_h__
-
-#include "AUMIDIBase.h"
-
-// ________________________________________________________________________
-//	MusicDeviceBase
-//
-
-/*! @class MusicDeviceBase */
-class MusicDeviceBase : public AUBase, public AUMIDIBase {
-public:
-	/*! @ctor MusicDeviceBase */
-								MusicDeviceBase(		AudioComponentInstance			inInstance,
-														UInt32							numInputs,
-														UInt32							numOutputs,
-														UInt32							numGroups = 0);
-
-
-	virtual OSStatus	MIDIEvent(		UInt32 						inStatus,
-										UInt32 						inData1,
-										UInt32 						inData2,
-										UInt32 						inOffsetSampleFrame)
-	{
-		return AUMIDIBase::MIDIEvent (inStatus, inData1, inData2, inOffsetSampleFrame);
-	}
-
-	/*! @method SysEx */
-	virtual OSStatus	SysEx(			const UInt8 *				inData,
-										UInt32 						inLength)
-	{
-		return AUMIDIBase::SysEx (inData, inLength);
-	}
-
-	/*! @method GetPropertyInfo */
-	virtual OSStatus			GetPropertyInfo(AudioUnitPropertyID			inID,
-												AudioUnitScope				inScope,
-												AudioUnitElement			inElement,
-												UInt32 &					outDataSize,
-												Boolean &					outWritable);
-
-	/*! @method GetProperty */
-	virtual OSStatus			GetProperty(	AudioUnitPropertyID 		inID,
-												AudioUnitScope 				inScope,
-												AudioUnitElement		 	inElement,
-												void *						outData);
-
-	/*! @method SetProperty */
-	virtual OSStatus			SetProperty(			AudioUnitPropertyID 			inID,
-														AudioUnitScope 					inScope,
-														AudioUnitElement 				inElement,
-														const void *					inData,
-														UInt32 							inDataSize);
-
-	/*! @method HandleNoteOn */
-	virtual OSStatus			HandleNoteOn(	UInt8 	inChannel,
-												UInt8 	inNoteNumber,
-												UInt8 	inVelocity,
-												UInt32 	inStartFrame);
-
-	/*! @method HandleNoteOff */
-	virtual OSStatus			HandleNoteOff(	UInt8 	inChannel,
-												UInt8 	inNoteNumber,
-												UInt8 	inVelocity,
-												UInt32 	inStartFrame);
-
-	/*! @method GetInstrumentCount */
-	virtual OSStatus			GetInstrumentCount (	UInt32 &outInstCount) const;
-
-#if !CA_USE_AUDIO_PLUGIN_ONLY
-	// component dispatcher
-	/*! @method ComponentEntryDispatch */
-	static OSStatus			ComponentEntryDispatch(	ComponentParameters *			params,
-														MusicDeviceBase *				This);
-#endif
-private:
-	OSStatus				HandleStartNoteMessage (MusicDeviceInstrumentID inInstrument, MusicDeviceGroupID inGroupID, NoteInstanceID *outNoteInstanceID, UInt32 inOffsetSampleFrame, const MusicDeviceNoteParams *inParams);
-};
-
-#endif // __MusicDeviceBase_h__
diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Resources.r b/modules/juce_audio_plugin_client/AU/juce_AU_Resources.r
deleted file mode 100644
index 2a345b2..0000000
--- a/modules/juce_audio_plugin_client/AU/juce_AU_Resources.r
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-  ==============================================================================
-
-   This file is part of the JUCE library.
-   Copyright (c) 2015 - ROLI Ltd.
-
-   Permission is granted to use this software under the terms of either:
-   a) the GPL v2 (or any later version)
-   b) the Affero GPL v3
-
-   Details of these licenses can be found at: www.gnu.org/licenses
-
-   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
-   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
-   ------------------------------------------------------------------------------
-
-   To release a closed-source product which uses JUCE, commercial licenses are
-   available: visit www.juce.com for more information.
-
-  ==============================================================================
-*/
-
-#define UseExtendedThingResource 1
-#include <AudioUnit/AudioUnit.r>
-
-//==============================================================================
-/*  The AppConfig.h file should be a file in your project, containing info to describe the
-    plugin's name, type, etc. The introjucer will generate this file automatically for you.
-
-    You may need to adjust the include path of your project to make sure it can be 
-    found by this include statement. (Don't hack this file to change the include path)
-*/
-#include "AppConfig.h"
-
-
-//==============================================================================
-// component resources for Audio Unit
-#define RES_ID          1000
-#define COMP_TYPE       JucePlugin_AUMainType
-#define COMP_SUBTYPE    JucePlugin_AUSubType
-#define COMP_MANUF      JucePlugin_AUManufacturerCode
-#define VERSION         JucePlugin_VersionCode
-#define NAME            JucePlugin_Manufacturer ": " JucePlugin_Name
-#define DESCRIPTION     JucePlugin_Desc
-#define ENTRY_POINT     JucePlugin_AUExportPrefixQuoted "Entry"
-
-#include "AUResources.r"
-
-//==============================================================================
-// component resources for Audio Unit Carbon View
-
-#ifndef BUILD_AU_CARBON_UI
- #define BUILD_AU_CARBON_UI 1
-#endif
-
-#if BUILD_AU_CARBON_UI
- #define RES_ID         2000
- #define COMP_TYPE      kAudioUnitCarbonViewComponentType
- #define COMP_SUBTYPE   JucePlugin_AUSubType
- #define COMP_MANUF		JucePlugin_AUManufacturerCode
- #define VERSION        JucePlugin_VersionCode
- #define NAME           JucePlugin_Manufacturer ": " JucePlugin_Name " View"
- #define DESCRIPTION    NAME
- #define ENTRY_POINT    JucePlugin_AUExportPrefixQuoted "ViewEntry"
-
- #include "AUResources.r"
-#endif
diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm
deleted file mode 100644
index bfaef88..0000000
--- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm
+++ /dev/null
@@ -1,2312 +0,0 @@
-/*
-  ==============================================================================
-
-   This file is part of the JUCE library.
-   Copyright (c) 2015 - ROLI Ltd.
-
-   Permission is granted to use this software under the terms of either:
-   a) the GPL v2 (or any later version)
-   b) the Affero GPL v3
-
-   Details of these licenses can be found at: www.gnu.org/licenses
-
-   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
-   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
-   ------------------------------------------------------------------------------
-
-   To release a closed-source product which uses JUCE, commercial licenses are
-   available: visit www.juce.com for more information.
-
-  ==============================================================================
-*/
-
-// Your project must contain an AppConfig.h file with your project-specific settings in it,
-// and your header search path must make it accessible to the module's files.
-#include "AppConfig.h"
-
-#include "../utility/juce_CheckSettingMacros.h"
-#include "../../juce_core/native/juce_mac_ClangBugWorkaround.h"
-
-#if JucePlugin_Build_AU
-
-#if __LP64__
- #undef JUCE_SUPPORT_CARBON
- #define JUCE_SUPPORT_CARBON 0
-#endif
-
-#ifdef __clang__
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wshorten-64-to-32"
- #pragma clang diagnostic ignored "-Wunused-parameter"
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- #pragma clang diagnostic ignored "-Wsign-conversion"
- #pragma clang diagnostic ignored "-Wconversion"
- #pragma clang diagnostic ignored "-Woverloaded-virtual"
-#endif
-
-#include "../utility/juce_IncludeSystemHeaders.h"
-
-#include <AudioUnit/AUCocoaUIView.h>
-#include <AudioUnit/AudioUnit.h>
-#include <AudioToolbox/AudioUnitUtilities.h>
-#include <CoreMIDI/MIDIServices.h>
-
-#if JUCE_SUPPORT_CARBON
- #define Point CarbonDummyPointName
- #define Component CarbonDummyCompName
-#endif
-
-/*
-    Got an include error here?
-
-    You probably need to install Apple's AU classes - see the
-    juce website for more info on how to get them:
-    http://www.juce.com/forum/topic/aus-xcode
-*/
-#include "CoreAudioUtilityClasses/MusicDeviceBase.h"
-#undef Point
-#undef Component
-
-/** The BUILD_AU_CARBON_UI flag lets you specify whether old-school carbon hosts are supported as
-    well as ones that can open a cocoa view. If this is enabled, you'll need to also add the AUCarbonBase
-    files to your project.
-*/
-#if ! (defined (BUILD_AU_CARBON_UI) || JUCE_64BIT)
- #define BUILD_AU_CARBON_UI 1
-#endif
-
-#ifdef __LP64__
- #undef BUILD_AU_CARBON_UI  // (not possible in a 64-bit build)
-#endif
-
-#if BUILD_AU_CARBON_UI
- #undef Button
- #define Point CarbonDummyPointName
- #include "CoreAudioUtilityClasses/AUCarbonViewBase.h"
- #undef Point
-#endif
-
-#ifdef __clang__
- #pragma clang diagnostic pop
-#endif
-
-#define JUCE_MAC_WINDOW_VISIBITY_BODGE 1
-
-#include "../utility/juce_IncludeModuleHeaders.h"
-#include "../utility/juce_FakeMouseMoveGenerator.h"
-#include "../utility/juce_CarbonVisibility.h"
-#include "../utility/juce_PluginBusUtilities.h"
-#include "../../juce_core/native/juce_osx_ObjCHelpers.h"
-
-//==============================================================================
-static Array<void*> activePlugins, activeUIs;
-
-static const AudioUnitPropertyID juceFilterObjectPropertyID = 0x1a45ffe9;
-
-// This macro can be set if you need to override this internal name for some reason..
-#ifndef JUCE_STATE_DICTIONARY_KEY
- #define JUCE_STATE_DICTIONARY_KEY   CFSTR("jucePluginState")
-#endif
-
-// make sure the audio processor is initialized before the AUBase class
-struct AudioProcessorHolder
-{
-    AudioProcessorHolder(bool initialiseGUI)
-    {
-        if (initialiseGUI)
-        {
-           #if BUILD_AU_CARBON_UI
-            NSApplicationLoad();
-           #endif
-
-            initialiseJuce_GUI();
-        }
-
-        juceFilter = createPluginFilterOfType (AudioProcessor::wrapperType_AudioUnit);
-    }
-
-    ScopedPointer<AudioProcessor> juceFilter;
-};
-
-//==============================================================================
-class JuceAU   : public AudioProcessorHolder,
-                 public MusicDeviceBase,
-                 public AudioProcessorListener,
-                 public AudioPlayHead,
-                 public ComponentListener
-{
-public:
-    JuceAU (AudioUnit component)
-        : AudioProcessorHolder(activePlugins.size() + activeUIs.size() == 0),
-          MusicDeviceBase (component, (UInt32) PluginBusUtilities (*juceFilter, false).getNumEnabledBuses (true),
-                                      (UInt32) PluginBusUtilities (*juceFilter, false).getNumEnabledBuses (false)),
-          isBypassed (false),
-          busUtils (*juceFilter, true)
-    {
-        busUtils.findAllCompatibleLayouts();
-        populateAUChannelInfo();
-
-        juceFilter->setPlayHead (this);
-        juceFilter->addListener (this);
-
-        Globals()->UseIndexedParameters (juceFilter->getNumParameters());
-
-        activePlugins.add (this);
-
-        zerostruct (auEvent);
-        auEvent.mArgument.mParameter.mAudioUnit = GetComponentInstance();
-        auEvent.mArgument.mParameter.mScope = kAudioUnitScope_Global;
-        auEvent.mArgument.mParameter.mElement = 0;
-
-        zerostruct (midiCallback);
-
-        CreateElements();
-
-        if (syncAudioUnitWithProcessor () != noErr)
-            jassertfalse;
-    }
-
-    ~JuceAU()
-    {
-        deleteActiveEditors();
-        juceFilter = nullptr;
-        clearPresetsArray();
-
-        jassert (activePlugins.contains (this));
-        activePlugins.removeFirstMatchingValue (this);
-
-        if (activePlugins.size() + activeUIs.size() == 0)
-            shutdownJuce_GUI();
-    }
-
-    //==============================================================================
-    ComponentResult Initialize() override
-    {
-        ComponentResult err;
-        PluginBusUtilities::ScopedBusRestorer restorer (busUtils);
-
-        if ((err = syncProcessorWithAudioUnit()) != noErr)
-            return err;
-
-        if ((err = MusicDeviceBase::Initialize()) != noErr)
-            return err;
-
-        prepareToPlay();
-        restorer.release();
-
-        return noErr;
-    }
-
-    void Cleanup() override
-    {
-        MusicDeviceBase::Cleanup();
-
-        if (juceFilter != nullptr)
-            juceFilter->releaseResources();
-
-        bufferSpace.setSize (2, 16);
-        midiEvents.clear();
-        incomingEvents.clear();
-        prepared = false;
-    }
-
-    ComponentResult Reset (AudioUnitScope inScope, AudioUnitElement inElement) override
-    {
-        if (! prepared)
-            prepareToPlay();
-
-        if (juceFilter != nullptr)
-            juceFilter->reset();
-
-        return MusicDeviceBase::Reset (inScope, inElement);
-    }
-
-    //==============================================================================
-    void prepareToPlay()
-    {
-        if (juceFilter != nullptr)
-        {
-            juceFilter->setRateAndBufferSizeDetails (getSampleRate(), (int) GetMaxFramesPerSlice());
-
-            bufferSpace.setSize (jmax (busUtils.findTotalNumChannels (true), busUtils.findTotalNumChannels (false)),
-                                 (int) GetMaxFramesPerSlice() + 32);
-
-            juceFilter->prepareToPlay (getSampleRate(), (int) GetMaxFramesPerSlice());
-
-            midiEvents.ensureSize (2048);
-            midiEvents.clear();
-            incomingEvents.ensureSize (2048);
-            incomingEvents.clear();
-
-            channels.calloc ((size_t) jmax (juceFilter->getTotalNumInputChannels(),
-                                            juceFilter->getTotalNumOutputChannels()) + 4);
-
-            prepared = true;
-        }
-    }
-
-    //==============================================================================
-    static OSStatus ComponentEntryDispatch (ComponentParameters* params, JuceAU* effect)
-    {
-        if (effect == nullptr)
-            return paramErr;
-
-        switch (params->what)
-        {
-            case kMusicDeviceMIDIEventSelect:
-            case kMusicDeviceSysExSelect:
-                return AUMIDIBase::ComponentEntryDispatch (params, effect);
-            default:
-                break;
-        }
-
-        return MusicDeviceBase::ComponentEntryDispatch (params, effect);
-    }
-
-    //==============================================================================
-    bool BusCountWritable (AudioUnitScope) override
-    {
-        return busUtils.hasDynamicInBuses() || busUtils.hasDynamicOutBuses();
-    }
-
-    OSStatus SetBusCount (AudioUnitScope scope, UInt32 count) override
-    {
-        OSStatus err = noErr;
-        bool isInput;
-
-        if ((err = scopeToDirection (scope, isInput)) != noErr)
-            return err;
-
-        if (count != GetScope (scope).GetNumberOfElements())
-        {
-            if ((isInput && (! busUtils.hasDynamicInBuses())) || ((! isInput) && (! busUtils.hasDynamicOutBuses())))
-                return kAudioUnitErr_PropertyNotWritable;
-
-            // Similar as with the stream format, we don't really tell the AudioProcessor about
-            // the bus count change until Initialize is called. We only generally test if
-            // this bus count can work.
-            if (static_cast<int> (count) > busUtils.getBusCount (isInput))
-                return kAudioUnitErr_FormatNotSupported;
-
-            // we need to already create the underlying elements so that we can change their formats
-            if ((err = MusicDeviceBase::SetBusCount (scope, count)) != noErr)
-                return err;
-
-            // however we do need to update the format tag: we need to do the same thing in SetFormat, for example
-            const int currentNumBus = busUtils.getNumEnabledBuses (isInput);
-            const int requestedNumBus = static_cast<int> (count);
-
-            if (currentNumBus < requestedNumBus)
-            {
-                for (int busNr = currentNumBus; busNr < requestedNumBus; ++busNr)
-                    if ((err = syncAudioUnitWithChannelSet (isInput, busNr, busUtils.getDefaultLayoutForBus (isInput, busNr))) != noErr)
-                        return err;
-            }
-            else
-            {
-                AudioChannelLayoutTag nulltag = ChannelSetToCALayoutTag (AudioChannelSet());
-
-                for (int busNr = requestedNumBus; busNr < currentNumBus; ++busNr)
-                    getCurrentLayout (isInput, busNr) = nulltag;
-            }
-        }
-
-        return MusicDeviceBase::SetBusCount (scope, count);
-    }
-
-    UInt32 SupportedNumChannels (const AUChannelInfo** outInfo) override
-    {
-        if (outInfo != nullptr)
-            *outInfo = channelInfo.getRawDataPointer();
-
-        return (UInt32) channelInfo.size();
-    }
-
-    //==============================================================================
-    ComponentResult GetPropertyInfo (AudioUnitPropertyID inID,
-                                     AudioUnitScope inScope,
-                                     AudioUnitElement inElement,
-                                     UInt32& outDataSize,
-                                     Boolean& outWritable) override
-    {
-        if (inScope == kAudioUnitScope_Global)
-        {
-            switch (inID)
-            {
-                case juceFilterObjectPropertyID:
-                    outWritable = false;
-                    outDataSize = sizeof (void*) * 2;
-                    return noErr;
-
-                case kAudioUnitProperty_OfflineRender:
-                    outWritable = true;
-                    outDataSize = sizeof (UInt32);
-                    return noErr;
-
-                case kMusicDeviceProperty_InstrumentCount:
-                    outDataSize = sizeof (UInt32);
-                    outWritable = false;
-                    return noErr;
-
-                case kAudioUnitProperty_CocoaUI:
-                    outDataSize = sizeof (AudioUnitCocoaViewInfo);
-                    outWritable = true;
-                    return noErr;
-
-               #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect
-                case kAudioUnitProperty_MIDIOutputCallbackInfo:
-                    outDataSize = sizeof (CFArrayRef);
-                    outWritable = false;
-                    return noErr;
-
-                case kAudioUnitProperty_MIDIOutputCallback:
-                    outDataSize = sizeof (AUMIDIOutputCallbackStruct);
-                    outWritable = true;
-                    return noErr;
-               #endif
-
-                case kAudioUnitProperty_ParameterStringFromValue:
-                     outDataSize = sizeof (AudioUnitParameterStringFromValue);
-                     outWritable = false;
-                     return noErr;
-
-                case kAudioUnitProperty_ParameterValueFromString:
-                     outDataSize = sizeof (AudioUnitParameterValueFromString);
-                     outWritable = false;
-                     return noErr;
-
-                case kAudioUnitProperty_BypassEffect:
-                    outDataSize = sizeof (UInt32);
-                    outWritable = true;
-                    return noErr;
-
-                default: break;
-            }
-        }
-
-        return MusicDeviceBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
-    }
-
-    ComponentResult GetProperty (AudioUnitPropertyID inID,
-                                 AudioUnitScope inScope,
-                                 AudioUnitElement inElement,
-                                 void* outData) override
-    {
-        if (inScope == kAudioUnitScope_Global)
-        {
-            switch (inID)
-            {
-                case juceFilterObjectPropertyID:
-                    ((void**) outData)[0] = (void*) static_cast<AudioProcessor*> (juceFilter);
-                    ((void**) outData)[1] = (void*) this;
-                    return noErr;
-
-                case kAudioUnitProperty_OfflineRender:
-                    *(UInt32*) outData = (juceFilter != nullptr && juceFilter->isNonRealtime()) ? 1 : 0;
-                    return noErr;
-
-                case kMusicDeviceProperty_InstrumentCount:
-                    *(UInt32*) outData = 1;
-                    return noErr;
-
-                case kAudioUnitProperty_BypassEffect:
-                    *(UInt32*) outData = isBypassed ? 1 : 0;
-                    return noErr;
-
-                case kAudioUnitProperty_CocoaUI:
-                    {
-                        JUCE_AUTORELEASEPOOL
-                        {
-                            static JuceUICreationClass cls;
-
-                            // (NB: this may be the host's bundle, not necessarily the component's)
-                            NSBundle* bundle = [NSBundle bundleForClass: cls.cls];
-
-                            AudioUnitCocoaViewInfo* info = static_cast<AudioUnitCocoaViewInfo*> (outData);
-                            info->mCocoaAUViewClass[0] = (CFStringRef) [juceStringToNS (class_getName (cls.cls)) retain];
-                            info->mCocoaAUViewBundleLocation = (CFURLRef) [[NSURL fileURLWithPath: [bundle bundlePath]] retain];
-                        }
-
-                        return noErr;
-                    }
-
-                    break;
-
-               #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect
-                case kAudioUnitProperty_MIDIOutputCallbackInfo:
-                {
-                    CFStringRef strs[1];
-                    strs[0] = CFSTR ("MIDI Callback");
-
-                    CFArrayRef callbackArray = CFArrayCreate (nullptr, (const void**) strs, 1, &kCFTypeArrayCallBacks);
-                    *(CFArrayRef*) outData = callbackArray;
-                    return noErr;
-                }
-               #endif
-
-                case kAudioUnitProperty_ParameterValueFromString:
-                {
-                    if (AudioUnitParameterValueFromString* pv = (AudioUnitParameterValueFromString*) outData)
-                    {
-                        if (juceFilter != nullptr)
-                        {
-                            const String text (String::fromCFString (pv->inString));
-
-                            if (AudioProcessorParameter* param = juceFilter->getParameters() [(int) pv->inParamID])
-                                pv->outValue = param->getValueForText (text);
-                            else
-                                pv->outValue = text.getFloatValue();
-
-                            return noErr;
-                        }
-                    }
-                }
-                break;
-
-                case kAudioUnitProperty_ParameterStringFromValue:
-                {
-                    if (AudioUnitParameterStringFromValue* pv = (AudioUnitParameterStringFromValue*) outData)
-                    {
-                        if (juceFilter != nullptr)
-                        {
-                            const float value = (float) *(pv->inValue);
-                            String text;
-
-                            if (AudioProcessorParameter* param = juceFilter->getParameters() [(int) pv->inParamID])
-                                text = param->getText ((float) *(pv->inValue), 0);
-                            else
-                                text = String (value);
-
-                            pv->outString = text.toCFString();
-                            return noErr;
-                        }
-                    }
-                }
-                break;
-
-                default:
-                    break;
-            }
-        }
-
-        return MusicDeviceBase::GetProperty (inID, inScope, inElement, outData);
-    }
-
-    ComponentResult SetProperty (AudioUnitPropertyID inID,
-                                 AudioUnitScope inScope,
-                                 AudioUnitElement inElement,
-                                 const void* inData,
-                                 UInt32 inDataSize) override
-    {
-        if (inScope == kAudioUnitScope_Global)
-        {
-            switch (inID)
-            {
-               #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect
-                case kAudioUnitProperty_MIDIOutputCallback:
-                    if (inDataSize < sizeof (AUMIDIOutputCallbackStruct))
-                        return kAudioUnitErr_InvalidPropertyValue;
-
-                    if (AUMIDIOutputCallbackStruct* callbackStruct = (AUMIDIOutputCallbackStruct*) inData)
-                        midiCallback = *callbackStruct;
-
-                    return noErr;
-               #endif
-
-                case kAudioUnitProperty_BypassEffect:
-                {
-                    if (inDataSize < sizeof (UInt32))
-                        return kAudioUnitErr_InvalidPropertyValue;
-
-                    const bool newBypass = *((UInt32*) inData) != 0;
-
-                    if (newBypass != isBypassed)
-                    {
-                        isBypassed = newBypass;
-
-                        if (! isBypassed && IsInitialized()) // turning bypass off and we're initialized
-                            Reset (0, 0);
-                    }
-
-                    return noErr;
-                }
-
-                case kAudioUnitProperty_OfflineRender:
-                    if (juceFilter != nullptr)
-                        juceFilter->setNonRealtime ((*(UInt32*) inData) != 0);
-
-                    return noErr;
-
-                default: break;
-            }
-        }
-
-        return MusicDeviceBase::SetProperty (inID, inScope, inElement, inData, inDataSize);
-    }
-
-    //==============================================================================
-    ComponentResult SaveState (CFPropertyListRef* outData) override
-    {
-        ComponentResult err = MusicDeviceBase::SaveState (outData);
-
-        if (err != noErr)
-            return err;
-
-        jassert (CFGetTypeID (*outData) == CFDictionaryGetTypeID());
-
-        CFMutableDictionaryRef dict = (CFMutableDictionaryRef) *outData;
-
-        if (juceFilter != nullptr)
-        {
-            juce::MemoryBlock state;
-            juceFilter->getCurrentProgramStateInformation (state);
-
-            if (state.getSize() > 0)
-            {
-                CFDataRef ourState = CFDataCreate (kCFAllocatorDefault, (const UInt8*) state.getData(), (CFIndex) state.getSize());
-                CFDictionarySetValue (dict, JUCE_STATE_DICTIONARY_KEY, ourState);
-                CFRelease (ourState);
-            }
-        }
-
-        return noErr;
-    }
-
-    ComponentResult RestoreState (CFPropertyListRef inData) override
-    {
-        {
-            // Remove the data entry from the state to prevent the superclass loading the parameters
-            CFMutableDictionaryRef copyWithoutData = CFDictionaryCreateMutableCopy (nullptr, 0, (CFDictionaryRef) inData);
-            CFDictionaryRemoveValue (copyWithoutData, CFSTR (kAUPresetDataKey));
-            ComponentResult err = MusicDeviceBase::RestoreState (copyWithoutData);
-            CFRelease (copyWithoutData);
-
-            if (err != noErr)
-                return err;
-        }
-
-        if (juceFilter != nullptr)
-        {
-            CFDictionaryRef dict = (CFDictionaryRef) inData;
-            CFDataRef data = 0;
-
-            if (CFDictionaryGetValueIfPresent (dict, JUCE_STATE_DICTIONARY_KEY, (const void**) &data))
-            {
-                if (data != 0)
-                {
-                    const int numBytes = (int) CFDataGetLength (data);
-                    const juce::uint8* const rawBytes = CFDataGetBytePtr (data);
-
-                    if (numBytes > 0)
-                        juceFilter->setCurrentProgramStateInformation (rawBytes, numBytes);
-                }
-            }
-        }
-
-        return noErr;
-    }
-
-    //==============================================================================
-    UInt32 GetAudioChannelLayout (AudioUnitScope scope, AudioUnitElement element,
-                                  AudioChannelLayout* outLayoutPtr, Boolean& outWritable) override
-    {
-        bool isInput;
-        int busNr;
-
-        outWritable = false;
-
-        if (elementToBusIdx (scope, element, isInput, busNr) != noErr)
-            return 0;
-
-        if (busUtils.getSupportedBusLayouts (isInput, busNr).busIgnoresLayout)
-            return 0;
-
-        outWritable = true;
-
-        const size_t sizeInBytes = sizeof (AudioChannelLayout) - sizeof (AudioChannelDescription);
-
-        if (outLayoutPtr != nullptr)
-        {
-            zeromem (outLayoutPtr, sizeInBytes);
-            outLayoutPtr->mChannelLayoutTag = getCurrentLayout (isInput, busNr);
-        }
-
-        return sizeInBytes;
-    }
-
-    UInt32 GetChannelLayoutTags (AudioUnitScope scope, AudioUnitElement element, AudioChannelLayoutTag* outLayoutTags) override
-    {
-        bool isInput;
-        int busNr;
-
-        if (elementToBusIdx (scope, element, isInput, busNr) != noErr)
-            return 0;
-
-        if (busUtils.getSupportedBusLayouts (isInput, busNr).busIgnoresLayout)
-            return 0;
-
-        const Array<AudioChannelLayoutTag>& layouts = getSupportedBusLayouts (isInput, busNr);
-
-        if (outLayoutTags != nullptr)
-            std::copy (layouts.begin(), layouts.end(), outLayoutTags);
-
-        return (UInt32) layouts.size();
-    }
-
-    OSStatus SetAudioChannelLayout(AudioUnitScope scope, AudioUnitElement element, const AudioChannelLayout* inLayout) override
-    {
-        bool isInput;
-        int busNr;
-        OSStatus err;
-
-        if ((err = elementToBusIdx (scope, element, isInput, busNr)) != noErr)
-            return err;
-
-        if (busUtils.getSupportedBusLayouts (isInput, busNr).busIgnoresLayout)
-            return kAudioUnitErr_PropertyNotWritable;
-
-        if (inLayout == nullptr)
-            return kAudioUnitErr_InvalidPropertyValue;
-
-        if (const AUIOElement* ioElement = GetIOElement (isInput ? kAudioUnitScope_Input :  kAudioUnitScope_Output, element))
-        {
-            const AudioChannelSet newChannelSet = CoreAudioChannelLayoutToJuceType (*inLayout);
-            const int currentNumChannels = static_cast<int> (ioElement->GetStreamFormat().NumberChannels());
-
-            if (currentNumChannels != newChannelSet.size())
-                return kAudioUnitErr_InvalidPropertyValue;
-
-            // check if the new layout could be potentially set
-            PluginBusUtilities::ScopedBusRestorer restorer (busUtils);
-
-            bool success = juceFilter->setPreferredBusArrangement (isInput, busNr, newChannelSet);
-
-            if (!success)
-                return kAudioUnitErr_FormatNotSupported;
-
-            getCurrentLayout (isInput, busNr) = ChannelSetToCALayoutTag (newChannelSet);
-
-            return noErr;
-        }
-        else
-            jassertfalse;
-
-        return kAudioUnitErr_InvalidElement;
-    }
-
-    //==============================================================================
-    ComponentResult GetParameterInfo (AudioUnitScope inScope,
-                                      AudioUnitParameterID inParameterID,
-                                      AudioUnitParameterInfo& outParameterInfo) override
-    {
-        const int index = (int) inParameterID;
-
-        if (inScope == kAudioUnitScope_Global
-             && juceFilter != nullptr
-             && index < juceFilter->getNumParameters())
-        {
-            outParameterInfo.flags = (UInt32) (kAudioUnitParameterFlag_IsWritable
-                                                | kAudioUnitParameterFlag_IsReadable
-                                                | kAudioUnitParameterFlag_HasCFNameString
-                                                | kAudioUnitParameterFlag_ValuesHaveStrings);
-
-           #if JucePlugin_AUHighResolutionParameters
-            outParameterInfo.flags |= (UInt32) kAudioUnitParameterFlag_IsHighResolution;
-           #endif
-
-            const String name (juceFilter->getParameterName (index));
-
-            // set whether the param is automatable (unnamed parameters aren't allowed to be automated)
-            if (name.isEmpty() || ! juceFilter->isParameterAutomatable (index))
-                outParameterInfo.flags |= kAudioUnitParameterFlag_NonRealTime;
-
-            if (juceFilter->isMetaParameter (index))
-                outParameterInfo.flags |= kAudioUnitParameterFlag_IsGlobalMeta;
-
-            MusicDeviceBase::FillInParameterName (outParameterInfo, name.toCFString(), true);
-
-            outParameterInfo.minValue = 0.0f;
-            outParameterInfo.maxValue = 1.0f;
-            outParameterInfo.defaultValue = juceFilter->getParameterDefaultValue (index);
-            jassert (outParameterInfo.defaultValue >= outParameterInfo.minValue
-                      && outParameterInfo.defaultValue <= outParameterInfo.maxValue);
-            outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
-
-            return noErr;
-        }
-
-        return kAudioUnitErr_InvalidParameter;
-    }
-
-    ComponentResult GetParameter (AudioUnitParameterID inID,
-                                  AudioUnitScope inScope,
-                                  AudioUnitElement inElement,
-                                  Float32& outValue) override
-    {
-        if (inScope == kAudioUnitScope_Global && juceFilter != nullptr)
-        {
-            outValue = juceFilter->getParameter ((int) inID);
-            return noErr;
-        }
-
-        return MusicDeviceBase::GetParameter (inID, inScope, inElement, outValue);
-    }
-
-    ComponentResult SetParameter (AudioUnitParameterID inID,
-                                  AudioUnitScope inScope,
-                                  AudioUnitElement inElement,
-                                  Float32 inValue,
-                                  UInt32 inBufferOffsetInFrames) override
-    {
-        if (inScope == kAudioUnitScope_Global && juceFilter != nullptr)
-        {
-            juceFilter->setParameter ((int) inID, inValue);
-            return noErr;
-        }
-
-        return MusicDeviceBase::SetParameter (inID, inScope, inElement, inValue, inBufferOffsetInFrames);
-    }
-
-    // No idea what this method actually does or what it should return. Current Apple docs say nothing about it.
-    // (Note that this isn't marked 'override' in case older versions of the SDK don't include it)
-    bool CanScheduleParameters() const override          { return false; }
-
-    //==============================================================================
-    ComponentResult Version() override                   { return JucePlugin_VersionCode; }
-    bool SupportsTail() override                         { return true; }
-    Float64 GetTailTime() override                       { return juceFilter->getTailLengthSeconds(); }
-    double getSampleRate()                               { return busUtils.getNumEnabledBuses (false) > 0 ? GetOutput(0)->GetStreamFormat().mSampleRate : 44100.0; }
-
-    Float64 GetLatency() override
-    {
-        const double rate = getSampleRate();
-        jassert (rate > 0);
-        return rate > 0 ? juceFilter->getLatencySamples() / rate : 0;
-    }
-
-    //==============================================================================
-   #if BUILD_AU_CARBON_UI
-    int GetNumCustomUIComponents() override
-    {
-        return getHostType().isDigitalPerformer() ? 0 : 1;
-    }
-
-    void GetUIComponentDescs (ComponentDescription* inDescArray) override
-    {
-        inDescArray[0].componentType = kAudioUnitCarbonViewComponentType;
-        inDescArray[0].componentSubType = JucePlugin_AUSubType;
-        inDescArray[0].componentManufacturer = JucePlugin_AUManufacturerCode;
-        inDescArray[0].componentFlags = 0;
-        inDescArray[0].componentFlagsMask = 0;
-    }
-   #endif
-
-    //==============================================================================
-    bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) override
-    {
-        info.timeSigNumerator = 0;
-        info.timeSigDenominator = 0;
-        info.editOriginTime = 0;
-        info.ppqPositionOfLastBarStart = 0;
-        info.isRecording = false;
-
-        switch (lastTimeStamp.mSMPTETime.mType)
-        {
-            case kSMPTETimeType24:          info.frameRate = AudioPlayHead::fps24; break;
-            case kSMPTETimeType25:          info.frameRate = AudioPlayHead::fps25; break;
-            case kSMPTETimeType30Drop:      info.frameRate = AudioPlayHead::fps30drop; break;
-            case kSMPTETimeType30:          info.frameRate = AudioPlayHead::fps30; break;
-            case kSMPTETimeType2997:        info.frameRate = AudioPlayHead::fps2997; break;
-            case kSMPTETimeType2997Drop:    info.frameRate = AudioPlayHead::fps2997drop; break;
-            default:                        info.frameRate = AudioPlayHead::fpsUnknown; break;
-        }
-
-        if (CallHostBeatAndTempo (&info.ppqPosition, &info.bpm) != noErr)
-        {
-            info.ppqPosition = 0;
-            info.bpm = 0;
-        }
-
-        UInt32 outDeltaSampleOffsetToNextBeat;
-        double outCurrentMeasureDownBeat;
-        float num;
-        UInt32 den;
-
-        if (CallHostMusicalTimeLocation (&outDeltaSampleOffsetToNextBeat, &num, &den,
-                                         &outCurrentMeasureDownBeat) == noErr)
-        {
-            info.timeSigNumerator   = (int) num;
-            info.timeSigDenominator = (int) den;
-            info.ppqPositionOfLastBarStart = outCurrentMeasureDownBeat;
-        }
-
-        double outCurrentSampleInTimeLine, outCycleStartBeat = 0, outCycleEndBeat = 0;
-        Boolean playing = false, looping = false, playchanged;
-
-        if (CallHostTransportState (&playing,
-                                    &playchanged,
-                                    &outCurrentSampleInTimeLine,
-                                    &looping,
-                                    &outCycleStartBeat,
-                                    &outCycleEndBeat) != noErr)
-        {
-            // If the host doesn't support this callback, then use the sample time from lastTimeStamp:
-            outCurrentSampleInTimeLine = lastTimeStamp.mSampleTime;
-        }
-
-        info.isPlaying = playing;
-        info.timeInSamples = (int64) (outCurrentSampleInTimeLine + 0.5);
-        info.timeInSeconds = info.timeInSamples / getSampleRate();
-        info.isLooping = looping;
-        info.ppqLoopStart = outCycleStartBeat;
-        info.ppqLoopEnd = outCycleEndBeat;
-
-        return true;
-    }
-
-    void sendAUEvent (const AudioUnitEventType type, const int index)
-    {
-        auEvent.mEventType = type;
-        auEvent.mArgument.mParameter.mParameterID = (AudioUnitParameterID) index;
-        AUEventListenerNotify (0, 0, &auEvent);
-    }
-
-    void audioProcessorParameterChanged (AudioProcessor*, int index, float /*newValue*/) override
-    {
-        sendAUEvent (kAudioUnitEvent_ParameterValueChange, index);
-    }
-
-    void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override
-    {
-        sendAUEvent (kAudioUnitEvent_BeginParameterChangeGesture, index);
-    }
-
-    void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override
-    {
-        sendAUEvent (kAudioUnitEvent_EndParameterChangeGesture, index);
-    }
-
-    void audioProcessorChanged (AudioProcessor*) override
-    {
-        PropertyChanged (kAudioUnitProperty_Latency,       kAudioUnitScope_Global, 0);
-        PropertyChanged (kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, 0);
-        PropertyChanged (kAudioUnitProperty_ParameterInfo, kAudioUnitScope_Global, 0);
-
-        refreshCurrentPreset();
-
-        PropertyChanged (kAudioUnitProperty_PresentPreset, kAudioUnitScope_Global, 0);
-    }
-
-    //==============================================================================
-    bool StreamFormatWritable (AudioUnitScope scope, AudioUnitElement element) override
-    {
-        bool ignore;
-        int busIdx;
-
-        return ((! IsInitialized()) && (elementToBusIdx (scope, element, ignore, busIdx) == noErr));
-    }
-
-    bool ValidFormat (AudioUnitScope scope, AudioUnitElement element, const CAStreamBasicDescription& format) override
-    {
-        bool isInput;
-        int busNr;
-
-        if (elementToBusIdx (scope, element, isInput, busNr) != noErr)
-            return false;
-
-        const int newNumChannels = static_cast<int> (format.NumberChannels());
-        const int oldNumChannels = busUtils.getNumChannels (isInput, busNr);
-
-        if (newNumChannels == oldNumChannels)
-            return true;
-
-        PluginBusUtilities::ScopedBusRestorer restorer (busUtils);
-
-        return juceFilter->setPreferredBusArrangement (isInput, busNr, busUtils.getDefaultLayoutForChannelNumAndBus (isInput, busNr, newNumChannels))
-                && MusicDeviceBase::ValidFormat (scope, element, format);
-    }
-
-    // AU requires us to override this for the sole reason that we need to find a default layout tag if the number of channels have changed
-    OSStatus ChangeStreamFormat (AudioUnitScope scope, AudioUnitElement element, const CAStreamBasicDescription& old, const CAStreamBasicDescription& format) override
-    {
-        bool isInput;
-        int busNr;
-        OSStatus err = elementToBusIdx (scope, element, isInput, busNr);
-
-        if (err != noErr)
-            return err;
-
-        AudioChannelLayoutTag& currentTag = getCurrentLayout (isInput, busNr);
-
-        const int newNumChannels = static_cast<int> (format.NumberChannels());
-        const int oldNumChannels = busUtils.getNumChannels (isInput, busNr);
-
-        // predict channel layout
-        AudioChannelSet set = (newNumChannels != oldNumChannels) ? busUtils.getDefaultLayoutForChannelNumAndBus (isInput, busNr, newNumChannels)
-                                                                 : busUtils.getChannelSet (isInput, busNr);
-
-        if (set == AudioChannelSet())
-            return kAudioUnitErr_FormatNotSupported;
-
-        err = MusicDeviceBase::ChangeStreamFormat (scope, element, old, format);
-
-        if (err == noErr)
-            currentTag = ChannelSetToCALayoutTag (set);
-
-        return err;
-    }
-
-    //==============================================================================
-    ComponentResult Render (AudioUnitRenderActionFlags &ioActionFlags,
-                            const AudioTimeStamp& inTimeStamp,
-                            const UInt32 nFrames) override
-    {
-        lastTimeStamp = inTimeStamp;
-
-        const unsigned int numInputBuses  = GetScope (kAudioUnitScope_Input) .GetNumberOfElements();
-        const unsigned int numOutputBuses = GetScope (kAudioUnitScope_Output).GetNumberOfElements();
-
-        for (unsigned int i = 0; i < numInputBuses; ++i)
-        {
-            AudioUnitRenderActionFlags flags = ioActionFlags;
-            AUInputElement* input  = GetInput (i);
-
-            OSStatus result = input->PullInput (flags, inTimeStamp, i, nFrames);
-
-            if (result != noErr)
-                return noErr; // logic sometimes doesn't connect all the inputs immedietely
-
-            if ((flags & kAudioUnitRenderAction_OutputIsSilence) != 0)
-            {
-                AudioBufferList& inBuffer = input->GetBufferList();
-
-                for (unsigned int ch = 0; ch < inBuffer.mNumberBuffers; ++ch)
-                    zeromem (inBuffer.mBuffers[ch].mData, inBuffer.mBuffers[ch].mDataByteSize);
-            }
-        }
-
-        {
-            int idx = 0, scratchIdx = 0;
-            float** scratchBuffers = bufferSpace.getArrayOfWritePointers();
-
-            for (unsigned int busIdx = 0; busIdx < jmax (numInputBuses, numOutputBuses); ++busIdx)
-            {
-                AUInputElement*  input  = (busIdx < numInputBuses)  ? GetInput (busIdx)  : nullptr;
-                AUOutputElement* output = (busIdx < numOutputBuses) ? GetOutput (busIdx) : nullptr;
-
-                const unsigned int numInChannels  = (input != nullptr  ? input ->GetStreamFormat().mChannelsPerFrame : 0);
-                const unsigned int numOutChannels = (output != nullptr ? output->GetStreamFormat().mChannelsPerFrame : 0);
-
-                if (numOutChannels > numInChannels)
-                {
-                    if (output->WillAllocateBuffer())
-                        output->PrepareBuffer (nFrames);
-
-                    const AudioBufferList& outBuffer = output->GetBufferList();
-
-                    for (unsigned int chIdx = 0; chIdx < numOutChannels; ++chIdx)
-                    {
-                        const bool isOutputInterleaved = (numOutChannels > 1) && (outBuffer.mNumberBuffers == 1);
-                        float* outData = isOutputInterleaved ? scratchBuffers[scratchIdx++] : static_cast<float*> (outBuffer.mBuffers[chIdx].mData);
-
-                        if (chIdx < numInChannels)
-                        {
-                            const AudioBufferList& inBuffer = input->GetBufferList();
-                            const bool isInputInterleaved = (numInChannels > 1) && (inBuffer.mNumberBuffers == 1);
-                            const float* inData = static_cast<float*> (inBuffer.mBuffers[isInputInterleaved ? 0 : chIdx].mData);
-
-                            if (isInputInterleaved)
-                            {
-                                for (unsigned int i = 0; i < nFrames; ++i)
-                                {
-                                    outData [i] = inData[chIdx];
-                                    inData += numInChannels;
-                                }
-                            }
-                            else
-                                std::copy (inData, inData + nFrames, outData);
-                        }
-
-                        channels[idx++] = outData;
-                    }
-                }
-                else
-                {
-                    const AudioBufferList& inBuffer = input->GetBufferList();
-                    const bool isInputInterleaved = (numInChannels > 1) && (inBuffer.mNumberBuffers == 1);
-
-                    for (unsigned int chIdx = 0; chIdx < numInChannels; ++chIdx)
-                    {
-                        float* buffer = isInputInterleaved ? scratchBuffers[scratchIdx++]
-                                                           : static_cast<float*> (inBuffer.mBuffers[chIdx].mData);
-
-                        if (isInputInterleaved)
-                        {
-                            const float* inData = static_cast<float*> (inBuffer.mBuffers[0].mData);
-                            for (unsigned int i = 0; i < nFrames; ++i)
-                            {
-                                buffer [i] = inData [chIdx];
-                                inData += numInChannels;
-                            }
-                        }
-
-                        channels[idx++] = buffer;
-                    }
-                }
-            }
-
-            jassert (idx == bufferSpace.getNumChannels());
-        }
-
-        {
-            const ScopedLock sl (incomingMidiLock);
-            midiEvents.clear();
-            incomingEvents.swapWith (midiEvents);
-        }
-
-        {
-            const ScopedLock sl (juceFilter->getCallbackLock());
-            AudioSampleBuffer buffer (channels, bufferSpace.getNumChannels(), (int) nFrames);
-
-            if (juceFilter->isSuspended())
-            {
-                for (int j = 0; j < buffer.getNumChannels(); ++j)
-                    zeromem (channels [j], sizeof (float) * nFrames);
-            }
-            else if (isBypassed)
-            {
-                juceFilter->processBlockBypassed (buffer, midiEvents);
-            }
-            else
-            {
-                juceFilter->processBlock (buffer, midiEvents);
-            }
-        }
-
-        // copy output back
-        {
-            int idx = 0;
-
-            for (unsigned int busIdx = 0; busIdx < jmax (numInputBuses, numOutputBuses); ++busIdx)
-            {
-                AUInputElement*   input  = (busIdx < numInputBuses)  ? GetInput (busIdx)  : nullptr;
-                AUOutputElement* output  = (busIdx < numOutputBuses) ? GetOutput (busIdx) : nullptr;
-
-                const unsigned int numInChannels  = (input != nullptr  ? input ->GetStreamFormat().mChannelsPerFrame : 0);
-                const unsigned int numOutChannels = (output != nullptr ? output->GetStreamFormat().mChannelsPerFrame : 0);
-
-                if (numOutChannels > 0 && numInChannels >= numOutChannels)
-                {
-                    // the input buffers were used. We must copy the output
-                    if (output->WillAllocateBuffer())
-                        output->PrepareBuffer (nFrames);
-
-                    const AudioBufferList& outBuffer = output->GetBufferList();
-                    const bool isOutputInterleaved = (numOutChannels > 1) && (outBuffer.mNumberBuffers == 1);
-
-                    for (unsigned int chIdx = 0; chIdx < numOutChannels; ++chIdx)
-                    {
-                        float* outData = static_cast<float*> (outBuffer.mBuffers[isOutputInterleaved ? 0 : chIdx].mData);
-                        const float* buffer = static_cast<float*> (channels [idx++]);
-
-                        if (isOutputInterleaved)
-                        {
-                            for (unsigned int i = 0; i < nFrames; ++i)
-                            {
-                                outData [chIdx] = buffer[i];
-                                outData += numOutChannels;
-                            }
-                        }
-                        else
-                            std::copy (buffer, buffer + nFrames, outData);
-                    }
-                    idx += numInChannels - numOutChannels;
-                }
-            }
-        }
-
-        if (! midiEvents.isEmpty())
-        {
-           #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect
-            if (midiCallback.midiOutputCallback != nullptr)
-            {
-                UInt32 numPackets = 0;
-                size_t dataSize = 0;
-
-                const juce::uint8* midiEventData;
-                int midiEventSize, midiEventPosition;
-
-                for (MidiBuffer::Iterator i (midiEvents); i.getNextEvent (midiEventData, midiEventSize, midiEventPosition);)
-                {
-                    jassert (isPositiveAndBelow (midiEventPosition, (int) nFrames));
-                    dataSize += (size_t) midiEventSize;
-                    ++numPackets;
-                }
-
-                MIDIPacket* p;
-                const size_t packetMembersSize     = sizeof (MIDIPacket)     - sizeof (p->data); // NB: GCC chokes on "sizeof (MidiMessage::data)"
-                const size_t packetListMembersSize = sizeof (MIDIPacketList) - sizeof (p->data);
-
-                HeapBlock<MIDIPacketList> packetList;
-                packetList.malloc (packetListMembersSize + packetMembersSize * numPackets + dataSize, 1);
-                packetList->numPackets = numPackets;
-
-                p = packetList->packet;
-
-                for (MidiBuffer::Iterator i (midiEvents); i.getNextEvent (midiEventData, midiEventSize, midiEventPosition);)
-                {
-                    p->timeStamp = (MIDITimeStamp) midiEventPosition;
-                    p->length = (UInt16) midiEventSize;
-                    memcpy (p->data, midiEventData, (size_t) midiEventSize);
-                    p = MIDIPacketNext (p);
-                }
-
-                midiCallback.midiOutputCallback (midiCallback.userData, &lastTimeStamp, 0, packetList);
-            }
-           #endif
-
-            midiEvents.clear();
-        }
-
-       #if ! JucePlugin_SilenceInProducesSilenceOut
-        ioActionFlags &= (AudioUnitRenderActionFlags) ~kAudioUnitRenderAction_OutputIsSilence;
-       #else
-        ignoreUnused (ioActionFlags);
-       #endif
-
-        return noErr;
-    }
-
-    //==============================================================================
-    ComponentResult StartNote (MusicDeviceInstrumentID, MusicDeviceGroupID, NoteInstanceID*, UInt32, const MusicDeviceNoteParams&) override { return noErr; }
-    ComponentResult StopNote (MusicDeviceGroupID, NoteInstanceID, UInt32) override   { return noErr; }
-
-    //==============================================================================
-    OSStatus HandleMidiEvent (UInt8 nStatus, UInt8 inChannel, UInt8 inData1, UInt8 inData2, UInt32 inStartFrame) override
-    {
-       #if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect
-        const juce::uint8 data[] = { (juce::uint8) (nStatus | inChannel),
-                                     (juce::uint8) inData1,
-                                     (juce::uint8) inData2 };
-
-        const ScopedLock sl (incomingMidiLock);
-        incomingEvents.addEvent (data, 3, (int) inStartFrame);
-        return noErr;
-       #else
-        ignoreUnused (nStatus, inChannel, inData1);
-        ignoreUnused (inData2, inStartFrame);
-        return kAudioUnitErr_PropertyNotInUse;
-       #endif
-    }
-
-    OSStatus HandleSysEx (const UInt8* inData, UInt32 inLength) override
-    {
-       #if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect
-        const ScopedLock sl (incomingMidiLock);
-        incomingEvents.addEvent (inData, (int) inLength, 0);
-        return noErr;
-       #else
-        ignoreUnused (inData, inLength);
-        return kAudioUnitErr_PropertyNotInUse;
-       #endif
-    }
-
-    //==============================================================================
-    ComponentResult GetPresets (CFArrayRef* outData) const override
-    {
-        if (outData != nullptr)
-        {
-            const int numPrograms = juceFilter->getNumPrograms();
-
-            clearPresetsArray();
-            presetsArray.insertMultiple (0, AUPreset(), numPrograms);
-
-            CFMutableArrayRef presetsArrayRef = CFArrayCreateMutable (0, numPrograms, 0);
-
-            for (int i = 0; i < numPrograms; ++i)
-            {
-                String name (juceFilter->getProgramName(i));
-                if (name.isEmpty())
-                    name = "Untitled";
-
-                AUPreset& p = presetsArray.getReference(i);
-                p.presetNumber = i;
-                p.presetName = name.toCFString();
-
-                CFArrayAppendValue (presetsArrayRef, &p);
-            }
-
-            *outData = (CFArrayRef) presetsArrayRef;
-        }
-
-        return noErr;
-    }
-
-    OSStatus NewFactoryPresetSet (const AUPreset& inNewFactoryPreset) override
-    {
-        const int numPrograms = juceFilter->getNumPrograms();
-        const SInt32 chosenPresetNumber = (int) inNewFactoryPreset.presetNumber;
-
-        if (chosenPresetNumber >= numPrograms)
-            return kAudioUnitErr_InvalidProperty;
-
-        AUPreset chosenPreset;
-        chosenPreset.presetNumber = chosenPresetNumber;
-        chosenPreset.presetName = juceFilter->getProgramName (chosenPresetNumber).toCFString();
-
-        juceFilter->setCurrentProgram (chosenPresetNumber);
-        SetAFactoryPresetAsCurrent (chosenPreset);
-
-        return noErr;
-    }
-
-    void componentMovedOrResized (Component& component, bool /*wasMoved*/, bool /*wasResized*/) override
-    {
-        NSView* view = (NSView*) component.getWindowHandle();
-        NSRect r = [[view superview] frame];
-        r.origin.y = r.origin.y + r.size.height - component.getHeight();
-        r.size.width = component.getWidth();
-        r.size.height = component.getHeight();
-        [[view superview] setFrame: r];
-        [view setFrame: makeNSRect (component.getLocalBounds())];
-        [view setNeedsDisplay: YES];
-    }
-
-    //==============================================================================
-    class EditorCompHolder  : public Component
-    {
-    public:
-        EditorCompHolder (AudioProcessorEditor* const editor)
-        {
-            setSize (editor->getWidth(), editor->getHeight());
-            addAndMakeVisible (editor);
-
-           #if ! JucePlugin_EditorRequiresKeyboardFocus
-            setWantsKeyboardFocus (false);
-           #else
-            setWantsKeyboardFocus (true);
-           #endif
-        }
-
-        ~EditorCompHolder()
-        {
-            deleteAllChildren(); // note that we can't use a ScopedPointer because the editor may
-                                 // have been transferred to another parent which takes over ownership.
-        }
-
-        static NSView* createViewFor (AudioProcessor* filter, JuceAU* au, AudioProcessorEditor* const editor)
-        {
-            EditorCompHolder* editorCompHolder = new EditorCompHolder (editor);
-            NSRect r = makeNSRect (editorCompHolder->getLocalBounds());
-
-            static JuceUIViewClass cls;
-            NSView* view = [[cls.createInstance() initWithFrame: r] autorelease];
-
-            JuceUIViewClass::setFilter (view, filter);
-            JuceUIViewClass::setAU (view, au);
-            JuceUIViewClass::setEditor (view, editorCompHolder);
-
-            [view setHidden: NO];
-            [view setPostsFrameChangedNotifications: YES];
-
-            [[NSNotificationCenter defaultCenter] addObserver: view
-                                                     selector: @selector (applicationWillTerminate:)
-                                                         name: NSApplicationWillTerminateNotification
-                                                       object: nil];
-            activeUIs.add (view);
-
-            editorCompHolder->addToDesktop (0, (void*) view);
-            editorCompHolder->setVisible (view);
-            return view;
-        }
-
-        void childBoundsChanged (Component*) override
-        {
-            if (Component* editor = getChildComponent(0))
-            {
-                const int w = jmax (32, editor->getWidth());
-                const int h = jmax (32, editor->getHeight());
-
-                if (getWidth() != w || getHeight() != h)
-                    setSize (w, h);
-
-                NSView* view = (NSView*) getWindowHandle();
-                NSRect r = [[view superview] frame];
-                r.size.width = editor->getWidth();
-                r.size.height = editor->getHeight();
-                [[view superview] setFrame: r];
-                [view setFrame: makeNSRect (editor->getLocalBounds())];
-                [view setNeedsDisplay: YES];
-            }
-        }
-
-        bool keyPressed (const KeyPress&) override
-        {
-            if (getHostType().isAbletonLive())
-            {
-                static NSTimeInterval lastEventTime = 0; // check we're not recursively sending the same event
-                NSTimeInterval eventTime = [[NSApp currentEvent] timestamp];
-
-                if (lastEventTime != eventTime)
-                {
-                    lastEventTime = eventTime;
-
-                    NSView* view = (NSView*) getWindowHandle();
-                    NSView* hostView = [view superview];
-                    NSWindow* hostWindow = [hostView window];
-
-                    [hostWindow makeFirstResponder: hostView];
-                    [hostView keyDown: [NSApp currentEvent]];
-                    [hostWindow makeFirstResponder: view];
-                }
-            }
-
-            return false;
-        }
-
-    private:
-        JUCE_DECLARE_NON_COPYABLE (EditorCompHolder)
-    };
-
-    void deleteActiveEditors()
-    {
-        for (int i = activeUIs.size(); --i >= 0;)
-        {
-            id ui = (id) activeUIs.getUnchecked(i);
-
-            if (JuceUIViewClass::getAU (ui) == this)
-                JuceUIViewClass::deleteEditor (ui);
-        }
-    }
-
-    //==============================================================================
-    struct JuceUIViewClass  : public ObjCClass<NSView>
-    {
-        JuceUIViewClass()  : ObjCClass<NSView> ("JUCEAUView_")
-        {
-            addIvar<AudioProcessor*> ("filter");
-            addIvar<JuceAU*> ("au");
-            addIvar<EditorCompHolder*> ("editor");
-
-            addMethod (@selector (dealloc),                     dealloc,                    "v@:");
-            addMethod (@selector (applicationWillTerminate:),   applicationWillTerminate,   "v@:@");
-            addMethod (@selector (viewDidMoveToWindow),         viewDidMoveToWindow,        "v@:");
-            addMethod (@selector (mouseDownCanMoveWindow),      mouseDownCanMoveWindow,     "c@:");
-
-            registerClass();
-        }
-
-        static void deleteEditor (id self)
-        {
-            ScopedPointer<EditorCompHolder> editorComp (getEditor (self));
-
-            if (editorComp != nullptr)
-            {
-                if (editorComp->getChildComponent(0) != nullptr
-                     && activePlugins.contains (getAU (self))) // plugin may have been deleted before the UI
-                {
-                    AudioProcessor* const filter = getIvar<AudioProcessor*> (self, "filter");
-                    filter->editorBeingDeleted ((AudioProcessorEditor*) editorComp->getChildComponent(0));
-                }
-
-                editorComp = nullptr;
-                setEditor (self, nullptr);
-            }
-        }
-
-        static JuceAU* getAU (id self)                          { return getIvar<JuceAU*> (self, "au"); }
-        static EditorCompHolder* getEditor (id self)            { return getIvar<EditorCompHolder*> (self, "editor"); }
-
-        static void setFilter (id self, AudioProcessor* filter) { object_setInstanceVariable (self, "filter", filter); }
-        static void setAU (id self, JuceAU* au)                 { object_setInstanceVariable (self, "au", au); }
-        static void setEditor (id self, EditorCompHolder* e)    { object_setInstanceVariable (self, "editor", e); }
-
-    private:
-        static void dealloc (id self, SEL)
-        {
-            if (activeUIs.contains (self))
-                shutdown (self);
-
-            sendSuperclassMessage (self, @selector (dealloc));
-        }
-
-        static void applicationWillTerminate (id self, SEL, NSNotification*)
-        {
-            shutdown (self);
-        }
-
-        static void shutdown (id self)
-        {
-            [[NSNotificationCenter defaultCenter] removeObserver: self];
-            deleteEditor (self);
-
-            jassert (activeUIs.contains (self));
-            activeUIs.removeFirstMatchingValue (self);
-
-            if (activePlugins.size() + activeUIs.size() == 0)
-            {
-                // there's some kind of component currently modal, but the host
-                // is trying to delete our plugin..
-                jassert (Component::getCurrentlyModalComponent() == nullptr);
-
-                shutdownJuce_GUI();
-            }
-        }
-
-        static void viewDidMoveToWindow (id self, SEL)
-        {
-            if (NSWindow* w = [(NSView*) self window])
-            {
-                [w setAcceptsMouseMovedEvents: YES];
-
-                if (EditorCompHolder* const editorComp = getEditor (self))
-                    [w makeFirstResponder: (NSView*) editorComp->getWindowHandle()];
-            }
-        }
-
-        static BOOL mouseDownCanMoveWindow (id, SEL)
-        {
-            return NO;
-        }
-    };
-
-    //==============================================================================
-    struct JuceUICreationClass  : public ObjCClass<NSObject>
-    {
-        JuceUICreationClass()  : ObjCClass<NSObject> ("JUCE_AUCocoaViewClass_")
-        {
-            addMethod (@selector (interfaceVersion),             interfaceVersion,    @encode (unsigned int), "@:");
-            addMethod (@selector (description),                  description,         @encode (NSString*),    "@:");
-            addMethod (@selector (uiViewForAudioUnit:withSize:), uiViewForAudioUnit,  @encode (NSView*),      "@:", @encode (AudioUnit), @encode (NSSize));
-
-            addProtocol (@protocol (AUCocoaUIBase));
-
-            registerClass();
-        }
-
-    private:
-        static unsigned int interfaceVersion (id, SEL)   { return 0; }
-
-        static NSString* description (id, SEL)
-        {
-            return [NSString stringWithString: nsStringLiteral (JucePlugin_Name)];
-        }
-
-        static NSView* uiViewForAudioUnit (id, SEL, AudioUnit inAudioUnit, NSSize)
-        {
-            void* pointers[2];
-            UInt32 propertySize = sizeof (pointers);
-
-            if (AudioUnitGetProperty (inAudioUnit, juceFilterObjectPropertyID,
-                                      kAudioUnitScope_Global, 0, pointers, &propertySize) == noErr)
-            {
-                if (AudioProcessor* filter = static_cast<AudioProcessor*> (pointers[0]))
-                    if (AudioProcessorEditor* editorComp = filter->createEditorIfNeeded())
-                        return EditorCompHolder::createViewFor (filter, static_cast<JuceAU*> (pointers[1]), editorComp);
-            }
-
-            return nil;
-        }
-    };
-
-private:
-    //==============================================================================
-    AudioSampleBuffer bufferSpace;
-    HeapBlock<float*> channels;
-    MidiBuffer midiEvents, incomingEvents;
-    bool prepared, isBypassed;
-    AudioUnitEvent auEvent;
-    mutable Array<AUPreset> presetsArray;
-    CriticalSection incomingMidiLock;
-    AUMIDIOutputCallbackStruct midiCallback;
-    AudioTimeStamp lastTimeStamp;
-    PluginBusUtilities busUtils;
-
-    //==============================================================================
-    Array<AUChannelInfo> channelInfo;
-    Array<Array<AudioChannelLayoutTag> > supportedInputLayouts, supportedOutputLayouts;
-    Array<AudioChannelLayoutTag> currentInputLayout, currentOutputLayout;
-
-    //==============================================================================
-    static OSStatus scopeToDirection (AudioUnitScope scope, bool& isInput) noexcept
-    {
-        isInput = (scope == kAudioUnitScope_Input);
-
-        return (scope != kAudioUnitScope_Input
-             && scope != kAudioUnitScope_Output)
-              ? kAudioUnitErr_InvalidScope : noErr;
-    }
-
-    OSStatus elementToBusIdx (AudioUnitScope scope, AudioUnitElement element, bool& isInput, int& busIdx) noexcept
-    {
-        OSStatus err;
-
-        busIdx = static_cast<int> (element);
-
-        if ((err = scopeToDirection (scope, isInput)) != noErr) return err;
-        if (isPositiveAndBelow (busIdx, busUtils.getBusCount (isInput))) return noErr;
-
-        return kAudioUnitErr_InvalidElement;
-    }
-
-    //==============================================================================
-    OSStatus syncAudioUnitWithProcessor()
-    {
-        OSStatus err = noErr;
-        const int enabledInputs  = busUtils.getNumEnabledBuses (true);
-        const int enabledOutputs = busUtils.getNumEnabledBuses (false);
-
-        if ((err =  MusicDeviceBase::SetBusCount (kAudioUnitScope_Input,  static_cast<UInt32> (enabledInputs))) != noErr)
-            return err;
-
-        if ((err =  MusicDeviceBase::SetBusCount (kAudioUnitScope_Output, static_cast<UInt32> (enabledOutputs))) != noErr)
-            return err;
-
-        addSupportedLayoutTags();
-
-        for (int i = 0; i < juceFilter->busArrangement.inputBuses.size(); ++i)
-            if ((err = syncAudioUnitWithChannelSet (true, i,  busUtils.getChannelSet (true,  i))) != noErr) return err;
-
-        for (int i = 0; i < juceFilter->busArrangement.outputBuses.size(); ++i)
-            if ((err = syncAudioUnitWithChannelSet (false, i, busUtils.getChannelSet (false, i))) != noErr) return err;
-
-        // if you are hitting this assertion then your plug-in allows disabling/enabling buses (i.e. you
-        // do not return false in setPreferredBusArrangement when the number of channels is zero), however,
-        // AudioUnits require at least the main bus to be enabled by default in this case. Please assign
-        // a non-zero number of channels to your main input or output bus in the constructor of your AudioProcessor
-        jassert ((! busUtils.hasDynamicInBuses() && ! busUtils.hasDynamicOutBuses()) || (enabledInputs > 0) || (enabledOutputs > 0));
-
-        return noErr;
-    }
-
-    OSStatus syncProcessorWithAudioUnit()
-    {
-        OSStatus err;
-        const int numInputElements  = static_cast<int> (GetScope(kAudioUnitScope_Input). GetNumberOfElements());
-        const int numOutputElements = static_cast<int> (GetScope(kAudioUnitScope_Output).GetNumberOfElements());
-
-        for (int i = 0; i < numInputElements; ++i)
-            if ((err = syncProcessorWithAudioUnitForBus (true, i)) != noErr) return err;
-
-        for (int i = 0; i < numOutputElements; ++i)
-            if ((err = syncProcessorWithAudioUnitForBus (false, i)) != noErr) return err;
-
-        if (numInputElements != busUtils.getNumEnabledBuses (true) || numOutputElements != busUtils.getNumEnabledBuses (false))
-            return kAudioUnitErr_FormatNotSupported;
-
-        // re-check the format of all buses to see if it matches what CoreAudio actually requested
-        for (int i = 0; i < busUtils.getNumEnabledBuses (true); ++i)
-            if (! audioUnitAndProcessorIsFormatMatching (true, i)) return kAudioUnitErr_FormatNotSupported;
-
-        for (int i = 0; i < busUtils.getNumEnabledBuses (false); ++i)
-            if (! audioUnitAndProcessorIsFormatMatching (false, i)) return kAudioUnitErr_FormatNotSupported;
-
-        return noErr;
-    }
-
-    //==============================================================================
-    OSStatus syncProcessorWithAudioUnitForBus (bool isInput, int busNr)
-    {
-        if (const AUIOElement* element = GetIOElement (isInput ? kAudioUnitScope_Input :  kAudioUnitScope_Output, (UInt32) busNr))
-        {
-            const int numChannels = static_cast<int> (element->GetStreamFormat().NumberChannels());
-
-            AudioChannelLayoutTag currentLayoutTag = isInput ? currentInputLayout[busNr] : currentOutputLayout[busNr];
-            const int tagNumChannels = currentLayoutTag & 0xffff;
-
-            if (numChannels != tagNumChannels)
-                return kAudioUnitErr_FormatNotSupported;
-
-            if (juceFilter->setPreferredBusArrangement (isInput, busNr, CALayoutTagToChannelSet(currentLayoutTag)))
-                return noErr;
-        }
-        else
-            jassertfalse;
-
-        return kAudioUnitErr_FormatNotSupported;
-    }
-
-    OSStatus syncAudioUnitWithChannelSet (bool isInput, int busNr, const AudioChannelSet& channelSet)
-    {
-        const int numChannels = channelSet.size();
-
-        // is this bus activated?
-        if (numChannels == 0)
-            return noErr;
-
-        if (AUIOElement* element = GetIOElement (isInput ? kAudioUnitScope_Input :  kAudioUnitScope_Output, (UInt32) busNr))
-        {
-            getCurrentLayout (isInput, busNr) = ChannelSetToCALayoutTag (channelSet);
-
-            element->SetName ((CFStringRef) juceStringToNS (busUtils.getFilterBus (isInput).getReference (busNr).name));
-
-            CAStreamBasicDescription streamDescription;
-            streamDescription.mSampleRate = getSampleRate();
-
-            streamDescription.SetCanonical ((UInt32) numChannels, false);
-            return element->SetStreamFormat (streamDescription);
-        }
-        else
-            jassertfalse;
-
-        return kAudioUnitErr_InvalidElement;
-    }
-
-    //==============================================================================
-    bool audioUnitAndProcessorIsFormatMatching (bool isInput, int busNr)
-    {
-        const AudioProcessor::AudioProcessorBus& bus = isInput ? juceFilter->busArrangement.inputBuses. getReference (busNr)
-        : juceFilter->busArrangement.outputBuses.getReference (busNr);
-
-        if (const AUIOElement* element = GetIOElement (isInput ? kAudioUnitScope_Input :  kAudioUnitScope_Output, (UInt32) busNr))
-        {
-            const int numChannels = static_cast<int> (element->GetStreamFormat().NumberChannels());
-
-            return (numChannels == bus.channels.size());
-        }
-        else
-            jassertfalse;
-
-        return false;
-    }
-
-    //==============================================================================
-    void populateAUChannelInfo()
-    {
-        channelInfo.clear();
-
-        const AudioProcessor::AudioBusArrangement& arr = juceFilter->busArrangement;
-        PluginBusUtilities::ScopedBusRestorer restorer (busUtils);
-
-        const bool hasMainInputBus  = (busUtils.getNumEnabledBuses (true)  > 0);
-        const bool hasMainOutputBus = (busUtils.getNumEnabledBuses (false) > 0);
-
-        if ((! hasMainInputBus)  && (! hasMainOutputBus))
-        {
-            // midi effect plug-in: no audio
-            AUChannelInfo info;
-            info.inChannels = 0;
-            info.outChannels = 0;
-
-            channelInfo.add (info);
-            return;
-        }
-        else
-        {
-            const uint32_t maxNumChanToCheckFor = 9;
-
-            uint32_t defaultInputs  = static_cast<uint32_t> (busUtils.getNumChannels (true,  0));
-            uint32_t defaultOutputs = static_cast<uint32_t> (busUtils.getNumChannels (false, 0));
-
-            uint32_t lastInputs  = defaultInputs;
-            uint32_t lastOutputs = defaultOutputs;
-
-            SortedSet<uint32_t> supportedChannels;
-
-            // add the current configuration
-            if (lastInputs != 0 || lastOutputs != 0)
-                supportedChannels.add ((lastInputs << 16) | lastOutputs);
-
-            for (uint32_t inChanNum = hasMainInputBus ? 1 : 0; inChanNum <= (hasMainInputBus ? maxNumChanToCheckFor : 0); ++inChanNum)
-            {
-                const AudioChannelSet* dfltInLayout = nullptr;
-
-                if (inChanNum != 0 && (dfltInLayout = busUtils.getSupportedBusLayouts (true, 0).getDefaultLayoutForChannelNum (static_cast<int> (inChanNum))) == nullptr)
-                    continue;
-
-                for (uint32_t outChanNum = hasMainOutputBus ? 1 : 0; outChanNum <= (hasMainOutputBus ? maxNumChanToCheckFor : 0); ++outChanNum)
-                {
-                    const AudioChannelSet* dfltOutLayout = nullptr;
-
-                    if (outChanNum != 0 && (dfltOutLayout = busUtils.getSupportedBusLayouts (false, 0).getDefaultLayoutForChannelNum (static_cast<int> (outChanNum))) == nullptr)
-                        continue;
-
-                    // get the number of channels again. This is only needed for some processors that change their configuration
-                    // even when they indicate that setPreferredBusArrangement failed.
-                    lastInputs  = hasMainInputBus  ? static_cast<uint32_t> (arr.inputBuses. getReference (0). channels.size()) : 0;
-                    lastOutputs = hasMainOutputBus ? static_cast<uint32_t> (arr.outputBuses.getReference (0). channels.size()) : 0;
-
-                    uint32_t channelConfiguration = (inChanNum << 16) | outChanNum;
-
-                    // did we already try this configuration?
-                    if (supportedChannels.contains (channelConfiguration)) continue;
-
-                    if (lastInputs != inChanNum && dfltInLayout != nullptr)
-                    {
-                        if (! juceFilter->setPreferredBusArrangement (true, 0, *dfltInLayout)) continue;
-
-                        lastInputs = inChanNum;
-                        lastOutputs = hasMainOutputBus ? static_cast<uint32_t> (arr.outputBuses.getReference (0). channels.size()) : 0;
-
-                        supportedChannels.add ((lastInputs << 16) | lastOutputs);
-                    }
-
-                    if (lastOutputs != outChanNum && dfltOutLayout != nullptr)
-                    {
-                        if (! juceFilter->setPreferredBusArrangement (false, 0, *dfltOutLayout)) continue;
-
-                        lastInputs = hasMainInputBus ? static_cast<uint32_t> (arr.inputBuses.getReference (0).channels.size()) : 0;
-                        lastOutputs = outChanNum;
-
-                        supportedChannels.add ((lastInputs << 16) | lastOutputs);
-                    }
-                }
-            }
-
-            bool hasInOutMismatch = false;
-            for (int i = 0; i < supportedChannels.size(); ++i)
-            {
-                const uint32_t numInputs  = (supportedChannels[i] >> 16) & 0xffff;
-                const uint32_t numOutputs = (supportedChannels[i] >> 0)  & 0xffff;
-
-                if (numInputs != numOutputs)
-                {
-                    hasInOutMismatch = true;
-                    break;
-                }
-            }
-
-            bool hasUnsupportedInput = ! hasMainOutputBus, hasUnsupportedOutput = ! hasMainInputBus;
-            for (uint32_t inChanNum = hasMainInputBus ? 1 : 0; inChanNum <= (hasMainInputBus ? maxNumChanToCheckFor : 0); ++inChanNum)
-            {
-                uint32_t channelConfiguration = (inChanNum << 16) | (hasInOutMismatch ? defaultOutputs : inChanNum);
-                if (! supportedChannels.contains (channelConfiguration))
-                {
-                    hasUnsupportedInput = true;
-                    break;
-                }
-            }
-
-            for (uint32_t outChanNum = hasMainOutputBus ? 1 : 0; outChanNum <= (hasMainOutputBus ? maxNumChanToCheckFor : 0); ++outChanNum)
-            {
-                uint32_t channelConfiguration = ((hasInOutMismatch ? defaultInputs : outChanNum) << 16) | outChanNum;
-                if (! supportedChannels.contains (channelConfiguration))
-                {
-                    hasUnsupportedOutput = true;
-                    break;
-                }
-            }
-
-            for (int i = 0; i < supportedChannels.size(); ++i)
-            {
-                const int numInputs  = (supportedChannels[i] >> 16) & 0xffff;
-                const int numOutputs = (supportedChannels[i] >> 0)  & 0xffff;
-
-                AUChannelInfo info;
-
-                // see here: https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/TheAudioUnit/TheAudioUnit.html
-                info.inChannels  = static_cast<SInt16> (hasMainInputBus  ? (hasUnsupportedInput  ? numInputs :  (hasInOutMismatch && (! hasUnsupportedOutput) ? -2 : -1)) : 0);
-                info.outChannels = static_cast<SInt16> (hasMainOutputBus ? (hasUnsupportedOutput ? numOutputs : (hasInOutMismatch && (! hasUnsupportedInput)  ? -2 : -1)) : 0);
-
-                if (info.inChannels == -2 && info.outChannels == -2)
-                    info.inChannels = -1;
-
-                int j;
-                for (j = 0; j < channelInfo.size(); ++j)
-                    if (channelInfo[j].inChannels == info.inChannels && channelInfo[j].outChannels == info.outChannels)
-                        break;
-
-                if (j >= channelInfo.size())
-                    channelInfo.add (info);
-            }
-        }
-    }
-
-    //==============================================================================
-    void clearPresetsArray() const
-    {
-        for (int i = presetsArray.size(); --i >= 0;)
-            CFRelease (presetsArray.getReference(i).presetName);
-
-        presetsArray.clear();
-    }
-
-    void refreshCurrentPreset()
-    {
-        // this will make the AU host re-read and update the current preset name
-        // in case it was changed here in the plug-in:
-
-        const int currentProgramNumber = juceFilter->getCurrentProgram();
-        const String currentProgramName = juceFilter->getProgramName (currentProgramNumber);
-
-        AUPreset currentPreset;
-        currentPreset.presetNumber = currentProgramNumber;
-        currentPreset.presetName = currentProgramName.toCFString();
-
-        SetAFactoryPresetAsCurrent (currentPreset);
-    }
-
-    //==============================================================================
-    Array<AudioChannelLayoutTag>&       getSupportedBusLayouts (bool isInput, int bus) noexcept       { return (isInput ? supportedInputLayouts : supportedOutputLayouts).getReference (bus); }
-    const Array<AudioChannelLayoutTag>& getSupportedBusLayouts (bool isInput, int bus) const noexcept { return (isInput ? supportedInputLayouts : supportedOutputLayouts).getReference (bus); }
-    AudioChannelLayoutTag& getCurrentLayout (bool isInput, int bus) noexcept               { return (isInput ? currentInputLayout : currentOutputLayout).getReference (bus); }
-    AudioChannelLayoutTag  getCurrentLayout (bool isInput, int bus) const noexcept         { return (isInput ? currentInputLayout : currentOutputLayout)[bus]; }
-
-    bool toggleBus (bool isInput, int busIdx)
-    {
-        const PluginBusUtilities::SupportedBusLayouts& layouts = busUtils.getSupportedBusLayouts (isInput, busIdx);
-
-        if (! layouts.canBeDisabled)
-            return false;
-
-        AudioChannelSet newSet;
-
-        if (! busUtils.isBusEnabled (isInput, busIdx))
-            newSet = layouts.getDefault();
-
-        return juceFilter->setPreferredBusArrangement (isInput, busIdx, newSet);
-    }
-
-    //==============================================================================
-    static AudioChannelSet::ChannelType CoreAudioChannelLabelToJuceType (AudioChannelLabel label) noexcept
-    {
-        if (label >= kAudioChannelLabel_Discrete_0 && label <= kAudioChannelLabel_Discrete_65535)
-        {
-            const unsigned int discreteChannelNum = label - kAudioChannelLabel_Discrete_0;
-            return static_cast<AudioChannelSet::ChannelType> (AudioChannelSet::discreteChannel0 + discreteChannelNum);
-        }
-
-        switch (label)
-        {
-            case kAudioChannelLabel_Center:
-            case kAudioChannelLabel_Mono:                   return AudioChannelSet::centre;
-            case kAudioChannelLabel_Left:
-            case kAudioChannelLabel_HeadphonesLeft:         return AudioChannelSet::left;
-            case kAudioChannelLabel_Right:
-            case kAudioChannelLabel_HeadphonesRight:        return AudioChannelSet::right;
-            case kAudioChannelLabel_LFEScreen:              return AudioChannelSet::subbass;
-            case kAudioChannelLabel_LeftSurround:           return AudioChannelSet::surroundLeft;
-            case kAudioChannelLabel_RightSurround:          return AudioChannelSet::surroundRight;
-            case kAudioChannelLabel_LeftCenter:             return AudioChannelSet::centreLeft;
-            case kAudioChannelLabel_RightCenter:            return AudioChannelSet::centreRight;
-            case kAudioChannelLabel_CenterSurround:         return AudioChannelSet::surround;
-            case kAudioChannelLabel_LeftSurroundDirect:     return AudioChannelSet::sideLeft;
-            case kAudioChannelLabel_RightSurroundDirect:    return AudioChannelSet::sideRight;
-            case kAudioChannelLabel_TopCenterSurround:      return AudioChannelSet::topMiddle;
-            case kAudioChannelLabel_VerticalHeightLeft:     return AudioChannelSet::topFrontLeft;
-            case kAudioChannelLabel_VerticalHeightRight:    return AudioChannelSet::topFrontRight;
-            case kAudioChannelLabel_VerticalHeightCenter:   return AudioChannelSet::topFrontCentre;
-            case kAudioChannelLabel_TopBackLeft:
-            case kAudioChannelLabel_RearSurroundLeft:       return AudioChannelSet::topRearLeft;
-            case kAudioChannelLabel_TopBackRight:
-            case kAudioChannelLabel_RearSurroundRight:      return AudioChannelSet::topRearRight;
-            case kAudioChannelLabel_TopBackCenter:          return AudioChannelSet::topRearCentre;
-            case kAudioChannelLabel_LFE2:                   return AudioChannelSet::subbass2;
-            default:                                        return AudioChannelSet::unknown;
-        }
-    }
-
-    static AudioChannelSet CoreAudioChannelBitmapToJuceType (UInt32 bitmap) noexcept
-    {
-        AudioChannelSet set;
-
-        if ((bitmap & kAudioChannelBit_Left)                 != 0) set.addChannel (AudioChannelSet::left);
-        if ((bitmap & kAudioChannelBit_Right)                != 0) set.addChannel (AudioChannelSet::right);
-        if ((bitmap & kAudioChannelBit_Center)               != 0) set.addChannel (AudioChannelSet::centre);
-        if ((bitmap & kAudioChannelBit_LFEScreen)            != 0) set.addChannel (AudioChannelSet::subbass);
-        if ((bitmap & kAudioChannelBit_LeftSurround)         != 0) set.addChannel (AudioChannelSet::surroundLeft);
-        if ((bitmap & kAudioChannelBit_RightSurround)        != 0) set.addChannel (AudioChannelSet::surroundRight);
-        if ((bitmap & kAudioChannelBit_LeftCenter)           != 0) set.addChannel (AudioChannelSet::centreLeft);
-        if ((bitmap & kAudioChannelBit_RightCenter)          != 0) set.addChannel (AudioChannelSet::centreRight);
-        if ((bitmap & kAudioChannelBit_CenterSurround)       != 0) set.addChannel (AudioChannelSet::surround);
-        if ((bitmap & kAudioChannelBit_LeftSurroundDirect)   != 0) set.addChannel (AudioChannelSet::sideLeft);
-        if ((bitmap & kAudioChannelBit_RightSurroundDirect)  != 0) set.addChannel (AudioChannelSet::sideRight);
-        if ((bitmap & kAudioChannelBit_TopCenterSurround)    != 0) set.addChannel (AudioChannelSet::topMiddle);
-        if ((bitmap & kAudioChannelBit_VerticalHeightLeft)   != 0) set.addChannel (AudioChannelSet::topFrontLeft);
-        if ((bitmap & kAudioChannelBit_VerticalHeightCenter) != 0) set.addChannel (AudioChannelSet::topFrontCentre);
-        if ((bitmap & kAudioChannelBit_VerticalHeightRight)  != 0) set.addChannel (AudioChannelSet::topFrontRight);
-        if ((bitmap & kAudioChannelBit_TopBackLeft)          != 0) set.addChannel (AudioChannelSet::topRearLeft);
-        if ((bitmap & kAudioChannelBit_TopBackCenter)        != 0) set.addChannel (AudioChannelSet::topRearCentre);
-        if ((bitmap & kAudioChannelBit_TopBackRight)         != 0) set.addChannel (AudioChannelSet::topRearRight);
-
-        return set;
-    }
-
-    static AudioChannelSet CoreAudioChannelLayoutToJuceType (const AudioChannelLayout& layout) noexcept
-    {
-        const AudioChannelLayoutTag tag = layout.mChannelLayoutTag;
-
-        if (tag == kAudioChannelLayoutTag_UseChannelBitmap)         return CoreAudioChannelBitmapToJuceType (layout.mChannelBitmap);
-        if (tag == kAudioChannelLayoutTag_UseChannelDescriptions)
-        {
-            AudioChannelSet set;
-            for (unsigned int i = 0; i < layout.mNumberChannelDescriptions; ++i)
-                set.addChannel (CoreAudioChannelLabelToJuceType (layout.mChannelDescriptions[i].mChannelLabel));
-
-            return set;
-        }
-
-        return CALayoutTagToChannelSet (tag);
-    }
-
-    static AudioChannelSet CALayoutTagToChannelSet (AudioChannelLayoutTag tag) noexcept
-    {
-        switch (tag)
-        {
-            case kAudioChannelLayoutTag_Mono:                   return AudioChannelSet::mono();
-            case kAudioChannelLayoutTag_Stereo:
-            case kAudioChannelLayoutTag_StereoHeadphones:
-            case kAudioChannelLayoutTag_Binaural:               return AudioChannelSet::stereo();
-            case kAudioChannelLayoutTag_Quadraphonic:           return AudioChannelSet::quadraphonic();
-            case kAudioChannelLayoutTag_Pentagonal:             return AudioChannelSet::pentagonal();
-            case kAudioChannelLayoutTag_Hexagonal:              return AudioChannelSet::hexagonal();
-            case kAudioChannelLayoutTag_Octagonal:              return AudioChannelSet::octagonal();
-            case kAudioChannelLayoutTag_Ambisonic_B_Format:     return AudioChannelSet::ambisonic();
-            case kAudioChannelLayoutTag_AudioUnit_6_0:          return AudioChannelSet::create6point0();
-            case kAudioChannelLayoutTag_MPEG_6_1_A:             return AudioChannelSet::create6point1();
-            case kAudioChannelLayoutTag_MPEG_5_0_B:             return AudioChannelSet::create5point0();
-            case kAudioChannelLayoutTag_MPEG_5_1_A:             return AudioChannelSet::create5point1();
-            case kAudioChannelLayoutTag_DTS_7_1:
-            case kAudioChannelLayoutTag_MPEG_7_1_C:             return AudioChannelSet::create7point1();
-            case kAudioChannelLayoutTag_AudioUnit_7_0_Front:    return AudioChannelSet::createFront7point0();
-            case kAudioChannelLayoutTag_AudioUnit_7_1_Front:    return AudioChannelSet::createFront7point1();
-        }
-
-        if (int numChannels = static_cast<int> (tag) & 0xffff)
-            return AudioChannelSet::discreteChannels (numChannels);
-
-        // Bitmap and channel description array layout tags are currently unsupported :-(
-        jassertfalse;
-        return AudioChannelSet();
-    }
-
-    static AudioChannelLayoutTag ChannelSetToCALayoutTag (const AudioChannelSet& set) noexcept
-    {
-        if (set == AudioChannelSet::mono())               return kAudioChannelLayoutTag_Mono;
-        if (set == AudioChannelSet::stereo())             return kAudioChannelLayoutTag_Stereo;
-        if (set == AudioChannelSet::quadraphonic())       return kAudioChannelLayoutTag_Quadraphonic;
-        if (set == AudioChannelSet::pentagonal())         return kAudioChannelLayoutTag_Pentagonal;
-        if (set == AudioChannelSet::hexagonal())          return kAudioChannelLayoutTag_Hexagonal;
-        if (set == AudioChannelSet::octagonal())          return kAudioChannelLayoutTag_Octagonal;
-        if (set == AudioChannelSet::ambisonic())          return kAudioChannelLayoutTag_Ambisonic_B_Format;
-        if (set == AudioChannelSet::create5point0())      return kAudioChannelLayoutTag_MPEG_5_0_B;
-        if (set == AudioChannelSet::create5point1())      return kAudioChannelLayoutTag_MPEG_5_1_A;
-        if (set == AudioChannelSet::create6point0())      return kAudioChannelLayoutTag_AudioUnit_6_0;
-        if (set == AudioChannelSet::create6point1())      return kAudioChannelLayoutTag_MPEG_6_1_A;
-        if (set == AudioChannelSet::create7point0())      return kAudioChannelLayoutTag_AudioUnit_7_0;
-        if (set == AudioChannelSet::create7point1())      return kAudioChannelLayoutTag_MPEG_7_1_C;
-        if (set == AudioChannelSet::createFront7point0()) return kAudioChannelLayoutTag_AudioUnit_7_0_Front;
-        if (set == AudioChannelSet::createFront7point1()) return kAudioChannelLayoutTag_AudioUnit_7_1_Front;
-
-        return static_cast<AudioChannelLayoutTag> ((int) kAudioChannelLayoutTag_DiscreteInOrder | set.size());
-    }
-
-    //==============================================================================
-    void addSupportedLayoutTagsForBus (bool isInput, int busNum, Array<AudioChannelLayoutTag>& tags)
-    {
-        const PluginBusUtilities::SupportedBusLayouts& layouts = busUtils.getSupportedBusLayouts (isInput, busNum);
-
-        if (! layouts.busIgnoresLayout)
-            for (int i = 0; i < layouts.supportedLayouts.size(); ++i)
-                tags.add (ChannelSetToCALayoutTag (layouts.supportedLayouts.getReference (i)));
-    }
-
-    void addSupportedLayoutTagsForDirection (bool isInput)
-    {
-        Array<Array<AudioChannelLayoutTag> >& layouts = isInput ? supportedInputLayouts : supportedOutputLayouts;
-        layouts.clear();
-
-        for (int busNr = 0; busNr < busUtils.getBusCount (isInput); ++busNr)
-        {
-            Array<AudioChannelLayoutTag> busLayouts;
-            addSupportedLayoutTagsForBus (isInput, busNr, busLayouts);
-
-            layouts.add (busLayouts);
-        }
-    }
-
-    void addSupportedLayoutTags()
-    {
-        currentInputLayout.clear(); currentOutputLayout.clear();
-
-        currentInputLayout. resize (juceFilter->busArrangement.inputBuses. size());
-        currentOutputLayout.resize (juceFilter->busArrangement.outputBuses.size());
-
-        addSupportedLayoutTagsForDirection (true);
-        addSupportedLayoutTagsForDirection (false);
-    }
-
-    JUCE_DECLARE_NON_COPYABLE (JuceAU)
-};
-
-
-//==============================================================================
-#if BUILD_AU_CARBON_UI
-
-class JuceAUView  : public AUCarbonViewBase
-{
-public:
-    JuceAUView (AudioUnitCarbonView auview)
-      : AUCarbonViewBase (auview),
-        juceFilter (nullptr)
-    {
-    }
-
-    ~JuceAUView()
-    {
-        deleteUI();
-    }
-
-    ComponentResult CreateUI (Float32 /*inXOffset*/, Float32 /*inYOffset*/) override
-    {
-        JUCE_AUTORELEASEPOOL
-        {
-            if (juceFilter == nullptr)
-            {
-                void* pointers[2];
-                UInt32 propertySize = sizeof (pointers);
-
-                AudioUnitGetProperty (GetEditAudioUnit(),
-                                      juceFilterObjectPropertyID,
-                                      kAudioUnitScope_Global,
-                                      0,
-                                      pointers,
-                                      &propertySize);
-
-                juceFilter = (AudioProcessor*) pointers[0];
-            }
-
-            if (juceFilter != nullptr)
-            {
-                deleteUI();
-
-                if (AudioProcessorEditor* editorComp = juceFilter->createEditorIfNeeded())
-                {
-                    editorComp->setOpaque (true);
-                    windowComp = new ComponentInHIView (editorComp, mCarbonPane);
-                }
-            }
-            else
-            {
-                jassertfalse; // can't get a pointer to our effect
-            }
-        }
-
-        return noErr;
-    }
-
-    AudioUnitCarbonViewEventListener getEventListener() const   { return mEventListener; }
-    void* getEventListenerUserData() const                      { return mEventListenerUserData; }
-
-private:
-    //==============================================================================
-    AudioProcessor* juceFilter;
-    ScopedPointer<Component> windowComp;
-    FakeMouseMoveGenerator fakeMouseGenerator;
-
-    void deleteUI()
-    {
-        if (windowComp != nullptr)
-        {
-            PopupMenu::dismissAllActiveMenus();
-
-            /* This assertion is triggered when there's some kind of modal component active, and the
-               host is trying to delete our plugin.
-               If you must use modal components, always use them in a non-blocking way, by never
-               calling runModalLoop(), but instead using enterModalState() with a callback that
-               will be performed on completion. (Note that this assertion could actually trigger
-               a false alarm even if you're doing it correctly, but is here to catch people who
-               aren't so careful) */
-            jassert (Component::getCurrentlyModalComponent() == nullptr);
-
-            if (JuceAU::EditorCompHolder* editorCompHolder = dynamic_cast<JuceAU::EditorCompHolder*> (windowComp->getChildComponent(0)))
-                if (AudioProcessorEditor* audioProcessEditor = dynamic_cast<AudioProcessorEditor*> (editorCompHolder->getChildComponent(0)))
-                    juceFilter->editorBeingDeleted (audioProcessEditor);
-
-            windowComp = nullptr;
-        }
-    }
-
-    //==============================================================================
-    // Uses a child NSWindow to sit in front of a HIView and display our component
-    class ComponentInHIView  : public Component
-    {
-    public:
-        ComponentInHIView (AudioProcessorEditor* ed, HIViewRef parentHIView)
-            : parentView (parentHIView),
-              editor (ed),
-              recursive (false)
-        {
-            JUCE_AUTORELEASEPOOL
-            {
-                jassert (ed != nullptr);
-                addAndMakeVisible (editor);
-                setOpaque (true);
-                setVisible (true);
-                setBroughtToFrontOnMouseClick (true);
-
-                setSize (editor.getWidth(), editor.getHeight());
-                SizeControl (parentHIView, (SInt16) editor.getWidth(), (SInt16) editor.getHeight());
-
-                WindowRef windowRef = HIViewGetWindow (parentHIView);
-                hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef];
-
-                [hostWindow retain];
-                [hostWindow setCanHide: YES];
-                [hostWindow setReleasedWhenClosed: YES];
-
-                updateWindowPos();
-
-               #if ! JucePlugin_EditorRequiresKeyboardFocus
-                addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
-                setWantsKeyboardFocus (false);
-               #else
-                addToDesktop (ComponentPeer::windowIsTemporary);
-                setWantsKeyboardFocus (true);
-               #endif
-
-                setVisible (true);
-                toFront (false);
-
-                addSubWindow();
-
-                NSWindow* pluginWindow = [((NSView*) getWindowHandle()) window];
-                [pluginWindow setNextResponder: hostWindow];
-
-                attachWindowHidingHooks (this, (WindowRef) windowRef, hostWindow);
-            }
-        }
-
-        ~ComponentInHIView()
-        {
-            JUCE_AUTORELEASEPOOL
-            {
-                removeWindowHidingHooks (this);
-
-                NSWindow* pluginWindow = [((NSView*) getWindowHandle()) window];
-                [hostWindow removeChildWindow: pluginWindow];
-                removeFromDesktop();
-
-                [hostWindow release];
-                hostWindow = nil;
-            }
-        }
-
-        void updateWindowPos()
-        {
-            HIPoint f;
-            f.x = f.y = 0;
-            HIPointConvert (&f, kHICoordSpaceView, parentView, kHICoordSpaceScreenPixel, 0);
-            setTopLeftPosition ((int) f.x, (int) f.y);
-        }
-
-        void addSubWindow()
-        {
-            NSWindow* pluginWindow = [((NSView*) getWindowHandle()) window];
-            [pluginWindow setExcludedFromWindowsMenu: YES];
-            [pluginWindow setCanHide: YES];
-
-            [hostWindow addChildWindow: pluginWindow
-                               ordered: NSWindowAbove];
-            [hostWindow orderFront: nil];
-            [pluginWindow orderFront: nil];
-        }
-
-        void resized() override
-        {
-            if (Component* const child = getChildComponent (0))
-                child->setBounds (getLocalBounds());
-        }
-
-        void paint (Graphics&) override {}
-
-        void childBoundsChanged (Component*) override
-        {
-            if (! recursive)
-            {
-                recursive = true;
-
-                const int w = jmax (32, editor.getWidth());
-                const int h = jmax (32, editor.getHeight());
-
-                SizeControl (parentView, (SInt16) w, (SInt16) h);
-
-                if (getWidth() != w || getHeight() != h)
-                    setSize (w, h);
-
-                editor.repaint();
-
-                updateWindowPos();
-                addSubWindow(); // (need this for AULab)
-
-                recursive = false;
-            }
-        }
-
-        bool keyPressed (const KeyPress& kp) override
-        {
-            if (! kp.getModifiers().isCommandDown())
-            {
-                // If we have an unused keypress, move the key-focus to a host window
-                // and re-inject the event..
-                static NSTimeInterval lastEventTime = 0; // check we're not recursively sending the same event
-                NSTimeInterval eventTime = [[NSApp currentEvent] timestamp];
-
-                if (lastEventTime != eventTime)
-                {
-                    lastEventTime = eventTime;
-
-                    [[hostWindow parentWindow] makeKeyWindow];
-                    repostCurrentNSEvent();
-                }
-            }
-
-            return false;
-        }
-
-    private:
-        HIViewRef parentView;
-        NSWindow* hostWindow;
-        JuceAU::EditorCompHolder editor;
-        bool recursive;
-    };
-};
-
-#endif
-
-//==============================================================================
-#define JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) \
-    extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix (ComponentParameters* params, Class* obj); \
-    extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix (ComponentParameters* params, Class* obj) \
-    { \
-        return ComponentEntryPoint<Class>::Dispatch (params, obj); \
-    }
-
-#if JucePlugin_ProducesMidiOutput || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect
- #define FACTORY_BASE_CLASS AUMIDIEffectFactory
-#else
- #define FACTORY_BASE_CLASS AUBaseFactory
-#endif
-
-#define JUCE_FACTORY_ENTRYX(Class, Name) \
-    extern "C" __attribute__((visibility("default"))) void* Name ## Factory (const AudioComponentDescription* desc); \
-    extern "C" __attribute__((visibility("default"))) void* Name ## Factory (const AudioComponentDescription* desc) \
-    { \
-        return FACTORY_BASE_CLASS<Class>::Factory (desc); \
-    }
-
-#define JUCE_COMPONENT_ENTRY(Class, Name, Suffix)   JUCE_COMPONENT_ENTRYX(Class, Name, Suffix)
-#define JUCE_FACTORY_ENTRY(Class, Name)             JUCE_FACTORY_ENTRYX(Class, Name)
-
-//==============================================================================
-JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry)
-
-#ifndef AUDIOCOMPONENT_ENTRY
- #define JUCE_DISABLE_AU_FACTORY_ENTRY 1
-#endif
-
-#if ! JUCE_DISABLE_AU_FACTORY_ENTRY  // (You might need to disable this for old Xcode 3 builds)
-JUCE_FACTORY_ENTRY   (JuceAU, JucePlugin_AUExportPrefix)
-#endif
-
-#if BUILD_AU_CARBON_UI
- JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry)
-#endif
-
-#if ! JUCE_DISABLE_AU_FACTORY_ENTRY
- #include "CoreAudioUtilityClasses/AUPlugInDispatch.cpp"
-#endif
-
-#endif
diff --git a/modules/juce_core/zip/zlib/README b/modules/juce_core/zip/zlib/README
deleted file mode 100644
index 758cc50..0000000
--- a/modules/juce_core/zip/zlib/README
+++ /dev/null
@@ -1,125 +0,0 @@
-ZLIB DATA COMPRESSION LIBRARY
-
-zlib 1.2.3 is a general purpose data compression library.  All the code is
-thread safe.  The data format used by the zlib library is described by RFCs
-(Request for Comments) 1950 to 1952 in the files
-http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format)
-and rfc1952.txt (gzip format). These documents are also available in other
-formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
-
-All functions of the compression library are documented in the file zlib.h
-(volunteer to write man pages welcome, contact zlib at gzip.org). A usage example
-of the library is given in the file example.c which also tests that the library
-is working correctly. Another example is given in the file minigzip.c. The
-compression library itself is composed of all source files except example.c and
-minigzip.c.
-
-To compile all files and run the test program, follow the instructions given at
-the top of Makefile. In short "make test; make install" should work for most
-machines. For Unix: "./configure; make test; make install". For MSDOS, use one
-of the special makefiles such as Makefile.msc. For VMS, use make_vms.com.
-
-Questions about zlib should be sent to <zlib at gzip.org>, or to Gilles Vollant
-<info at winimage.com> for the Windows DLL version. The zlib home page is
-http://www.zlib.org or http://www.gzip.org/zlib/ Before reporting a problem,
-please check this site to verify that you have the latest version of zlib;
-otherwise get the latest version and check whether the problem still exists or
-not.
-
-PLEASE read the zlib FAQ http://www.gzip.org/zlib/zlib_faq.html before asking
-for help.
-
-Mark Nelson <markn at ieee.org> wrote an article about zlib for the Jan. 1997
-issue of  Dr. Dobb's Journal; a copy of the article is available in
-http://dogma.net/markn/articles/zlibtool/zlibtool.htm
-
-The changes made in version 1.2.3 are documented in the file ChangeLog.
-
-Unsupported third party contributions are provided in directory "contrib".
-
-A Java implementation of zlib is available in the Java Development Kit
-http://java.sun.com/j2se/1.4.2/docs/api/java/util/zip/package-summary.html
-See the zlib home page http://www.zlib.org for details.
-
-A Perl interface to zlib written by Paul Marquess <pmqs at cpan.org> is in the
-CPAN (Comprehensive Perl Archive Network) sites
-http://www.cpan.org/modules/by-module/Compress/
-
-A Python interface to zlib written by A.M. Kuchling <amk at amk.ca> is
-available in Python 1.5 and later versions, see
-http://www.python.org/doc/lib/module-zlib.html
-
-A zlib binding for TCL written by Andreas Kupries <a.kupries at westend.com> is
-availlable at http://www.oche.de/~akupries/soft/trf/trf_zip.html
-
-An experimental package to read and write files in .zip format, written on top
-of zlib by Gilles Vollant <info at winimage.com>, is available in the
-contrib/minizip directory of zlib.
-
-
-Notes for some targets:
-
-- For Windows DLL versions, please see win32/DLL_FAQ.txt
-
-- For 64-bit Irix, deflate.c must be compiled without any optimization. With
-  -O, one libpng test fails. The test works in 32 bit mode (with the -n32
-  compiler flag). The compiler bug has been reported to SGI.
-
-- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
-  when compiled with cc.
-
-- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
-  necessary to get gzprintf working correctly. This is done by configure.
-
-- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
-  other compilers. Use "make test" to check your compiler.
-
-- gzdopen is not supported on RISCOS, BEOS and by some Mac compilers.
-
-- For PalmOs, see http://palmzlib.sourceforge.net/
-
-- When building a shared, i.e. dynamic library on Mac OS X, the library must be
-  installed before testing (do "make install" before "make test"), since the
-  library location is specified in the library.
-
-
-Acknowledgments:
-
-  The deflate format used by zlib was defined by Phil Katz. The deflate
-  and zlib specifications were written by L. Peter Deutsch. Thanks to all the
-  people who reported problems and suggested various improvements in zlib;
-  they are too numerous to cite here.
-
-Copyright notice:
-
- (C) 1995-2004 Jean-loup Gailly and Mark Adler
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  Jean-loup Gailly        Mark Adler
-  jloup at gzip.org          madler at alumni.caltech.edu
-
-If you use the zlib library in a product, we would appreciate *not*
-receiving lengthy legal documents to sign. The sources are provided
-for free but without warranty of any kind.  The library has been
-entirely written by Jean-loup Gailly and Mark Adler; it does not
-include third-party code.
-
-If you redistribute modified sources, we would appreciate that you include
-in the file ChangeLog history information documenting your changes. Please
-read the FAQ for more information on the distribution of modified source
-versions.
diff --git a/modules/juce_core/zip/zlib/adler32.c b/modules/juce_core/zip/zlib/adler32.c
deleted file mode 100644
index bf5cbd2..0000000
--- a/modules/juce_core/zip/zlib/adler32.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2004 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id: adler32.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#define ZLIB_INTERNAL
-#include "zlib.h"
-
-#define BASE 65521UL    /* largest prime smaller than 65536 */
-#define NMAX 5552
-/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
-
-#define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}
-#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
-#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
-#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
-#define DO16(buf)   DO8(buf,0); DO8(buf,8);
-
-/* use NO_DIVIDE if your processor does not do division in hardware */
-#ifdef NO_DIVIDE
-#  define MOD(a) \
-    do { \
-        if (a >= (BASE << 16)) a -= (BASE << 16); \
-        if (a >= (BASE << 15)) a -= (BASE << 15); \
-        if (a >= (BASE << 14)) a -= (BASE << 14); \
-        if (a >= (BASE << 13)) a -= (BASE << 13); \
-        if (a >= (BASE << 12)) a -= (BASE << 12); \
-        if (a >= (BASE << 11)) a -= (BASE << 11); \
-        if (a >= (BASE << 10)) a -= (BASE << 10); \
-        if (a >= (BASE << 9)) a -= (BASE << 9); \
-        if (a >= (BASE << 8)) a -= (BASE << 8); \
-        if (a >= (BASE << 7)) a -= (BASE << 7); \
-        if (a >= (BASE << 6)) a -= (BASE << 6); \
-        if (a >= (BASE << 5)) a -= (BASE << 5); \
-        if (a >= (BASE << 4)) a -= (BASE << 4); \
-        if (a >= (BASE << 3)) a -= (BASE << 3); \
-        if (a >= (BASE << 2)) a -= (BASE << 2); \
-        if (a >= (BASE << 1)) a -= (BASE << 1); \
-        if (a >= BASE) a -= BASE; \
-    } while (0)
-#  define MOD4(a) \
-    do { \
-        if (a >= (BASE << 4)) a -= (BASE << 4); \
-        if (a >= (BASE << 3)) a -= (BASE << 3); \
-        if (a >= (BASE << 2)) a -= (BASE << 2); \
-        if (a >= (BASE << 1)) a -= (BASE << 1); \
-        if (a >= BASE) a -= BASE; \
-    } while (0)
-#else
-#  define MOD(a) a %= BASE
-#  define MOD4(a) a %= BASE
-#endif
-
-/* ========================================================================= */
-uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
-{
-    unsigned long sum2;
-    unsigned n;
-
-    /* split Adler-32 into component sums */
-    sum2 = (adler >> 16) & 0xffff;
-    adler &= 0xffff;
-
-    /* in case user likes doing a byte at a time, keep it fast */
-    if (len == 1) {
-        adler += buf[0];
-        if (adler >= BASE)
-            adler -= BASE;
-        sum2 += adler;
-        if (sum2 >= BASE)
-            sum2 -= BASE;
-        return adler | (sum2 << 16);
-    }
-
-    /* initial Adler-32 value (deferred check for len == 1 speed) */
-    if (buf == Z_NULL)
-        return 1L;
-
-    /* in case short lengths are provided, keep it somewhat fast */
-    if (len < 16) {
-        while (len--) {
-            adler += *buf++;
-            sum2 += adler;
-        }
-        if (adler >= BASE)
-            adler -= BASE;
-        MOD4(sum2);             /* only added so many BASE's */
-        return adler | (sum2 << 16);
-    }
-
-    /* do length NMAX blocks -- requires just one modulo operation */
-    while (len >= NMAX) {
-        len -= NMAX;
-        n = NMAX / 16;          /* NMAX is divisible by 16 */
-        do {
-            DO16(buf);          /* 16 sums unrolled */
-            buf += 16;
-        } while (--n);
-        MOD(adler);
-        MOD(sum2);
-    }
-
-    /* do remaining bytes (less than NMAX, still just one modulo) */
-    if (len) {                  /* avoid modulos if none remaining */
-        while (len >= 16) {
-            len -= 16;
-            DO16(buf);
-            buf += 16;
-        }
-        while (len--) {
-            adler += *buf++;
-            sum2 += adler;
-        }
-        MOD(adler);
-        MOD(sum2);
-    }
-
-    /* return recombined sums */
-    return adler | (sum2 << 16);
-}
-
-/* ========================================================================= */
-uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2)
-{
-    unsigned long sum1;
-    unsigned long sum2;
-    unsigned rem;
-
-    /* the derivation of this formula is left as an exercise for the reader */
-    rem = (unsigned)(len2 % BASE);
-    sum1 = adler1 & 0xffff;
-    sum2 = rem * sum1;
-    MOD(sum2);
-    sum1 += (adler2 & 0xffff) + BASE - 1;
-    sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
-    if (sum1 > BASE) sum1 -= BASE;
-    if (sum1 > BASE) sum1 -= BASE;
-    if (sum2 > (BASE << 1)) sum2 -= (BASE << 1);
-    if (sum2 > BASE) sum2 -= BASE;
-    return sum1 | (sum2 << 16);
-}
diff --git a/modules/juce_core/zip/zlib/compress.c b/modules/juce_core/zip/zlib/compress.c
deleted file mode 100644
index 05c49c5..0000000
--- a/modules/juce_core/zip/zlib/compress.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2003 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id: compress.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#define ZLIB_INTERNAL
-#include "zlib.h"
-
-/* ===========================================================================
-     Compresses the source buffer into the destination buffer. The level
-   parameter has the same meaning as in deflateInit.  sourceLen is the byte
-   length of the source buffer. Upon entry, destLen is the total size of the
-   destination buffer, which must be at least 0.1% larger than sourceLen plus
-   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-
-     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
-   Z_STREAM_ERROR if the level parameter is invalid.
-*/
-int ZEXPORT compress2 (Bytef *dest, uLongf *destLen, const Bytef *source,
-                       uLong sourceLen, int level)
-{
-    z_stream stream;
-    int err;
-
-    stream.next_in = (Bytef*)source;
-    stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
-    /* Check for source > 64K on 16-bit machine: */
-    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
-    stream.next_out = dest;
-    stream.avail_out = (uInt)*destLen;
-    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-    stream.zalloc = (alloc_func)0;
-    stream.zfree = (free_func)0;
-    stream.opaque = (voidpf)0;
-
-    err = deflateInit(&stream, level);
-    if (err != Z_OK) return err;
-
-    err = deflate(&stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-        deflateEnd(&stream);
-        return err == Z_OK ? Z_BUF_ERROR : err;
-    }
-    *destLen = stream.total_out;
-
-    err = deflateEnd(&stream);
-    return err;
-}
-
-/* ===========================================================================
- */
-int ZEXPORT compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
-{
-    return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
-}
-
-/* ===========================================================================
-     If the default memLevel or windowBits for deflateInit() is changed, then
-   this function needs to be updated.
- */
-uLong ZEXPORT compressBound (uLong sourceLen)
-{
-    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11;
-}
diff --git a/modules/juce_core/zip/zlib/crc32.c b/modules/juce_core/zip/zlib/crc32.c
deleted file mode 100644
index 500d536..0000000
--- a/modules/juce_core/zip/zlib/crc32.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2005 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- *
- * Thanks to Rodney Brown <rbrown64 at csc.com.au> for his contribution of faster
- * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
- * tables for updating the shift register in one step with three exclusive-ors
- * instead of four steps with four exclusive-ors.  This results in about a
- * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
- */
-
-/* @(#) $Id: crc32.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-/*
-  Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
-  protection on the static variables used to control the first-use generation
-  of the crc tables.  Therefore, if you #define DYNAMIC_CRC_TABLE, you should
-  first call get_crc_table() to initialize the tables before allowing more than
-  one thread to use crc32().
- */
-
-#ifdef MAKECRCH
-#  include <stdio.h>
-#  ifndef DYNAMIC_CRC_TABLE
-#    define DYNAMIC_CRC_TABLE
-#  endif /* !DYNAMIC_CRC_TABLE */
-#endif /* MAKECRCH */
-
-#include "zutil.h"      /* for STDC and FAR definitions */
-
-#define local static
-
-/* Find a four-byte integer type for crc32_little() and crc32_big(). */
-#ifndef NOBYFOUR
-#  ifdef STDC           /* need ANSI C limits.h to determine sizes */
-#    include <limits.h>
-#    define BYFOUR
-#    if (UINT_MAX == 0xffffffffUL)
-       typedef unsigned int u4;
-#    else
-#      if (ULONG_MAX == 0xffffffffUL)
-         typedef unsigned long u4;
-#      else
-#        if (USHRT_MAX == 0xffffffffUL)
-           typedef unsigned short u4;
-#        else
-#          undef BYFOUR     /* can't find a four-byte integer type! */
-#        endif
-#      endif
-#    endif
-#  endif /* STDC */
-#endif /* !NOBYFOUR */
-
-/* Definitions for doing the crc four data bytes at a time. */
-#ifdef BYFOUR
-#  define REV(w) (((w)>>24)+(((w)>>8)&0xff00)+ \
-                (((w)&0xff00)<<8)+(((w)&0xff)<<24))
-   local unsigned long crc32_little OF((unsigned long,
-                        const unsigned char FAR *, unsigned));
-   local unsigned long crc32_big OF((unsigned long,
-                        const unsigned char FAR *, unsigned));
-#  define TBLS 8
-#else
-#  define TBLS 1
-#endif /* BYFOUR */
-
-/* Local functions for crc concatenation */
-local unsigned long gf2_matrix_times OF((unsigned long *mat,
-                                         unsigned long vec));
-local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
-
-#ifdef DYNAMIC_CRC_TABLE
-
-local volatile int crc_table_empty = 1;
-local unsigned long FAR crc_table[TBLS][256];
-local void make_crc_table OF((void));
-#ifdef MAKECRCH
-   local void write_table OF((FILE *, const unsigned long FAR *));
-#endif /* MAKECRCH */
-/*
-  Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
-  x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
-
-  Polynomials over GF(2) are represented in binary, one bit per coefficient,
-  with the lowest powers in the most significant bit.  Then adding polynomials
-  is just exclusive-or, and multiplying a polynomial by x is a right shift by
-  one.  If we call the above polynomial p, and represent a byte as the
-  polynomial q, also with the lowest power in the most significant bit (so the
-  byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
-  where a mod b means the remainder after dividing a by b.
-
-  This calculation is done using the shift-register method of multiplying and
-  taking the remainder.  The register is initialized to zero, and for each
-  incoming bit, x^32 is added mod p to the register if the bit is a one (where
-  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
-  x (which is shifting right by one and adding x^32 mod p if the bit shifted
-  out is a one).  We start with the highest power (least significant bit) of
-  q and repeat for all eight bits of q.
-
-  The first table is simply the CRC of all possible eight bit values.  This is
-  all the information needed to generate CRCs on data a byte at a time for all
-  combinations of CRC register values and incoming bytes.  The remaining tables
-  allow for word-at-a-time CRC calculation for both big-endian and little-
-  endian machines, where a word is four bytes.
-*/
-local void make_crc_table()
-{
-    unsigned long c;
-    int n, k;
-    unsigned long poly;                 /* polynomial exclusive-or pattern */
-    /* terms of polynomial defining this crc (except x^32): */
-    static volatile int first = 1;      /* flag to limit concurrent making */
-    static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
-
-    /* See if another task is already doing this (not thread-safe, but better
-       than nothing -- significantly reduces duration of vulnerability in
-       case the advice about DYNAMIC_CRC_TABLE is ignored) */
-    if (first) {
-        first = 0;
-
-        /* make exclusive-or pattern from polynomial (0xedb88320UL) */
-        poly = 0UL;
-        for (n = 0; n < sizeof(p)/sizeof(unsigned char); n++)
-            poly |= 1UL << (31 - p[n]);
-
-        /* generate a crc for every 8-bit value */
-        for (n = 0; n < 256; n++) {
-            c = (unsigned long)n;
-            for (k = 0; k < 8; k++)
-                c = c & 1 ? poly ^ (c >> 1) : c >> 1;
-            crc_table[0][n] = c;
-        }
-
-#ifdef BYFOUR
-        /* generate crc for each value followed by one, two, and three zeros,
-           and then the byte reversal of those as well as the first table */
-        for (n = 0; n < 256; n++) {
-            c = crc_table[0][n];
-            crc_table[4][n] = REV(c);
-            for (k = 1; k < 4; k++) {
-                c = crc_table[0][c & 0xff] ^ (c >> 8);
-                crc_table[k][n] = c;
-                crc_table[k + 4][n] = REV(c);
-            }
-        }
-#endif /* BYFOUR */
-
-        crc_table_empty = 0;
-    }
-    else {      /* not first */
-        /* wait for the other guy to finish (not efficient, but rare) */
-        while (crc_table_empty)
-            ;
-    }
-
-#ifdef MAKECRCH
-    /* write out CRC tables to crc32.h */
-    {
-        FILE *out;
-
-        out = fopen("crc32.h", "w");
-        if (out == NULL) return;
-        fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
-        fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
-        fprintf(out, "local const unsigned long FAR ");
-        fprintf(out, "crc_table[TBLS][256] =\n{\n  {\n");
-        write_table(out, crc_table[0]);
-#  ifdef BYFOUR
-        fprintf(out, "#ifdef BYFOUR\n");
-        for (k = 1; k < 8; k++) {
-            fprintf(out, "  },\n  {\n");
-            write_table(out, crc_table[k]);
-        }
-        fprintf(out, "#endif\n");
-#  endif /* BYFOUR */
-        fprintf(out, "  }\n};\n");
-        fclose(out);
-    }
-#endif /* MAKECRCH */
-}
-
-#ifdef MAKECRCH
-local void write_table(out, table)
-    FILE *out;
-    const unsigned long FAR *table;
-{
-    int n;
-
-    for (n = 0; n < 256; n++)
-        fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ", table[n],
-                n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
-}
-#endif /* MAKECRCH */
-
-#else /* !DYNAMIC_CRC_TABLE */
-/* ========================================================================
- * Tables of CRC-32s of all single-byte values, made by make_crc_table().
- */
-#include "crc32.h"
-#endif /* DYNAMIC_CRC_TABLE */
-
-/* =========================================================================
- * This function can be used by asm versions of crc32()
- */
-const unsigned long FAR * ZEXPORT get_crc_table()
-{
-#ifdef DYNAMIC_CRC_TABLE
-    if (crc_table_empty)
-        make_crc_table();
-#endif /* DYNAMIC_CRC_TABLE */
-    return (const unsigned long FAR *)crc_table;
-}
-
-/* ========================================================================= */
-#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
-#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
-
-/* ========================================================================= */
-unsigned long ZEXPORT crc32 (unsigned long crc, const unsigned char FAR *buf, unsigned len)
-{
-    if (buf == Z_NULL) return 0UL;
-
-#ifdef DYNAMIC_CRC_TABLE
-    if (crc_table_empty)
-        make_crc_table();
-#endif /* DYNAMIC_CRC_TABLE */
-
-#ifdef BYFOUR
-    if (sizeof(void *) == sizeof(ptrdiff_t)) {
-        u4 endian;
-
-        endian = 1;
-        if (*((unsigned char *)(&endian)))
-            return crc32_little(crc, buf, len);
-        else
-            return crc32_big(crc, buf, len);
-    }
-#endif /* BYFOUR */
-    crc = crc ^ 0xffffffffUL;
-    while (len >= 8) {
-        DO8;
-        len -= 8;
-    }
-    if (len) do {
-        DO1;
-    } while (--len);
-    return crc ^ 0xffffffffUL;
-}
-
-#ifdef BYFOUR
-
-/* ========================================================================= */
-#define DOLIT4 c ^= *buf4++; \
-        c = (u4) (crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
-                  crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24])
-#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
-
-/* ========================================================================= */
-local unsigned long crc32_little(unsigned long crc, const unsigned char FAR *buf, unsigned len)
-{
-    register u4 c;
-    register const u4 FAR *buf4;
-
-    c = (u4)crc;
-    c = ~c;
-    while (len && ((ptrdiff_t)buf & 3)) {
-        c = (u4) (crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8));
-        len--;
-    }
-
-    buf4 = (const u4 FAR *)(const void FAR *)buf;
-    while (len >= 32) {
-        DOLIT32;
-        len -= 32;
-    }
-    while (len >= 4) {
-        DOLIT4;
-        len -= 4;
-    }
-    buf = (const unsigned char FAR *)buf4;
-
-    if (len) do {
-        c = (u4) (crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8));
-    } while (--len);
-    c = ~c;
-    return (unsigned long)c;
-}
-
-/* ========================================================================= */
-#define DOBIG4 c ^= *++buf4; \
-        c = (u4) (crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
-                  crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24])
-#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
-
-/* ========================================================================= */
-local unsigned long crc32_big (unsigned long crc, const unsigned char FAR *buf, unsigned len)
-{
-    register u4 c;
-    register const u4 FAR *buf4;
-
-    c = REV((u4)crc);
-    c = ~c;
-    while (len && ((ptrdiff_t)buf & 3)) {
-        c = (u4) (crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8));
-        len--;
-    }
-
-    buf4 = (const u4 FAR *)(const void FAR *)buf;
-    buf4--;
-    while (len >= 32) {
-        DOBIG32;
-        len -= 32;
-    }
-    while (len >= 4) {
-        DOBIG4;
-        len -= 4;
-    }
-    buf4++;
-    buf = (const unsigned char FAR *)buf4;
-
-    if (len) do {
-        c = (u4) (crc_table[4][(c >> 24) ^ (u4) *buf++] ^ (c << 8));
-    } while (--len);
-    c = ~c;
-    return (unsigned long)(REV(c));
-}
-
-#endif /* BYFOUR */
-
-#define GF2_DIM 32      /* dimension of GF(2) vectors (length of CRC) */
-
-/* ========================================================================= */
-local unsigned long gf2_matrix_times (unsigned long *mat, unsigned long vec)
-{
-    unsigned long sum;
-
-    sum = 0;
-    while (vec) {
-        if (vec & 1)
-            sum ^= *mat;
-        vec >>= 1;
-        mat++;
-    }
-    return sum;
-}
-
-/* ========================================================================= */
-local void gf2_matrix_square (unsigned long *square, unsigned long *mat)
-{
-    int n;
-
-    for (n = 0; n < GF2_DIM; n++)
-        square[n] = gf2_matrix_times(mat, mat[n]);
-}
-
-/* ========================================================================= */
-uLong ZEXPORT crc32_combine (uLong crc1, uLong crc2, z_off_t len2)
-{
-    int n;
-    unsigned long row;
-    unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */
-    unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */
-
-    /* degenerate case */
-    if (len2 == 0)
-        return crc1;
-
-    /* put operator for one zero bit in odd */
-    odd[0] = 0xedb88320L;           /* CRC-32 polynomial */
-    row = 1;
-    for (n = 1; n < GF2_DIM; n++) {
-        odd[n] = row;
-        row <<= 1;
-    }
-
-    /* put operator for two zero bits in even */
-    gf2_matrix_square(even, odd);
-
-    /* put operator for four zero bits in odd */
-    gf2_matrix_square(odd, even);
-
-    /* apply len2 zeros to crc1 (first square will put the operator for one
-       zero byte, eight zero bits, in even) */
-    do {
-        /* apply zeros operator for this bit of len2 */
-        gf2_matrix_square(even, odd);
-        if (len2 & 1)
-            crc1 = gf2_matrix_times(even, crc1);
-        len2 >>= 1;
-
-        /* if no more bits set, then done */
-        if (len2 == 0)
-            break;
-
-        /* another iteration of the loop with odd and even swapped */
-        gf2_matrix_square(odd, even);
-        if (len2 & 1)
-            crc1 = gf2_matrix_times(odd, crc1);
-        len2 >>= 1;
-
-        /* if no more bits set, then done */
-    } while (len2 != 0);
-
-    /* return combined crc */
-    crc1 ^= crc2;
-    return crc1;
-}
diff --git a/modules/juce_core/zip/zlib/crc32.h b/modules/juce_core/zip/zlib/crc32.h
deleted file mode 100644
index 5de49bc..0000000
--- a/modules/juce_core/zip/zlib/crc32.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/* crc32.h -- tables for rapid CRC calculation
- * Generated automatically by crc32.c
- */
-
-local const unsigned long FAR crc_table[TBLS][256] =
-{
-  {
-    0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
-    0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
-    0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
-    0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
-    0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
-    0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
-    0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
-    0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
-    0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
-    0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
-    0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
-    0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
-    0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
-    0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
-    0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
-    0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
-    0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
-    0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
-    0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
-    0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
-    0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
-    0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
-    0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
-    0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
-    0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
-    0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
-    0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
-    0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
-    0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
-    0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
-    0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
-    0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
-    0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
-    0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
-    0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
-    0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
-    0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
-    0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
-    0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
-    0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
-    0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
-    0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
-    0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
-    0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
-    0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
-    0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
-    0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
-    0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
-    0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
-    0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
-    0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
-    0x2d02ef8dUL
-#ifdef BYFOUR
-  },
-  {
-    0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
-    0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
-    0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
-    0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
-    0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
-    0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
-    0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
-    0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
-    0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
-    0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
-    0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
-    0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
-    0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
-    0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
-    0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
-    0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
-    0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
-    0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
-    0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
-    0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
-    0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
-    0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
-    0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
-    0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
-    0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
-    0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
-    0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
-    0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
-    0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
-    0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
-    0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
-    0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
-    0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
-    0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
-    0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
-    0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
-    0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
-    0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
-    0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
-    0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
-    0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
-    0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
-    0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
-    0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
-    0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
-    0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
-    0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
-    0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
-    0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
-    0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
-    0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
-    0x9324fd72UL
-  },
-  {
-    0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
-    0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
-    0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
-    0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
-    0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
-    0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
-    0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
-    0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
-    0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
-    0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
-    0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
-    0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
-    0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
-    0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
-    0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
-    0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
-    0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
-    0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
-    0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
-    0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
-    0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
-    0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
-    0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
-    0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
-    0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
-    0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
-    0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
-    0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
-    0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
-    0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
-    0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
-    0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
-    0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
-    0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
-    0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
-    0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
-    0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
-    0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
-    0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
-    0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
-    0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
-    0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
-    0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
-    0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
-    0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
-    0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
-    0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
-    0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
-    0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
-    0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
-    0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
-    0xbe9834edUL
-  },
-  {
-    0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
-    0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
-    0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
-    0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
-    0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
-    0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
-    0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
-    0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
-    0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
-    0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
-    0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
-    0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
-    0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
-    0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
-    0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
-    0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
-    0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
-    0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
-    0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
-    0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
-    0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
-    0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
-    0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
-    0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
-    0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
-    0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
-    0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
-    0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
-    0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
-    0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
-    0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
-    0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
-    0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
-    0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
-    0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
-    0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
-    0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
-    0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
-    0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
-    0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
-    0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
-    0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
-    0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
-    0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
-    0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
-    0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
-    0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
-    0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
-    0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
-    0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
-    0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
-    0xde0506f1UL
-  },
-  {
-    0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
-    0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
-    0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
-    0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
-    0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
-    0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
-    0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
-    0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
-    0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
-    0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
-    0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
-    0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
-    0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
-    0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
-    0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
-    0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
-    0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
-    0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
-    0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
-    0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
-    0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
-    0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
-    0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
-    0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
-    0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
-    0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
-    0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
-    0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
-    0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
-    0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
-    0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
-    0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
-    0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
-    0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
-    0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
-    0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
-    0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
-    0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
-    0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
-    0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
-    0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
-    0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
-    0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
-    0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
-    0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
-    0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
-    0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
-    0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
-    0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
-    0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
-    0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
-    0x8def022dUL
-  },
-  {
-    0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
-    0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
-    0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
-    0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
-    0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
-    0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
-    0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
-    0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
-    0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
-    0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
-    0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
-    0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
-    0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
-    0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
-    0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
-    0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
-    0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
-    0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
-    0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
-    0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
-    0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
-    0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
-    0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
-    0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
-    0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
-    0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
-    0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
-    0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
-    0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
-    0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
-    0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
-    0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
-    0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
-    0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
-    0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
-    0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
-    0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
-    0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
-    0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
-    0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
-    0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
-    0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
-    0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
-    0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
-    0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
-    0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
-    0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
-    0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
-    0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
-    0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
-    0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
-    0x72fd2493UL
-  },
-  {
-    0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
-    0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
-    0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
-    0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
-    0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
-    0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
-    0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
-    0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
-    0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
-    0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
-    0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
-    0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
-    0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
-    0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
-    0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
-    0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
-    0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
-    0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
-    0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
-    0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
-    0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
-    0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
-    0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
-    0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
-    0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
-    0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
-    0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
-    0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
-    0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
-    0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
-    0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
-    0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
-    0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
-    0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
-    0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
-    0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
-    0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
-    0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
-    0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
-    0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
-    0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
-    0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
-    0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
-    0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
-    0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
-    0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
-    0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
-    0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
-    0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
-    0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
-    0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
-    0xed3498beUL
-  },
-  {
-    0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
-    0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
-    0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
-    0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
-    0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
-    0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
-    0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
-    0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
-    0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
-    0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
-    0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
-    0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
-    0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
-    0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
-    0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
-    0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
-    0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
-    0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
-    0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
-    0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
-    0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
-    0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
-    0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
-    0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
-    0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
-    0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
-    0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
-    0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
-    0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
-    0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
-    0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
-    0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
-    0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
-    0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
-    0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
-    0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
-    0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
-    0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
-    0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
-    0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
-    0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
-    0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
-    0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
-    0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
-    0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
-    0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
-    0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
-    0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
-    0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
-    0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
-    0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
-    0xf10605deUL
-#endif
-  }
-};
diff --git a/modules/juce_core/zip/zlib/deflate.c b/modules/juce_core/zip/zlib/deflate.c
deleted file mode 100644
index 4b8bda5..0000000
--- a/modules/juce_core/zip/zlib/deflate.c
+++ /dev/null
@@ -1,1679 +0,0 @@
-/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- *  ALGORITHM
- *
- *      The "deflation" process depends on being able to identify portions
- *      of the input text which are identical to earlier input (within a
- *      sliding window trailing behind the input currently being processed).
- *
- *      The most straightforward technique turns out to be the fastest for
- *      most input files: try all possible matches and select the longest.
- *      The key feature of this algorithm is that insertions into the string
- *      dictionary are very simple and thus fast, and deletions are avoided
- *      completely. Insertions are performed at each input character, whereas
- *      string matches are performed only when the previous match ends. So it
- *      is preferable to spend more time in matches to allow very fast string
- *      insertions and avoid deletions. The matching algorithm for small
- *      strings is inspired from that of Rabin & Karp. A brute force approach
- *      is used to find longer strings when a small match has been found.
- *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
- *      (by Leonid Broukhis).
- *         A previous version of this file used a more sophisticated algorithm
- *      (by Fiala and Greene) which is guaranteed to run in linear amortized
- *      time, but has a larger average cost, uses more memory and is patented.
- *      However the F&G algorithm may be faster for some highly redundant
- *      files if the parameter max_chain_length (described below) is too large.
- *
- *  ACKNOWLEDGEMENTS
- *
- *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
- *      I found it in 'freeze' written by Leonid Broukhis.
- *      Thanks to many people for bug reports and testing.
- *
- *  REFERENCES
- *
- *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
- *      Available in http://www.ietf.org/rfc/rfc1951.txt
- *
- *      A description of the Rabin and Karp algorithm is given in the book
- *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
- *
- *      Fiala,E.R., and Greene,D.H.
- *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
- *
- */
-
-/* @(#) $Id: deflate.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#include "deflate.h"
-
-const char deflate_copyright[] =
-   " deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly ";
-/*
-  If you use the zlib library in a product, an acknowledgment is welcome
-  in the documentation of your product. If for some reason you cannot
-  include such an acknowledgment, I would appreciate that you keep this
-  copyright string in the executable of your product.
- */
-
-/* ===========================================================================
- *  Function prototypes.
- */
-typedef enum {
-    need_more,      /* block not completed, need more input or more output */
-    block_done,     /* block flush performed */
-    finish_started, /* finish started, need only more output at next deflate */
-    finish_done     /* finish done, accept no more input or output */
-} block_state;
-
-typedef block_state (*compress_func) OF((deflate_state *s, int flush));
-/* Compression function. Returns the block state after the call. */
-
-local void fill_window    OF((deflate_state *s));
-local block_state deflate_stored OF((deflate_state *s, int flush));
-local block_state deflate_fast   OF((deflate_state *s, int flush));
-#ifndef FASTEST
-local block_state deflate_slow   OF((deflate_state *s, int flush));
-#endif
-local void lm_init        OF((deflate_state *s));
-local void putShortMSB    OF((deflate_state *s, uInt b));
-local void flush_pending  OF((z_streamp strm));
-local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
-#ifndef FASTEST
-#ifdef ASMV
-      void match_init OF((void)); /* asm code initialization */
-      uInt longest_match  OF((deflate_state *s, IPos cur_match));
-#else
-local uInt longest_match  OF((deflate_state *s, IPos cur_match));
-#endif
-#endif
-local uInt longest_match_fast OF((deflate_state *s, IPos cur_match));
-
-#ifdef DEBUG
-local  void check_match OF((deflate_state *s, IPos start, IPos match,
-                            int length));
-#endif
-
-/* ===========================================================================
- * Local data
- */
-
-#define NIL 0
-/* Tail of hash chains */
-
-#ifndef TOO_FAR
-#  define TOO_FAR 4096
-#endif
-/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
-
-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
-/* Minimum amount of lookahead, except at the end of the input file.
- * See deflate.c for comments about the MIN_MATCH+1.
- */
-
-/* Values for max_lazy_match, good_match and max_chain_length, depending on
- * the desired pack level (0..9). The values given below have been tuned to
- * exclude worst case performance for pathological files. Better values may be
- * found for specific files.
- */
-typedef struct config_s {
-   ush good_length; /* reduce lazy search above this match length */
-   ush max_lazy;    /* do not perform lazy search above this match length */
-   ush nice_length; /* quit search above this match length */
-   ush max_chain;
-   compress_func func;
-} config;
-
-#ifdef FASTEST
-local const config configuration_table[2] = {
-/*      good lazy nice chain */
-/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
-/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
-#else
-local const config configuration_table[10] = {
-/*      good lazy nice chain */
-/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
-/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
-/* 2 */ {4,    5, 16,    8, deflate_fast},
-/* 3 */ {4,    6, 32,   32, deflate_fast},
-
-/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
-/* 5 */ {8,   16, 32,   32, deflate_slow},
-/* 6 */ {8,   16, 128, 128, deflate_slow},
-/* 7 */ {8,   32, 128, 256, deflate_slow},
-/* 8 */ {32, 128, 258, 1024, deflate_slow},
-/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
-#endif
-
-/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
- * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
- * meaning.
- */
-
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-#ifndef NO_DUMMY_DECL
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-#endif
-
-/* ===========================================================================
- * Update a hash value with the given input byte
- * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
- *    input characters, so that a running hash key can be computed from the
- *    previous key instead of complete recalculation each time.
- */
-#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
-
-
-/* ===========================================================================
- * Insert string str in the dictionary and set match_head to the previous head
- * of the hash chain (the most recent string with same hash key). Return
- * the previous length of the hash chain.
- * If this file is compiled with -DFASTEST, the compression level is forced
- * to 1, and no hash chains are maintained.
- * IN  assertion: all calls to to INSERT_STRING are made with consecutive
- *    input characters and the first MIN_MATCH bytes of str are valid
- *    (except for the last MIN_MATCH-1 bytes of the input file).
- */
-#ifdef FASTEST
-#define INSERT_STRING(s, str, match_head) \
-   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
-    match_head = s->head[s->ins_h], \
-    s->head[s->ins_h] = (Pos)(str))
-#else
-#define INSERT_STRING(s, str, match_head) \
-   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
-    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
-    s->head[s->ins_h] = (Pos)(str))
-#endif
-
-/* ===========================================================================
- * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
- * prev[] will be initialized on the fly.
- */
-#define CLEAR_HASH(s) \
-    s->head[s->hash_size-1] = NIL; \
-    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
-
-/* ========================================================================= */
-int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, int stream_size)
-{
-    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
-                         Z_DEFAULT_STRATEGY, version, stream_size);
-    /* To do: ignore strm->next_in if we use it as window */
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateInit2_ (z_streamp strm, int  level, int  method, int  windowBits, int  memLevel, int  strategy, const char *version, int stream_size)
-{
-    deflate_state *s;
-    int wrap = 1;
-    static const char my_version[] = ZLIB_VERSION;
-
-    ushf *overlay;
-    /* We overlay pending_buf and d_buf+l_buf. This works since the average
-     * output size for (length,distance) codes is <= 24 bits.
-     */
-
-    if (version == Z_NULL || version[0] != my_version[0] ||
-        stream_size != sizeof(z_stream)) {
-        return Z_VERSION_ERROR;
-    }
-    if (strm == Z_NULL) return Z_STREAM_ERROR;
-
-    strm->msg = Z_NULL;
-    if (strm->zalloc == (alloc_func)0) {
-        strm->zalloc = zcalloc;
-        strm->opaque = (voidpf)0;
-    }
-    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
-
-#ifdef FASTEST
-    if (level != 0) level = 1;
-#else
-    if (level == Z_DEFAULT_COMPRESSION) level = 6;
-#endif
-
-    if (windowBits < 0) { /* suppress zlib wrapper */
-        wrap = 0;
-        windowBits = -windowBits;
-    }
-#ifdef GZIP
-    else if (windowBits > 15) {
-        wrap = 2;       /* write gzip wrapper instead */
-        windowBits -= 16;
-    }
-#endif
-    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
-        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
-        strategy < 0 || strategy > Z_FIXED) {
-        return Z_STREAM_ERROR;
-    }
-    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
-    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
-    if (s == Z_NULL) return Z_MEM_ERROR;
-    strm->state = (struct internal_state FAR *)s;
-    s->strm = strm;
-
-    s->wrap = wrap;
-    s->gzhead = Z_NULL;
-    s->w_bits = windowBits;
-    s->w_size = 1 << s->w_bits;
-    s->w_mask = s->w_size - 1;
-
-    s->hash_bits = memLevel + 7;
-    s->hash_size = 1 << s->hash_bits;
-    s->hash_mask = s->hash_size - 1;
-    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
-
-    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
-    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
-    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
-
-    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
-
-    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
-    s->pending_buf = (uchf *) overlay;
-    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
-
-    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
-        s->pending_buf == Z_NULL) {
-        s->status = FINISH_STATE;
-        strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
-        deflateEnd (strm);
-        return Z_MEM_ERROR;
-    }
-    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
-    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
-
-    s->level = level;
-    s->strategy = strategy;
-    s->method = (Byte)method;
-
-    return deflateReset(strm);
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt  dictLength)
-{
-    deflate_state *s;
-    uInt length = dictLength;
-    uInt n;
-    IPos hash_head = 0;
-
-    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL ||
-        strm->state->wrap == 2 ||
-        (strm->state->wrap == 1 && strm->state->status != INIT_STATE))
-        return Z_STREAM_ERROR;
-
-    s = strm->state;
-    if (s->wrap)
-        strm->adler = adler32(strm->adler, dictionary, dictLength);
-
-    if (length < MIN_MATCH) return Z_OK;
-    if (length > MAX_DIST(s)) {
-        length = MAX_DIST(s);
-        dictionary += dictLength - length; /* use the tail of the dictionary */
-    }
-    zmemcpy(s->window, dictionary, length);
-    s->strstart = length;
-    s->block_start = (long)length;
-
-    /* Insert all strings in the hash table (except for the last two bytes).
-     * s->lookahead stays null, so s->ins_h will be recomputed at the next
-     * call of fill_window.
-     */
-    s->ins_h = s->window[0];
-    UPDATE_HASH(s, s->ins_h, s->window[1]);
-    for (n = 0; n <= length - MIN_MATCH; n++) {
-        INSERT_STRING(s, n, hash_head);
-    }
-
-    (void) hash_head;  /* to make compiler happy */
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateReset (z_streamp strm)
-{
-    deflate_state *s;
-
-    if (strm == Z_NULL || strm->state == Z_NULL ||
-        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
-        return Z_STREAM_ERROR;
-    }
-
-    strm->total_in = strm->total_out = 0;
-    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
-    strm->data_type = Z_UNKNOWN;
-
-    s = (deflate_state *)strm->state;
-    s->pending = 0;
-    s->pending_out = s->pending_buf;
-
-    if (s->wrap < 0) {
-        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
-    }
-    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
-    strm->adler =
-#ifdef GZIP
-        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
-#endif
-        adler32(0L, Z_NULL, 0);
-    s->last_flush = Z_NO_FLUSH;
-
-    _tr_init(s);
-    lm_init(s);
-
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateSetHeader (z_streamp strm, gz_headerp head)
-{
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
-    strm->state->gzhead = head;
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflatePrime (z_streamp strm, int bits, int value)
-{
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    strm->state->bi_valid = bits;
-    strm->state->bi_buf = (ush)(value & ((1 << bits) - 1));
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateParams (z_streamp strm, int level, int strategy)
-{
-    deflate_state *s;
-    compress_func func;
-    int err = Z_OK;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    s = strm->state;
-
-#ifdef FASTEST
-    if (level != 0) level = 1;
-#else
-    if (level == Z_DEFAULT_COMPRESSION) level = 6;
-#endif
-    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
-        return Z_STREAM_ERROR;
-    }
-    func = configuration_table[s->level].func;
-
-    if (func != configuration_table[level].func && strm->total_in != 0) {
-        /* Flush the last buffer: */
-        err = deflate(strm, Z_PARTIAL_FLUSH);
-    }
-    if (s->level != level) {
-        s->level = level;
-        s->max_lazy_match   = configuration_table[level].max_lazy;
-        s->good_match       = configuration_table[level].good_length;
-        s->nice_match       = configuration_table[level].nice_length;
-        s->max_chain_length = configuration_table[level].max_chain;
-    }
-    s->strategy = strategy;
-    return err;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateTune (z_streamp strm, int good_length, int max_lazy, int nice_length, int max_chain)
-{
-    deflate_state *s;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    s = strm->state;
-    s->good_match = good_length;
-    s->max_lazy_match = max_lazy;
-    s->nice_match = nice_length;
-    s->max_chain_length = max_chain;
-    return Z_OK;
-}
-
-/* =========================================================================
- * For the default windowBits of 15 and memLevel of 8, this function returns
- * a close to exact, as well as small, upper bound on the compressed size.
- * They are coded as constants here for a reason--if the #define's are
- * changed, then this function needs to be changed as well.  The return
- * value for 15 and 8 only works for those exact settings.
- *
- * For any setting other than those defaults for windowBits and memLevel,
- * the value returned is a conservative worst case for the maximum expansion
- * resulting from using fixed blocks instead of stored blocks, which deflate
- * can emit on compressed data for some combinations of the parameters.
- *
- * This function could be more sophisticated to provide closer upper bounds
- * for every combination of windowBits and memLevel, as well as wrap.
- * But even the conservative upper bound of about 14% expansion does not
- * seem onerous for output buffer allocation.
- */
-uLong ZEXPORT deflateBound (z_streamp strm, uLong sourceLen)
-{
-    deflate_state *s;
-    uLong destLen;
-
-    /* conservative upper bound */
-    destLen = sourceLen +
-              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 11;
-
-    /* if can't get parameters, return conservative bound */
-    if (strm == Z_NULL || strm->state == Z_NULL)
-        return destLen;
-
-    /* if not default parameters, return conservative bound */
-    s = strm->state;
-    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
-        return destLen;
-
-    /* default settings: return tight bound for that case */
-    return compressBound(sourceLen);
-}
-
-/* =========================================================================
- * Put a short in the pending buffer. The 16-bit value is put in MSB order.
- * IN assertion: the stream state is correct and there is enough room in
- * pending_buf.
- */
-local void putShortMSB (deflate_state *s, uInt b)
-{
-    put_byte(s, (Byte)(b >> 8));
-    put_byte(s, (Byte)(b & 0xff));
-}
-
-/* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
- */
-local void flush_pending (z_streamp strm)
-{
-    unsigned len = strm->state->pending;
-
-    if (len > strm->avail_out) len = strm->avail_out;
-    if (len == 0) return;
-
-    zmemcpy(strm->next_out, strm->state->pending_out, len);
-    strm->next_out  += len;
-    strm->state->pending_out  += len;
-    strm->total_out += len;
-    strm->avail_out  -= len;
-    strm->state->pending -= len;
-    if (strm->state->pending == 0) {
-        strm->state->pending_out = strm->state->pending_buf;
-    }
-}
-
-/* ========================================================================= */
-int ZEXPORT deflate (z_streamp strm, int flush)
-{
-    int old_flush; /* value of flush param for previous deflate call */
-    deflate_state *s;
-
-    if (strm == Z_NULL || strm->state == Z_NULL ||
-        flush > Z_FINISH || flush < 0) {
-        return Z_STREAM_ERROR;
-    }
-    s = strm->state;
-
-    if (strm->next_out == Z_NULL ||
-        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
-        (s->status == FINISH_STATE && flush != Z_FINISH)) {
-        ERR_RETURN(strm, Z_STREAM_ERROR);
-    }
-    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
-
-    s->strm = strm; /* just in case */
-    old_flush = s->last_flush;
-    s->last_flush = flush;
-
-    /* Write the header */
-    if (s->status == INIT_STATE) {
-#ifdef GZIP
-        if (s->wrap == 2) {
-            strm->adler = crc32(0L, Z_NULL, 0);
-            put_byte(s, 31);
-            put_byte(s, 139);
-            put_byte(s, 8);
-            if (s->gzhead == NULL) {
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, s->level == 9 ? 2 :
-                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
-                             4 : 0));
-                put_byte(s, OS_CODE);
-                s->status = BUSY_STATE;
-            }
-            else {
-                put_byte(s, (s->gzhead->text ? 1 : 0) +
-                            (s->gzhead->hcrc ? 2 : 0) +
-                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
-                            (s->gzhead->name == Z_NULL ? 0 : 8) +
-                            (s->gzhead->comment == Z_NULL ? 0 : 16)
-                        );
-                put_byte(s, (Byte)(s->gzhead->time & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
-                put_byte(s, s->level == 9 ? 2 :
-                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
-                             4 : 0));
-                put_byte(s, s->gzhead->os & 0xff);
-                if (s->gzhead->extra != NULL) {
-                    put_byte(s, s->gzhead->extra_len & 0xff);
-                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
-                }
-                if (s->gzhead->hcrc)
-                    strm->adler = crc32(strm->adler, s->pending_buf,
-                                        s->pending);
-                s->gzindex = 0;
-                s->status = EXTRA_STATE;
-            }
-        }
-        else
-#endif
-        {
-            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
-            uInt level_flags;
-
-            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
-                level_flags = 0;
-            else if (s->level < 6)
-                level_flags = 1;
-            else if (s->level == 6)
-                level_flags = 2;
-            else
-                level_flags = 3;
-            header |= (level_flags << 6);
-            if (s->strstart != 0) header |= PRESET_DICT;
-            header += 31 - (header % 31);
-
-            s->status = BUSY_STATE;
-            putShortMSB(s, header);
-
-            /* Save the adler32 of the preset dictionary: */
-            if (s->strstart != 0) {
-                putShortMSB(s, (uInt)(strm->adler >> 16));
-                putShortMSB(s, (uInt)(strm->adler & 0xffff));
-            }
-            strm->adler = adler32(0L, Z_NULL, 0);
-        }
-    }
-#ifdef GZIP
-    if (s->status == EXTRA_STATE) {
-        if (s->gzhead->extra != NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-
-            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size)
-                        break;
-                }
-                put_byte(s, s->gzhead->extra[s->gzindex]);
-                s->gzindex++;
-            }
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (s->gzindex == s->gzhead->extra_len) {
-                s->gzindex = 0;
-                s->status = NAME_STATE;
-            }
-        }
-        else
-            s->status = NAME_STATE;
-    }
-    if (s->status == NAME_STATE) {
-        if (s->gzhead->name != NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-            int val;
-
-            do {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size) {
-                        val = 1;
-                        break;
-                    }
-                }
-                val = s->gzhead->name[s->gzindex++];
-                put_byte(s, val);
-            } while (val != 0);
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (val == 0) {
-                s->gzindex = 0;
-                s->status = COMMENT_STATE;
-            }
-        }
-        else
-            s->status = COMMENT_STATE;
-    }
-    if (s->status == COMMENT_STATE) {
-        if (s->gzhead->comment != NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-            int val;
-
-            do {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size) {
-                        val = 1;
-                        break;
-                    }
-                }
-                val = s->gzhead->comment[s->gzindex++];
-                put_byte(s, val);
-            } while (val != 0);
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (val == 0)
-                s->status = HCRC_STATE;
-        }
-        else
-            s->status = HCRC_STATE;
-    }
-    if (s->status == HCRC_STATE) {
-        if (s->gzhead->hcrc) {
-            if (s->pending + 2 > s->pending_buf_size)
-                flush_pending(strm);
-            if (s->pending + 2 <= s->pending_buf_size) {
-                put_byte(s, (Byte)(strm->adler & 0xff));
-                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
-                strm->adler = crc32(0L, Z_NULL, 0);
-                s->status = BUSY_STATE;
-            }
-        }
-        else
-            s->status = BUSY_STATE;
-    }
-#endif
-
-    /* Flush as much pending output as possible */
-    if (s->pending != 0) {
-        flush_pending(strm);
-        if (strm->avail_out == 0) {
-            /* Since avail_out is 0, deflate will be called again with
-             * more output space, but possibly with both pending and
-             * avail_in equal to zero. There won't be anything to do,
-             * but this is not an error situation so make sure we
-             * return OK instead of BUF_ERROR at next call of deflate:
-             */
-            s->last_flush = -1;
-            return Z_OK;
-        }
-
-    /* Make sure there is something to do and avoid duplicate consecutive
-     * flushes. For repeated and useless calls with Z_FINISH, we keep
-     * returning Z_STREAM_END instead of Z_BUF_ERROR.
-     */
-    } else if (strm->avail_in == 0 && flush <= old_flush &&
-               flush != Z_FINISH) {
-        ERR_RETURN(strm, Z_BUF_ERROR);
-    }
-
-    /* User must not provide more input after the first FINISH: */
-    if (s->status == FINISH_STATE && strm->avail_in != 0) {
-        ERR_RETURN(strm, Z_BUF_ERROR);
-    }
-
-    /* Start a new block or continue the current one.
-     */
-    if (strm->avail_in != 0 || s->lookahead != 0 ||
-        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
-        block_state bstate;
-
-        bstate = (*(configuration_table[s->level].func))(s, flush);
-
-        if (bstate == finish_started || bstate == finish_done) {
-            s->status = FINISH_STATE;
-        }
-        if (bstate == need_more || bstate == finish_started) {
-            if (strm->avail_out == 0) {
-                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
-            }
-            return Z_OK;
-            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
-             * of deflate should use the same flush parameter to make sure
-             * that the flush is complete. So we don't have to output an
-             * empty block here, this will be done at next call. This also
-             * ensures that for a very small output buffer, we emit at most
-             * one empty block.
-             */
-        }
-        if (bstate == block_done) {
-            if (flush == Z_PARTIAL_FLUSH) {
-                _tr_align(s);
-            } else { /* FULL_FLUSH or SYNC_FLUSH */
-                _tr_stored_block(s, (char*)0, 0L, 0);
-                /* For a full flush, this empty block will be recognized
-                 * as a special marker by inflate_sync().
-                 */
-                if (flush == Z_FULL_FLUSH) {
-                    CLEAR_HASH(s);             /* forget history */
-                }
-            }
-            flush_pending(strm);
-            if (strm->avail_out == 0) {
-              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
-              return Z_OK;
-            }
-        }
-    }
-    Assert(strm->avail_out > 0, "bug2");
-
-    if (flush != Z_FINISH) return Z_OK;
-    if (s->wrap <= 0) return Z_STREAM_END;
-
-    /* Write the trailer */
-#ifdef GZIP
-    if (s->wrap == 2) {
-        put_byte(s, (Byte)(strm->adler & 0xff));
-        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
-        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
-        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
-        put_byte(s, (Byte)(strm->total_in & 0xff));
-        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
-        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
-        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
-    }
-    else
-#endif
-    {
-        putShortMSB(s, (uInt)(strm->adler >> 16));
-        putShortMSB(s, (uInt)(strm->adler & 0xffff));
-    }
-    flush_pending(strm);
-    /* If avail_out is zero, the application will call deflate again
-     * to flush the rest.
-     */
-    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
-    return s->pending != 0 ? Z_OK : Z_STREAM_END;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateEnd (z_streamp strm)
-{
-    int status;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-
-    status = strm->state->status;
-    if (status != INIT_STATE &&
-        status != EXTRA_STATE &&
-        status != NAME_STATE &&
-        status != COMMENT_STATE &&
-        status != HCRC_STATE &&
-        status != BUSY_STATE &&
-        status != FINISH_STATE) {
-      return Z_STREAM_ERROR;
-    }
-
-    /* Deallocate in reverse order of allocations: */
-    TRY_FREE(strm, strm->state->pending_buf);
-    TRY_FREE(strm, strm->state->head);
-    TRY_FREE(strm, strm->state->prev);
-    TRY_FREE(strm, strm->state->window);
-
-    ZFREE(strm, strm->state);
-    strm->state = Z_NULL;
-
-    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
-}
-
-/* =========================================================================
- * Copy the source state to the destination state.
- * To simplify the source, this is not supported for 16-bit MSDOS (which
- * doesn't have enough memory anyway to duplicate compression states).
- */
-int ZEXPORT deflateCopy (z_streamp dest, z_streamp source)
-{
-#ifdef MAXSEG_64K
-    return Z_STREAM_ERROR;
-#else
-    deflate_state *ds;
-    deflate_state *ss;
-    ushf *overlay;
-
-
-    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
-        return Z_STREAM_ERROR;
-    }
-
-    ss = source->state;
-
-    zmemcpy(dest, source, sizeof(z_stream));
-
-    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
-    if (ds == Z_NULL) return Z_MEM_ERROR;
-    dest->state = (struct internal_state FAR *) ds;
-    zmemcpy(ds, ss, sizeof(deflate_state));
-    ds->strm = dest;
-
-    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
-    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
-    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
-    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
-    ds->pending_buf = (uchf *) overlay;
-
-    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
-        ds->pending_buf == Z_NULL) {
-        deflateEnd (dest);
-        return Z_MEM_ERROR;
-    }
-    /* following zmemcpy do not work for 16-bit MSDOS */
-    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
-    zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
-    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
-    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
-
-    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
-    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
-    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
-
-    ds->l_desc.dyn_tree = ds->dyn_ltree;
-    ds->d_desc.dyn_tree = ds->dyn_dtree;
-    ds->bl_desc.dyn_tree = ds->bl_tree;
-
-    return Z_OK;
-#endif /* MAXSEG_64K */
-}
-
-/* ===========================================================================
- * Read a new buffer from the current input stream, update the adler32
- * and total number of bytes read.  All deflate() input goes through
- * this function so some applications may wish to modify it to avoid
- * allocating a large strm->next_in buffer and copying from it.
- * (See also flush_pending()).
- */
-local int read_buf (z_streamp strm, Bytef *buf, unsigned size)
-{
-    unsigned len = strm->avail_in;
-
-    if (len > size) len = size;
-    if (len == 0) return 0;
-
-    strm->avail_in  -= len;
-
-    if (strm->state->wrap == 1) {
-        strm->adler = adler32(strm->adler, strm->next_in, len);
-    }
-#ifdef GZIP
-    else if (strm->state->wrap == 2) {
-        strm->adler = crc32(strm->adler, strm->next_in, len);
-    }
-#endif
-    zmemcpy(buf, strm->next_in, len);
-    strm->next_in  += len;
-    strm->total_in += len;
-
-    return (int)len;
-}
-
-/* ===========================================================================
- * Initialize the "longest match" routines for a new zlib stream
- */
-local void lm_init (deflate_state *s)
-{
-    s->window_size = (ulg)2L*s->w_size;
-
-    CLEAR_HASH(s);
-
-    /* Set the default configuration parameters:
-     */
-    s->max_lazy_match   = configuration_table[s->level].max_lazy;
-    s->good_match       = configuration_table[s->level].good_length;
-    s->nice_match       = configuration_table[s->level].nice_length;
-    s->max_chain_length = configuration_table[s->level].max_chain;
-
-    s->strstart = 0;
-    s->block_start = 0L;
-    s->lookahead = 0;
-    s->match_length = s->prev_length = MIN_MATCH-1;
-    s->match_available = 0;
-    s->ins_h = 0;
-#ifndef FASTEST
-#ifdef ASMV
-    match_init(); /* initialize the asm code */
-#endif
-#endif
-}
-
-#ifndef FASTEST
-/* ===========================================================================
- * Set match_start to the longest match starting at the given string and
- * return its length. Matches shorter or equal to prev_length are discarded,
- * in which case the result is equal to prev_length and match_start is
- * garbage.
- * IN assertions: cur_match is the head of the hash chain for the current
- *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
- * OUT assertion: the match length is not greater than s->lookahead.
- */
-#ifndef ASMV
-/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
- * match.S. The code will be functionally equivalent.
- */
-local uInt longest_match(deflate_state *s, IPos cur_match)
-{
-    unsigned chain_length = s->max_chain_length;/* max hash chain length */
-    register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                       /* matched string */
-    register int len;                           /* length of current match */
-    int best_len = s->prev_length;              /* best match length so far */
-    int nice_match = s->nice_match;             /* stop if match long enough */
-    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
-        s->strstart - (IPos)MAX_DIST(s) : NIL;
-    /* Stop when cur_match becomes <= limit. To simplify the code,
-     * we prevent matches with the string of window index 0.
-     */
-    Posf *prev = s->prev;
-    uInt wmask = s->w_mask;
-
-#ifdef UNALIGNED_OK
-    /* Compare two bytes at a time. Note: this is not always beneficial.
-     * Try with and without -DUNALIGNED_OK to check.
-     */
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
-    register ush scan_start = *(ushf*)scan;
-    register ush scan_end   = *(ushf*)(scan+best_len-1);
-#else
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-    register Byte scan_end1  = scan[best_len-1];
-    register Byte scan_end   = scan[best_len];
-#endif
-
-    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-     * It is easy to get rid of this optimization if necessary.
-     */
-    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
-    /* Do not waste too much time if we already have a good match: */
-    if (s->prev_length >= s->good_match) {
-        chain_length >>= 2;
-    }
-    /* Do not look for matches beyond the end of the input. This is necessary
-     * to make deflate deterministic.
-     */
-    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-
-    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
-    do {
-        Assert(cur_match < s->strstart, "no future");
-        match = s->window + cur_match;
-
-        /* Skip to next match if the match length cannot increase
-         * or if the match length is less than 2.  Note that the checks below
-         * for insufficient lookahead only occur occasionally for performance
-         * reasons.  Therefore uninitialized memory will be accessed, and
-         * conditional jumps will be made that depend on those values.
-         * However the length of the match is limited to the lookahead, so
-         * the output of deflate is not affected by the uninitialized values.
-         */
-#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
-        /* This code assumes sizeof(unsigned short) == 2. Do not use
-         * UNALIGNED_OK if your compiler uses a different size.
-         */
-        if (*(ushf*)(match+best_len-1) != scan_end ||
-            *(ushf*)match != scan_start) continue;
-
-        /* It is not necessary to compare scan[2] and match[2] since they are
-         * always equal when the other bytes match, given that the hash keys
-         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
-         * strstart+3, +5, ... up to strstart+257. We check for insufficient
-         * lookahead only every 4th comparison; the 128th check will be made
-         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
-         * necessary to put more guard bytes at the end of the window, or
-         * to check more often for insufficient lookahead.
-         */
-        Assert(scan[2] == match[2], "scan[2]?");
-        scan++, match++;
-        do {
-        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 scan < strend);
-        /* The funny "do {}" generates better code on most compilers */
-
-        /* Here, scan <= window+strstart+257 */
-        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-        if (*scan == *match) scan++;
-
-        len = (MAX_MATCH - 1) - (int)(strend-scan);
-        scan = strend - (MAX_MATCH-1);
-
-#else /* UNALIGNED_OK */
-
-        if (match[best_len]   != scan_end  ||
-            match[best_len-1] != scan_end1 ||
-            *match            != *scan     ||
-            *++match          != scan[1])      continue;
-
-        /* The check at best_len-1 can be removed because it will be made
-         * again later. (This heuristic is not always a win.)
-         * It is not necessary to compare scan[2] and match[2] since they
-         * are always equal when the other bytes match, given that
-         * the hash keys are equal and that HASH_BITS >= 8.
-         */
-        scan += 2, match++;
-        Assert(*scan == *match, "match[2]?");
-
-        /* We check for insufficient lookahead only every 8th comparison;
-         * the 256th check will be made at strstart+258.
-         */
-        do {
-        } while (*++scan == *++match && *++scan == *++match &&
-                 *++scan == *++match && *++scan == *++match &&
-                 *++scan == *++match && *++scan == *++match &&
-                 *++scan == *++match && *++scan == *++match &&
-                 scan < strend);
-
-        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
-        len = MAX_MATCH - (int)(strend - scan);
-        scan = strend - MAX_MATCH;
-
-#endif /* UNALIGNED_OK */
-
-        if (len > best_len) {
-            s->match_start = cur_match;
-            best_len = len;
-            if (len >= nice_match) break;
-#ifdef UNALIGNED_OK
-            scan_end = *(ushf*)(scan+best_len-1);
-#else
-            scan_end1  = scan[best_len-1];
-            scan_end   = scan[best_len];
-#endif
-        }
-    } while ((cur_match = prev[cur_match & wmask]) > limit
-             && --chain_length != 0);
-
-    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
-    return s->lookahead;
-}
-#endif /* ASMV */
-#endif /* FASTEST */
-
-/* ---------------------------------------------------------------------------
- * Optimized version for level == 1 or strategy == Z_RLE only
- */
-local uInt longest_match_fast (deflate_state *s, IPos cur_match)
-{
-    register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                       /* matched string */
-    register int len;                           /* length of current match */
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-
-    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-     * It is easy to get rid of this optimization if necessary.
-     */
-    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
-    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
-    Assert(cur_match < s->strstart, "no future");
-
-    match = s->window + cur_match;
-
-    /* Return failure if the match length is less than 2:
-     */
-    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
-
-    /* The check at best_len-1 can be removed because it will be made
-     * again later. (This heuristic is not always a win.)
-     * It is not necessary to compare scan[2] and match[2] since they
-     * are always equal when the other bytes match, given that
-     * the hash keys are equal and that HASH_BITS >= 8.
-     */
-    scan += 2, match += 2;
-    Assert(*scan == *match, "match[2]?");
-
-    /* We check for insufficient lookahead only every 8th comparison;
-     * the 256th check will be made at strstart+258.
-     */
-    do {
-    } while (*++scan == *++match && *++scan == *++match &&
-             *++scan == *++match && *++scan == *++match &&
-             *++scan == *++match && *++scan == *++match &&
-             *++scan == *++match && *++scan == *++match &&
-             scan < strend);
-
-    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
-    len = MAX_MATCH - (int)(strend - scan);
-
-    if (len < MIN_MATCH) return MIN_MATCH - 1;
-
-    s->match_start = cur_match;
-    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
-}
-
-#ifdef DEBUG
-/* ===========================================================================
- * Check that the match at match_start is indeed a match.
- */
-local void check_match(deflate_state *s, IPos start, IPos match, int length)
-{
-    /* check that the match is indeed a match */
-    if (zmemcmp(s->window + match,
-                s->window + start, length) != EQUAL) {
-        fprintf(stderr, " start %u, match %u, length %d\n",
-                start, match, length);
-        do {
-            fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
-        } while (--length != 0);
-        z_error("invalid match");
-    }
-    if (z_verbose > 1) {
-        fprintf(stderr,"\\[%d,%d]", start-match, length);
-        do { putc(s->window[start++], stderr); } while (--length != 0);
-    }
-}
-#else
-#  define check_match(s, start, match, length)
-#endif /* DEBUG */
-
-/* ===========================================================================
- * Fill the window when the lookahead becomes insufficient.
- * Updates strstart and lookahead.
- *
- * IN assertion: lookahead < MIN_LOOKAHEAD
- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
- *    At least one byte has been read, or avail_in == 0; reads are
- *    performed for at least two bytes (required for the zip translate_eol
- *    option -- not supported here).
- */
-local void fill_window (deflate_state *s)
-{
-    register unsigned n, m;
-    register Posf *p;
-    unsigned more;    /* Amount of free space at the end of the window. */
-    uInt wsize = s->w_size;
-
-    do {
-        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
-
-        /* Deal with !@#$% 64K limit: */
-        if (sizeof(int) <= 2) {
-            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
-                more = wsize;
-
-            } else if (more == (unsigned)(-1)) {
-                /* Very unlikely, but possible on 16 bit machine if
-                 * strstart == 0 && lookahead == 1 (input done a byte at time)
-                 */
-                more--;
-            }
-        }
-
-        /* If the window is almost full and there is insufficient lookahead,
-         * move the upper half to the lower one to make room in the upper half.
-         */
-        if (s->strstart >= wsize+MAX_DIST(s)) {
-
-            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
-            s->match_start -= wsize;
-            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
-            s->block_start -= (long) wsize;
-
-            /* Slide the hash table (could be avoided with 32 bit values
-               at the expense of memory usage). We slide even when level == 0
-               to keep the hash table consistent if we switch back to level > 0
-               later. (Using level 0 permanently is not an optimal usage of
-               zlib, so we don't care about this pathological case.)
-             */
-            /* %%% avoid this when Z_RLE */
-            n = s->hash_size;
-            p = &s->head[n];
-            do {
-                m = *--p;
-                *p = (Pos)(m >= wsize ? m-wsize : NIL);
-            } while (--n);
-
-            n = wsize;
-#ifndef FASTEST
-            p = &s->prev[n];
-            do {
-                m = *--p;
-                *p = (Pos)(m >= wsize ? m-wsize : NIL);
-                /* If n is not on any hash chain, prev[n] is garbage but
-                 * its value will never be used.
-                 */
-            } while (--n);
-#endif
-            more += wsize;
-        }
-        if (s->strm->avail_in == 0) return;
-
-        /* If there was no sliding:
-         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
-         *    more == window_size - lookahead - strstart
-         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
-         * => more >= window_size - 2*WSIZE + 2
-         * In the BIG_MEM or MMAP case (not yet supported),
-         *   window_size == input_size + MIN_LOOKAHEAD  &&
-         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
-         * Otherwise, window_size == 2*WSIZE so more >= 2.
-         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
-         */
-        Assert(more >= 2, "more < 2");
-
-        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
-        s->lookahead += n;
-
-        /* Initialize the hash value now that we have some input: */
-        if (s->lookahead >= MIN_MATCH) {
-            s->ins_h = s->window[s->strstart];
-            UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
-#if MIN_MATCH != 3
-            Call UPDATE_HASH() MIN_MATCH-3 more times
-#endif
-        }
-        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
-         * but this is not important since only literal bytes will be emitted.
-         */
-
-    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
-}
-
-/* ===========================================================================
- * Flush the current block, with given end-of-file flag.
- * IN assertion: strstart is set to the end of the current match.
- */
-#define FLUSH_BLOCK_ONLY(s, eof) { \
-   _tr_flush_block(s, (s->block_start >= 0L ? \
-                   (charf *)&s->window[(unsigned)s->block_start] : \
-                   (charf *)Z_NULL), \
-                (ulg)((long)s->strstart - s->block_start), \
-                (eof)); \
-   s->block_start = s->strstart; \
-   flush_pending(s->strm); \
-   Tracev((stderr,"[FLUSH]")); \
-}
-
-/* Same but force premature exit if necessary. */
-#define FLUSH_BLOCK(s, eof) { \
-   FLUSH_BLOCK_ONLY(s, eof); \
-   if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
-}
-
-/* ===========================================================================
- * Copy without compression as much as possible from the input stream, return
- * the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
- */
-local block_state deflate_stored(deflate_state *s, int flush)
-{
-    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
-     * to pending_buf_size, and each stored block has a 5 byte header:
-     */
-    ulg max_block_size = 0xffff;
-    ulg max_start;
-
-    if (max_block_size > s->pending_buf_size - 5) {
-        max_block_size = s->pending_buf_size - 5;
-    }
-
-    /* Copy as much as possible from input to output: */
-    for (;;) {
-        /* Fill the window as much as possible: */
-        if (s->lookahead <= 1) {
-
-            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
-                   s->block_start >= (long)s->w_size, "slide too late");
-
-            fill_window(s);
-            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
-
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-        Assert(s->block_start >= 0L, "block gone");
-
-        s->strstart += s->lookahead;
-        s->lookahead = 0;
-
-        /* Emit a stored block if pending_buf will be full: */
-        max_start = s->block_start + max_block_size;
-        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
-            /* strstart == 0 is possible when wraparound on 16-bit machine */
-            s->lookahead = (uInt)(s->strstart - max_start);
-            s->strstart = (uInt)max_start;
-            FLUSH_BLOCK(s, 0);
-        }
-        /* Flush if we may have to slide, otherwise block_start may become
-         * negative and the data will be gone:
-         */
-        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
-            FLUSH_BLOCK(s, 0);
-        }
-    }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
-}
-
-/* ===========================================================================
- * Compress as much as possible from the input stream, return the current
- * block state.
- * This function does not perform lazy evaluation of matches and inserts
- * new strings in the dictionary only for unmatched strings or for short
- * matches. It is used only for the fast compression options.
- */
-local block_state deflate_fast(deflate_state *s, int flush)
-{
-    IPos hash_head = NIL; /* head of the hash chain */
-    int bflush;           /* set if current block must be flushed */
-
-    for (;;) {
-        /* Make sure that we always have enough lookahead, except
-         * at the end of the input file. We need MAX_MATCH bytes
-         * for the next match, plus MIN_MATCH bytes to insert the
-         * string following the next match.
-         */
-        if (s->lookahead < MIN_LOOKAHEAD) {
-            fill_window(s);
-            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-                return need_more;
-            }
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-
-        /* Insert the string window[strstart .. strstart+2] in the
-         * dictionary, and set hash_head to the head of the hash chain:
-         */
-        if (s->lookahead >= MIN_MATCH) {
-            INSERT_STRING(s, s->strstart, hash_head);
-        }
-
-        /* Find the longest match, discarding those <= prev_length.
-         * At this point we have always match_length < MIN_MATCH
-         */
-        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
-            /* To simplify the code, we prevent matches with the string
-             * of window index 0 (in particular we have to avoid a match
-             * of the string with itself at the start of the input file).
-             */
-#ifdef FASTEST
-            if ((s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) ||
-                (s->strategy == Z_RLE && s->strstart - hash_head == 1)) {
-                s->match_length = longest_match_fast (s, hash_head);
-            }
-#else
-            if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) {
-                s->match_length = longest_match (s, hash_head);
-            } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) {
-                s->match_length = longest_match_fast (s, hash_head);
-            }
-#endif
-            /* longest_match() or longest_match_fast() sets match_start */
-        }
-        if (s->match_length >= MIN_MATCH) {
-            check_match(s, s->strstart, s->match_start, s->match_length);
-
-            _tr_tally_dist(s, s->strstart - s->match_start,
-                           s->match_length - MIN_MATCH, bflush);
-
-            s->lookahead -= s->match_length;
-
-            /* Insert new strings in the hash table only if the match length
-             * is not too large. This saves time but degrades compression.
-             */
-#ifndef FASTEST
-            if (s->match_length <= s->max_insert_length &&
-                s->lookahead >= MIN_MATCH) {
-                s->match_length--; /* string at strstart already in table */
-                do {
-                    s->strstart++;
-                    INSERT_STRING(s, s->strstart, hash_head);
-                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
-                     * always MIN_MATCH bytes ahead.
-                     */
-                } while (--s->match_length != 0);
-                s->strstart++;
-            } else
-#endif
-            {
-                s->strstart += s->match_length;
-                s->match_length = 0;
-                s->ins_h = s->window[s->strstart];
-                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
-#if MIN_MATCH != 3
-                Call UPDATE_HASH() MIN_MATCH-3 more times
-#endif
-                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
-                 * matter since it will be recomputed at next deflate call.
-                 */
-            }
-        } else {
-            /* No match, output a literal byte */
-            Tracevv((stderr,"%c", s->window[s->strstart]));
-            _tr_tally_lit (s, s->window[s->strstart], bflush);
-            s->lookahead--;
-            s->strstart++;
-        }
-        if (bflush) FLUSH_BLOCK(s, 0);
-    }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
-}
-
-#ifndef FASTEST
-/* ===========================================================================
- * Same as above, but achieves better compression. We use a lazy
- * evaluation for matches: a match is finally adopted only if there is
- * no better match at the next window position.
- */
-local block_state deflate_slow(deflate_state *s, int flush)
-{
-    IPos hash_head = NIL;    /* head of hash chain */
-    int bflush;              /* set if current block must be flushed */
-
-    /* Process the input block. */
-    for (;;) {
-        /* Make sure that we always have enough lookahead, except
-         * at the end of the input file. We need MAX_MATCH bytes
-         * for the next match, plus MIN_MATCH bytes to insert the
-         * string following the next match.
-         */
-        if (s->lookahead < MIN_LOOKAHEAD) {
-            fill_window(s);
-            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-                return need_more;
-            }
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-
-        /* Insert the string window[strstart .. strstart+2] in the
-         * dictionary, and set hash_head to the head of the hash chain:
-         */
-        if (s->lookahead >= MIN_MATCH) {
-            INSERT_STRING(s, s->strstart, hash_head);
-        }
-
-        /* Find the longest match, discarding those <= prev_length.
-         */
-        s->prev_length = s->match_length, s->prev_match = s->match_start;
-        s->match_length = MIN_MATCH-1;
-
-        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
-            s->strstart - hash_head <= MAX_DIST(s)) {
-            /* To simplify the code, we prevent matches with the string
-             * of window index 0 (in particular we have to avoid a match
-             * of the string with itself at the start of the input file).
-             */
-            if (s->strategy != Z_HUFFMAN_ONLY && s->strategy != Z_RLE) {
-                s->match_length = longest_match (s, hash_head);
-            } else if (s->strategy == Z_RLE && s->strstart - hash_head == 1) {
-                s->match_length = longest_match_fast (s, hash_head);
-            }
-            /* longest_match() or longest_match_fast() sets match_start */
-
-            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
-#if TOO_FAR <= 32767
-                || (s->match_length == MIN_MATCH &&
-                    s->strstart - s->match_start > TOO_FAR)
-#endif
-                )) {
-
-                /* If prev_match is also MIN_MATCH, match_start is garbage
-                 * but we will ignore the current match anyway.
-                 */
-                s->match_length = MIN_MATCH-1;
-            }
-        }
-        /* If there was a match at the previous step and the current
-         * match is not better, output the previous match:
-         */
-        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
-            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
-            /* Do not insert strings in hash table beyond this. */
-
-            check_match(s, s->strstart-1, s->prev_match, s->prev_length);
-
-            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
-                           s->prev_length - MIN_MATCH, bflush);
-
-            /* Insert in hash table all strings up to the end of the match.
-             * strstart-1 and strstart are already inserted. If there is not
-             * enough lookahead, the last two strings are not inserted in
-             * the hash table.
-             */
-            s->lookahead -= s->prev_length-1;
-            s->prev_length -= 2;
-            do {
-                if (++s->strstart <= max_insert) {
-                    INSERT_STRING(s, s->strstart, hash_head);
-                }
-            } while (--s->prev_length != 0);
-            s->match_available = 0;
-            s->match_length = MIN_MATCH-1;
-            s->strstart++;
-
-            if (bflush) FLUSH_BLOCK(s, 0);
-
-        } else if (s->match_available) {
-            /* If there was no match at the previous position, output a
-             * single literal. If there was a match but the current match
-             * is longer, truncate the previous match to a single literal.
-             */
-            Tracevv((stderr,"%c", s->window[s->strstart-1]));
-            _tr_tally_lit(s, s->window[s->strstart-1], bflush);
-            if (bflush) {
-                FLUSH_BLOCK_ONLY(s, 0);
-            }
-            s->strstart++;
-            s->lookahead--;
-            if (s->strm->avail_out == 0) return need_more;
-        } else {
-            /* There is no previous match to compare with, wait for
-             * the next step to decide.
-             */
-            s->match_available = 1;
-            s->strstart++;
-            s->lookahead--;
-        }
-    }
-    Assert (flush != Z_NO_FLUSH, "no flush?");
-    if (s->match_available) {
-        Tracevv((stderr,"%c", s->window[s->strstart-1]));
-        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
-        s->match_available = 0;
-    }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
-}
-#endif /* FASTEST */
-
-#if 0
-/* ===========================================================================
- * For Z_RLE, simply look for runs of bytes, generate matches only of distance
- * one.  Do not maintain a hash table.  (It will be regenerated if this run of
- * deflate switches away from Z_RLE.)
- */
-local block_state deflate_rle(s, flush)
-    deflate_state *s;
-    int flush;
-{
-    int bflush;         /* set if current block must be flushed */
-    uInt run;           /* length of run */
-    uInt max;           /* maximum length of run */
-    uInt prev;          /* byte at distance one to match */
-    Bytef *scan;        /* scan for end of run */
-
-    for (;;) {
-        /* Make sure that we always have enough lookahead, except
-         * at the end of the input file. We need MAX_MATCH bytes
-         * for the longest encodable run.
-         */
-        if (s->lookahead < MAX_MATCH) {
-            fill_window(s);
-            if (s->lookahead < MAX_MATCH && flush == Z_NO_FLUSH) {
-                return need_more;
-            }
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-
-        /* See how many times the previous byte repeats */
-        run = 0;
-        if (s->strstart > 0) {      /* if there is a previous byte, that is */
-            max = s->lookahead < MAX_MATCH ? s->lookahead : MAX_MATCH;
-            scan = s->window + s->strstart - 1;
-            prev = *scan++;
-            do {
-                if (*scan++ != prev)
-                    break;
-            } while (++run < max);
-        }
-
-        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
-        if (run >= MIN_MATCH) {
-            check_match(s, s->strstart, s->strstart - 1, run);
-            _tr_tally_dist(s, 1, run - MIN_MATCH, bflush);
-            s->lookahead -= run;
-            s->strstart += run;
-        } else {
-            /* No match, output a literal byte */
-            Tracevv((stderr,"%c", s->window[s->strstart]));
-            _tr_tally_lit (s, s->window[s->strstart], bflush);
-            s->lookahead--;
-            s->strstart++;
-        }
-        if (bflush) FLUSH_BLOCK(s, 0);
-    }
-    FLUSH_BLOCK(s, flush == Z_FINISH);
-    return flush == Z_FINISH ? finish_done : block_done;
-}
-#endif
diff --git a/modules/juce_core/zip/zlib/deflate.h b/modules/juce_core/zip/zlib/deflate.h
deleted file mode 100644
index a3bae5f..0000000
--- a/modules/juce_core/zip/zlib/deflate.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/* deflate.h -- internal compression state
- * Copyright (C) 1995-2004 Jean-loup Gailly
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id: deflate.h,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#ifndef DEFLATE_H
-#define DEFLATE_H
-
-#include "zutil.h"
-
-/* define NO_GZIP when compiling if you want to disable gzip header and
-   trailer creation by deflate().  NO_GZIP would be used to avoid linking in
-   the crc code when it is not needed.  For shared libraries, gzip encoding
-   should be left enabled. */
-#ifndef NO_GZIP
-#  define GZIP
-#endif
-
-#define NO_DUMMY_DECL
-
-/* ===========================================================================
- * Internal compression state.
- */
-
-#define LENGTH_CODES 29
-/* number of length codes, not counting the special END_BLOCK code */
-
-#define LITERALS  256
-/* number of literal bytes 0..255 */
-
-#define L_CODES (LITERALS+1+LENGTH_CODES)
-/* number of Literal or Length codes, including the END_BLOCK code */
-
-#define D_CODES   30
-/* number of distance codes */
-
-#define BL_CODES  19
-/* number of codes used to transfer the bit lengths */
-
-#define HEAP_SIZE (2*L_CODES+1)
-/* maximum heap size */
-
-#define MAX_BITS 15
-/* All codes must not exceed MAX_BITS bits */
-
-#define INIT_STATE    42
-#define EXTRA_STATE   69
-#define NAME_STATE    73
-#define COMMENT_STATE 91
-#define HCRC_STATE   103
-#define BUSY_STATE   113
-#define FINISH_STATE 666
-/* Stream status */
-
-
-/* Data structure describing a single value and its code string. */
-typedef struct ct_data_s {
-    union {
-        ush  freq;       /* frequency count */
-        ush  code;       /* bit string */
-    } fc;
-    union {
-        ush  dad;        /* father node in Huffman tree */
-        ush  len;        /* length of bit string */
-    } dl;
-} FAR ct_data;
-
-#define Freq fc.freq
-#define Code fc.code
-#define Dad  dl.dad
-#define Len  dl.len
-
-typedef struct static_tree_desc_s  static_tree_desc;
-
-typedef struct tree_desc_s {
-    ct_data *dyn_tree;           /* the dynamic tree */
-    int     max_code;            /* largest code with non zero frequency */
-    static_tree_desc *stat_desc; /* the corresponding static tree */
-} FAR tree_desc;
-
-typedef ush Pos;
-typedef Pos FAR Posf;
-typedef unsigned IPos;
-
-/* A Pos is an index in the character window. We use short instead of int to
- * save space in the various tables. IPos is used only for parameter passing.
- */
-
-typedef struct internal_state {
-    z_streamp strm;      /* pointer back to this zlib stream */
-    int   status;        /* as the name implies */
-    Bytef *pending_buf;  /* output still pending */
-    ulg   pending_buf_size; /* size of pending_buf */
-    Bytef *pending_out;  /* next pending byte to output to the stream */
-    uInt   pending;      /* nb of bytes in the pending buffer */
-    int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
-    gz_headerp  gzhead;  /* gzip header information to write */
-    uInt   gzindex;      /* where in extra, name, or comment */
-    Byte  method;        /* STORED (for zip only) or DEFLATED */
-    int   last_flush;    /* value of flush param for previous deflate call */
-
-                /* used by deflate.c: */
-
-    uInt  w_size;        /* LZ77 window size (32K by default) */
-    uInt  w_bits;        /* log2(w_size)  (8..16) */
-    uInt  w_mask;        /* w_size - 1 */
-
-    Bytef *window;
-    /* Sliding window. Input bytes are read into the second half of the window,
-     * and move to the first half later to keep a dictionary of at least wSize
-     * bytes. With this organization, matches are limited to a distance of
-     * wSize-MAX_MATCH bytes, but this ensures that IO is always
-     * performed with a length multiple of the block size. Also, it limits
-     * the window size to 64K, which is quite useful on MSDOS.
-     * To do: use the user input buffer as sliding window.
-     */
-
-    ulg window_size;
-    /* Actual size of window: 2*wSize, except when the user input buffer
-     * is directly used as sliding window.
-     */
-
-    Posf *prev;
-    /* Link to older string with same hash index. To limit the size of this
-     * array to 64K, this link is maintained only for the last 32K strings.
-     * An index in this array is thus a window index modulo 32K.
-     */
-
-    Posf *head; /* Heads of the hash chains or NIL. */
-
-    uInt  ins_h;          /* hash index of string to be inserted */
-    uInt  hash_size;      /* number of elements in hash table */
-    uInt  hash_bits;      /* log2(hash_size) */
-    uInt  hash_mask;      /* hash_size-1 */
-
-    uInt  hash_shift;
-    /* Number of bits by which ins_h must be shifted at each input
-     * step. It must be such that after MIN_MATCH steps, the oldest
-     * byte no longer takes part in the hash key, that is:
-     *   hash_shift * MIN_MATCH >= hash_bits
-     */
-
-    long block_start;
-    /* Window position at the beginning of the current output block. Gets
-     * negative when the window is moved backwards.
-     */
-
-    uInt match_length;           /* length of best match */
-    IPos prev_match;             /* previous match */
-    int match_available;         /* set if previous match exists */
-    uInt strstart;               /* start of string to insert */
-    uInt match_start;            /* start of matching string */
-    uInt lookahead;              /* number of valid bytes ahead in window */
-
-    uInt prev_length;
-    /* Length of the best match at previous step. Matches not greater than this
-     * are discarded. This is used in the lazy match evaluation.
-     */
-
-    uInt max_chain_length;
-    /* To speed up deflation, hash chains are never searched beyond this
-     * length.  A higher limit improves compression ratio but degrades the
-     * speed.
-     */
-
-    uInt max_lazy_match;
-    /* Attempt to find a better match only when the current match is strictly
-     * smaller than this value. This mechanism is used only for compression
-     * levels >= 4.
-     */
-#   define max_insert_length  max_lazy_match
-    /* Insert new strings in the hash table only if the match length is not
-     * greater than this length. This saves time but degrades compression.
-     * max_insert_length is used only for compression levels <= 3.
-     */
-
-    int level;    /* compression level (1..9) */
-    int strategy; /* favor or force Huffman coding*/
-
-    uInt good_match;
-    /* Use a faster search when the previous match is longer than this */
-
-    int nice_match; /* Stop searching when current match exceeds this */
-
-                /* used by trees.c: */
-    /* Didn't use ct_data typedef below to supress compiler warning */
-    struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
-    struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
-    struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
-
-    struct tree_desc_s l_desc;               /* desc. for literal tree */
-    struct tree_desc_s d_desc;               /* desc. for distance tree */
-    struct tree_desc_s bl_desc;              /* desc. for bit length tree */
-
-    ush bl_count[MAX_BITS+1];
-    /* number of codes at each bit length for an optimal tree */
-
-    int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
-    int heap_len;               /* number of elements in the heap */
-    int heap_max;               /* element of largest frequency */
-    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
-     * The same heap array is used to build all trees.
-     */
-
-    uch depth[2*L_CODES+1];
-    /* Depth of each subtree used as tie breaker for trees of equal frequency
-     */
-
-    uchf *l_buf;          /* buffer for literals or lengths */
-
-    uInt  lit_bufsize;
-    /* Size of match buffer for literals/lengths.  There are 4 reasons for
-     * limiting lit_bufsize to 64K:
-     *   - frequencies can be kept in 16 bit counters
-     *   - if compression is not successful for the first block, all input
-     *     data is still in the window so we can still emit a stored block even
-     *     when input comes from standard input.  (This can also be done for
-     *     all blocks if lit_bufsize is not greater than 32K.)
-     *   - if compression is not successful for a file smaller than 64K, we can
-     *     even emit a stored file instead of a stored block (saving 5 bytes).
-     *     This is applicable only for zip (not gzip or zlib).
-     *   - creating new Huffman trees less frequently may not provide fast
-     *     adaptation to changes in the input data statistics. (Take for
-     *     example a binary file with poorly compressible code followed by
-     *     a highly compressible string table.) Smaller buffer sizes give
-     *     fast adaptation but have of course the overhead of transmitting
-     *     trees more frequently.
-     *   - I can't count above 4
-     */
-
-    uInt last_lit;      /* running index in l_buf */
-
-    ushf *d_buf;
-    /* Buffer for distances. To simplify the code, d_buf and l_buf have
-     * the same number of elements. To use different lengths, an extra flag
-     * array would be necessary.
-     */
-
-    ulg opt_len;        /* bit length of current block with optimal trees */
-    ulg static_len;     /* bit length of current block with static trees */
-    uInt matches;       /* number of string matches in current block */
-    int last_eob_len;   /* bit length of EOB code for last block */
-
-#ifdef DEBUG
-    ulg compressed_len; /* total bit length of compressed file mod 2^32 */
-    ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
-#endif
-
-    ush bi_buf;
-    /* Output buffer. bits are inserted starting at the bottom (least
-     * significant bits).
-     */
-    int bi_valid;
-    /* Number of valid bits in bi_buf.  All bits above the last valid bit
-     * are always zero.
-     */
-
-} FAR deflate_state;
-
-/* Output a byte on the stream.
- * IN assertion: there is enough room in pending_buf.
- */
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
-
-
-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
-/* Minimum amount of lookahead, except at the end of the input file.
- * See deflate.c for comments about the MIN_MATCH+1.
- */
-
-#define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
-/* In order to simplify the code, particularly on 16 bit machines, match
- * distances are limited to MAX_DIST instead of WSIZE.
- */
-
-        /* in trees.c */
-void _tr_init         OF((deflate_state *s));
-int  _tr_tally        OF((deflate_state *s, unsigned dist, unsigned lc));
-void _tr_flush_block  OF((deflate_state *s, charf *buf, ulg stored_len,
-                          int eof));
-void _tr_align        OF((deflate_state *s));
-void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
-                          int eof));
-
-#define d_code(dist) \
-   ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
-/* Mapping from a distance to a distance code. dist is the distance - 1 and
- * must not have side effects. _dist_code[256] and _dist_code[257] are never
- * used.
- */
-
-#ifndef DEBUG
-/* Inline versions of _tr_tally for speed: */
-
-#if defined(GEN_TREES_H) || !defined(STDC)
-  extern uch _length_code[];
-  extern uch _dist_code[];
-#else
-  extern const uch _length_code[];
-  extern const uch _dist_code[];
-#endif
-
-# define _tr_tally_lit(s, c, flush) \
-  { uch cc = (c); \
-    s->d_buf[s->last_lit] = 0; \
-    s->l_buf[s->last_lit++] = cc; \
-    s->dyn_ltree[cc].Freq++; \
-    flush = (s->last_lit == s->lit_bufsize-1); \
-   }
-# define _tr_tally_dist(s, distance, length, flush) \
-  { uch len = (length); \
-    ush dist = (distance); \
-    s->d_buf[s->last_lit] = dist; \
-    s->l_buf[s->last_lit++] = len; \
-    dist--; \
-    s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
-    s->dyn_dtree[d_code(dist)].Freq++; \
-    flush = (s->last_lit == s->lit_bufsize-1); \
-  }
-#else
-# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
-# define _tr_tally_dist(s, distance, length, flush) \
-              flush = _tr_tally(s, distance, length)
-#endif
-
-#endif /* DEFLATE_H */
diff --git a/modules/juce_core/zip/zlib/infback.c b/modules/juce_core/zip/zlib/infback.c
deleted file mode 100644
index c259d01..0000000
--- a/modules/juce_core/zip/zlib/infback.c
+++ /dev/null
@@ -1,611 +0,0 @@
-/* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2005 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
-   This code is largely copied from inflate.c.  Normally either infback.o or
-   inflate.o would be linked into an application--not both.  The interface
-   with inffast.c is retained so that optimized assembler-coded versions of
-   inflate_fast() can be used with either inflate.c or infback.c.
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "inflate.h"
-#include "inffast.h"
-
-/* function prototypes */
-local void fixedtables1 OF((struct inflate_state FAR *state));
-
-/*
-   strm provides memory allocation functions in zalloc and zfree, or
-   Z_NULL to use the library memory allocation functions.
-
-   windowBits is in the range 8..15, and window is a user-supplied
-   window and output buffer that is 2**windowBits bytes.
- */
-int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)
-{
-    struct inflate_state FAR *state;
-
-    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
-        stream_size != (int)(sizeof(z_stream)))
-        return Z_VERSION_ERROR;
-    if (strm == Z_NULL || window == Z_NULL ||
-        windowBits < 8 || windowBits > 15)
-        return Z_STREAM_ERROR;
-    strm->msg = Z_NULL;                 /* in case we return an error */
-    if (strm->zalloc == (alloc_func)0) {
-        strm->zalloc = zcalloc;
-        strm->opaque = (voidpf)0;
-    }
-    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
-    state = (struct inflate_state FAR *)ZALLOC(strm, 1,
-                                               sizeof(struct inflate_state));
-    if (state == Z_NULL) return Z_MEM_ERROR;
-    Tracev((stderr, "inflate: allocated\n"));
-    strm->state = (struct internal_state FAR *)state;
-    state->dmax = 32768U;
-    state->wbits = windowBits;
-    state->wsize = 1U << windowBits;
-    state->window = window;
-    state->write = 0;
-    state->whave = 0;
-    return Z_OK;
-}
-
-/*
-   Return state with length and distance decoding tables and index sizes set to
-   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
-   If BUILDFIXED is defined, then instead this routine builds the tables the
-   first time it's called, and returns those tables the first time and
-   thereafter.  This reduces the size of the code by about 2K bytes, in
-   exchange for a little execution time.  However, BUILDFIXED should not be
-   used for threaded applications, since the rewriting of the tables and virgin
-   may not be thread-safe.
- */
-local void fixedtables1 (struct inflate_state FAR *state)
-{
-#ifdef BUILDFIXED
-    static int virgin = 1;
-    static code *lenfix, *distfix;
-    static code fixed[544];
-
-    /* build fixed huffman tables if first call (may not be thread safe) */
-    if (virgin) {
-        unsigned sym, bits;
-        static code *next;
-
-        /* literal/length table */
-        sym = 0;
-        while (sym < 144) state->lens[sym++] = 8;
-        while (sym < 256) state->lens[sym++] = 9;
-        while (sym < 280) state->lens[sym++] = 7;
-        while (sym < 288) state->lens[sym++] = 8;
-        next = fixed;
-        lenfix = next;
-        bits = 9;
-        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
-
-        /* distance table */
-        sym = 0;
-        while (sym < 32) state->lens[sym++] = 5;
-        distfix = next;
-        bits = 5;
-        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
-
-        /* do this just once */
-        virgin = 0;
-    }
-#else /* !BUILDFIXED */
-#   include "inffixed.h"
-#endif /* BUILDFIXED */
-    state->lencode = lenfix;
-    state->lenbits = 9;
-    state->distcode = distfix;
-    state->distbits = 5;
-}
-
-/* Macros for inflateBack(): */
-
-/* Load returned state from inflate_fast() */
-#define LOAD() \
-    do { \
-        put = strm->next_out; \
-        left = strm->avail_out; \
-        next = strm->next_in; \
-        have = strm->avail_in; \
-        hold = state->hold; \
-        bits = state->bits; \
-    } while (0)
-
-/* Set state from registers for inflate_fast() */
-#define RESTORE() \
-    do { \
-        strm->next_out = put; \
-        strm->avail_out = left; \
-        strm->next_in = next; \
-        strm->avail_in = have; \
-        state->hold = hold; \
-        state->bits = bits; \
-    } while (0)
-
-/* Clear the input bit accumulator */
-#define INITBITS() \
-    do { \
-        hold = 0; \
-        bits = 0; \
-    } while (0)
-
-/* Assure that some input is available.  If input is requested, but denied,
-   then return a Z_BUF_ERROR from inflateBack(). */
-#define PULL() \
-    do { \
-        if (have == 0) { \
-            have = in(in_desc, &next); \
-            if (have == 0) { \
-                next = Z_NULL; \
-                ret = Z_BUF_ERROR; \
-                goto inf_leave; \
-            } \
-        } \
-    } while (0)
-
-/* Get a byte of input into the bit accumulator, or return from inflateBack()
-   with an error if there is no input available. */
-#define PULLBYTE() \
-    do { \
-        PULL(); \
-        have--; \
-        hold += (unsigned long)(*next++) << bits; \
-        bits += 8; \
-    } while (0)
-
-/* Assure that there are at least n bits in the bit accumulator.  If there is
-   not enough available input to do that, then return from inflateBack() with
-   an error. */
-#define NEEDBITS(n) \
-    do { \
-        while (bits < (unsigned)(n)) \
-            PULLBYTE(); \
-    } while (0)
-
-/* Return the low n bits of the bit accumulator (n < 16) */
-#define BITS(n) \
-    ((unsigned)hold & ((1U << (n)) - 1))
-
-/* Remove n bits from the bit accumulator */
-#define DROPBITS(n) \
-    do { \
-        hold >>= (n); \
-        bits -= (unsigned)(n); \
-    } while (0)
-
-/* Remove zero to seven bits as needed to go to a byte boundary */
-#define BYTEBITS() \
-    do { \
-        hold >>= bits & 7; \
-        bits -= bits & 7; \
-    } while (0)
-
-/* Assure that some output space is available, by writing out the window
-   if it's full.  If the write fails, return from inflateBack() with a
-   Z_BUF_ERROR. */
-#define ROOM() \
-    do { \
-        if (left == 0) { \
-            put = state->window; \
-            left = state->wsize; \
-            state->whave = left; \
-            if (out(out_desc, put, left)) { \
-                ret = Z_BUF_ERROR; \
-                goto inf_leave; \
-            } \
-        } \
-    } while (0)
-
-/*
-   strm provides the memory allocation functions and window buffer on input,
-   and provides information on the unused input on return.  For Z_DATA_ERROR
-   returns, strm will also provide an error message.
-
-   in() and out() are the call-back input and output functions.  When
-   inflateBack() needs more input, it calls in().  When inflateBack() has
-   filled the window with output, or when it completes with data in the
-   window, it calls out() to write out the data.  The application must not
-   change the provided input until in() is called again or inflateBack()
-   returns.  The application must not change the window/output buffer until
-   inflateBack() returns.
-
-   in() and out() are called with a descriptor parameter provided in the
-   inflateBack() call.  This parameter can be a structure that provides the
-   information required to do the read or write, as well as accumulated
-   information on the input and output such as totals and check values.
-
-   in() should return zero on failure.  out() should return non-zero on
-   failure.  If either in() or out() fails, than inflateBack() returns a
-   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
-   was in() or out() that caused in the error.  Otherwise,  inflateBack()
-   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
-   error, or Z_MEM_ERROR if it could not allocate memory for the state.
-   inflateBack() can also return Z_STREAM_ERROR if the input parameters
-   are not correct, i.e. strm is Z_NULL or the state was not initialized.
- */
-int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc)
-{
-    struct inflate_state FAR *state;
-    unsigned char FAR *next;    /* next input */
-    unsigned char FAR *put;     /* next output */
-    unsigned have, left;        /* available input and output */
-    unsigned long hold;         /* bit buffer */
-    unsigned bits;              /* bits in bit buffer */
-    unsigned copy;              /* number of stored or match bytes to copy */
-    unsigned char FAR *from;    /* where to copy match bytes from */
-    code thisx;                  /* current decoding table entry */
-    code last;                  /* parent table entry */
-    unsigned len;               /* length to copy for repeats, bits to drop */
-    int ret;                    /* return code */
-    static const unsigned short order[19] = /* permutation of code lengths */
-        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-    /* Check that the strm exists and that the state was initialized */
-    if (strm == Z_NULL || strm->state == Z_NULL)
-        return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-
-    /* Reset the state */
-    strm->msg = Z_NULL;
-    state->mode = TYPE;
-    state->last = 0;
-    state->whave = 0;
-    next = strm->next_in;
-    have = next != Z_NULL ? strm->avail_in : 0;
-    hold = 0;
-    bits = 0;
-    put = state->window;
-    left = state->wsize;
-
-    /* Inflate until end of block marked as last */
-    for (;;)
-        switch (state->mode) {
-        case TYPE:
-            /* determine and dispatch block type */
-            if (state->last) {
-                BYTEBITS();
-                state->mode = DONE;
-                break;
-            }
-            NEEDBITS(3);
-            state->last = BITS(1);
-            DROPBITS(1);
-            switch (BITS(2)) {
-            case 0:                             /* stored block */
-                Tracev((stderr, "inflate:     stored block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = STORED;
-                break;
-            case 1:                             /* fixed block */
-                fixedtables1(state);
-                Tracev((stderr, "inflate:     fixed codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = LEN;              /* decode codes */
-                break;
-            case 2:                             /* dynamic block */
-                Tracev((stderr, "inflate:     dynamic codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = TABLE;
-                break;
-            case 3:
-                strm->msg = (char *)"invalid block type";
-                state->mode = BAD;
-            }
-            DROPBITS(2);
-            break;
-
-        case STORED:
-            /* get and verify stored block length */
-            BYTEBITS();                         /* go to byte boundary */
-            NEEDBITS(32);
-            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
-                strm->msg = (char *)"invalid stored block lengths";
-                state->mode = BAD;
-                break;
-            }
-            state->length = (unsigned)hold & 0xffff;
-            Tracev((stderr, "inflate:       stored length %u\n",
-                    state->length));
-            INITBITS();
-
-            /* copy stored block from input to output */
-            while (state->length != 0) {
-                copy = state->length;
-                PULL();
-                ROOM();
-                if (copy > have) copy = have;
-                if (copy > left) copy = left;
-                zmemcpy(put, next, copy);
-                have -= copy;
-                next += copy;
-                left -= copy;
-                put += copy;
-                state->length -= copy;
-            }
-            Tracev((stderr, "inflate:       stored end\n"));
-            state->mode = TYPE;
-            break;
-
-        case TABLE:
-            /* get dynamic table entries descriptor */
-            NEEDBITS(14);
-            state->nlen = BITS(5) + 257;
-            DROPBITS(5);
-            state->ndist = BITS(5) + 1;
-            DROPBITS(5);
-            state->ncode = BITS(4) + 4;
-            DROPBITS(4);
-#ifndef PKZIP_BUG_WORKAROUND
-            if (state->nlen > 286 || state->ndist > 30) {
-                strm->msg = (char *)"too many length or distance symbols";
-                state->mode = BAD;
-                break;
-            }
-#endif
-            Tracev((stderr, "inflate:       table sizes ok\n"));
-
-            /* get code length code lengths (not a typo) */
-            state->have = 0;
-            while (state->have < state->ncode) {
-                NEEDBITS(3);
-                state->lens[order[state->have++]] = (unsigned short)BITS(3);
-                DROPBITS(3);
-            }
-            while (state->have < 19)
-                state->lens[order[state->have++]] = 0;
-            state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
-            state->lenbits = 7;
-            ret = inflate_table(CODES, state->lens, 19, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid code lengths set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       code lengths ok\n"));
-
-            /* get length and distance code code lengths */
-            state->have = 0;
-            while (state->have < state->nlen + state->ndist) {
-                for (;;) {
-                    thisx = state->lencode[BITS(state->lenbits)];
-                    if ((unsigned)(thisx.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                if (thisx.val < 16) {
-                    NEEDBITS(thisx.bits);
-                    DROPBITS(thisx.bits);
-                    state->lens[state->have++] = thisx.val;
-                }
-                else {
-                    if (thisx.val == 16) {
-                        NEEDBITS(thisx.bits + 2);
-                        DROPBITS(thisx.bits);
-                        if (state->have == 0) {
-                            strm->msg = (char *)"invalid bit length repeat";
-                            state->mode = BAD;
-                            break;
-                        }
-                        len = (unsigned)(state->lens[state->have - 1]);
-                        copy = 3 + BITS(2);
-                        DROPBITS(2);
-                    }
-                    else if (thisx.val == 17) {
-                        NEEDBITS(thisx.bits + 3);
-                        DROPBITS(thisx.bits);
-                        len = 0;
-                        copy = 3 + BITS(3);
-                        DROPBITS(3);
-                    }
-                    else {
-                        NEEDBITS(thisx.bits + 7);
-                        DROPBITS(thisx.bits);
-                        len = 0;
-                        copy = 11 + BITS(7);
-                        DROPBITS(7);
-                    }
-                    if (state->have + copy > state->nlen + state->ndist) {
-                        strm->msg = (char *)"invalid bit length repeat";
-                        state->mode = BAD;
-                        break;
-                    }
-                    while (copy--)
-                        state->lens[state->have++] = (unsigned short)len;
-                }
-            }
-
-            /* handle error breaks in while */
-            if (state->mode == BAD) break;
-
-            /* build code tables */
-            state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
-            state->lenbits = 9;
-            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid literal/lengths set";
-                state->mode = BAD;
-                break;
-            }
-            state->distcode = (code const FAR *)(state->next);
-            state->distbits = 6;
-            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
-                            &(state->next), &(state->distbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid distances set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       codes ok\n"));
-            state->mode = LEN;
-
-        case LEN:
-            /* use inflate_fast() if we have enough input and output */
-            if (have >= 6 && left >= 258) {
-                RESTORE();
-                if (state->whave < state->wsize)
-                    state->whave = state->wsize - left;
-                inflate_fast(strm, state->wsize);
-                LOAD();
-                break;
-            }
-
-            /* get a literal, length, or end-of-block code */
-            for (;;) {
-                thisx = state->lencode[BITS(state->lenbits)];
-                if ((unsigned)(thisx.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if (thisx.op && (thisx.op & 0xf0) == 0) {
-                last = thisx;
-                for (;;) {
-                    thisx = state->lencode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + thisx.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-            }
-            DROPBITS(thisx.bits);
-            state->length = (unsigned)thisx.val;
-
-            /* process literal */
-            if (thisx.op == 0) {
-                Tracevv((stderr, thisx.val >= 0x20 && thisx.val < 0x7f ?
-                        "inflate:         literal '%c'\n" :
-                        "inflate:         literal 0x%02x\n", thisx.val));
-                ROOM();
-                *put++ = (unsigned char)(state->length);
-                left--;
-                state->mode = LEN;
-                break;
-            }
-
-            /* process end of block */
-            if (thisx.op & 32) {
-                Tracevv((stderr, "inflate:         end of block\n"));
-                state->mode = TYPE;
-                break;
-            }
-
-            /* invalid code */
-            if (thisx.op & 64) {
-                strm->msg = (char *)"invalid literal/length code";
-                state->mode = BAD;
-                break;
-            }
-
-            /* length code -- get extra bits, if any */
-            state->extra = (unsigned)(thisx.op) & 15;
-            if (state->extra != 0) {
-                NEEDBITS(state->extra);
-                state->length += BITS(state->extra);
-                DROPBITS(state->extra);
-            }
-            Tracevv((stderr, "inflate:         length %u\n", state->length));
-
-            /* get distance code */
-            for (;;) {
-                thisx = state->distcode[BITS(state->distbits)];
-                if ((unsigned)(thisx.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if ((thisx.op & 0xf0) == 0) {
-                last = thisx;
-                for (;;) {
-                    thisx = state->distcode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + thisx.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-            }
-            DROPBITS(thisx.bits);
-            if (thisx.op & 64) {
-                strm->msg = (char *)"invalid distance code";
-                state->mode = BAD;
-                break;
-            }
-            state->offset = (unsigned)thisx.val;
-
-            /* get distance extra bits, if any */
-            state->extra = (unsigned)(thisx.op) & 15;
-            if (state->extra != 0) {
-                NEEDBITS(state->extra);
-                state->offset += BITS(state->extra);
-                DROPBITS(state->extra);
-            }
-            if (state->offset > state->wsize - (state->whave < state->wsize ?
-                                                left : 0)) {
-                strm->msg = (char *)"invalid distance too far back";
-                state->mode = BAD;
-                break;
-            }
-            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
-
-            /* copy match from window to output */
-            do {
-                ROOM();
-                copy = state->wsize - state->offset;
-                if (copy < left) {
-                    from = put + copy;
-                    copy = left - copy;
-                }
-                else {
-                    from = put - state->offset;
-                    copy = left;
-                }
-                if (copy > state->length) copy = state->length;
-                state->length -= copy;
-                left -= copy;
-                do {
-                    *put++ = *from++;
-                } while (--copy);
-            } while (state->length != 0);
-            break;
-
-        case DONE:
-            /* inflate stream terminated properly -- write leftover output */
-            ret = Z_STREAM_END;
-            if (left < state->wsize) {
-                if (out(out_desc, state->window, state->wsize - left))
-                    ret = Z_BUF_ERROR;
-            }
-            goto inf_leave;
-
-        case BAD:
-            ret = Z_DATA_ERROR;
-            goto inf_leave;
-
-        default:                /* can't happen, but makes compilers happy */
-            ret = Z_STREAM_ERROR;
-            goto inf_leave;
-        }
-
-    /* Return unused input */
-  inf_leave:
-    strm->next_in = next;
-    strm->avail_in = have;
-    return ret;
-}
-
-int ZEXPORT inflateBackEnd (z_streamp strm)
-{
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
-        return Z_STREAM_ERROR;
-    ZFREE(strm, strm->state);
-    strm->state = Z_NULL;
-    Tracev((stderr, "inflate: end\n"));
-    return Z_OK;
-}
diff --git a/modules/juce_core/zip/zlib/inffast.c b/modules/juce_core/zip/zlib/inffast.c
deleted file mode 100644
index 6ac383d..0000000
--- a/modules/juce_core/zip/zlib/inffast.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/* inffast.c -- fast decoding
- * Copyright (C) 1995-2004 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "inflate.h"
-#include "inffast.h"
-
-#ifndef ASMINF
-
-/* Allow machine dependent optimization for post-increment or pre-increment.
-   Based on testing to date,
-   Pre-increment preferred for:
-   - PowerPC G3 (Adler)
-   - MIPS R5000 (Randers-Pehrson)
-   Post-increment preferred for:
-   - none
-   No measurable difference:
-   - Pentium III (Anderson)
-   - M68060 (Nikl)
- */
-#ifdef POSTINC
-#  define OFF 0
-#  define PUP(a) *(a)++
-#else
-#  define OFF 1
-#  define PUP(a) *++(a)
-#endif
-
-/*
-   Decode literal, length, and distance codes and write out the resulting
-   literal and match bytes until either not enough input or output is
-   available, an end-of-block is encountered, or a data error is encountered.
-   When large enough input and output buffers are supplied to inflate(), for
-   example, a 16K input buffer and a 64K output buffer, more than 95% of the
-   inflate execution time is spent in this routine.
-
-   Entry assumptions:
-
-        state->mode == LEN
-        strm->avail_in >= 6
-        strm->avail_out >= 258
-        start >= strm->avail_out
-        state->bits < 8
-
-   On return, state->mode is one of:
-
-        LEN -- ran out of enough output space or enough available input
-        TYPE -- reached end of block code, inflate() to interpret next block
-        BAD -- error in block data
-
-   Notes:
-
-    - The maximum input bits used by a length/distance pair is 15 bits for the
-      length code, 5 bits for the length extra, 15 bits for the distance code,
-      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
-      Therefore if strm->avail_in >= 6, then there is enough input to avoid
-      checking for available input while decoding.
-
-    - The maximum bytes that a single length/distance pair can output is 258
-      bytes, which is the maximum length that can be coded.  inflate_fast()
-      requires strm->avail_out >= 258 for each loop to avoid checking for
-      output space.
- */
-void inflate_fast (z_streamp strm, unsigned start)
-{
-    struct inflate_state FAR *state;
-    unsigned char FAR *in;      /* local strm->next_in */
-    unsigned char FAR *last;    /* while in < last, enough input available */
-    unsigned char FAR *out;     /* local strm->next_out */
-    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
-    unsigned char FAR *end;     /* while out < end, enough space available */
-#ifdef INFLATE_STRICT
-    unsigned dmax;              /* maximum distance from zlib header */
-#endif
-    unsigned wsize;             /* window size or zero if not using window */
-    unsigned whave;             /* valid bytes in the window */
-    unsigned write;             /* window write index */
-    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
-    unsigned long hold;         /* local strm->hold */
-    unsigned bits;              /* local strm->bits */
-    code const FAR *lcode;      /* local strm->lencode */
-    code const FAR *dcode;      /* local strm->distcode */
-    unsigned lmask;             /* mask for first level of length codes */
-    unsigned dmask;             /* mask for first level of distance codes */
-    code thisx;                  /* retrieved table entry */
-    unsigned op;                /* code bits, operation, extra bits, or */
-                                /*  window position, window bytes to copy */
-    unsigned len;               /* match length, unused bytes */
-    unsigned dist;              /* match distance */
-    unsigned char FAR *from;    /* where to copy match from */
-
-    /* copy state to local variables */
-    state = (struct inflate_state FAR *)strm->state;
-    in = strm->next_in - OFF;
-    last = in + (strm->avail_in - 5);
-    out = strm->next_out - OFF;
-    beg = out - (start - strm->avail_out);
-    end = out + (strm->avail_out - 257);
-#ifdef INFLATE_STRICT
-    dmax = state->dmax;
-#endif
-    wsize = state->wsize;
-    whave = state->whave;
-    write = state->write;
-    window = state->window;
-    hold = state->hold;
-    bits = state->bits;
-    lcode = state->lencode;
-    dcode = state->distcode;
-    lmask = (1U << state->lenbits) - 1;
-    dmask = (1U << state->distbits) - 1;
-
-    /* decode literals and length/distances until end-of-block or not enough
-       input data or output space */
-    do {
-        if (bits < 15) {
-            hold += (unsigned long)(PUP(in)) << bits;
-            bits += 8;
-            hold += (unsigned long)(PUP(in)) << bits;
-            bits += 8;
-        }
-        thisx = lcode[hold & lmask];
-      dolen:
-        op = (unsigned)(thisx.bits);
-        hold >>= op;
-        bits -= op;
-        op = (unsigned)(thisx.op);
-        if (op == 0) {                          /* literal */
-            Tracevv((stderr, thisx.val >= 0x20 && thisx.val < 0x7f ?
-                    "inflate:         literal '%c'\n" :
-                    "inflate:         literal 0x%02x\n", thisx.val));
-            PUP(out) = (unsigned char)(thisx.val);
-        }
-        else if (op & 16) {                     /* length base */
-            len = (unsigned)(thisx.val);
-            op &= 15;                           /* number of extra bits */
-            if (op) {
-                if (bits < op) {
-                    hold += (unsigned long)(PUP(in)) << bits;
-                    bits += 8;
-                }
-                len += (unsigned)hold & ((1U << op) - 1);
-                hold >>= op;
-                bits -= op;
-            }
-            Tracevv((stderr, "inflate:         length %u\n", len));
-            if (bits < 15) {
-                hold += (unsigned long)(PUP(in)) << bits;
-                bits += 8;
-                hold += (unsigned long)(PUP(in)) << bits;
-                bits += 8;
-            }
-            thisx = dcode[hold & dmask];
-          dodist:
-            op = (unsigned)(thisx.bits);
-            hold >>= op;
-            bits -= op;
-            op = (unsigned)(thisx.op);
-            if (op & 16) {                      /* distance base */
-                dist = (unsigned)(thisx.val);
-                op &= 15;                       /* number of extra bits */
-                if (bits < op) {
-                    hold += (unsigned long)(PUP(in)) << bits;
-                    bits += 8;
-                    if (bits < op) {
-                        hold += (unsigned long)(PUP(in)) << bits;
-                        bits += 8;
-                    }
-                }
-                dist += (unsigned)hold & ((1U << op) - 1);
-#ifdef INFLATE_STRICT
-                if (dist > dmax) {
-                    strm->msg = (char *)"invalid distance too far back";
-                    state->mode = BAD;
-                    break;
-                }
-#endif
-                hold >>= op;
-                bits -= op;
-                Tracevv((stderr, "inflate:         distance %u\n", dist));
-                op = (unsigned)(out - beg);     /* max distance in output */
-                if (dist > op) {                /* see if copy from window */
-                    op = dist - op;             /* distance back in window */
-                    if (op > whave) {
-                        strm->msg = (char *)"invalid distance too far back";
-                        state->mode = BAD;
-                        break;
-                    }
-                    from = window - OFF;
-                    if (write == 0) {           /* very common case */
-                        from += wsize - op;
-                        if (op < len) {         /* some from window */
-                            len -= op;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--op);
-                            from = out - dist;  /* rest from output */
-                        }
-                    }
-                    else if (write < op) {      /* wrap around window */
-                        from += wsize + write - op;
-                        op -= write;
-                        if (op < len) {         /* some from end of window */
-                            len -= op;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--op);
-                            from = window - OFF;
-                            if (write < len) {  /* some from start of window */
-                                op = write;
-                                len -= op;
-                                do {
-                                    PUP(out) = PUP(from);
-                                } while (--op);
-                                from = out - dist;      /* rest from output */
-                            }
-                        }
-                    }
-                    else {                      /* contiguous in window */
-                        from += write - op;
-                        if (op < len) {         /* some from window */
-                            len -= op;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--op);
-                            from = out - dist;  /* rest from output */
-                        }
-                    }
-                    while (len > 2) {
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        len -= 3;
-                    }
-                    if (len) {
-                        PUP(out) = PUP(from);
-                        if (len > 1)
-                            PUP(out) = PUP(from);
-                    }
-                }
-                else {
-                    from = out - dist;          /* copy direct from output */
-                    do {                        /* minimum length is three */
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        len -= 3;
-                    } while (len > 2);
-                    if (len) {
-                        PUP(out) = PUP(from);
-                        if (len > 1)
-                            PUP(out) = PUP(from);
-                    }
-                }
-            }
-            else if ((op & 64) == 0) {          /* 2nd level distance code */
-                thisx = dcode[thisx.val + (hold & ((1U << op) - 1))];
-                goto dodist;
-            }
-            else {
-                strm->msg = (char *)"invalid distance code";
-                state->mode = BAD;
-                break;
-            }
-        }
-        else if ((op & 64) == 0) {              /* 2nd level length code */
-            thisx = lcode[thisx.val + (hold & ((1U << op) - 1))];
-            goto dolen;
-        }
-        else if (op & 32) {                     /* end-of-block */
-            Tracevv((stderr, "inflate:         end of block\n"));
-            state->mode = TYPE;
-            break;
-        }
-        else {
-            strm->msg = (char *)"invalid literal/length code";
-            state->mode = BAD;
-            break;
-        }
-    } while (in < last && out < end);
-
-    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
-    len = bits >> 3;
-    in -= len;
-    bits -= len << 3;
-    hold &= (1U << bits) - 1;
-
-    /* update state and return */
-    strm->next_in = in + OFF;
-    strm->next_out = out + OFF;
-    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
-    strm->avail_out = (unsigned)(out < end ?
-                                 257 + (end - out) : 257 - (out - end));
-    state->hold = hold;
-    state->bits = bits;
-    return;
-}
-
-/*
-   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
-   - Using bit fields for code structure
-   - Different op definition to avoid & for extra bits (do & for table bits)
-   - Three separate decoding do-loops for direct, window, and write == 0
-   - Special case for distance > 1 copies to do overlapped load and store copy
-   - Explicit branch predictions (based on measured branch probabilities)
-   - Deferring match copy and interspersed it with decoding subsequent codes
-   - Swapping literal/length else
-   - Swapping window/direct else
-   - Larger unrolled copy loops (three is about right)
-   - Moving len -= 3 statement into middle of loop
- */
-
-#endif /* !ASMINF */
diff --git a/modules/juce_core/zip/zlib/inffast.h b/modules/juce_core/zip/zlib/inffast.h
deleted file mode 100644
index 614fa78..0000000
--- a/modules/juce_core/zip/zlib/inffast.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* inffast.h -- header to use inffast.c
- * Copyright (C) 1995-2003 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-void inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/modules/juce_core/zip/zlib/inffixed.h b/modules/juce_core/zip/zlib/inffixed.h
deleted file mode 100644
index 423d5c5..0000000
--- a/modules/juce_core/zip/zlib/inffixed.h
+++ /dev/null
@@ -1,94 +0,0 @@
-    /* inffixed.h -- table for decoding fixed codes
-     * Generated automatically by makefixed().
-     */
-
-    /* WARNING: this file should *not* be used by applications. It
-       is part of the implementation of the compression library and
-       is subject to change. Applications should only use zlib.h.
-     */
-
-    static const code lenfix[512] = {
-        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
-        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
-        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
-        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
-        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
-        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
-        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
-        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
-        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
-        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
-        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
-        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
-        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
-        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
-        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
-        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
-        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
-        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
-        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
-        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
-        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
-        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
-        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
-        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
-        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
-        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
-        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
-        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
-        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
-        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
-        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
-        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
-        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
-        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
-        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
-        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
-        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
-        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
-        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
-        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
-        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
-        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
-        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
-        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
-        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
-        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
-        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
-        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
-        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
-        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
-        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
-        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
-        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
-        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
-        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
-        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
-        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
-        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
-        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
-        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
-        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
-        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
-        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
-        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
-        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
-        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
-        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
-        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
-        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
-        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
-        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
-        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
-        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
-        {0,9,255}
-    };
-
-    static const code distfix[32] = {
-        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
-        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
-        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
-        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
-        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
-        {22,5,193},{64,5,0}
-    };
diff --git a/modules/juce_core/zip/zlib/inflate.c b/modules/juce_core/zip/zlib/inflate.c
deleted file mode 100644
index eef0d37..0000000
--- a/modules/juce_core/zip/zlib/inflate.c
+++ /dev/null
@@ -1,1339 +0,0 @@
-/* inflate.c -- zlib decompression
- * Copyright (C) 1995-2005 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- * Change history:
- *
- * 1.2.beta0    24 Nov 2002
- * - First version -- complete rewrite of inflate to simplify code, avoid
- *   creation of window when not needed, minimize use of window when it is
- *   needed, make inffast.c even faster, implement gzip decoding, and to
- *   improve code readability and style over the previous zlib inflate code
- *
- * 1.2.beta1    25 Nov 2002
- * - Use pointers for available input and output checking in inffast.c
- * - Remove input and output counters in inffast.c
- * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
- * - Remove unnecessary second byte pull from length extra in inffast.c
- * - Unroll direct copy to three copies per loop in inffast.c
- *
- * 1.2.beta2    4 Dec 2002
- * - Change external routine names to reduce potential conflicts
- * - Correct filename to inffixed.h for fixed tables in inflate.c
- * - Make hbuf[] unsigned char to match parameter type in inflate.c
- * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
- *   to avoid negation problem on Alphas (64 bit) in inflate.c
- *
- * 1.2.beta3    22 Dec 2002
- * - Add comments on state->bits assertion in inffast.c
- * - Add comments on op field in inftrees.h
- * - Fix bug in reuse of allocated window after inflateReset()
- * - Remove bit fields--back to byte structure for speed
- * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
- * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
- * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
- * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
- * - Use local copies of stream next and avail values, as well as local bit
- *   buffer and bit count in inflate()--for speed when inflate_fast() not used
- *
- * 1.2.beta4    1 Jan 2003
- * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
- * - Move a comment on output buffer sizes from inffast.c to inflate.c
- * - Add comments in inffast.c to introduce the inflate_fast() routine
- * - Rearrange window copies in inflate_fast() for speed and simplification
- * - Unroll last copy for window match in inflate_fast()
- * - Use local copies of window variables in inflate_fast() for speed
- * - Pull out common write == 0 case for speed in inflate_fast()
- * - Make op and len in inflate_fast() unsigned for consistency
- * - Add FAR to lcode and dcode declarations in inflate_fast()
- * - Simplified bad distance check in inflate_fast()
- * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
- *   source file infback.c to provide a call-back interface to inflate for
- *   programs like gzip and unzip -- uses window as output buffer to avoid
- *   window copying
- *
- * 1.2.beta5    1 Jan 2003
- * - Improved inflateBack() interface to allow the caller to provide initial
- *   input in strm.
- * - Fixed stored blocks bug in inflateBack()
- *
- * 1.2.beta6    4 Jan 2003
- * - Added comments in inffast.c on effectiveness of POSTINC
- * - Typecasting all around to reduce compiler warnings
- * - Changed loops from while (1) or do {} while (1) to for (;;), again to
- *   make compilers happy
- * - Changed type of window in inflateBackInit() to unsigned char *
- *
- * 1.2.beta7    27 Jan 2003
- * - Changed many types to unsigned or unsigned short to avoid warnings
- * - Added inflateCopy() function
- *
- * 1.2.0        9 Mar 2003
- * - Changed inflateBack() interface to provide separate opaque descriptors
- *   for the in() and out() functions
- * - Changed inflateBack() argument and in_func typedef to swap the length
- *   and buffer address return values for the input function
- * - Check next_in and next_out for Z_NULL on entry to inflate()
- *
- * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "inflate.h"
-#include "inffast.h"
-
-#ifdef MAKEFIXED
-#  ifndef BUILDFIXED
-#    define BUILDFIXED
-#  endif
-#endif
-
-/* function prototypes */
-local void fixedtables OF((struct inflate_state FAR *state));
-local int updatewindow OF((z_streamp strm, unsigned out));
-#ifdef BUILDFIXED
-   void makefixed OF((void));
-#endif
-local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
-                              unsigned len));
-
-int ZEXPORT inflateReset (z_streamp strm)
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    strm->total_in = strm->total_out = state->total = 0;
-    strm->msg = Z_NULL;
-    strm->adler = 1;        /* to support ill-conceived Java test suite */
-    state->mode = HEAD;
-    state->last = 0;
-    state->havedict = 0;
-    state->dmax = 32768U;
-    state->head = Z_NULL;
-    state->wsize = 0;
-    state->whave = 0;
-    state->write = 0;
-    state->hold = 0;
-    state->bits = 0;
-    state->lencode = state->distcode = state->next = state->codes;
-    Tracev((stderr, "inflate: reset\n"));
-    return Z_OK;
-}
-
-int ZEXPORT inflatePrime (z_streamp strm, int bits, int value)
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
-    value &= (1 << bits) - 1;
-    state->hold += value << state->bits;
-    state->bits += bits;
-    return Z_OK;
-}
-
-int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, const char *version, int stream_size)
-{
-    struct inflate_state FAR *state;
-
-    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
-        stream_size != (int)(sizeof(z_stream)))
-        return Z_VERSION_ERROR;
-    if (strm == Z_NULL) return Z_STREAM_ERROR;
-    strm->msg = Z_NULL;                 /* in case we return an error */
-    if (strm->zalloc == (alloc_func)0) {
-        strm->zalloc = zcalloc;
-        strm->opaque = (voidpf)0;
-    }
-    if (strm->zfree == (free_func)0) strm->zfree = zcfree;
-    state = (struct inflate_state FAR *)
-            ZALLOC(strm, 1, sizeof(struct inflate_state));
-    if (state == Z_NULL) return Z_MEM_ERROR;
-    Tracev((stderr, "inflate: allocated\n"));
-    strm->state = (struct internal_state FAR *)state;
-    if (windowBits < 0) {
-        state->wrap = 0;
-        windowBits = -windowBits;
-    }
-    else {
-        state->wrap = (windowBits >> 4) + 1;
-#ifdef GUNZIP
-        if (windowBits < 48) windowBits &= 15;
-#endif
-    }
-    if (windowBits < 8 || windowBits > 15) {
-        ZFREE(strm, state);
-        strm->state = Z_NULL;
-        return Z_STREAM_ERROR;
-    }
-    state->wbits = (unsigned)windowBits;
-    state->window = Z_NULL;
-    return inflateReset(strm);
-}
-
-int ZEXPORT inflateInit_ (z_streamp strm, const char *version, int stream_size)
-{
-    return inflateInit2_(strm, DEF_WBITS, version, stream_size);
-}
-
-/*
-   Return state with length and distance decoding tables and index sizes set to
-   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
-   If BUILDFIXED is defined, then instead this routine builds the tables the
-   first time it's called, and returns those tables the first time and
-   thereafter.  This reduces the size of the code by about 2K bytes, in
-   exchange for a little execution time.  However, BUILDFIXED should not be
-   used for threaded applications, since the rewriting of the tables and virgin
-   may not be thread-safe.
- */
-local void fixedtables (struct inflate_state FAR *state)
-{
-#ifdef BUILDFIXED
-    static int virgin = 1;
-    static code *lenfix, *distfix;
-    static code fixed[544];
-
-    /* build fixed huffman tables if first call (may not be thread safe) */
-    if (virgin) {
-        unsigned sym, bits;
-        static code *next;
-
-        /* literal/length table */
-        sym = 0;
-        while (sym < 144) state->lens[sym++] = 8;
-        while (sym < 256) state->lens[sym++] = 9;
-        while (sym < 280) state->lens[sym++] = 7;
-        while (sym < 288) state->lens[sym++] = 8;
-        next = fixed;
-        lenfix = next;
-        bits = 9;
-        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
-
-        /* distance table */
-        sym = 0;
-        while (sym < 32) state->lens[sym++] = 5;
-        distfix = next;
-        bits = 5;
-        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
-
-        /* do this just once */
-        virgin = 0;
-    }
-#else /* !BUILDFIXED */
-#   include "inffixed.h"
-#endif /* BUILDFIXED */
-    state->lencode = lenfix;
-    state->lenbits = 9;
-    state->distcode = distfix;
-    state->distbits = 5;
-}
-
-#ifdef MAKEFIXED
-#include <stdio.h>
-
-/*
-   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
-   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
-   those tables to stdout, which would be piped to inffixed.h.  A small program
-   can simply call makefixed to do this:
-
-    void makefixed(void);
-
-    int main(void)
-    {
-        makefixed();
-        return 0;
-    }
-
-   Then that can be linked with zlib built with MAKEFIXED defined and run:
-
-    a.out > inffixed.h
- */
-void makefixed()
-{
-    unsigned low, size;
-    struct inflate_state state;
-
-    fixedtables(&state);
-    puts("    /* inffixed.h -- table for decoding fixed codes");
-    puts("     * Generated automatically by makefixed().");
-    puts("     */");
-    puts("");
-    puts("    /* WARNING: this file should *not* be used by applications.");
-    puts("       It is part of the implementation of this library and is");
-    puts("       subject to change. Applications should only use zlib.h.");
-    puts("     */");
-    puts("");
-    size = 1U << 9;
-    printf("    static const code lenfix[%u] = {", size);
-    low = 0;
-    for (;;) {
-        if ((low % 7) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
-               state.lencode[low].val);
-        if (++low == size) break;
-        putchar(',');
-    }
-    puts("\n    };");
-    size = 1U << 5;
-    printf("\n    static const code distfix[%u] = {", size);
-    low = 0;
-    for (;;) {
-        if ((low % 6) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
-               state.distcode[low].val);
-        if (++low == size) break;
-        putchar(',');
-    }
-    puts("\n    };");
-}
-#endif /* MAKEFIXED */
-
-/*
-   Update the window with the last wsize (normally 32K) bytes written before
-   returning.  If window does not exist yet, create it.  This is only called
-   when a window is already in use, or when output has been written during this
-   inflate call, but the end of the deflate stream has not been reached yet.
-   It is also called to create a window for dictionary data when a dictionary
-   is loaded.
-
-   Providing output buffers larger than 32K to inflate() should provide a speed
-   advantage, since only the last 32K of output is copied to the sliding window
-   upon return from inflate(), and since all distances after the first 32K of
-   output will fall in the output data, making match copies simpler and faster.
-   The advantage may be dependent on the size of the processor's data caches.
- */
-local int updatewindow (z_streamp strm, unsigned out)
-{
-    struct inflate_state FAR *state;
-    unsigned copy, dist;
-
-    state = (struct inflate_state FAR *)strm->state;
-
-    /* if it hasn't been done already, allocate space for the window */
-    if (state->window == Z_NULL) {
-        state->window = (unsigned char FAR *)
-                        ZALLOC(strm, 1U << state->wbits,
-                               sizeof(unsigned char));
-        if (state->window == Z_NULL) return 1;
-    }
-
-    /* if window not in use yet, initialize */
-    if (state->wsize == 0) {
-        state->wsize = 1U << state->wbits;
-        state->write = 0;
-        state->whave = 0;
-    }
-
-    /* copy state->wsize or less output bytes into the circular window */
-    copy = out - strm->avail_out;
-    if (copy >= state->wsize) {
-        zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
-        state->write = 0;
-        state->whave = state->wsize;
-    }
-    else {
-        dist = state->wsize - state->write;
-        if (dist > copy) dist = copy;
-        zmemcpy(state->window + state->write, strm->next_out - copy, dist);
-        copy -= dist;
-        if (copy) {
-            zmemcpy(state->window, strm->next_out - copy, copy);
-            state->write = copy;
-            state->whave = state->wsize;
-        }
-        else {
-            state->write += dist;
-            if (state->write == state->wsize) state->write = 0;
-            if (state->whave < state->wsize) state->whave += dist;
-        }
-    }
-    return 0;
-}
-
-/* Macros for inflate(): */
-
-/* check function to use adler32() for zlib or crc32() for gzip */
-#ifdef GUNZIP
-#  define UPDATE(check, buf, len) \
-    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
-#else
-#  define UPDATE(check, buf, len) adler32(check, buf, len)
-#endif
-
-/* check macros for header crc */
-#ifdef GUNZIP
-#  define CRC2(check, word) \
-    do { \
-        hbuf[0] = (unsigned char)(word); \
-        hbuf[1] = (unsigned char)((word) >> 8); \
-        check = crc32(check, hbuf, 2); \
-    } while (0)
-
-#  define CRC4(check, word) \
-    do { \
-        hbuf[0] = (unsigned char)(word); \
-        hbuf[1] = (unsigned char)((word) >> 8); \
-        hbuf[2] = (unsigned char)((word) >> 16); \
-        hbuf[3] = (unsigned char)((word) >> 24); \
-        check = crc32(check, hbuf, 4); \
-    } while (0)
-#endif
-
-/* Load registers with state in inflate() for speed */
-#define LOAD() \
-    do { \
-        put = strm->next_out; \
-        left = strm->avail_out; \
-        next = strm->next_in; \
-        have = strm->avail_in; \
-        hold = state->hold; \
-        bits = state->bits; \
-    } while (0)
-
-/* Restore state from registers in inflate() */
-#define RESTORE() \
-    do { \
-        strm->next_out = put; \
-        strm->avail_out = left; \
-        strm->next_in = next; \
-        strm->avail_in = have; \
-        state->hold = hold; \
-        state->bits = bits; \
-    } while (0)
-
-/* Clear the input bit accumulator */
-#define INITBITS() \
-    do { \
-        hold = 0; \
-        bits = 0; \
-    } while (0)
-
-/* Get a byte of input into the bit accumulator, or return from inflate()
-   if there is no input available. */
-#define PULLBYTE() \
-    do { \
-        if (have == 0) goto inf_leave; \
-        have--; \
-        hold += (unsigned long)(*next++) << bits; \
-        bits += 8; \
-    } while (0)
-
-/* Assure that there are at least n bits in the bit accumulator.  If there is
-   not enough available input to do that, then return from inflate(). */
-#define NEEDBITS(n) \
-    do { \
-        while (bits < (unsigned)(n)) \
-            PULLBYTE(); \
-    } while (0)
-
-/* Return the low n bits of the bit accumulator (n < 16) */
-#define BITS(n) \
-    ((unsigned)hold & ((1U << (n)) - 1))
-
-/* Remove n bits from the bit accumulator */
-#define DROPBITS(n) \
-    do { \
-        hold >>= (n); \
-        bits -= (unsigned)(n); \
-    } while (0)
-
-/* Remove zero to seven bits as needed to go to a byte boundary */
-#define BYTEBITS() \
-    do { \
-        hold >>= bits & 7; \
-        bits -= bits & 7; \
-    } while (0)
-
-/* Reverse the bytes in a 32-bit value */
-#define REVERSE(q) \
-    ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
-     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
-
-/*
-   inflate() uses a state machine to process as much input data and generate as
-   much output data as possible before returning.  The state machine is
-   structured roughly as follows:
-
-    for (;;) switch (state) {
-    ...
-    case STATEn:
-        if (not enough input data or output space to make progress)
-            return;
-        ... make progress ...
-        state = STATEm;
-        break;
-    ...
-    }
-
-   so when inflate() is called again, the same case is attempted again, and
-   if the appropriate resources are provided, the machine proceeds to the
-   next state.  The NEEDBITS() macro is usually the way the state evaluates
-   whether it can proceed or should return.  NEEDBITS() does the return if
-   the requested bits are not available.  The typical use of the BITS macros
-   is:
-
-        NEEDBITS(n);
-        ... do something with BITS(n) ...
-        DROPBITS(n);
-
-   where NEEDBITS(n) either returns from inflate() if there isn't enough
-   input left to load n bits into the accumulator, or it continues.  BITS(n)
-   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
-   the low n bits off the accumulator.  INITBITS() clears the accumulator
-   and sets the number of available bits to zero.  BYTEBITS() discards just
-   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
-   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
-
-   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
-   if there is no input available.  The decoding of variable length codes uses
-   PULLBYTE() directly in order to pull just enough bytes to decode the next
-   code, and no more.
-
-   Some states loop until they get enough input, making sure that enough
-   state information is maintained to continue the loop where it left off
-   if NEEDBITS() returns in the loop.  For example, want, need, and keep
-   would all have to actually be part of the saved state in case NEEDBITS()
-   returns:
-
-    case STATEw:
-        while (want < need) {
-            NEEDBITS(n);
-            keep[want++] = BITS(n);
-            DROPBITS(n);
-        }
-        state = STATEx;
-    case STATEx:
-
-   As shown above, if the next state is also the next case, then the break
-   is omitted.
-
-   A state may also return if there is not enough output space available to
-   complete that state.  Those states are copying stored data, writing a
-   literal byte, and copying a matching string.
-
-   When returning, a "goto inf_leave" is used to update the total counters,
-   update the check value, and determine whether any progress has been made
-   during that inflate() call in order to return the proper return code.
-   Progress is defined as a change in either strm->avail_in or strm->avail_out.
-   When there is a window, goto inf_leave will update the window with the last
-   output written.  If a goto inf_leave occurs in the middle of decompression
-   and there is no window currently, goto inf_leave will create one and copy
-   output to the window for the next call of inflate().
-
-   In this implementation, the flush parameter of inflate() only affects the
-   return code (per zlib.h).  inflate() always writes as much as possible to
-   strm->next_out, given the space available and the provided input--the effect
-   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
-   the allocation of and copying into a sliding window until necessary, which
-   provides the effect documented in zlib.h for Z_FINISH when the entire input
-   stream available.  So the only thing the flush parameter actually does is:
-   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
-   will return Z_BUF_ERROR if it has not reached the end of the stream.
- */
-
-int ZEXPORT inflate (z_streamp strm, int flush)
-{
-    struct inflate_state FAR *state;
-    unsigned char FAR *next;    /* next input */
-    unsigned char FAR *put;     /* next output */
-    unsigned have, left;        /* available input and output */
-    unsigned long hold;         /* bit buffer */
-    unsigned bits;              /* bits in bit buffer */
-    unsigned in, out;           /* save starting available input and output */
-    unsigned copy;              /* number of stored or match bytes to copy */
-    unsigned char FAR *from;    /* where to copy match bytes from */
-    code thisx;                  /* current decoding table entry */
-    code last;                  /* parent table entry */
-    unsigned len;               /* length to copy for repeats, bits to drop */
-    int ret;                    /* return code */
-#ifdef GUNZIP
-    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
-#endif
-    static const unsigned short order[19] = /* permutation of code lengths */
-        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
-        (strm->next_in == Z_NULL && strm->avail_in != 0))
-        return Z_STREAM_ERROR;
-
-    state = (struct inflate_state FAR *)strm->state;
-    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
-    LOAD();
-    in = have;
-    out = left;
-    ret = Z_OK;
-    for (;;)
-        switch (state->mode) {
-        case HEAD:
-            if (state->wrap == 0) {
-                state->mode = TYPEDO;
-                break;
-            }
-            NEEDBITS(16);
-#ifdef GUNZIP
-            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
-                state->check = crc32(0L, Z_NULL, 0);
-                CRC2(state->check, hold);
-                INITBITS();
-                state->mode = FLAGS;
-                break;
-            }
-            state->flags = 0;           /* expect zlib header */
-            if (state->head != Z_NULL)
-                state->head->done = -1;
-            if (!(state->wrap & 1) ||   /* check if zlib header allowed */
-#else
-            if (
-#endif
-                ((BITS(8) << 8) + (hold >> 8)) % 31) {
-                strm->msg = (char *)"incorrect header check";
-                state->mode = BAD;
-                break;
-            }
-            if (BITS(4) != Z_DEFLATED) {
-                strm->msg = (char *)"unknown compression method";
-                state->mode = BAD;
-                break;
-            }
-            DROPBITS(4);
-            len = BITS(4) + 8;
-            if (len > state->wbits) {
-                strm->msg = (char *)"invalid window size";
-                state->mode = BAD;
-                break;
-            }
-            state->dmax = 1U << len;
-            Tracev((stderr, "inflate:   zlib header ok\n"));
-            strm->adler = state->check = adler32(0L, Z_NULL, 0);
-            state->mode = hold & 0x200 ? DICTID : TYPE;
-            INITBITS();
-            break;
-#ifdef GUNZIP
-        case FLAGS:
-            NEEDBITS(16);
-            state->flags = (int)(hold);
-            if ((state->flags & 0xff) != Z_DEFLATED) {
-                strm->msg = (char *)"unknown compression method";
-                state->mode = BAD;
-                break;
-            }
-            if (state->flags & 0xe000) {
-                strm->msg = (char *)"unknown header flags set";
-                state->mode = BAD;
-                break;
-            }
-            if (state->head != Z_NULL)
-                state->head->text = (int)((hold >> 8) & 1);
-            if (state->flags & 0x0200) CRC2(state->check, hold);
-            INITBITS();
-            state->mode = TIME;
-        case TIME:
-            NEEDBITS(32);
-            if (state->head != Z_NULL)
-                state->head->time = hold;
-            if (state->flags & 0x0200) CRC4(state->check, hold);
-            INITBITS();
-            state->mode = OS;
-        case OS:
-            NEEDBITS(16);
-            if (state->head != Z_NULL) {
-                state->head->xflags = (int)(hold & 0xff);
-                state->head->os = (int)(hold >> 8);
-            }
-            if (state->flags & 0x0200) CRC2(state->check, hold);
-            INITBITS();
-            state->mode = EXLEN;
-        case EXLEN:
-            if (state->flags & 0x0400) {
-                NEEDBITS(16);
-                state->length = (unsigned)(hold);
-                if (state->head != Z_NULL)
-                    state->head->extra_len = (unsigned)hold;
-                if (state->flags & 0x0200) CRC2(state->check, hold);
-                INITBITS();
-            }
-            else if (state->head != Z_NULL)
-                state->head->extra = Z_NULL;
-            state->mode = EXTRA;
-        case EXTRA:
-            if (state->flags & 0x0400) {
-                copy = state->length;
-                if (copy > have) copy = have;
-                if (copy) {
-                    if (state->head != Z_NULL &&
-                        state->head->extra != Z_NULL) {
-                        len = state->head->extra_len - state->length;
-                        zmemcpy(state->head->extra + len, next,
-                                len + copy > state->head->extra_max ?
-                                state->head->extra_max - len : copy);
-                    }
-                    if (state->flags & 0x0200)
-                        state->check = crc32(state->check, next, copy);
-                    have -= copy;
-                    next += copy;
-                    state->length -= copy;
-                }
-                if (state->length) goto inf_leave;
-            }
-            state->length = 0;
-            state->mode = NAME;
-        case NAME:
-            if (state->flags & 0x0800) {
-                if (have == 0) goto inf_leave;
-                copy = 0;
-                do {
-                    len = (unsigned)(next[copy++]);
-                    if (state->head != Z_NULL &&
-                            state->head->name != Z_NULL &&
-                            state->length < state->head->name_max)
-                        state->head->name[state->length++] = len;
-                } while (len && copy < have);
-                if (state->flags & 0x0200)
-                    state->check = crc32(state->check, next, copy);
-                have -= copy;
-                next += copy;
-                if (len) goto inf_leave;
-            }
-            else if (state->head != Z_NULL)
-                state->head->name = Z_NULL;
-            state->length = 0;
-            state->mode = COMMENT;
-        case COMMENT:
-            if (state->flags & 0x1000) {
-                if (have == 0) goto inf_leave;
-                copy = 0;
-                do {
-                    len = (unsigned)(next[copy++]);
-                    if (state->head != Z_NULL &&
-                            state->head->comment != Z_NULL &&
-                            state->length < state->head->comm_max)
-                        state->head->comment[state->length++] = len;
-                } while (len && copy < have);
-                if (state->flags & 0x0200)
-                    state->check = crc32(state->check, next, copy);
-                have -= copy;
-                next += copy;
-                if (len) goto inf_leave;
-            }
-            else if (state->head != Z_NULL)
-                state->head->comment = Z_NULL;
-            state->mode = HCRC;
-        case HCRC:
-            if (state->flags & 0x0200) {
-                NEEDBITS(16);
-                if (hold != (state->check & 0xffff)) {
-                    strm->msg = (char *)"header crc mismatch";
-                    state->mode = BAD;
-                    break;
-                }
-                INITBITS();
-            }
-            if (state->head != Z_NULL) {
-                state->head->hcrc = (int)((state->flags >> 9) & 1);
-                state->head->done = 1;
-            }
-            strm->adler = state->check = crc32(0L, Z_NULL, 0);
-            state->mode = TYPE;
-            break;
-#endif
-        case DICTID:
-            NEEDBITS(32);
-            strm->adler = state->check = REVERSE(hold);
-            INITBITS();
-            state->mode = DICT;
-        case DICT:
-            if (state->havedict == 0) {
-                RESTORE();
-                return Z_NEED_DICT;
-            }
-            strm->adler = state->check = adler32(0L, Z_NULL, 0);
-            state->mode = TYPE;
-        case TYPE:
-            if (flush == Z_BLOCK) goto inf_leave;
-        case TYPEDO:
-            if (state->last) {
-                BYTEBITS();
-                state->mode = CHECK;
-                break;
-            }
-            NEEDBITS(3);
-            state->last = BITS(1);
-            DROPBITS(1);
-            switch (BITS(2)) {
-            case 0:                             /* stored block */
-                Tracev((stderr, "inflate:     stored block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = STORED;
-                break;
-            case 1:                             /* fixed block */
-                fixedtables(state);
-                Tracev((stderr, "inflate:     fixed codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = LEN;              /* decode codes */
-                break;
-            case 2:                             /* dynamic block */
-                Tracev((stderr, "inflate:     dynamic codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = TABLE;
-                break;
-            case 3:
-                strm->msg = (char *)"invalid block type";
-                state->mode = BAD;
-            }
-            DROPBITS(2);
-            break;
-        case STORED:
-            BYTEBITS();                         /* go to byte boundary */
-            NEEDBITS(32);
-            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
-                strm->msg = (char *)"invalid stored block lengths";
-                state->mode = BAD;
-                break;
-            }
-            state->length = (unsigned)hold & 0xffff;
-            Tracev((stderr, "inflate:       stored length %u\n",
-                    state->length));
-            INITBITS();
-            state->mode = COPY;
-        case COPY:
-            copy = state->length;
-            if (copy) {
-                if (copy > have) copy = have;
-                if (copy > left) copy = left;
-                if (copy == 0) goto inf_leave;
-                zmemcpy(put, next, copy);
-                have -= copy;
-                next += copy;
-                left -= copy;
-                put += copy;
-                state->length -= copy;
-                break;
-            }
-            Tracev((stderr, "inflate:       stored end\n"));
-            state->mode = TYPE;
-            break;
-        case TABLE:
-            NEEDBITS(14);
-            state->nlen = BITS(5) + 257;
-            DROPBITS(5);
-            state->ndist = BITS(5) + 1;
-            DROPBITS(5);
-            state->ncode = BITS(4) + 4;
-            DROPBITS(4);
-#ifndef PKZIP_BUG_WORKAROUND
-            if (state->nlen > 286 || state->ndist > 30) {
-                strm->msg = (char *)"too many length or distance symbols";
-                state->mode = BAD;
-                break;
-            }
-#endif
-            Tracev((stderr, "inflate:       table sizes ok\n"));
-            state->have = 0;
-            state->mode = LENLENS;
-        case LENLENS:
-            while (state->have < state->ncode) {
-                NEEDBITS(3);
-                state->lens[order[state->have++]] = (unsigned short)BITS(3);
-                DROPBITS(3);
-            }
-            while (state->have < 19)
-                state->lens[order[state->have++]] = 0;
-            state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
-            state->lenbits = 7;
-            ret = inflate_table(CODES, state->lens, 19, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid code lengths set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       code lengths ok\n"));
-            state->have = 0;
-            state->mode = CODELENS;
-        case CODELENS:
-            while (state->have < state->nlen + state->ndist) {
-                for (;;) {
-                    thisx = state->lencode[BITS(state->lenbits)];
-                    if ((unsigned)(thisx.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                if (thisx.val < 16) {
-                    NEEDBITS(thisx.bits);
-                    DROPBITS(thisx.bits);
-                    state->lens[state->have++] = thisx.val;
-                }
-                else {
-                    if (thisx.val == 16) {
-                        NEEDBITS(thisx.bits + 2);
-                        DROPBITS(thisx.bits);
-                        if (state->have == 0) {
-                            strm->msg = (char *)"invalid bit length repeat";
-                            state->mode = BAD;
-                            break;
-                        }
-                        len = state->lens[state->have - 1];
-                        copy = 3 + BITS(2);
-                        DROPBITS(2);
-                    }
-                    else if (thisx.val == 17) {
-                        NEEDBITS(thisx.bits + 3);
-                        DROPBITS(thisx.bits);
-                        len = 0;
-                        copy = 3 + BITS(3);
-                        DROPBITS(3);
-                    }
-                    else {
-                        NEEDBITS(thisx.bits + 7);
-                        DROPBITS(thisx.bits);
-                        len = 0;
-                        copy = 11 + BITS(7);
-                        DROPBITS(7);
-                    }
-                    if (state->have + copy > state->nlen + state->ndist) {
-                        strm->msg = (char *)"invalid bit length repeat";
-                        state->mode = BAD;
-                        break;
-                    }
-                    while (copy--)
-                        state->lens[state->have++] = (unsigned short)len;
-                }
-            }
-
-            /* handle error breaks in while */
-            if (state->mode == BAD) break;
-
-            /* build code tables */
-            state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
-            state->lenbits = 9;
-            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid literal/lengths set";
-                state->mode = BAD;
-                break;
-            }
-            state->distcode = (code const FAR *)(state->next);
-            state->distbits = 6;
-            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
-                            &(state->next), &(state->distbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid distances set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       codes ok\n"));
-            state->mode = LEN;
-        case LEN:
-            if (have >= 6 && left >= 258) {
-                RESTORE();
-                inflate_fast(strm, out);
-                LOAD();
-                break;
-            }
-            for (;;) {
-                thisx = state->lencode[BITS(state->lenbits)];
-                if ((unsigned)(thisx.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if (thisx.op && (thisx.op & 0xf0) == 0) {
-                last = thisx;
-                for (;;) {
-                    thisx = state->lencode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + thisx.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-            }
-            DROPBITS(thisx.bits);
-            state->length = (unsigned)thisx.val;
-            if ((int)(thisx.op) == 0) {
-                Tracevv((stderr, thisx.val >= 0x20 && thisx.val < 0x7f ?
-                        "inflate:         literal '%c'\n" :
-                        "inflate:         literal 0x%02x\n", thisx.val));
-                state->mode = LIT;
-                break;
-            }
-            if (thisx.op & 32) {
-                Tracevv((stderr, "inflate:         end of block\n"));
-                state->mode = TYPE;
-                break;
-            }
-            if (thisx.op & 64) {
-                strm->msg = (char *)"invalid literal/length code";
-                state->mode = BAD;
-                break;
-            }
-            state->extra = (unsigned)(thisx.op) & 15;
-            state->mode = LENEXT;
-        case LENEXT:
-            if (state->extra) {
-                NEEDBITS(state->extra);
-                state->length += BITS(state->extra);
-                DROPBITS(state->extra);
-            }
-            Tracevv((stderr, "inflate:         length %u\n", state->length));
-            state->mode = DIST;
-        case DIST:
-            for (;;) {
-                thisx = state->distcode[BITS(state->distbits)];
-                if ((unsigned)(thisx.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if ((thisx.op & 0xf0) == 0) {
-                last = thisx;
-                for (;;) {
-                    thisx = state->distcode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + thisx.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-            }
-            DROPBITS(thisx.bits);
-            if (thisx.op & 64) {
-                strm->msg = (char *)"invalid distance code";
-                state->mode = BAD;
-                break;
-            }
-            state->offset = (unsigned)thisx.val;
-            state->extra = (unsigned)(thisx.op) & 15;
-            state->mode = DISTEXT;
-        case DISTEXT:
-            if (state->extra) {
-                NEEDBITS(state->extra);
-                state->offset += BITS(state->extra);
-                DROPBITS(state->extra);
-            }
-#ifdef INFLATE_STRICT
-            if (state->offset > state->dmax) {
-                strm->msg = (char *)"invalid distance too far back";
-                state->mode = BAD;
-                break;
-            }
-#endif
-            if (state->offset > state->whave + out - left) {
-                strm->msg = (char *)"invalid distance too far back";
-                state->mode = BAD;
-                break;
-            }
-            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
-            state->mode = MATCH;
-        case MATCH:
-            if (left == 0) goto inf_leave;
-            copy = out - left;
-            if (state->offset > copy) {         /* copy from window */
-                copy = state->offset - copy;
-                if (copy > state->write) {
-                    copy -= state->write;
-                    from = state->window + (state->wsize - copy);
-                }
-                else
-                    from = state->window + (state->write - copy);
-                if (copy > state->length) copy = state->length;
-            }
-            else {                              /* copy from output */
-                from = put - state->offset;
-                copy = state->length;
-            }
-            if (copy > left) copy = left;
-            left -= copy;
-            state->length -= copy;
-            do {
-                *put++ = *from++;
-            } while (--copy);
-            if (state->length == 0) state->mode = LEN;
-            break;
-        case LIT:
-            if (left == 0) goto inf_leave;
-            *put++ = (unsigned char)(state->length);
-            left--;
-            state->mode = LEN;
-            break;
-        case CHECK:
-            if (state->wrap) {
-                NEEDBITS(32);
-                out -= left;
-                strm->total_out += out;
-                state->total += out;
-                if (out)
-                    strm->adler = state->check =
-                        UPDATE(state->check, put - out, out);
-                out = left;
-                if ((
-#ifdef GUNZIP
-                     state->flags ? hold :
-#endif
-                     REVERSE(hold)) != state->check) {
-                    strm->msg = (char *)"incorrect data check";
-                    state->mode = BAD;
-                    break;
-                }
-                INITBITS();
-                Tracev((stderr, "inflate:   check matches trailer\n"));
-            }
-#ifdef GUNZIP
-            state->mode = LENGTH;
-        case LENGTH:
-            if (state->wrap && state->flags) {
-                NEEDBITS(32);
-                if (hold != (state->total & 0xffffffffUL)) {
-                    strm->msg = (char *)"incorrect length check";
-                    state->mode = BAD;
-                    break;
-                }
-                INITBITS();
-                Tracev((stderr, "inflate:   length matches trailer\n"));
-            }
-#endif
-            state->mode = DONE;
-        case DONE:
-            ret = Z_STREAM_END;
-            goto inf_leave;
-        case BAD:
-            ret = Z_DATA_ERROR;
-            goto inf_leave;
-        case MEM:
-            return Z_MEM_ERROR;
-        case SYNC:
-        default:
-            return Z_STREAM_ERROR;
-        }
-
-    /*
-       Return from inflate(), updating the total counts and the check value.
-       If there was no progress during the inflate() call, return a buffer
-       error.  Call updatewindow() to create and/or update the window state.
-       Note: a memory error from inflate() is non-recoverable.
-     */
-  inf_leave:
-    RESTORE();
-    if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
-        if (updatewindow(strm, out)) {
-            state->mode = MEM;
-            return Z_MEM_ERROR;
-        }
-    in -= strm->avail_in;
-    out -= strm->avail_out;
-    strm->total_in += in;
-    strm->total_out += out;
-    state->total += out;
-    if (state->wrap && out)
-        strm->adler = state->check =
-            UPDATE(state->check, strm->next_out - out, out);
-    strm->data_type = state->bits + (state->last ? 64 : 0) +
-                      (state->mode == TYPE ? 128 : 0);
-    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
-        ret = Z_BUF_ERROR;
-    return ret;
-}
-
-int ZEXPORT inflateEnd (z_streamp strm)
-{
-    struct inflate_state FAR *state;
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
-        return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (state->window != Z_NULL) ZFREE(strm, state->window);
-    ZFREE(strm, strm->state);
-    strm->state = Z_NULL;
-    Tracev((stderr, "inflate: end\n"));
-    return Z_OK;
-}
-
-int ZEXPORT inflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt dictLength)
-{
-    struct inflate_state FAR *state;
-    unsigned long id_;
-
-    /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (state->wrap != 0 && state->mode != DICT)
-        return Z_STREAM_ERROR;
-
-    /* check for correct dictionary id */
-    if (state->mode == DICT) {
-        id_ = adler32(0L, Z_NULL, 0);
-        id_ = adler32(id_, dictionary, dictLength);
-        if (id_ != state->check)
-            return Z_DATA_ERROR;
-    }
-
-    /* copy dictionary to window */
-    if (updatewindow(strm, strm->avail_out)) {
-        state->mode = MEM;
-        return Z_MEM_ERROR;
-    }
-    if (dictLength > state->wsize) {
-        zmemcpy(state->window, dictionary + dictLength - state->wsize,
-                state->wsize);
-        state->whave = state->wsize;
-    }
-    else {
-        zmemcpy(state->window + state->wsize - dictLength, dictionary,
-                dictLength);
-        state->whave = dictLength;
-    }
-    state->havedict = 1;
-    Tracev((stderr, "inflate:   dictionary set\n"));
-    return Z_OK;
-}
-
-int ZEXPORT inflateGetHeader (z_streamp strm, gz_headerp head)
-{
-    struct inflate_state FAR *state;
-
-    /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
-
-    /* save header structure */
-    state->head = head;
-    head->done = 0;
-    return Z_OK;
-}
-
-/*
-   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
-   or when out of input.  When called, *have is the number of pattern bytes
-   found in order so far, in 0..3.  On return *have is updated to the new
-   state.  If on return *have equals four, then the pattern was found and the
-   return value is how many bytes were read including the last byte of the
-   pattern.  If *have is less than four, then the pattern has not been found
-   yet and the return value is len.  In the latter case, syncsearch() can be
-   called again with more data and the *have state.  *have is initialized to
-   zero for the first call.
- */
-local unsigned syncsearch (unsigned FAR *have, unsigned char FAR *buf, unsigned len)
-{
-    unsigned got;
-    unsigned next;
-
-    got = *have;
-    next = 0;
-    while (next < len && got < 4) {
-        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
-            got++;
-        else if (buf[next])
-            got = 0;
-        else
-            got = 4 - got;
-        next++;
-    }
-    *have = got;
-    return next;
-}
-
-int ZEXPORT inflateSync (z_streamp strm)
-{
-    unsigned len;               /* number of bytes to look at or looked at */
-    unsigned long in, out;      /* temporary to save total_in and total_out */
-    unsigned char buf[4];       /* to restore bit buffer to byte string */
-    struct inflate_state FAR *state;
-
-    /* check parameters */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
-
-    /* if first time, start search in bit buffer */
-    if (state->mode != SYNC) {
-        state->mode = SYNC;
-        state->hold <<= state->bits & 7;
-        state->bits -= state->bits & 7;
-        len = 0;
-        while (state->bits >= 8) {
-            buf[len++] = (unsigned char)(state->hold);
-            state->hold >>= 8;
-            state->bits -= 8;
-        }
-        state->have = 0;
-        syncsearch(&(state->have), buf, len);
-    }
-
-    /* search available input */
-    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
-    strm->avail_in -= len;
-    strm->next_in += len;
-    strm->total_in += len;
-
-    /* return no joy or set up to restart inflate() on a new block */
-    if (state->have != 4) return Z_DATA_ERROR;
-    in = strm->total_in;  out = strm->total_out;
-    inflateReset(strm);
-    strm->total_in = in;  strm->total_out = out;
-    state->mode = TYPE;
-    return Z_OK;
-}
-
-/*
-   Returns true if inflate is currently at the end of a block generated by
-   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
-   implementation to provide an additional safety check. PPP uses
-   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
-   block. When decompressing, PPP checks that at the end of input packet,
-   inflate is waiting for these length bytes.
- */
-int ZEXPORT inflateSyncPoint (z_streamp strm)
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    return state->mode == STORED && state->bits == 0;
-}
-
-int ZEXPORT inflateCopy(z_streamp dest, z_streamp source)
-{
-    struct inflate_state FAR *state;
-    struct inflate_state FAR *copy;
-    unsigned char FAR *window;
-    unsigned wsize;
-
-    /* check input */
-    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
-        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
-        return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)source->state;
-
-    /* allocate space */
-    copy = (struct inflate_state FAR *)
-           ZALLOC(source, 1, sizeof(struct inflate_state));
-    if (copy == Z_NULL) return Z_MEM_ERROR;
-    window = Z_NULL;
-    if (state->window != Z_NULL) {
-        window = (unsigned char FAR *)
-                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
-        if (window == Z_NULL) {
-            ZFREE(source, copy);
-            return Z_MEM_ERROR;
-        }
-    }
-
-    /* copy state */
-    zmemcpy(dest, source, sizeof(z_stream));
-    zmemcpy(copy, state, sizeof(struct inflate_state));
-    if (state->lencode >= state->codes &&
-        state->lencode <= state->codes + ENOUGH - 1) {
-        copy->lencode = copy->codes + (state->lencode - state->codes);
-        copy->distcode = copy->codes + (state->distcode - state->codes);
-    }
-    copy->next = copy->codes + (state->next - state->codes);
-    if (window != Z_NULL) {
-        wsize = 1U << state->wbits;
-        zmemcpy(window, state->window, wsize);
-    }
-    copy->window = window;
-    dest->state = (struct internal_state FAR *)copy;
-    return Z_OK;
-}
diff --git a/modules/juce_core/zip/zlib/inflate.h b/modules/juce_core/zip/zlib/inflate.h
deleted file mode 100644
index 31b1279..0000000
--- a/modules/juce_core/zip/zlib/inflate.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2004 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFLATE_H_
-#define _INFLATE_H_
-
-/* define NO_GZIP when compiling if you want to disable gzip header and
-   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in
-   the crc code when it is not needed.  For shared libraries, gzip decoding
-   should be left enabled. */
-#ifndef NO_GZIP
-#  define GUNZIP
-#endif
-
-/* Possible inflate modes between inflate() calls */
-typedef enum {
-    HEAD,       /* i: waiting for magic header */
-    FLAGS,      /* i: waiting for method and flags (gzip) */
-    TIME,       /* i: waiting for modification time (gzip) */
-    OS,         /* i: waiting for extra flags and operating system (gzip) */
-    EXLEN,      /* i: waiting for extra length (gzip) */
-    EXTRA,      /* i: waiting for extra bytes (gzip) */
-    NAME,       /* i: waiting for end of file name (gzip) */
-    COMMENT,    /* i: waiting for end of comment (gzip) */
-    HCRC,       /* i: waiting for header crc (gzip) */
-    DICTID,     /* i: waiting for dictionary check value */
-    DICT,       /* waiting for inflateSetDictionary() call */
-        TYPE,       /* i: waiting for type bits, including last-flag bit */
-        TYPEDO,     /* i: same, but skip check to exit inflate on new block */
-        STORED,     /* i: waiting for stored size (length and complement) */
-        COPY,       /* i/o: waiting for input or output to copy stored block */
-        TABLE,      /* i: waiting for dynamic block table lengths */
-        LENLENS,    /* i: waiting for code length code lengths */
-        CODELENS,   /* i: waiting for length/lit and distance code lengths */
-            LEN,        /* i: waiting for length/lit code */
-            LENEXT,     /* i: waiting for length extra bits */
-            DIST,       /* i: waiting for distance code */
-            DISTEXT,    /* i: waiting for distance extra bits */
-            MATCH,      /* o: waiting for output space to copy string */
-            LIT,        /* o: waiting for output space to write literal */
-    CHECK,      /* i: waiting for 32-bit check value */
-    LENGTH,     /* i: waiting for 32-bit length (gzip) */
-    DONE,       /* finished check, done -- remain here until reset */
-    BAD,        /* got a data error -- remain here until reset */
-    MEM,        /* got an inflate() memory error -- remain here until reset */
-    SYNC        /* looking for synchronization bytes to restart inflate() */
-} inflate_mode;
-
-/*
-    State transitions between above modes -
-
-    (most modes can go to the BAD or MEM mode -- not shown for clarity)
-
-    Process header:
-        HEAD -> (gzip) or (zlib)
-        (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME
-        NAME -> COMMENT -> HCRC -> TYPE
-        (zlib) -> DICTID or TYPE
-        DICTID -> DICT -> TYPE
-    Read deflate blocks:
-            TYPE -> STORED or TABLE or LEN or CHECK
-            STORED -> COPY -> TYPE
-            TABLE -> LENLENS -> CODELENS -> LEN
-    Read deflate codes:
-                LEN -> LENEXT or LIT or TYPE
-                LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
-                LIT -> LEN
-    Process trailer:
-        CHECK -> LENGTH -> DONE
- */
-
-/* state maintained between inflate() calls.  Approximately 7K bytes. */
-struct inflate_state {
-    inflate_mode mode;          /* current inflate mode */
-    int last;                   /* true if processing last block */
-    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */
-    int havedict;               /* true if dictionary provided */
-    int flags;                  /* gzip header method and flags (0 if zlib) */
-    unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
-    unsigned long check;        /* protected copy of check value */
-    unsigned long total;        /* protected copy of output count */
-    gz_headerp head;            /* where to save gzip header information */
-        /* sliding window */
-    unsigned wbits;             /* log base 2 of requested window size */
-    unsigned wsize;             /* window size or zero if not using window */
-    unsigned whave;             /* valid bytes in the window */
-    unsigned write;             /* window write index */
-    unsigned char FAR *window;  /* allocated sliding window, if needed */
-        /* bit accumulator */
-    unsigned long hold;         /* input bit accumulator */
-    unsigned bits;              /* number of bits in "in" */
-        /* for string and stored block copying */
-    unsigned length;            /* literal or length of data to copy */
-    unsigned offset;            /* distance back to copy string from */
-        /* for table and code decoding */
-    unsigned extra;             /* extra bits needed */
-        /* fixed and dynamic code tables */
-    code const FAR *lencode;    /* starting table for length/literal codes */
-    code const FAR *distcode;   /* starting table for distance codes */
-    unsigned lenbits;           /* index bits for lencode */
-    unsigned distbits;          /* index bits for distcode */
-        /* dynamic table building */
-    unsigned ncode;             /* number of code length code lengths */
-    unsigned nlen;              /* number of length code lengths */
-    unsigned ndist;             /* number of distance code lengths */
-    unsigned have;              /* number of code lengths in lens[] */
-    code FAR *next;             /* next available space in codes[] */
-    unsigned short lens[320];   /* temporary storage for code lengths */
-    unsigned short work[288];   /* work area for code table building */
-    code codes[ENOUGH];         /* space for code tables */
-};
-
-
-#endif
diff --git a/modules/juce_core/zip/zlib/inftrees.c b/modules/juce_core/zip/zlib/inftrees.c
deleted file mode 100644
index dfc0aa7..0000000
--- a/modules/juce_core/zip/zlib/inftrees.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2005 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-
-#define MAXBITS 15
-
-const char inflate_copyright[] =
-   " inflate 1.2.3 Copyright 1995-2005 Mark Adler ";
-/*
-  If you use the zlib library in a product, an acknowledgment is welcome
-  in the documentation of your product. If for some reason you cannot
-  include such an acknowledgment, I would appreciate that you keep this
-  copyright string in the executable of your product.
- */
-
-/*
-   Build a set of tables to decode the provided canonical Huffman code.
-   The code lengths are lens[0..codes-1].  The result starts at *table,
-   whose indices are 0..2^bits-1.  work is a writable array of at least
-   lens shorts, which is used as a work area.  type is the type of code
-   to be generated, CODES, LENS, or DISTS.  On return, zero is success,
-   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
-   on return points to the next available entry's address.  bits is the
-   requested root table index bits, and on return it is the actual root
-   table index bits.  It will differ if the request is greater than the
-   longest code or if it is less than the shortest code.
- */
-int inflate_table (codetype type,
-                   unsigned short FAR *lens,
-                   unsigned codes,
-                   code FAR * FAR *table,
-                   unsigned FAR *bits,
-                   unsigned short FAR *work)
-{
-    unsigned len;               /* a code's length in bits */
-    unsigned sym;               /* index of code symbols */
-    unsigned min, max;          /* minimum and maximum code lengths */
-    unsigned root;              /* number of index bits for root table */
-    unsigned curr;              /* number of index bits for current table */
-    unsigned drop;              /* code bits to drop for sub-table */
-    int left;                   /* number of prefix codes available */
-    unsigned used;              /* code entries in table used */
-    unsigned huff;              /* Huffman code */
-    unsigned incr;              /* for incrementing code, index */
-    unsigned fill;              /* index for replicating entries */
-    unsigned low;               /* low bits for current root entry */
-    unsigned mask;              /* mask for low root bits */
-    code thisx;                  /* table entry for duplication */
-    code FAR *next;             /* next available space in table */
-    const unsigned short FAR *base;     /* base value table to use */
-    const unsigned short FAR *extra;    /* extra bits table to use */
-    int end;                    /* use base and extra for symbol > end */
-    unsigned short count[MAXBITS+1];    /* number of codes of each length */
-    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
-    static const unsigned short lbase[31] = { /* Length codes 257..285 base */
-        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
-        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
-    static const unsigned short lext[31] = { /* Length codes 257..285 extra */
-        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 201, 196};
-    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
-        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
-        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
-        8193, 12289, 16385, 24577, 0, 0};
-    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
-        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
-        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
-        28, 28, 29, 29, 64, 64};
-
-    /*
-       Process a set of code lengths to create a canonical Huffman code.  The
-       code lengths are lens[0..codes-1].  Each length corresponds to the
-       symbols 0..codes-1.  The Huffman code is generated by first sorting the
-       symbols by length from short to long, and retaining the symbol order
-       for codes with equal lengths.  Then the code starts with all zero bits
-       for the first code of the shortest length, and the codes are integer
-       increments for the same length, and zeros are appended as the length
-       increases.  For the deflate format, these bits are stored backwards
-       from their more natural integer increment ordering, and so when the
-       decoding tables are built in the large loop below, the integer codes
-       are incremented backwards.
-
-       This routine assumes, but does not check, that all of the entries in
-       lens[] are in the range 0..MAXBITS.  The caller must assure this.
-       1..MAXBITS is interpreted as that code length.  zero means that that
-       symbol does not occur in this code.
-
-       The codes are sorted by computing a count of codes for each length,
-       creating from that a table of starting indices for each length in the
-       sorted table, and then entering the symbols in order in the sorted
-       table.  The sorted table is work[], with that space being provided by
-       the caller.
-
-       The length counts are used for other purposes as well, i.e. finding
-       the minimum and maximum length codes, determining if there are any
-       codes at all, checking for a valid set of lengths, and looking ahead
-       at length counts to determine sub-table sizes when building the
-       decoding tables.
-     */
-
-    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
-    for (len = 0; len <= MAXBITS; len++)
-        count[len] = 0;
-    for (sym = 0; sym < codes; sym++)
-        count[lens[sym]]++;
-
-    /* bound code lengths, force root to be within code lengths */
-    root = *bits;
-    for (max = MAXBITS; max >= 1; max--)
-        if (count[max] != 0) break;
-    if (root > max) root = max;
-    if (max == 0) {                     /* no symbols to code at all */
-        thisx.op = (unsigned char)64;    /* invalid code marker */
-        thisx.bits = (unsigned char)1;
-        thisx.val = (unsigned short)0;
-        *(*table)++ = thisx;             /* make a table to force an error */
-        *(*table)++ = thisx;
-        *bits = 1;
-        return 0;     /* no symbols, but wait for decoding to report error */
-    }
-    for (min = 1; min <= MAXBITS; min++)
-        if (count[min] != 0) break;
-    if (root < min) root = min;
-
-    /* check for an over-subscribed or incomplete set of lengths */
-    left = 1;
-    for (len = 1; len <= MAXBITS; len++) {
-        left <<= 1;
-        left -= count[len];
-        if (left < 0) return -1;        /* over-subscribed */
-    }
-    if (left > 0 && (type == CODES || max != 1))
-        return -1;                      /* incomplete set */
-
-    /* generate offsets into symbol table for each length for sorting */
-    offs[1] = 0;
-    for (len = 1; len < MAXBITS; len++)
-        offs[len + 1] = offs[len] + count[len];
-
-    /* sort symbols by length, by symbol order within each length */
-    for (sym = 0; sym < codes; sym++)
-        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
-
-    /*
-       Create and fill in decoding tables.  In this loop, the table being
-       filled is at next and has curr index bits.  The code being used is huff
-       with length len.  That code is converted to an index by dropping drop
-       bits off of the bottom.  For codes where len is less than drop + curr,
-       those top drop + curr - len bits are incremented through all values to
-       fill the table with replicated entries.
-
-       root is the number of index bits for the root table.  When len exceeds
-       root, sub-tables are created pointed to by the root entry with an index
-       of the low root bits of huff.  This is saved in low to check for when a
-       new sub-table should be started.  drop is zero when the root table is
-       being filled, and drop is root when sub-tables are being filled.
-
-       When a new sub-table is needed, it is necessary to look ahead in the
-       code lengths to determine what size sub-table is needed.  The length
-       counts are used for this, and so count[] is decremented as codes are
-       entered in the tables.
-
-       used keeps track of how many table entries have been allocated from the
-       provided *table space.  It is checked when a LENS table is being made
-       against the space in *table, ENOUGH, minus the maximum space needed by
-       the worst case distance code, MAXD.  This should never happen, but the
-       sufficiency of ENOUGH has not been proven exhaustively, hence the check.
-       This assumes that when type == LENS, bits == 9.
-
-       sym increments through all symbols, and the loop terminates when
-       all codes of length max, i.e. all codes, have been processed.  This
-       routine permits incomplete codes, so another loop after this one fills
-       in the rest of the decoding tables with invalid code markers.
-     */
-
-    /* set up for code type */
-    switch (type) {
-    case CODES:
-        base = extra = work;    /* dummy value--not used */
-        end = 19;
-        break;
-    case LENS:
-        base = lbase;
-        base -= 257;
-        extra = lext;
-        extra -= 257;
-        end = 256;
-        break;
-    default:            /* DISTS */
-        base = dbase;
-        extra = dext;
-        end = -1;
-    }
-
-    /* initialize state for loop */
-    huff = 0;                   /* starting code */
-    sym = 0;                    /* starting code symbol */
-    len = min;                  /* starting code length */
-    next = *table;              /* current table to fill in */
-    curr = root;                /* current table index bits */
-    drop = 0;                   /* current bits to drop from code for index */
-    low = (unsigned)(-1);       /* trigger new sub-table when len > root */
-    used = 1U << root;          /* use root table entries */
-    mask = used - 1;            /* mask for comparing low */
-
-    /* check available table space */
-    if (type == LENS && used >= ENOUGH - MAXD)
-        return 1;
-
-    /* process all codes and make table entries */
-    for (;;) {
-        /* create table entry */
-        thisx.bits = (unsigned char)(len - drop);
-        if ((int)(work[sym]) < end) {
-            thisx.op = (unsigned char)0;
-            thisx.val = work[sym];
-        }
-        else if ((int)(work[sym]) > end) {
-            thisx.op = (unsigned char)(extra[work[sym]]);
-            thisx.val = base[work[sym]];
-        }
-        else {
-            thisx.op = (unsigned char)(32 + 64);         /* end of block */
-            thisx.val = 0;
-        }
-
-        /* replicate for those indices with low len bits equal to huff */
-        incr = 1U << (len - drop);
-        fill = 1U << curr;
-        min = fill;                 /* save offset to next table */
-        do {
-            fill -= incr;
-            next[(huff >> drop) + fill] = thisx;
-        } while (fill != 0);
-
-        /* backwards increment the len-bit code huff */
-        incr = 1U << (len - 1);
-        while (huff & incr)
-            incr >>= 1;
-        if (incr != 0) {
-            huff &= incr - 1;
-            huff += incr;
-        }
-        else
-            huff = 0;
-
-        /* go to next symbol, update count, len */
-        sym++;
-        if (--(count[len]) == 0) {
-            if (len == max) break;
-            len = lens[work[sym]];
-        }
-
-        /* create new sub-table if needed */
-        if (len > root && (huff & mask) != low) {
-            /* if first time, transition to sub-tables */
-            if (drop == 0)
-                drop = root;
-
-            /* increment past last table */
-            next += min;            /* here min is 1 << curr */
-
-            /* determine length of next table */
-            curr = len - drop;
-            left = (int)(1 << curr);
-            while (curr + drop < max) {
-                left -= count[curr + drop];
-                if (left <= 0) break;
-                curr++;
-                left <<= 1;
-            }
-
-            /* check for enough space */
-            used += 1U << curr;
-            if (type == LENS && used >= ENOUGH - MAXD)
-                return 1;
-
-            /* point entry in root table to sub-table */
-            low = huff & mask;
-            (*table)[low].op = (unsigned char)curr;
-            (*table)[low].bits = (unsigned char)root;
-            (*table)[low].val = (unsigned short)(next - *table);
-        }
-    }
-
-    /*
-       Fill in rest of table for incomplete codes.  This loop is similar to the
-       loop above in incrementing huff for table indices.  It is assumed that
-       len is equal to curr + drop, so there is no loop needed to increment
-       through high index bits.  When the current sub-table is filled, the loop
-       drops back to the root table to fill in any remaining entries there.
-     */
-    thisx.op = (unsigned char)64;                /* invalid code marker */
-    thisx.bits = (unsigned char)(len - drop);
-    thisx.val = (unsigned short)0;
-    while (huff != 0) {
-        /* when done with sub-table, drop back to root table */
-        if (drop != 0 && (huff & mask) != low) {
-            drop = 0;
-            len = root;
-            next = *table;
-            thisx.bits = (unsigned char)len;
-        }
-
-        /* put invalid code marker in table */
-        next[huff >> drop] = thisx;
-
-        /* backwards increment the len-bit code huff */
-        incr = 1U << (len - 1);
-        while (huff & incr)
-            incr >>= 1;
-        if (incr != 0) {
-            huff &= incr - 1;
-            huff += incr;
-        }
-        else
-            huff = 0;
-    }
-
-    /* set return parameters */
-    *table += used;
-    *bits = root;
-    return 0;
-}
diff --git a/modules/juce_core/zip/zlib/inftrees.h b/modules/juce_core/zip/zlib/inftrees.h
deleted file mode 100644
index ea64af0..0000000
--- a/modules/juce_core/zip/zlib/inftrees.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* inftrees.h -- header to use inftrees.c
- * Copyright (C) 1995-2005 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-#ifndef _INFTREES_H_
-#define _INFTREES_H_
-
-/* Structure for decoding tables.  Each entry provides either the
-   information needed to do the operation requested by the code that
-   indexed that table entry, or it provides a pointer to another
-   table that indexes more bits of the code.  op indicates whether
-   the entry is a pointer to another table, a literal, a length or
-   distance, an end-of-block, or an invalid code.  For a table
-   pointer, the low four bits of op is the number of index bits of
-   that table.  For a length or distance, the low four bits of op
-   is the number of extra bits to get after the code.  bits is
-   the number of bits in this code or part of the code to drop off
-   of the bit buffer.  val is the actual byte to output in the case
-   of a literal, the base length or distance, or the offset from
-   the current table to the next table.  Each entry is four bytes. */
-typedef struct {
-    unsigned char op;           /* operation, extra bits, table bits */
-    unsigned char bits;         /* bits in this part of the code */
-    unsigned short val;         /* offset in table or code value */
-} code;
-
-/* op values as set by inflate_table():
-    00000000 - literal
-    0000tttt - table link, tttt != 0 is the number of table index bits
-    0001eeee - length or distance, eeee is the number of extra bits
-    01100000 - end of block
-    01000000 - invalid code
- */
-
-/* Maximum size of dynamic tree.  The maximum found in a long but non-
-   exhaustive search was 1444 code structures (852 for length/literals
-   and 592 for distances, the latter actually the result of an
-   exhaustive search).  The true maximum is not known, but the value
-   below is more than safe. */
-#define ENOUGH 2048
-#define MAXD 592
-
-/* Type of code to build for inftable() */
-typedef enum {
-    CODES,
-    LENS,
-    DISTS
-} codetype;
-
-extern int inflate_table OF((codetype type, unsigned short FAR *lens,
-                             unsigned codes, code FAR * FAR *table,
-                             unsigned FAR *bits, unsigned short FAR *work));
-
-
-#endif
diff --git a/modules/juce_core/zip/zlib/trees.c b/modules/juce_core/zip/zlib/trees.c
deleted file mode 100644
index 463bfc2..0000000
--- a/modules/juce_core/zip/zlib/trees.c
+++ /dev/null
@@ -1,1191 +0,0 @@
-/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2005 Jean-loup Gailly
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- *  ALGORITHM
- *
- *      The "deflation" process uses several Huffman trees. The more
- *      common source values are represented by shorter bit sequences.
- *
- *      Each code tree is stored in a compressed form which is itself
- * a Huffman encoding of the lengths of all the code strings (in
- * ascending order by source values).  The actual code strings are
- * reconstructed from the lengths in the inflate process, as described
- * in the deflate specification.
- *
- *  REFERENCES
- *
- *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
- *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
- *
- *      Storer, James A.
- *          Data Compression:  Methods and Theory, pp. 49-50.
- *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
- *
- *      Sedgewick, R.
- *          Algorithms, p290.
- *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
- */
-
-/* @(#) $Id: trees.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-/* #define GEN_TREES_H */
-
-#include "deflate.h"
-
-#ifdef DEBUG
-#  include <ctype.h>
-#endif
-
-/* ===========================================================================
- * Constants
- */
-
-#define MAX_BL_BITS 7
-/* Bit length codes must not exceed MAX_BL_BITS bits */
-
-#define END_BLOCK 256
-/* end of block literal code */
-
-#define REP_3_6      16
-/* repeat previous bit length 3-6 times (2 bits of repeat count) */
-
-#define REPZ_3_10    17
-/* repeat a zero length 3-10 times  (3 bits of repeat count) */
-
-#define REPZ_11_138  18
-/* repeat a zero length 11-138 times  (7 bits of repeat count) */
-
-local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
-   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
-
-local const int extra_dbits[D_CODES] /* extra bits for each distance code */
-   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
-
-local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
-   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
-
-local const uch bl_order[BL_CODES]
-   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
-/* The lengths of the bit length codes are sent in order of decreasing
- * probability, to avoid transmitting the lengths for unused bit length codes.
- */
-
-#define Buf_size (8 * 2*sizeof(char))
-/* Number of bits used within bi_buf. (bi_buf might be implemented on
- * more than 16 bits on some systems.)
- */
-
-/* ===========================================================================
- * Local data. These are initialized only once.
- */
-
-#define DIST_CODE_LEN  512 /* see definition of array dist_code below */
-
-#if defined(GEN_TREES_H) || !defined(STDC)
-/* non ANSI compilers may not accept trees.h */
-
-local ct_data static_ltree[L_CODES+2];
-/* The static literal tree. Since the bit lengths are imposed, there is no
- * need for the L_CODES extra codes used during heap construction. However
- * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
- * below).
- */
-
-local ct_data static_dtree[D_CODES];
-/* The static distance tree. (Actually a trivial tree since all codes use
- * 5 bits.)
- */
-
-uch _dist_code[DIST_CODE_LEN];
-/* Distance codes. The first 256 values correspond to the distances
- * 3 .. 258, the last 256 values correspond to the top 8 bits of
- * the 15 bit distances.
- */
-
-uch _length_code[MAX_MATCH-MIN_MATCH+1];
-/* length code for each normalized match length (0 == MIN_MATCH) */
-
-local int base_length[LENGTH_CODES];
-/* First normalized length for each code (0 = MIN_MATCH) */
-
-local int base_dist[D_CODES];
-/* First normalized distance for each code (0 = distance of 1) */
-
-#else
-#  include "trees.h"
-#endif /* GEN_TREES_H */
-
-struct static_tree_desc_s {
-    const ct_data *static_tree;  /* static tree or NULL */
-    const intf *extra_bits;      /* extra bits for each code or NULL */
-    int     extra_base;          /* base index for extra_bits */
-    int     elems;               /* max number of elements in the tree */
-    int     max_length;          /* max bit length for the codes */
-};
-
-local static_tree_desc  static_l_desc =
-{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
-
-local static_tree_desc  static_d_desc =
-{static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
-
-local static_tree_desc  static_bl_desc =
-{(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};
-
-/* ===========================================================================
- * Local (static) routines in this file.
- */
-
-local void tr_static_init OF((void));
-local void init_block     OF((deflate_state *s));
-local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
-local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
-local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
-local void build_tree     OF((deflate_state *s, tree_desc *desc));
-local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
-local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
-local int  build_bl_tree  OF((deflate_state *s));
-local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
-                              int blcodes));
-local void compress_block OF((deflate_state *s, ct_data *ltree,
-                              ct_data *dtree));
-local void set_data_type  OF((deflate_state *s));
-local unsigned bi_reverse OF((unsigned value, int length));
-local void bi_windup      OF((deflate_state *s));
-local void bi_flush       OF((deflate_state *s));
-local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
-                              int header));
-
-#ifdef GEN_TREES_H
-local void gen_trees_header OF((void));
-#endif
-
-#ifndef DEBUG
-#  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
-   /* Send a code of the given tree. c and tree must not have side effects */
-
-#else /* DEBUG */
-#  define send_code(s, c, tree) \
-     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
-       send_bits(s, tree[c].Code, tree[c].Len); }
-#endif
-
-/* ===========================================================================
- * Output a short LSB first on the stream.
- * IN assertion: there is enough room in pendingBuf.
- */
-#define put_short(s, w) { \
-    put_byte(s, (uch)((w) & 0xff)); \
-    put_byte(s, (uch)((ush)(w) >> 8)); \
-}
-
-/* ===========================================================================
- * Send a value on a given number of bits.
- * IN assertion: length <= 16 and value fits in length bits.
- */
-#ifdef DEBUG
-local void send_bits      OF((deflate_state *s, int value, int length));
-
-local void send_bits (deflate_state *s, int value, int length)
-{
-    Tracevv((stderr," l %2d v %4x ", length, value));
-    Assert(length > 0 && length <= 15, "invalid length");
-    s->bits_sent += (ulg)length;
-
-    /* If not enough room in bi_buf, use (valid) bits from bi_buf and
-     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
-     * unused bits in value.
-     */
-    if (s->bi_valid > (int)Buf_size - length) {
-        s->bi_buf |= (value << s->bi_valid);
-        put_short(s, s->bi_buf);
-        s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
-        s->bi_valid += (int) (length - Buf_size);
-    } else {
-        s->bi_buf |= value << s->bi_valid;
-        s->bi_valid += length;
-    }
-}
-#else /* !DEBUG */
-
-#define send_bits(s, value, length) \
-{ int len = length;\
-  if (s->bi_valid > (int)Buf_size - len) {\
-    int val = value;\
-    s->bi_buf |= (val << s->bi_valid);\
-    put_short(s, s->bi_buf);\
-    s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
-    s->bi_valid += len - Buf_size;\
-  } else {\
-    s->bi_buf |= (value) << s->bi_valid;\
-    s->bi_valid += len;\
-  }\
-}
-#endif /* DEBUG */
-
-
-/* the arguments must not have side effects */
-
-/* ===========================================================================
- * Initialize the various 'constant' tables.
- */
-local void tr_static_init()
-{
-#if defined(GEN_TREES_H) || !defined(STDC)
-    static int static_init_done = 0;
-    int n;        /* iterates over tree elements */
-    int bits;     /* bit counter */
-    int length;   /* length value */
-    int code;     /* code value */
-    int dist;     /* distance index */
-    ush bl_count[MAX_BITS+1];
-    /* number of codes at each bit length for an optimal tree */
-
-    if (static_init_done) return;
-
-    /* For some embedded targets, global variables are not initialized: */
-    static_l_desc.static_tree = static_ltree;
-    static_l_desc.extra_bits = extra_lbits;
-    static_d_desc.static_tree = static_dtree;
-    static_d_desc.extra_bits = extra_dbits;
-    static_bl_desc.extra_bits = extra_blbits;
-
-    /* Initialize the mapping length (0..255) -> length code (0..28) */
-    length = 0;
-    for (code = 0; code < LENGTH_CODES-1; code++) {
-        base_length[code] = length;
-        for (n = 0; n < (1<<extra_lbits[code]); n++) {
-            _length_code[length++] = (uch)code;
-        }
-    }
-    Assert (length == 256, "tr_static_init: length != 256");
-    /* Note that the length 255 (match length 258) can be represented
-     * in two different ways: code 284 + 5 bits or code 285, so we
-     * overwrite length_code[255] to use the best encoding:
-     */
-    _length_code[length-1] = (uch)code;
-
-    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
-    dist = 0;
-    for (code = 0 ; code < 16; code++) {
-        base_dist[code] = dist;
-        for (n = 0; n < (1<<extra_dbits[code]); n++) {
-            _dist_code[dist++] = (uch)code;
-        }
-    }
-    Assert (dist == 256, "tr_static_init: dist != 256");
-    dist >>= 7; /* from now on, all distances are divided by 128 */
-    for ( ; code < D_CODES; code++) {
-        base_dist[code] = dist << 7;
-        for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
-            _dist_code[256 + dist++] = (uch)code;
-        }
-    }
-    Assert (dist == 256, "tr_static_init: 256+dist != 512");
-
-    /* Construct the codes of the static literal tree */
-    for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
-    n = 0;
-    while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
-    while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
-    while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
-    while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
-    /* Codes 286 and 287 do not exist, but we must include them in the
-     * tree construction to get a canonical Huffman tree (longest code
-     * all ones)
-     */
-    gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
-
-    /* The static distance tree is trivial: */
-    for (n = 0; n < D_CODES; n++) {
-        static_dtree[n].Len = 5;
-        static_dtree[n].Code = bi_reverse((unsigned)n, 5);
-    }
-    static_init_done = 1;
-
-#  ifdef GEN_TREES_H
-    gen_trees_header();
-#  endif
-#endif /* defined(GEN_TREES_H) || !defined(STDC) */
-}
-
-/* ===========================================================================
- * Genererate the file trees.h describing the static trees.
- */
-#ifdef GEN_TREES_H
-#  ifndef DEBUG
-#    include <stdio.h>
-#  endif
-
-#  define SEPARATOR(i, last, width) \
-      ((i) == (last)? "\n};\n\n" :    \
-       ((i) % (width) == (width)-1 ? ",\n" : ", "))
-
-void gen_trees_header()
-{
-    FILE *header = fopen("trees.h", "w");
-    int i;
-
-    Assert (header != NULL, "Can't open trees.h");
-    fprintf(header,
-            "/* header created automatically with -DGEN_TREES_H */\n\n");
-
-    fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
-    for (i = 0; i < L_CODES+2; i++) {
-        fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
-                static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
-    }
-
-    fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
-    for (i = 0; i < D_CODES; i++) {
-        fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
-                static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
-    }
-
-    fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n");
-    for (i = 0; i < DIST_CODE_LEN; i++) {
-        fprintf(header, "%2u%s", _dist_code[i],
-                SEPARATOR(i, DIST_CODE_LEN-1, 20));
-    }
-
-    fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
-    for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
-        fprintf(header, "%2u%s", _length_code[i],
-                SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
-    }
-
-    fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
-    for (i = 0; i < LENGTH_CODES; i++) {
-        fprintf(header, "%1u%s", base_length[i],
-                SEPARATOR(i, LENGTH_CODES-1, 20));
-    }
-
-    fprintf(header, "local const int base_dist[D_CODES] = {\n");
-    for (i = 0; i < D_CODES; i++) {
-        fprintf(header, "%5u%s", base_dist[i],
-                SEPARATOR(i, D_CODES-1, 10));
-    }
-
-    fclose(header);
-}
-#endif /* GEN_TREES_H */
-
-/* ===========================================================================
- * Initialize the tree data structures for a new zlib stream.
- */
-void _tr_init(deflate_state *s)
-{
-    tr_static_init();
-
-    s->l_desc.dyn_tree = s->dyn_ltree;
-    s->l_desc.stat_desc = &static_l_desc;
-
-    s->d_desc.dyn_tree = s->dyn_dtree;
-    s->d_desc.stat_desc = &static_d_desc;
-
-    s->bl_desc.dyn_tree = s->bl_tree;
-    s->bl_desc.stat_desc = &static_bl_desc;
-
-    s->bi_buf = 0;
-    s->bi_valid = 0;
-    s->last_eob_len = 8; /* enough lookahead for inflate */
-#ifdef DEBUG
-    s->compressed_len = 0L;
-    s->bits_sent = 0L;
-#endif
-
-    /* Initialize the first block of the first file: */
-    init_block(s);
-}
-
-/* ===========================================================================
- * Initialize a new block.
- */
-local void init_block (deflate_state *s)
-{
-    int n; /* iterates over tree elements */
-
-    /* Initialize the trees. */
-    for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
-    for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
-    for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
-
-    s->dyn_ltree[END_BLOCK].Freq = 1;
-    s->opt_len = s->static_len = 0L;
-    s->last_lit = s->matches = 0;
-}
-
-#define SMALLEST 1
-/* Index within the heap array of least frequent node in the Huffman tree */
-
-
-/* ===========================================================================
- * Remove the smallest element from the heap and recreate the heap with
- * one less element. Updates heap and heap_len.
- */
-#define pqremove(s, tree, top) \
-{\
-    top = s->heap[SMALLEST]; \
-    s->heap[SMALLEST] = s->heap[s->heap_len--]; \
-    pqdownheap(s, tree, SMALLEST); \
-}
-
-/* ===========================================================================
- * Compares to subtrees, using the tree depth as tie breaker when
- * the subtrees have equal frequency. This minimizes the worst case length.
- */
-#define smaller(tree, n, m, depth) \
-   (tree[n].Freq < tree[m].Freq || \
-   (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
-
-/* ===========================================================================
- * Restore the heap property by moving down the tree starting at node k,
- * exchanging a node with the smallest of its two sons if necessary, stopping
- * when the heap property is re-established (each father smaller than its
- * two sons).
- */
-local void pqdownheap (deflate_state *s,
-                       ct_data *tree,  /* the tree to restore */
-                       int k)               /* node to move down */
-{
-    int v = s->heap[k];
-    int j = k << 1;  /* left son of k */
-    while (j <= s->heap_len) {
-        /* Set j to the smallest of the two sons: */
-        if (j < s->heap_len &&
-            smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
-            j++;
-        }
-        /* Exit if v is smaller than both sons */
-        if (smaller(tree, v, s->heap[j], s->depth)) break;
-
-        /* Exchange v with the smallest son */
-        s->heap[k] = s->heap[j];  k = j;
-
-        /* And continue down the tree, setting j to the left son of k */
-        j <<= 1;
-    }
-    s->heap[k] = v;
-}
-
-/* ===========================================================================
- * Compute the optimal bit lengths for a tree and update the total bit length
- * for the current block.
- * IN assertion: the fields freq and dad are set, heap[heap_max] and
- *    above are the tree nodes sorted by increasing frequency.
- * OUT assertions: the field len is set to the optimal bit length, the
- *     array bl_count contains the frequencies for each bit length.
- *     The length opt_len is updated; static_len is also updated if stree is
- *     not null.
- */
-local void gen_bitlen (deflate_state *s, tree_desc *desc)
-{
-    ct_data *tree        = desc->dyn_tree;
-    int max_code         = desc->max_code;
-    const ct_data *stree = desc->stat_desc->static_tree;
-    const intf *extra    = desc->stat_desc->extra_bits;
-    int base             = desc->stat_desc->extra_base;
-    int max_length       = desc->stat_desc->max_length;
-    int h;              /* heap index */
-    int n, m;           /* iterate over the tree elements */
-    int bits;           /* bit length */
-    int xbits;          /* extra bits */
-    ush f;              /* frequency */
-    int overflow = 0;   /* number of elements with bit length too large */
-
-    for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
-
-    /* In a first pass, compute the optimal bit lengths (which may
-     * overflow in the case of the bit length tree).
-     */
-    tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
-
-    for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
-        n = s->heap[h];
-        bits = tree[tree[n].Dad].Len + 1;
-        if (bits > max_length) bits = max_length, overflow++;
-        tree[n].Len = (ush)bits;
-        /* We overwrite tree[n].Dad which is no longer needed */
-
-        if (n > max_code) continue; /* not a leaf node */
-
-        s->bl_count[bits]++;
-        xbits = 0;
-        if (n >= base) xbits = extra[n-base];
-        f = tree[n].Freq;
-        s->opt_len += (ulg)f * (bits + xbits);
-        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
-    }
-    if (overflow == 0) return;
-
-    Trace((stderr,"\nbit length overflow\n"));
-    /* This happens for example on obj2 and pic of the Calgary corpus */
-
-    /* Find the first bit length which could increase: */
-    do {
-        bits = max_length-1;
-        while (s->bl_count[bits] == 0) bits--;
-        s->bl_count[bits]--;      /* move one leaf down the tree */
-        s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
-        s->bl_count[max_length]--;
-        /* The brother of the overflow item also moves one step up,
-         * but this does not affect bl_count[max_length]
-         */
-        overflow -= 2;
-    } while (overflow > 0);
-
-    /* Now recompute all bit lengths, scanning in increasing frequency.
-     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
-     * lengths instead of fixing only the wrong ones. This idea is taken
-     * from 'ar' written by Haruhiko Okumura.)
-     */
-    for (bits = max_length; bits != 0; bits--) {
-        n = s->bl_count[bits];
-        while (n != 0) {
-            m = s->heap[--h];
-            if (m > max_code) continue;
-            if ((unsigned) tree[m].Len != (unsigned) bits) {
-                Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
-                s->opt_len += ((long)bits - (long)tree[m].Len)
-                              *(long)tree[m].Freq;
-                tree[m].Len = (ush)bits;
-            }
-            n--;
-        }
-    }
-}
-
-/* ===========================================================================
- * Generate the codes for a given tree and bit counts (which need not be
- * optimal).
- * IN assertion: the array bl_count contains the bit length statistics for
- * the given tree and the field len is set for all tree elements.
- * OUT assertion: the field code is set for all tree elements of non
- *     zero code length.
- */
-local void gen_codes (ct_data *tree,             /* the tree to decorate */
-                      int max_code,              /* largest code with non zero frequency */
-                      ushf *bl_count)            /* number of codes at each bit length */
-{
-    ush next_code[MAX_BITS+1]; /* next code value for each bit length */
-    ush code_ = 0;              /* running code value */
-    int bits;                  /* bit index */
-    int n;                     /* code index */
-
-    /* The distribution counts are first used to generate the code values
-     * without bit reversal.
-     */
-    for (bits = 1; bits <= MAX_BITS; bits++) {
-        next_code[bits] = code_ = (code_ + bl_count[bits-1]) << 1;
-    }
-    /* Check that the bit counts in bl_count are consistent. The last code
-     * must be all ones.
-     */
-    Assert (code_ + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
-            "inconsistent bit counts");
-    Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
-
-    for (n = 0;  n <= max_code; n++) {
-        int len = tree[n].Len;
-        if (len == 0) continue;
-        /* Now reverse the bits */
-        tree[n].Code = bi_reverse(next_code[len]++, len);
-
-        Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
-             n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
-    }
-}
-
-/* ===========================================================================
- * Construct one Huffman tree and assigns the code bit strings and lengths.
- * Update the total bit length for the current block.
- * IN assertion: the field freq is set for all tree elements.
- * OUT assertions: the fields len and code are set to the optimal bit length
- *     and corresponding code. The length opt_len is updated; static_len is
- *     also updated if stree is not null. The field max_code is set.
- */
-local void build_tree (deflate_state *s,
-                       tree_desc *desc) /* the tree descriptor */
-{
-    ct_data *tree         = desc->dyn_tree;
-    const ct_data *stree  = desc->stat_desc->static_tree;
-    int elems             = desc->stat_desc->elems;
-    int n, m;          /* iterate over heap elements */
-    int max_code = -1; /* largest code with non zero frequency */
-    int node;          /* new node being created */
-
-    /* Construct the initial heap, with least frequent element in
-     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
-     * heap[0] is not used.
-     */
-    s->heap_len = 0, s->heap_max = HEAP_SIZE;
-
-    for (n = 0; n < elems; n++) {
-        if (tree[n].Freq != 0) {
-            s->heap[++(s->heap_len)] = max_code = n;
-            s->depth[n] = 0;
-        } else {
-            tree[n].Len = 0;
-        }
-    }
-
-    /* The pkzip format requires that at least one distance code exists,
-     * and that at least one bit should be sent even if there is only one
-     * possible code. So to avoid special checks later on we force at least
-     * two codes of non zero frequency.
-     */
-    while (s->heap_len < 2) {
-        node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
-        tree[node].Freq = 1;
-        s->depth[node] = 0;
-        s->opt_len--; if (stree) s->static_len -= stree[node].Len;
-        /* node is 0 or 1 so it does not have extra bits */
-    }
-    desc->max_code = max_code;
-
-    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
-     * establish sub-heaps of increasing lengths:
-     */
-    for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
-
-    /* Construct the Huffman tree by repeatedly combining the least two
-     * frequent nodes.
-     */
-    node = elems;              /* next internal node of the tree */
-    do {
-        pqremove(s, tree, n);  /* n = node of least frequency */
-        m = s->heap[SMALLEST]; /* m = node of next least frequency */
-
-        s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
-        s->heap[--(s->heap_max)] = m;
-
-        /* Create a new node father of n and m */
-        tree[node].Freq = tree[n].Freq + tree[m].Freq;
-        s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
-                                s->depth[n] : s->depth[m]) + 1);
-        tree[n].Dad = tree[m].Dad = (ush)node;
-#ifdef DUMP_BL_TREE
-        if (tree == s->bl_tree) {
-            fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
-                    node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
-        }
-#endif
-        /* and insert the new node in the heap */
-        s->heap[SMALLEST] = node++;
-        pqdownheap(s, tree, SMALLEST);
-
-    } while (s->heap_len >= 2);
-
-    s->heap[--(s->heap_max)] = s->heap[SMALLEST];
-
-    /* At this point, the fields freq and dad are set. We can now
-     * generate the bit lengths.
-     */
-    gen_bitlen(s, (tree_desc *)desc);
-
-    /* The field len is now set, we can generate the bit codes */
-    gen_codes ((ct_data *)tree, max_code, s->bl_count);
-}
-
-/* ===========================================================================
- * Scan a literal or distance tree to determine the frequencies of the codes
- * in the bit length tree.
- */
-local void scan_tree (deflate_state *s,
-                      ct_data *tree,   /* the tree to be scanned */
-                      int max_code)    /* and its largest code of non zero frequency */
-{
-    int n;                     /* iterates over all tree elements */
-    int prevlen = -1;          /* last emitted length */
-    int curlen;                /* length of current code */
-    int nextlen = tree[0].Len; /* length of next code */
-    int count = 0;             /* repeat count of the current code */
-    int max_count = 7;         /* max repeat count */
-    int min_count = 4;         /* min repeat count */
-
-    if (nextlen == 0) max_count = 138, min_count = 3;
-    tree[max_code+1].Len = (ush)0xffff; /* guard */
-
-    for (n = 0; n <= max_code; n++) {
-        curlen = nextlen; nextlen = tree[n+1].Len;
-        if (++count < max_count && curlen == nextlen) {
-            continue;
-        } else if (count < min_count) {
-            s->bl_tree[curlen].Freq += count;
-        } else if (curlen != 0) {
-            if (curlen != prevlen) s->bl_tree[curlen].Freq++;
-            s->bl_tree[REP_3_6].Freq++;
-        } else if (count <= 10) {
-            s->bl_tree[REPZ_3_10].Freq++;
-        } else {
-            s->bl_tree[REPZ_11_138].Freq++;
-        }
-        count = 0; prevlen = curlen;
-        if (nextlen == 0) {
-            max_count = 138, min_count = 3;
-        } else if (curlen == nextlen) {
-            max_count = 6, min_count = 3;
-        } else {
-            max_count = 7, min_count = 4;
-        }
-    }
-}
-
-/* ===========================================================================
- * Send a literal or distance tree in compressed form, using the codes in
- * bl_tree.
- */
-local void send_tree (deflate_state *s,
-                      ct_data *tree, /* the tree to be scanned */
-                      int max_code)       /* and its largest code of non zero frequency */
-{
-    int n;                     /* iterates over all tree elements */
-    int prevlen = -1;          /* last emitted length */
-    int curlen;                /* length of current code */
-    int nextlen = tree[0].Len; /* length of next code */
-    int count = 0;             /* repeat count of the current code */
-    int max_count = 7;         /* max repeat count */
-    int min_count = 4;         /* min repeat count */
-
-    /* tree[max_code+1].Len = -1; */  /* guard already set */
-    if (nextlen == 0) max_count = 138, min_count = 3;
-
-    for (n = 0; n <= max_code; n++) {
-        curlen = nextlen; nextlen = tree[n+1].Len;
-        if (++count < max_count && curlen == nextlen) {
-            continue;
-        } else if (count < min_count) {
-            do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
-
-        } else if (curlen != 0) {
-            if (curlen != prevlen) {
-                send_code(s, curlen, s->bl_tree); count--;
-            }
-            Assert(count >= 3 && count <= 6, " 3_6?");
-            send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
-
-        } else if (count <= 10) {
-            send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
-
-        } else {
-            send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
-        }
-        count = 0; prevlen = curlen;
-        if (nextlen == 0) {
-            max_count = 138, min_count = 3;
-        } else if (curlen == nextlen) {
-            max_count = 6, min_count = 3;
-        } else {
-            max_count = 7, min_count = 4;
-        }
-    }
-}
-
-/* ===========================================================================
- * Construct the Huffman tree for the bit lengths and return the index in
- * bl_order of the last bit length code to send.
- */
-local int build_bl_tree (deflate_state *s)
-{
-    int max_blindex;  /* index of last bit length code of non zero freq */
-
-    /* Determine the bit length frequencies for literal and distance trees */
-    scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
-    scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
-
-    /* Build the bit length tree: */
-    build_tree(s, (tree_desc *)(&(s->bl_desc)));
-    /* opt_len now includes the length of the tree representations, except
-     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
-     */
-
-    /* Determine the number of bit length codes to send. The pkzip format
-     * requires that at least 4 bit length codes be sent. (appnote.txt says
-     * 3 but the actual value used is 4.)
-     */
-    for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
-        if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
-    }
-    /* Update opt_len to include the bit length tree and counts */
-    s->opt_len += 3*(max_blindex+1) + 5+5+4;
-    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
-            s->opt_len, s->static_len));
-
-    return max_blindex;
-}
-
-/* ===========================================================================
- * Send the header for a block using dynamic Huffman trees: the counts, the
- * lengths of the bit length codes, the literal tree and the distance tree.
- * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
- */
-local void send_all_trees (deflate_state *s,
-                           int lcodes, int dcodes, int blcodes) /* number of codes for each tree */
-{
-    int rank;                    /* index in bl_order */
-
-    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
-    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
-            "too many codes");
-    Tracev((stderr, "\nbl counts: "));
-    send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
-    send_bits(s, dcodes-1,   5);
-    send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
-    for (rank = 0; rank < blcodes; rank++) {
-        Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
-        send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
-    }
-    Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
-
-    send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
-    Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
-
-    send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
-    Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
-}
-
-/* ===========================================================================
- * Send a stored block
- */
-void _tr_stored_block (deflate_state *s, charf *buf, ulg stored_len, int eof)
-{
-    send_bits(s, (STORED_BLOCK<<1)+eof, 3);  /* send block type */
-#ifdef DEBUG
-    s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
-    s->compressed_len += (stored_len + 4) << 3;
-#endif
-    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
-}
-
-/* ===========================================================================
- * Send one empty static block to give enough lookahead for inflate.
- * This takes 10 bits, of which 7 may remain in the bit buffer.
- * The current inflate code requires 9 bits of lookahead. If the
- * last two codes for the previous block (real code plus EOB) were coded
- * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
- * the last real code. In this case we send two empty static blocks instead
- * of one. (There are no problems if the previous block is stored or fixed.)
- * To simplify the code, we assume the worst case of last real code encoded
- * on one bit only.
- */
-void _tr_align (deflate_state *s)
-{
-    send_bits(s, STATIC_TREES<<1, 3);
-    send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
-    s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
-#endif
-    bi_flush(s);
-    /* Of the 10 bits for the empty block, we have already sent
-     * (10 - bi_valid) bits. The lookahead for the last real code (before
-     * the EOB of the previous block) was thus at least one plus the length
-     * of the EOB plus what we have just sent of the empty static block.
-     */
-    if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
-        send_bits(s, STATIC_TREES<<1, 3);
-        send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
-        s->compressed_len += 10L;
-#endif
-        bi_flush(s);
-    }
-    s->last_eob_len = 7;
-}
-
-/* ===========================================================================
- * Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
- */
-void _tr_flush_block (deflate_state *s,
-                      charf *buf,       /* input block, or NULL if too old */
-                      ulg stored_len,   /* length of input block */
-                      int eof)          /* true if this is the last block for a file */
-{
-    ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
-    int max_blindex = 0;  /* index of last bit length code of non zero freq */
-
-    /* Build the Huffman trees unless a stored block is forced */
-    if (s->level > 0) {
-
-        /* Check if the file is binary or text */
-        if (stored_len > 0 && s->strm->data_type == Z_UNKNOWN)
-            set_data_type(s);
-
-        /* Construct the literal and distance trees */
-        build_tree(s, (tree_desc *)(&(s->l_desc)));
-        Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
-                s->static_len));
-
-        build_tree(s, (tree_desc *)(&(s->d_desc)));
-        Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
-                s->static_len));
-        /* At this point, opt_len and static_len are the total bit lengths of
-         * the compressed block data, excluding the tree representations.
-         */
-
-        /* Build the bit length tree for the above two trees, and get the index
-         * in bl_order of the last bit length code to send.
-         */
-        max_blindex = build_bl_tree(s);
-
-        /* Determine the best encoding. Compute the block lengths in bytes. */
-        opt_lenb = (s->opt_len+3+7)>>3;
-        static_lenb = (s->static_len+3+7)>>3;
-
-        Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
-                opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
-                s->last_lit));
-
-        if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
-
-    } else {
-        Assert(buf != (char*)0, "lost buf");
-        opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
-    }
-
-#ifdef FORCE_STORED
-    if (buf != (char*)0) { /* force stored block */
-#else
-    if (stored_len+4 <= opt_lenb && buf != (char*)0) {
-                       /* 4: two words for the lengths */
-#endif
-        /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
-         * Otherwise we can't have processed more than WSIZE input bytes since
-         * the last block flush, because compression would have been
-         * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
-         * transform a block into a stored block.
-         */
-        _tr_stored_block(s, buf, stored_len, eof);
-
-#ifdef FORCE_STATIC
-    } else if (static_lenb >= 0) { /* force static trees */
-#else
-    } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
-#endif
-        send_bits(s, (STATIC_TREES<<1)+eof, 3);
-        compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
-#ifdef DEBUG
-        s->compressed_len += 3 + s->static_len;
-#endif
-    } else {
-        send_bits(s, (DYN_TREES<<1)+eof, 3);
-        send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
-                       max_blindex+1);
-        compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
-#ifdef DEBUG
-        s->compressed_len += 3 + s->opt_len;
-#endif
-    }
-    Assert (s->compressed_len == s->bits_sent, "bad compressed size");
-    /* The above check is made mod 2^32, for files larger than 512 MB
-     * and uLong implemented on 32 bits.
-     */
-    init_block(s);
-
-    if (eof) {
-        bi_windup(s);
-#ifdef DEBUG
-        s->compressed_len += 7;  /* align on byte boundary */
-#endif
-    }
-    Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
-           s->compressed_len-7*eof));
-}
-
-/* ===========================================================================
- * Save the match info and tally the frequency counts. Return true if
- * the current block must be flushed.
- */
-int _tr_tally (deflate_state *s,
-               unsigned dist,  /* distance of matched string */
-               unsigned lc)    /* match length-MIN_MATCH or unmatched char (if dist==0) */
-{
-    s->d_buf[s->last_lit] = (ush)dist;
-    s->l_buf[s->last_lit++] = (uch)lc;
-    if (dist == 0) {
-        /* lc is the unmatched char */
-        s->dyn_ltree[lc].Freq++;
-    } else {
-        s->matches++;
-        /* Here, lc is the match length - MIN_MATCH */
-        dist--;             /* dist = match distance - 1 */
-        Assert((ush)dist < (ush)MAX_DIST(s) &&
-               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
-               (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
-
-        s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
-        s->dyn_dtree[d_code(dist)].Freq++;
-    }
-
-#ifdef TRUNCATE_BLOCK
-    /* Try to guess if it is profitable to stop the current block here */
-    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
-        /* Compute an upper bound for the compressed length */
-        ulg out_length = (ulg)s->last_lit*8L;
-        ulg in_length = (ulg)((long)s->strstart - s->block_start);
-        int dcode;
-        for (dcode = 0; dcode < D_CODES; dcode++) {
-            out_length += (ulg)s->dyn_dtree[dcode].Freq *
-                (5L+extra_dbits[dcode]);
-        }
-        out_length >>= 3;
-        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
-               s->last_lit, in_length, out_length,
-               100L - out_length*100L/in_length));
-        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
-    }
-#endif
-    return (s->last_lit == s->lit_bufsize-1);
-    /* We avoid equality with lit_bufsize because of wraparound at 64K
-     * on 16 bit machines and because stored blocks are restricted to
-     * 64K-1 bytes.
-     */
-}
-
-/* ===========================================================================
- * Send the block data compressed using the given Huffman trees
- */
-local void compress_block (deflate_state *s,
-                           ct_data *ltree, /* literal tree */
-                           ct_data *dtree) /* distance tree */
-{
-    unsigned dist;      /* distance of matched string */
-    int lc;             /* match length or unmatched char (if dist == 0) */
-    unsigned lx = 0;    /* running index in l_buf */
-    unsigned code_;     /* the code to send */
-    int extra;          /* number of extra bits to send */
-
-    if (s->last_lit != 0) do {
-        dist = s->d_buf[lx];
-        lc = s->l_buf[lx++];
-        if (dist == 0) {
-            send_code(s, lc, ltree); /* send a literal byte */
-            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
-        } else {
-            /* Here, lc is the match length - MIN_MATCH */
-            code_ = _length_code[lc];
-            send_code(s, code_+LITERALS+1, ltree); /* send the length code */
-            extra = extra_lbits[code_];
-            if (extra != 0) {
-                lc -= base_length[code_];
-                send_bits(s, lc, extra);       /* send the extra length bits */
-            }
-            dist--; /* dist is now the match distance - 1 */
-            code_ = d_code(dist);
-            Assert (code_ < D_CODES, "bad d_code");
-
-            send_code(s, code_, dtree);       /* send the distance code */
-            extra = extra_dbits[code_];
-            if (extra != 0) {
-                dist -= base_dist[code_];
-                send_bits(s, dist, extra);   /* send the extra distance bits */
-            }
-        } /* literal or match pair ? */
-
-        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
-        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
-               "pendingBuf overflow");
-
-    } while (lx < s->last_lit);
-
-    send_code(s, END_BLOCK, ltree);
-    s->last_eob_len = ltree[END_BLOCK].Len;
-}
-
-/* ===========================================================================
- * Set the data type to BINARY or TEXT, using a crude approximation:
- * set it to Z_TEXT if all symbols are either printable characters (33 to 255)
- * or white spaces (9 to 13, or 32); or set it to Z_BINARY otherwise.
- * IN assertion: the fields Freq of dyn_ltree are set.
- */
-local void set_data_type (deflate_state *s)
-{
-    int n;
-
-    for (n = 0; n < 9; n++)
-        if (s->dyn_ltree[n].Freq != 0)
-            break;
-    if (n == 9)
-        for (n = 14; n < 32; n++)
-            if (s->dyn_ltree[n].Freq != 0)
-                break;
-    s->strm->data_type = (n == 32) ? Z_TEXT : Z_BINARY;
-}
-
-/* ===========================================================================
- * Reverse the first len bits of a code, using straightforward code (a faster
- * method would use a table)
- * IN assertion: 1 <= len <= 15
- */
-local unsigned bi_reverse (unsigned code_, int len)
-{
-    register unsigned res = 0;
-    do {
-        res |= code_ & 1;
-        code_ >>= 1, res <<= 1;
-    } while (--len > 0);
-    return res >> 1;
-}
-
-/* ===========================================================================
- * Flush the bit buffer, keeping at most 7 bits in it.
- */
-local void bi_flush (deflate_state *s)
-{
-    if (s->bi_valid == 16) {
-        put_short(s, s->bi_buf);
-        s->bi_buf = 0;
-        s->bi_valid = 0;
-    } else if (s->bi_valid >= 8) {
-        put_byte(s, (Byte)s->bi_buf);
-        s->bi_buf >>= 8;
-        s->bi_valid -= 8;
-    }
-}
-
-/* ===========================================================================
- * Flush the bit buffer and align the output on a byte boundary
- */
-local void bi_windup (deflate_state *s)
-{
-    if (s->bi_valid > 8) {
-        put_short(s, s->bi_buf);
-    } else if (s->bi_valid > 0) {
-        put_byte(s, (Byte)s->bi_buf);
-    }
-    s->bi_buf = 0;
-    s->bi_valid = 0;
-#ifdef DEBUG
-    s->bits_sent = (s->bits_sent+7) & ~7;
-#endif
-}
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(deflate_state *s,
-                      charf    *buf,    /* the input data */
-                      unsigned len,     /* its length */
-                      int      header)  /* true if block header must be written */
-{
-    bi_windup(s);        /* align on byte boundary */
-    s->last_eob_len = 8; /* enough lookahead for inflate */
-
-    if (header) {
-        put_short(s, (ush)len);
-        put_short(s, (ush)~len);
-#ifdef DEBUG
-        s->bits_sent += 2*16;
-#endif
-    }
-#ifdef DEBUG
-    s->bits_sent += (ulg)len<<3;
-#endif
-    while (len--) {
-        put_byte(s, *buf++);
-    }
-}
diff --git a/modules/juce_core/zip/zlib/trees.h b/modules/juce_core/zip/zlib/trees.h
deleted file mode 100644
index 5ac45a7..0000000
--- a/modules/juce_core/zip/zlib/trees.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* header created automatically with -DGEN_TREES_H */
-
-local const ct_data static_ltree[L_CODES+2] = {
-{{ 12},{  8}}, {{140},{  8}}, {{ 76},{  8}}, {{204},{  8}}, {{ 44},{  8}},
-{{172},{  8}}, {{108},{  8}}, {{236},{  8}}, {{ 28},{  8}}, {{156},{  8}},
-{{ 92},{  8}}, {{220},{  8}}, {{ 60},{  8}}, {{188},{  8}}, {{124},{  8}},
-{{252},{  8}}, {{  2},{  8}}, {{130},{  8}}, {{ 66},{  8}}, {{194},{  8}},
-{{ 34},{  8}}, {{162},{  8}}, {{ 98},{  8}}, {{226},{  8}}, {{ 18},{  8}},
-{{146},{  8}}, {{ 82},{  8}}, {{210},{  8}}, {{ 50},{  8}}, {{178},{  8}},
-{{114},{  8}}, {{242},{  8}}, {{ 10},{  8}}, {{138},{  8}}, {{ 74},{  8}},
-{{202},{  8}}, {{ 42},{  8}}, {{170},{  8}}, {{106},{  8}}, {{234},{  8}},
-{{ 26},{  8}}, {{154},{  8}}, {{ 90},{  8}}, {{218},{  8}}, {{ 58},{  8}},
-{{186},{  8}}, {{122},{  8}}, {{250},{  8}}, {{  6},{  8}}, {{134},{  8}},
-{{ 70},{  8}}, {{198},{  8}}, {{ 38},{  8}}, {{166},{  8}}, {{102},{  8}},
-{{230},{  8}}, {{ 22},{  8}}, {{150},{  8}}, {{ 86},{  8}}, {{214},{  8}},
-{{ 54},{  8}}, {{182},{  8}}, {{118},{  8}}, {{246},{  8}}, {{ 14},{  8}},
-{{142},{  8}}, {{ 78},{  8}}, {{206},{  8}}, {{ 46},{  8}}, {{174},{  8}},
-{{110},{  8}}, {{238},{  8}}, {{ 30},{  8}}, {{158},{  8}}, {{ 94},{  8}},
-{{222},{  8}}, {{ 62},{  8}}, {{190},{  8}}, {{126},{  8}}, {{254},{  8}},
-{{  1},{  8}}, {{129},{  8}}, {{ 65},{  8}}, {{193},{  8}}, {{ 33},{  8}},
-{{161},{  8}}, {{ 97},{  8}}, {{225},{  8}}, {{ 17},{  8}}, {{145},{  8}},
-{{ 81},{  8}}, {{209},{  8}}, {{ 49},{  8}}, {{177},{  8}}, {{113},{  8}},
-{{241},{  8}}, {{  9},{  8}}, {{137},{  8}}, {{ 73},{  8}}, {{201},{  8}},
-{{ 41},{  8}}, {{169},{  8}}, {{105},{  8}}, {{233},{  8}}, {{ 25},{  8}},
-{{153},{  8}}, {{ 89},{  8}}, {{217},{  8}}, {{ 57},{  8}}, {{185},{  8}},
-{{121},{  8}}, {{249},{  8}}, {{  5},{  8}}, {{133},{  8}}, {{ 69},{  8}},
-{{197},{  8}}, {{ 37},{  8}}, {{165},{  8}}, {{101},{  8}}, {{229},{  8}},
-{{ 21},{  8}}, {{149},{  8}}, {{ 85},{  8}}, {{213},{  8}}, {{ 53},{  8}},
-{{181},{  8}}, {{117},{  8}}, {{245},{  8}}, {{ 13},{  8}}, {{141},{  8}},
-{{ 77},{  8}}, {{205},{  8}}, {{ 45},{  8}}, {{173},{  8}}, {{109},{  8}},
-{{237},{  8}}, {{ 29},{  8}}, {{157},{  8}}, {{ 93},{  8}}, {{221},{  8}},
-{{ 61},{  8}}, {{189},{  8}}, {{125},{  8}}, {{253},{  8}}, {{ 19},{  9}},
-{{275},{  9}}, {{147},{  9}}, {{403},{  9}}, {{ 83},{  9}}, {{339},{  9}},
-{{211},{  9}}, {{467},{  9}}, {{ 51},{  9}}, {{307},{  9}}, {{179},{  9}},
-{{435},{  9}}, {{115},{  9}}, {{371},{  9}}, {{243},{  9}}, {{499},{  9}},
-{{ 11},{  9}}, {{267},{  9}}, {{139},{  9}}, {{395},{  9}}, {{ 75},{  9}},
-{{331},{  9}}, {{203},{  9}}, {{459},{  9}}, {{ 43},{  9}}, {{299},{  9}},
-{{171},{  9}}, {{427},{  9}}, {{107},{  9}}, {{363},{  9}}, {{235},{  9}},
-{{491},{  9}}, {{ 27},{  9}}, {{283},{  9}}, {{155},{  9}}, {{411},{  9}},
-{{ 91},{  9}}, {{347},{  9}}, {{219},{  9}}, {{475},{  9}}, {{ 59},{  9}},
-{{315},{  9}}, {{187},{  9}}, {{443},{  9}}, {{123},{  9}}, {{379},{  9}},
-{{251},{  9}}, {{507},{  9}}, {{  7},{  9}}, {{263},{  9}}, {{135},{  9}},
-{{391},{  9}}, {{ 71},{  9}}, {{327},{  9}}, {{199},{  9}}, {{455},{  9}},
-{{ 39},{  9}}, {{295},{  9}}, {{167},{  9}}, {{423},{  9}}, {{103},{  9}},
-{{359},{  9}}, {{231},{  9}}, {{487},{  9}}, {{ 23},{  9}}, {{279},{  9}},
-{{151},{  9}}, {{407},{  9}}, {{ 87},{  9}}, {{343},{  9}}, {{215},{  9}},
-{{471},{  9}}, {{ 55},{  9}}, {{311},{  9}}, {{183},{  9}}, {{439},{  9}},
-{{119},{  9}}, {{375},{  9}}, {{247},{  9}}, {{503},{  9}}, {{ 15},{  9}},
-{{271},{  9}}, {{143},{  9}}, {{399},{  9}}, {{ 79},{  9}}, {{335},{  9}},
-{{207},{  9}}, {{463},{  9}}, {{ 47},{  9}}, {{303},{  9}}, {{175},{  9}},
-{{431},{  9}}, {{111},{  9}}, {{367},{  9}}, {{239},{  9}}, {{495},{  9}},
-{{ 31},{  9}}, {{287},{  9}}, {{159},{  9}}, {{415},{  9}}, {{ 95},{  9}},
-{{351},{  9}}, {{223},{  9}}, {{479},{  9}}, {{ 63},{  9}}, {{319},{  9}},
-{{191},{  9}}, {{447},{  9}}, {{127},{  9}}, {{383},{  9}}, {{255},{  9}},
-{{511},{  9}}, {{  0},{  7}}, {{ 64},{  7}}, {{ 32},{  7}}, {{ 96},{  7}},
-{{ 16},{  7}}, {{ 80},{  7}}, {{ 48},{  7}}, {{112},{  7}}, {{  8},{  7}},
-{{ 72},{  7}}, {{ 40},{  7}}, {{104},{  7}}, {{ 24},{  7}}, {{ 88},{  7}},
-{{ 56},{  7}}, {{120},{  7}}, {{  4},{  7}}, {{ 68},{  7}}, {{ 36},{  7}},
-{{100},{  7}}, {{ 20},{  7}}, {{ 84},{  7}}, {{ 52},{  7}}, {{116},{  7}},
-{{  3},{  8}}, {{131},{  8}}, {{ 67},{  8}}, {{195},{  8}}, {{ 35},{  8}},
-{{163},{  8}}, {{ 99},{  8}}, {{227},{  8}}
-};
-
-local const ct_data static_dtree[D_CODES] = {
-{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
-{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
-{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
-{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
-{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
-{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
-};
-
-const uch _dist_code[DIST_CODE_LEN] = {
- 0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,
- 8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,
-18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
-23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
-};
-
-const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {
- 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,
-13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
-17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
-19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
-22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
-23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
-};
-
-local const int base_length[LENGTH_CODES] = {
-0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
-64, 80, 96, 112, 128, 160, 192, 224, 0
-};
-
-local const int base_dist[D_CODES] = {
-    0,     1,     2,     3,     4,     6,     8,    12,    16,    24,
-   32,    48,    64,    96,   128,   192,   256,   384,   512,   768,
- 1024,  1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576
-};
diff --git a/modules/juce_core/zip/zlib/uncompr.c b/modules/juce_core/zip/zlib/uncompr.c
deleted file mode 100644
index 839602f..0000000
--- a/modules/juce_core/zip/zlib/uncompr.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id: uncompr.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#define ZLIB_INTERNAL
-#include "zlib.h"
-
-/* ===========================================================================
-     Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be large enough to hold the
-   entire uncompressed data. (The size of the uncompressed data must have
-   been saved previously by the compressor and transmitted to the decompressor
-   by some mechanism outside the scope of this compression library.)
-   Upon exit, destLen is the actual size of the compressed buffer.
-     This function can be used to decompress a whole file at once if the
-   input file is mmap'ed.
-
-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted.
-*/
-int ZEXPORT uncompress (Bytef *dest,
-                        uLongf *destLen,
-                        const Bytef *source,
-                        uLong sourceLen)
-{
-    z_stream stream;
-    int err;
-
-    stream.next_in = (Bytef*)source;
-    stream.avail_in = (uInt)sourceLen;
-    /* Check for source > 64K on 16-bit machine: */
-    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
-    stream.next_out = dest;
-    stream.avail_out = (uInt)*destLen;
-    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-    stream.zalloc = (alloc_func)0;
-    stream.zfree = (free_func)0;
-
-    err = inflateInit(&stream);
-    if (err != Z_OK) return err;
-
-    err = inflate(&stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-        inflateEnd(&stream);
-        if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
-            return Z_DATA_ERROR;
-        return err;
-    }
-    *destLen = stream.total_out;
-
-    err = inflateEnd(&stream);
-    return err;
-}
diff --git a/modules/juce_core/zip/zlib/zconf.h b/modules/juce_core/zip/zlib/zconf.h
deleted file mode 100644
index f1e9e87..0000000
--- a/modules/juce_core/zip/zlib/zconf.h
+++ /dev/null
@@ -1,345 +0,0 @@
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id: zconf.h,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#ifndef ZCONF_H
-#define ZCONF_H
-
-// *** Just a few hacks here to make it compile nicely with Juce..
-#define Z_PREFIX 1
-#undef __MACTYPES__
-
-#ifdef _MSC_VER
-  #pragma warning (disable : 4131 4127 4244 4267)
-#endif
-
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- */
-#ifdef Z_PREFIX
-#  define deflateInit_          z_deflateInit_
-#  define deflate               z_deflate
-#  define deflateEnd            z_deflateEnd
-#  define inflateInit_          z_inflateInit_
-#  define inflate               z_inflate
-#  define inflateEnd            z_inflateEnd
-#  define inflatePrime          z_inflatePrime
-#  define inflateGetHeader      z_inflateGetHeader
-#  define adler32_combine       z_adler32_combine
-#  define crc32_combine         z_crc32_combine
-#  define deflateInit2_         z_deflateInit2_
-#  define deflateSetDictionary  z_deflateSetDictionary
-#  define deflateCopy           z_deflateCopy
-#  define deflateReset          z_deflateReset
-#  define deflateParams         z_deflateParams
-#  define deflateBound          z_deflateBound
-#  define deflatePrime          z_deflatePrime
-#  define inflateInit2_         z_inflateInit2_
-#  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateSync           z_inflateSync
-#  define inflateSyncPoint      z_inflateSyncPoint
-#  define inflateCopy           z_inflateCopy
-#  define inflateReset          z_inflateReset
-#  define inflateBack           z_inflateBack
-#  define inflateBackEnd        z_inflateBackEnd
-#  define compress              z_compress
-#  define compress2             z_compress2
-#  define compressBound         z_compressBound
-#  define uncompress            z_uncompress
-#  define adler32               z_adler32
-#  define crc32                 z_crc32
-#  define get_crc_table         z_get_crc_table
-#  define zError                z_zError
-
-#  define alloc_func            z_alloc_func
-#  define free_func             z_free_func
-#  define in_func               z_in_func
-#  define out_func              z_out_func
-#  define Byte                  z_Byte
-#  define uInt                  z_uInt
-#  define uLong                 z_uLong
-#  define Bytef                 z_Bytef
-#  define charf                 z_charf
-#  define intf                  z_intf
-#  define uIntf                 z_uIntf
-#  define uLongf                z_uLongf
-#  define voidpf                z_voidpf
-#  define voidp                 z_voidp
-#endif
-
-#if defined(__MSDOS__) && !defined(MSDOS)
-#  define MSDOS
-#endif
-#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
-#  define OS2
-#endif
-#if defined(_WINDOWS) && !defined(WINDOWS)
-#  define WINDOWS
-#endif
-#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
-#  ifndef WIN32
-#    define WIN32
-#  endif
-#endif
-#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
-#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
-#    ifndef SYS16BIT
-#      define SYS16BIT
-#    endif
-#  endif
-#endif
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#ifdef SYS16BIT
-#  define MAXSEG_64K
-#endif
-#ifdef MSDOS
-#  define UNALIGNED_OK
-#endif
-
-#ifdef __STDC_VERSION__
-#  ifndef STDC
-#    define STDC
-#  endif
-#  if __STDC_VERSION__ >= 199901L
-#    ifndef STDC99
-#      define STDC99
-#    endif
-#  endif
-#endif
-#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
-#  define STDC
-#endif
-
-#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
-#  define STDC
-#endif
-
-#ifndef STDC
-#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-#    define const       /* note: need a more gentle solution here */
-#  endif
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
-#endif
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-#  ifdef MAXSEG_64K
-#    define MAX_MEM_LEVEL 8
-#  else
-#    define MAX_MEM_LEVEL 9
-#  endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-#  define MAX_WBITS   15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
-            (1 << (windowBits+2)) +  (1 << (memLevel+9))
- that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
-     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
-   The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
-                        /* Type declarations */
-
-#ifndef OF /* function prototypes */
-#  ifdef STDC
-#    define OF(args)  args
-#  else
-#    define OF(args)  ()
-#  endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#ifdef SYS16BIT
-#  if defined(M_I86SM) || defined(M_I86MM)
-     /* MSC small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef _MSC_VER
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#  if (defined(__SMALL__) || defined(__MEDIUM__))
-     /* Turbo C small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef __BORLANDC__
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#endif
-
-#if defined(WINDOWS) || defined(WIN32)
-   /* If building or using zlib as a DLL, define ZLIB_DLL.
-    * This is not mandatory, but it offers a little performance increase.
-    */
-#  ifdef ZLIB_DLL
-#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
-#      ifdef ZLIB_INTERNAL
-#        define ZEXTERN extern __declspec(dllexport)
-#      else
-#        define ZEXTERN extern __declspec(dllimport)
-#      endif
-#    endif
-#  endif  /* ZLIB_DLL */
-   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
-    * define ZLIB_WINAPI.
-    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
-    */
-#  ifdef ZLIB_WINAPI
-#    ifdef FAR
-#      undef FAR
-#    endif
-#    include <windows.h>
-     /* No need for _export, use ZLIB.DEF instead. */
-     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
-#    define ZEXPORT WINAPI
-#    ifdef WIN32
-#      define ZEXPORTVA WINAPIV
-#    else
-#      define ZEXPORTVA FAR CDECL
-#    endif
-#  endif
-#endif
-
-#if defined (__BEOS__)
-#  ifdef ZLIB_DLL
-#    ifdef ZLIB_INTERNAL
-#      define ZEXPORT   __declspec(dllexport)
-#      define ZEXPORTVA __declspec(dllexport)
-#    else
-#      define ZEXPORT   __declspec(dllimport)
-#      define ZEXPORTVA __declspec(dllimport)
-#    endif
-#  endif
-#endif
-
-#ifndef ZEXTERN
-#  define ZEXTERN extern
-#endif
-#ifndef ZEXPORT
-#  define ZEXPORT
-#endif
-#ifndef ZEXPORTVA
-#  define ZEXPORTVA
-#endif
-
-#ifndef FAR
-#  define FAR
-#endif
-
-#if !defined(__MACTYPES__)
-typedef unsigned char  Byte;  /* 8 bits */
-#endif
-typedef unsigned int   uInt;  /* 16 bits or more */
-typedef unsigned long  uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
-   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-#  define Bytef Byte FAR
-#else
-   typedef Byte  FAR Bytef;
-#endif
-typedef char  FAR charf;
-typedef int   FAR intf;
-typedef uInt  FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
-   typedef void const *voidpc;
-   typedef void FAR   *voidpf;
-   typedef void       *voidp;
-#else
-   typedef Byte const *voidpc;
-   typedef Byte FAR   *voidpf;
-   typedef Byte       *voidp;
-#endif
-
-#if 0           /* HAVE_UNISTD_H -- this line is updated by ./configure */
-#  include <sys/types.h> /* for off_t */
-#  include <unistd.h>    /* for SEEK_* and off_t */
-#  ifdef VMS
-#    include <unixio.h>   /* for off_t */
-#  endif
-#  define z_off_t off_t
-#endif
-#ifndef SEEK_SET
-#  define SEEK_SET        0       /* Seek from beginning of file.  */
-#  define SEEK_CUR        1       /* Seek from current position.  */
-#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
-#endif
-#ifndef z_off_t
-#  define z_off_t long
-#endif
-
-#if defined(__OS400__)
-#  define NO_vsnprintf
-#endif
-
-#if defined(__MVS__)
-#  define NO_vsnprintf
-#  ifdef FAR
-#    undef FAR
-#  endif
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-#   pragma map(deflateInit_,"DEIN")
-#   pragma map(deflateInit2_,"DEIN2")
-#   pragma map(deflateEnd,"DEEND")
-#   pragma map(deflateBound,"DEBND")
-#   pragma map(inflateInit_,"ININ")
-#   pragma map(inflateInit2_,"ININ2")
-#   pragma map(inflateEnd,"INEND")
-#   pragma map(inflateSync,"INSY")
-#   pragma map(inflateSetDictionary,"INSEDI")
-#   pragma map(compressBound,"CMBND")
-#   pragma map(inflate_table,"INTABL")
-#   pragma map(inflate_fast,"INFA")
-#   pragma map(inflate_copyright,"INCOPY")
-#endif
-
-#endif /* ZCONF_H */
diff --git a/modules/juce_core/zip/zlib/zconf.in.h b/modules/juce_core/zip/zlib/zconf.in.h
deleted file mode 100644
index 018173a..0000000
--- a/modules/juce_core/zip/zlib/zconf.in.h
+++ /dev/null
@@ -1,332 +0,0 @@
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id: zconf.in.h,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#ifndef ZCONF_H
-#define ZCONF_H
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- */
-#ifdef Z_PREFIX
-#  define deflateInit_          z_deflateInit_
-#  define deflate               z_deflate
-#  define deflateEnd            z_deflateEnd
-#  define inflateInit_          z_inflateInit_
-#  define inflate               z_inflate
-#  define inflateEnd            z_inflateEnd
-#  define deflateInit2_         z_deflateInit2_
-#  define deflateSetDictionary  z_deflateSetDictionary
-#  define deflateCopy           z_deflateCopy
-#  define deflateReset          z_deflateReset
-#  define deflateParams         z_deflateParams
-#  define deflateBound          z_deflateBound
-#  define deflatePrime          z_deflatePrime
-#  define inflateInit2_         z_inflateInit2_
-#  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateSync           z_inflateSync
-#  define inflateSyncPoint      z_inflateSyncPoint
-#  define inflateCopy           z_inflateCopy
-#  define inflateReset          z_inflateReset
-#  define inflateBack           z_inflateBack
-#  define inflateBackEnd        z_inflateBackEnd
-#  define compress              z_compress
-#  define compress2             z_compress2
-#  define compressBound         z_compressBound
-#  define uncompress            z_uncompress
-#  define adler32               z_adler32
-#  define crc32                 z_crc32
-#  define get_crc_table         z_get_crc_table
-#  define zError                z_zError
-
-#  define alloc_func            z_alloc_func
-#  define free_func             z_free_func
-#  define in_func               z_in_func
-#  define out_func              z_out_func
-#  define Byte                  z_Byte
-#  define uInt                  z_uInt
-#  define uLong                 z_uLong
-#  define Bytef                 z_Bytef
-#  define charf                 z_charf
-#  define intf                  z_intf
-#  define uIntf                 z_uIntf
-#  define uLongf                z_uLongf
-#  define voidpf                z_voidpf
-#  define voidp                 z_voidp
-#endif
-
-#if defined(__MSDOS__) && !defined(MSDOS)
-#  define MSDOS
-#endif
-#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
-#  define OS2
-#endif
-#if defined(_WINDOWS) && !defined(WINDOWS)
-#  define WINDOWS
-#endif
-#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
-#  ifndef WIN32
-#    define WIN32
-#  endif
-#endif
-#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
-#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
-#    ifndef SYS16BIT
-#      define SYS16BIT
-#    endif
-#  endif
-#endif
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#ifdef SYS16BIT
-#  define MAXSEG_64K
-#endif
-#ifdef MSDOS
-#  define UNALIGNED_OK
-#endif
-
-#ifdef __STDC_VERSION__
-#  ifndef STDC
-#    define STDC
-#  endif
-#  if __STDC_VERSION__ >= 199901L
-#    ifndef STDC99
-#      define STDC99
-#    endif
-#  endif
-#endif
-#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
-#  define STDC
-#endif
-
-#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
-#  define STDC
-#endif
-
-#ifndef STDC
-#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-#    define const       /* note: need a more gentle solution here */
-#  endif
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
-#endif
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-#  ifdef MAXSEG_64K
-#    define MAX_MEM_LEVEL 8
-#  else
-#    define MAX_MEM_LEVEL 9
-#  endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-#  define MAX_WBITS   15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
-            (1 << (windowBits+2)) +  (1 << (memLevel+9))
- that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
-     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
-   The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
-                        /* Type declarations */
-
-#ifndef OF /* function prototypes */
-#  ifdef STDC
-#    define OF(args)  args
-#  else
-#    define OF(args)  ()
-#  endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#ifdef SYS16BIT
-#  if defined(M_I86SM) || defined(M_I86MM)
-     /* MSC small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef _MSC_VER
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#  if (defined(__SMALL__) || defined(__MEDIUM__))
-     /* Turbo C small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef __BORLANDC__
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#endif
-
-#if defined(WINDOWS) || defined(WIN32)
-   /* If building or using zlib as a DLL, define ZLIB_DLL.
-    * This is not mandatory, but it offers a little performance increase.
-    */
-#  ifdef ZLIB_DLL
-#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
-#      ifdef ZLIB_INTERNAL
-#        define ZEXTERN extern __declspec(dllexport)
-#      else
-#        define ZEXTERN extern __declspec(dllimport)
-#      endif
-#    endif
-#  endif  /* ZLIB_DLL */
-   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
-    * define ZLIB_WINAPI.
-    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
-    */
-#  ifdef ZLIB_WINAPI
-#    ifdef FAR
-#      undef FAR
-#    endif
-#    include <windows.h>
-     /* No need for _export, use ZLIB.DEF instead. */
-     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
-#    define ZEXPORT WINAPI
-#    ifdef WIN32
-#      define ZEXPORTVA WINAPIV
-#    else
-#      define ZEXPORTVA FAR CDECL
-#    endif
-#  endif
-#endif
-
-#if defined (__BEOS__)
-#  ifdef ZLIB_DLL
-#    ifdef ZLIB_INTERNAL
-#      define ZEXPORT   __declspec(dllexport)
-#      define ZEXPORTVA __declspec(dllexport)
-#    else
-#      define ZEXPORT   __declspec(dllimport)
-#      define ZEXPORTVA __declspec(dllimport)
-#    endif
-#  endif
-#endif
-
-#ifndef ZEXTERN
-#  define ZEXTERN extern
-#endif
-#ifndef ZEXPORT
-#  define ZEXPORT
-#endif
-#ifndef ZEXPORTVA
-#  define ZEXPORTVA
-#endif
-
-#ifndef FAR
-#  define FAR
-#endif
-
-#if !defined(__MACTYPES__)
-typedef unsigned char  Byte;  /* 8 bits */
-#endif
-typedef unsigned int   uInt;  /* 16 bits or more */
-typedef unsigned long  uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
-   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-#  define Bytef Byte FAR
-#else
-   typedef Byte  FAR Bytef;
-#endif
-typedef char  FAR charf;
-typedef int   FAR intf;
-typedef uInt  FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
-   typedef void const *voidpc;
-   typedef void FAR   *voidpf;
-   typedef void       *voidp;
-#else
-   typedef Byte const *voidpc;
-   typedef Byte FAR   *voidpf;
-   typedef Byte       *voidp;
-#endif
-
-#if 0           /* HAVE_UNISTD_H -- this line is updated by ./configure */
-#  include <sys/types.h> /* for off_t */
-#  include <unistd.h>    /* for SEEK_* and off_t */
-#  ifdef VMS
-#    include <unixio.h>   /* for off_t */
-#  endif
-#  define z_off_t off_t
-#endif
-#ifndef SEEK_SET
-#  define SEEK_SET        0       /* Seek from beginning of file.  */
-#  define SEEK_CUR        1       /* Seek from current position.  */
-#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
-#endif
-#ifndef z_off_t
-#  define z_off_t long
-#endif
-
-#if defined(__OS400__)
-#  define NO_vsnprintf
-#endif
-
-#if defined(__MVS__)
-#  define NO_vsnprintf
-#  ifdef FAR
-#    undef FAR
-#  endif
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-#   pragma map(deflateInit_,"DEIN")
-#   pragma map(deflateInit2_,"DEIN2")
-#   pragma map(deflateEnd,"DEEND")
-#   pragma map(deflateBound,"DEBND")
-#   pragma map(inflateInit_,"ININ")
-#   pragma map(inflateInit2_,"ININ2")
-#   pragma map(inflateEnd,"INEND")
-#   pragma map(inflateSync,"INSY")
-#   pragma map(inflateSetDictionary,"INSEDI")
-#   pragma map(compressBound,"CMBND")
-#   pragma map(inflate_table,"INTABL")
-#   pragma map(inflate_fast,"INFA")
-#   pragma map(inflate_copyright,"INCOPY")
-#endif
-
-#endif /* ZCONF_H */
diff --git a/modules/juce_core/zip/zlib/zlib.h b/modules/juce_core/zip/zlib/zlib.h
deleted file mode 100644
index bdf8af7..0000000
--- a/modules/juce_core/zip/zlib/zlib.h
+++ /dev/null
@@ -1,1358 +0,0 @@
-/* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.3, July 18th, 2005
-
-  Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  Jean-loup Gailly        Mark Adler
-  jloup at gzip.org          madler at alumni.caltech.edu
-
-
-  The data format used by the zlib library is described by RFCs (Request for
-  Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt
-  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
-*/
-
-#ifndef ZLIB_H
-#define ZLIB_H
-
-#include "zconf.h"
-
-#ifdef __cplusplus
-//extern "C" {
-#endif
-
-#define ZLIB_VERSION "1.2.3"
-#define ZLIB_VERNUM 0x1230
-
-
-/*
-     The 'zlib' compression library provides in-memory compression and
-  decompression functions, including integrity checks of the uncompressed
-  data.  This version of the library supports only one compression method
-  (deflation) but other algorithms will be added later and will have the same
-  stream interface.
-
-     Compression can be done in a single step if the buffers are large
-  enough (for example if an input file is mmap'ed), or can be done by
-  repeated calls of the compression function.  In the latter case, the
-  application must provide more input and/or consume the output
-  (providing more output space) before each call.
-
-     The compressed data format used by default by the in-memory functions is
-  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
-  around a deflate stream, which is itself documented in RFC 1951.
-
-     The library also supports reading and writing files in gzip (.gz) format
-  with an interface similar to that of stdio using the functions that start
-  with "gz".  The gzip format is different from the zlib format.  gzip is a
-  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
-
-     This library can optionally read and write gzip streams in memory as well.
-
-     The zlib format was designed to be compact and fast for use in memory
-  and on communications channels.  The gzip format was designed for single-
-  file compression on file systems, has a larger header than zlib to maintain
-  directory information, and uses a different, slower check method than zlib.
-
-     The library does not install any signal handler. The decoder checks
-  the consistency of the compressed data, so the library should never
-  crash even in case of corrupted input.
-*/
-
-typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
-typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
-
-struct internal_state;
-
-typedef struct z_stream_s {
-    Bytef    *next_in;  /* next input byte */
-    uInt     avail_in;  /* number of bytes available at next_in */
-    uLong    total_in;  /* total nb of input bytes read so far */
-
-    Bytef    *next_out; /* next output byte should be put there */
-    uInt     avail_out; /* remaining free space at next_out */
-    uLong    total_out; /* total nb of bytes output so far */
-
-    char     *msg;      /* last error message, NULL if no error */
-    struct internal_state FAR *state; /* not visible by applications */
-
-    alloc_func zalloc;  /* used to allocate the internal state */
-    free_func  zfree;   /* used to free the internal state */
-    voidpf     opaque;  /* private data object passed to zalloc and zfree */
-
-    int     data_type;  /* best guess about the data type: binary or text */
-    uLong   adler;      /* adler32 value of the uncompressed data */
-    uLong   reserved;   /* reserved for future use */
-} z_stream;
-
-typedef z_stream FAR *z_streamp;
-
-/*
-     gzip header information passed to and from zlib routines.  See RFC 1952
-  for more details on the meanings of these fields.
-*/
-typedef struct gz_header_s {
-    int     text;       /* true if compressed data believed to be text */
-    uLong   time;       /* modification time */
-    int     xflags;     /* extra flags (not used when writing a gzip file) */
-    int     os;         /* operating system */
-    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
-    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
-    uInt    extra_max;  /* space at extra (only when reading header) */
-    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
-    uInt    name_max;   /* space at name (only when reading header) */
-    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
-    uInt    comm_max;   /* space at comment (only when reading header) */
-    int     hcrc;       /* true if there was or will be a header crc */
-    int     done;       /* true when done reading gzip header (not used
-                           when writing a gzip file) */
-} gz_header;
-
-typedef gz_header FAR *gz_headerp;
-
-/*
-   The application must update next_in and avail_in when avail_in has
-   dropped to zero. It must update next_out and avail_out when avail_out
-   has dropped to zero. The application must initialize zalloc, zfree and
-   opaque before calling the init function. All other fields are set by the
-   compression library and must not be updated by the application.
-
-   The opaque value provided by the application will be passed as the first
-   parameter for calls of zalloc and zfree. This can be useful for custom
-   memory management. The compression library attaches no meaning to the
-   opaque value.
-
-   zalloc must return Z_NULL if there is not enough memory for the object.
-   If zlib is used in a multi-threaded application, zalloc and zfree must be
-   thread safe.
-
-   On 16-bit systems, the functions zalloc and zfree must be able to allocate
-   exactly 65536 bytes, but will not be required to allocate more than this
-   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
-   pointers returned by zalloc for objects of exactly 65536 bytes *must*
-   have their offset normalized to zero. The default allocation function
-   provided by this library ensures this (see zutil.c). To reduce memory
-   requirements and avoid any allocation of 64K objects, at the expense of
-   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
-
-   The fields total_in and total_out can be used for statistics or
-   progress reports. After compression, total_in holds the total size of
-   the uncompressed data and may be saved for use in the decompressor
-   (particularly if the decompressor wants to decompress everything in
-   a single step).
-*/
-
-                        /* constants */
-
-#define Z_NO_FLUSH      0
-#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
-#define Z_SYNC_FLUSH    2
-#define Z_FULL_FLUSH    3
-#define Z_FINISH        4
-#define Z_BLOCK         5
-/* Allowed flush values; see deflate() and inflate() below for details */
-
-#define Z_OK            0
-#define Z_STREAM_END    1
-#define Z_NEED_DICT     2
-#define Z_ERRNO        (-1)
-#define Z_STREAM_ERROR (-2)
-#define Z_DATA_ERROR   (-3)
-#define Z_MEM_ERROR    (-4)
-#define Z_BUF_ERROR    (-5)
-#define Z_VERSION_ERROR (-6)
-/* Return codes for the compression/decompression functions. Negative
- * values are errors, positive values are used for special but normal events.
- */
-
-#define Z_NO_COMPRESSION         0
-#define Z_BEST_SPEED             1
-#define Z_BEST_COMPRESSION       9
-#define Z_DEFAULT_COMPRESSION  (-1)
-/* compression levels */
-
-#define Z_FILTERED            1
-#define Z_HUFFMAN_ONLY        2
-#define Z_RLE                 3
-#define Z_FIXED               4
-#define Z_DEFAULT_STRATEGY    0
-/* compression strategy; see deflateInit2() below for details */
-
-#define Z_BINARY   0
-#define Z_TEXT     1
-#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
-#define Z_UNKNOWN  2
-/* Possible values of the data_type field (though see inflate()) */
-
-#define Z_DEFLATED   8
-/* The deflate compression method (the only one supported in this version) */
-
-#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
-
-#define zlib_version zlibVersion()
-/* for compatibility with versions < 1.0.2 */
-
-                        /* basic functions */
-
-//ZEXTERN const char * ZEXPORT zlibVersion OF((void));
-/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
-   If the first character differs, the library code actually used is
-   not compatible with the zlib.h header file used by the application.
-   This check is automatically made by deflateInit and inflateInit.
- */
-
-/*
-ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
-
-     Initializes the internal stream state for compression. The fields
-   zalloc, zfree and opaque must be initialized before by the caller.
-   If zalloc and zfree are set to Z_NULL, deflateInit updates them to
-   use default allocation functions.
-
-     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
-   1 gives best speed, 9 gives best compression, 0 gives no compression at
-   all (the input data is simply copied a block at a time).
-   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
-   compression (currently equivalent to level 6).
-
-     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
-   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
-   with the version assumed by the caller (ZLIB_VERSION).
-   msg is set to null if there is no error message.  deflateInit does not
-   perform any compression: this will be done by deflate().
-*/
-
-
-ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
-/*
-    deflate compresses as much data as possible, and stops when the input
-  buffer becomes empty or the output buffer becomes full. It may introduce some
-  output latency (reading input without producing any output) except when
-  forced to flush.
-
-    The detailed semantics are as follows. deflate performs one or both of the
-  following actions:
-
-  - Compress more input starting at next_in and update next_in and avail_in
-    accordingly. If not all input can be processed (because there is not
-    enough room in the output buffer), next_in and avail_in are updated and
-    processing will resume at this point for the next call of deflate().
-
-  - Provide more output starting at next_out and update next_out and avail_out
-    accordingly. This action is forced if the parameter flush is non zero.
-    Forcing flush frequently degrades the compression ratio, so this parameter
-    should be set only when necessary (in interactive applications).
-    Some output may be provided even if flush is not set.
-
-  Before the call of deflate(), the application should ensure that at least
-  one of the actions is possible, by providing more input and/or consuming
-  more output, and updating avail_in or avail_out accordingly; avail_out
-  should never be zero before the call. The application can consume the
-  compressed output when it wants, for example when the output buffer is full
-  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
-  and with zero avail_out, it must be called again after making room in the
-  output buffer because there might be more output pending.
-
-    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
-  decide how much data to accumualte before producing output, in order to
-  maximize compression.
-
-    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
-  flushed to the output buffer and the output is aligned on a byte boundary, so
-  that the decompressor can get all input data available so far. (In particular
-  avail_in is zero after the call if enough output space has been provided
-  before the call.)  Flushing may degrade compression for some compression
-  algorithms and so it should be used only when necessary.
-
-    If flush is set to Z_FULL_FLUSH, all output is flushed as with
-  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
-  restart from this point if previous compressed data has been damaged or if
-  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
-  compression.
-
-    If deflate returns with avail_out == 0, this function must be called again
-  with the same value of the flush parameter and more output space (updated
-  avail_out), until the flush is complete (deflate returns with non-zero
-  avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
-  avail_out is greater than six to avoid repeated flush markers due to
-  avail_out == 0 on return.
-
-    If the parameter flush is set to Z_FINISH, pending input is processed,
-  pending output is flushed and deflate returns with Z_STREAM_END if there
-  was enough output space; if deflate returns with Z_OK, this function must be
-  called again with Z_FINISH and more output space (updated avail_out) but no
-  more input data, until it returns with Z_STREAM_END or an error. After
-  deflate has returned Z_STREAM_END, the only possible operations on the
-  stream are deflateReset or deflateEnd.
-
-    Z_FINISH can be used immediately after deflateInit if all the compression
-  is to be done in a single step. In this case, avail_out must be at least
-  the value returned by deflateBound (see below). If deflate does not return
-  Z_STREAM_END, then it must be called again as described above.
-
-    deflate() sets strm->adler to the adler32 checksum of all input read
-  so far (that is, total_in bytes).
-
-    deflate() may update strm->data_type if it can make a good guess about
-  the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
-  binary. This field is only for information purposes and does not affect
-  the compression algorithm in any manner.
-
-    deflate() returns Z_OK if some progress has been made (more input
-  processed or more output produced), Z_STREAM_END if all input has been
-  consumed and all output has been produced (only when flush is set to
-  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
-  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
-  (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
-  fatal, and deflate() can be called again with more input and more output
-  space to continue compressing.
-*/
-
-
-ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
-/*
-     All dynamically allocated data structures for this stream are freed.
-   This function discards any unprocessed input and does not flush any
-   pending output.
-
-     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
-   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
-   prematurely (some input or output was discarded). In the error case,
-   msg may be set but then points to a static string (which must not be
-   deallocated).
-*/
-
-
-/*
-ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
-
-     Initializes the internal stream state for decompression. The fields
-   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
-   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
-   value depends on the compression method), inflateInit determines the
-   compression method from the zlib header and allocates all data structures
-   accordingly; otherwise the allocation will be deferred to the first call of
-   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
-   use default allocation functions.
-
-     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
-   version assumed by the caller.  msg is set to null if there is no error
-   message. inflateInit does not perform any decompression apart from reading
-   the zlib header if present: this will be done by inflate().  (So next_in and
-   avail_in may be modified, but next_out and avail_out are unchanged.)
-*/
-
-
-ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
-/*
-    inflate decompresses as much data as possible, and stops when the input
-  buffer becomes empty or the output buffer becomes full. It may introduce
-  some output latency (reading input without producing any output) except when
-  forced to flush.
-
-  The detailed semantics are as follows. inflate performs one or both of the
-  following actions:
-
-  - Decompress more input starting at next_in and update next_in and avail_in
-    accordingly. If not all input can be processed (because there is not
-    enough room in the output buffer), next_in is updated and processing
-    will resume at this point for the next call of inflate().
-
-  - Provide more output starting at next_out and update next_out and avail_out
-    accordingly.  inflate() provides as much output as possible, until there
-    is no more input data or no more space in the output buffer (see below
-    about the flush parameter).
-
-  Before the call of inflate(), the application should ensure that at least
-  one of the actions is possible, by providing more input and/or consuming
-  more output, and updating the next_* and avail_* values accordingly.
-  The application can consume the uncompressed output when it wants, for
-  example when the output buffer is full (avail_out == 0), or after each
-  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
-  must be called again after making room in the output buffer because there
-  might be more output pending.
-
-    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH,
-  Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much
-  output as possible to the output buffer. Z_BLOCK requests that inflate() stop
-  if and when it gets to the next deflate block boundary. When decoding the
-  zlib or gzip format, this will cause inflate() to return immediately after
-  the header and before the first block. When doing a raw inflate, inflate()
-  will go ahead and process the first block, and will return when it gets to
-  the end of that block, or when it runs out of data.
-
-    The Z_BLOCK option assists in appending to or combining deflate streams.
-  Also to assist in this, on return inflate() will set strm->data_type to the
-  number of unused bits in the last byte taken from strm->next_in, plus 64
-  if inflate() is currently decoding the last block in the deflate stream,
-  plus 128 if inflate() returned immediately after decoding an end-of-block
-  code or decoding the complete header up to just before the first byte of the
-  deflate stream. The end-of-block will not be indicated until all of the
-  uncompressed data from that block has been written to strm->next_out.  The
-  number of unused bits may in general be greater than seven, except when
-  bit 7 of data_type is set, in which case the number of unused bits will be
-  less than eight.
-
-    inflate() should normally be called until it returns Z_STREAM_END or an
-  error. However if all decompression is to be performed in a single step
-  (a single call of inflate), the parameter flush should be set to
-  Z_FINISH. In this case all pending input is processed and all pending
-  output is flushed; avail_out must be large enough to hold all the
-  uncompressed data. (The size of the uncompressed data may have been saved
-  by the compressor for this purpose.) The next operation on this stream must
-  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
-  is never required, but can be used to inform inflate that a faster approach
-  may be used for the single inflate() call.
-
-     In this implementation, inflate() always flushes as much output as
-  possible to the output buffer, and always uses the faster approach on the
-  first call. So the only effect of the flush parameter in this implementation
-  is on the return value of inflate(), as noted below, or when it returns early
-  because Z_BLOCK is used.
-
-     If a preset dictionary is needed after this call (see inflateSetDictionary
-  below), inflate sets strm->adler to the adler32 checksum of the dictionary
-  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
-  strm->adler to the adler32 checksum of all output produced so far (that is,
-  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
-  below. At the end of the stream, inflate() checks that its computed adler32
-  checksum is equal to that saved by the compressor and returns Z_STREAM_END
-  only if the checksum is correct.
-
-    inflate() will decompress and check either zlib-wrapped or gzip-wrapped
-  deflate data.  The header type is detected automatically.  Any information
-  contained in the gzip header is not retained, so applications that need that
-  information should instead use raw inflate, see inflateInit2() below, or
-  inflateBack() and perform their own processing of the gzip header and
-  trailer.
-
-    inflate() returns Z_OK if some progress has been made (more input processed
-  or more output produced), Z_STREAM_END if the end of the compressed data has
-  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
-  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
-  corrupted (input stream not conforming to the zlib format or incorrect check
-  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
-  if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
-  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
-  output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
-  inflate() can be called again with more input and more output space to
-  continue decompressing. If Z_DATA_ERROR is returned, the application may then
-  call inflateSync() to look for a good compression block if a partial recovery
-  of the data is desired.
-*/
-
-
-ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
-/*
-     All dynamically allocated data structures for this stream are freed.
-   This function discards any unprocessed input and does not flush any
-   pending output.
-
-     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-   was inconsistent. In the error case, msg may be set but then points to a
-   static string (which must not be deallocated).
-*/
-
-                        /* Advanced functions */
-
-/*
-    The following functions are needed only in some special applications.
-*/
-
-/*
-ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
-                                     int  level,
-                                     int  method,
-                                     int  windowBits,
-                                     int  memLevel,
-                                     int  strategy));
-
-     This is another version of deflateInit with more compression options. The
-   fields next_in, zalloc, zfree and opaque must be initialized before by
-   the caller.
-
-     The method parameter is the compression method. It must be Z_DEFLATED in
-   this version of the library.
-
-     The windowBits parameter is the base two logarithm of the window size
-   (the size of the history buffer). It should be in the range 8..15 for this
-   version of the library. Larger values of this parameter result in better
-   compression at the expense of memory usage. The default value is 15 if
-   deflateInit is used instead.
-
-     windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
-   determines the window size. deflate() will then generate raw deflate data
-   with no zlib header or trailer, and will not compute an adler32 check value.
-
-     windowBits can also be greater than 15 for optional gzip encoding. Add
-   16 to windowBits to write a simple gzip header and trailer around the
-   compressed data instead of a zlib wrapper. The gzip header will have no
-   file name, no extra data, no comment, no modification time (set to zero),
-   no header crc, and the operating system will be set to 255 (unknown).  If a
-   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
-
-     The memLevel parameter specifies how much memory should be allocated
-   for the internal compression state. memLevel=1 uses minimum memory but
-   is slow and reduces compression ratio; memLevel=9 uses maximum memory
-   for optimal speed. The default value is 8. See zconf.h for total memory
-   usage as a function of windowBits and memLevel.
-
-     The strategy parameter is used to tune the compression algorithm. Use the
-   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
-   string match), or Z_RLE to limit match distances to one (run-length
-   encoding). Filtered data consists mostly of small values with a somewhat
-   random distribution. In this case, the compression algorithm is tuned to
-   compress them better. The effect of Z_FILTERED is to force more Huffman
-   coding and less string matching; it is somewhat intermediate between
-   Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as
-   Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy
-   parameter only affects the compression ratio but not the correctness of the
-   compressed output even if it is not set appropriately.  Z_FIXED prevents the
-   use of dynamic Huffman codes, allowing for a simpler decoder for special
-   applications.
-
-      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
-   method). msg is set to null if there is no error message.  deflateInit2 does
-   not perform any compression: this will be done by deflate().
-*/
-
-ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
-                                             const Bytef *dictionary,
-                                             uInt  dictLength));
-/*
-     Initializes the compression dictionary from the given byte sequence
-   without producing any compressed output. This function must be called
-   immediately after deflateInit, deflateInit2 or deflateReset, before any
-   call of deflate. The compressor and decompressor must use exactly the same
-   dictionary (see inflateSetDictionary).
-
-     The dictionary should consist of strings (byte sequences) that are likely
-   to be encountered later in the data to be compressed, with the most commonly
-   used strings preferably put towards the end of the dictionary. Using a
-   dictionary is most useful when the data to be compressed is short and can be
-   predicted with good accuracy; the data can then be compressed better than
-   with the default empty dictionary.
-
-     Depending on the size of the compression data structures selected by
-   deflateInit or deflateInit2, a part of the dictionary may in effect be
-   discarded, for example if the dictionary is larger than the window size in
-   deflate or deflate2. Thus the strings most likely to be useful should be
-   put at the end of the dictionary, not at the front. In addition, the
-   current implementation of deflate will use at most the window size minus
-   262 bytes of the provided dictionary.
-
-     Upon return of this function, strm->adler is set to the adler32 value
-   of the dictionary; the decompressor may later use this value to determine
-   which dictionary has been used by the compressor. (The adler32 value
-   applies to the whole dictionary even if only a subset of the dictionary is
-   actually used by the compressor.) If a raw deflate was requested, then the
-   adler32 value is not computed and strm->adler is not set.
-
-     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
-   parameter is invalid (such as NULL dictionary) or the stream state is
-   inconsistent (for example if deflate has already been called for this stream
-   or if the compression method is bsort). deflateSetDictionary does not
-   perform any compression: this will be done by deflate().
-*/
-
-ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
-                                    z_streamp source));
-/*
-     Sets the destination stream as a complete copy of the source stream.
-
-     This function can be useful when several compression strategies will be
-   tried, for example when there are several ways of pre-processing the input
-   data with a filter. The streams that will be discarded should then be freed
-   by calling deflateEnd.  Note that deflateCopy duplicates the internal
-   compression state which can be quite large, so this strategy is slow and
-   can consume lots of memory.
-
-     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-   (such as zalloc being NULL). msg is left unchanged in both source and
-   destination.
-*/
-
-ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
-/*
-     This function is equivalent to deflateEnd followed by deflateInit,
-   but does not free and reallocate all the internal compression state.
-   The stream will keep the same compression level and any other attributes
-   that may have been set by deflateInit2.
-
-      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being NULL).
-*/
-
-ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
-                                      int level,
-                                      int strategy));
-/*
-     Dynamically update the compression level and compression strategy.  The
-   interpretation of level and strategy is as in deflateInit2.  This can be
-   used to switch between compression and straight copy of the input data, or
-   to switch to a different kind of input data requiring a different
-   strategy. If the compression level is changed, the input available so far
-   is compressed with the old level (and may be flushed); the new level will
-   take effect only at the next call of deflate().
-
-     Before the call of deflateParams, the stream state must be set as for
-   a call of deflate(), since the currently available input may have to
-   be compressed and flushed. In particular, strm->avail_out must be non-zero.
-
-     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
-   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
-   if strm->avail_out was zero.
-*/
-
-ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
-                                    int good_length,
-                                    int max_lazy,
-                                    int nice_length,
-                                    int max_chain));
-/*
-     Fine tune deflate's internal compression parameters.  This should only be
-   used by someone who understands the algorithm used by zlib's deflate for
-   searching for the best matching string, and even then only by the most
-   fanatic optimizer trying to squeeze out the last compressed bit for their
-   specific input data.  Read the deflate.c source code for the meaning of the
-   max_lazy, good_length, nice_length, and max_chain parameters.
-
-     deflateTune() can be called after deflateInit() or deflateInit2(), and
-   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
- */
-
-ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
-                                       uLong sourceLen));
-/*
-     deflateBound() returns an upper bound on the compressed size after
-   deflation of sourceLen bytes.  It must be called after deflateInit()
-   or deflateInit2().  This would be used to allocate an output buffer
-   for deflation in a single pass, and so would be called before deflate().
-*/
-
-ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
-                                     int bits,
-                                     int value));
-/*
-     deflatePrime() inserts bits in the deflate output stream.  The intent
-  is that this function is used to start off the deflate output with the
-  bits leftover from a previous deflate stream when appending to it.  As such,
-  this function can only be used for raw deflate, and must be used before the
-  first deflate() call after a deflateInit2() or deflateReset().  bits must be
-  less than or equal to 16, and that many of the least significant bits of
-  value will be inserted in the output.
-
-      deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
-                                         gz_headerp head));
-/*
-      deflateSetHeader() provides gzip header information for when a gzip
-   stream is requested by deflateInit2().  deflateSetHeader() may be called
-   after deflateInit2() or deflateReset() and before the first call of
-   deflate().  The text, time, os, extra field, name, and comment information
-   in the provided gz_header structure are written to the gzip header (xflag is
-   ignored -- the extra flags are set according to the compression level).  The
-   caller must assure that, if not Z_NULL, name and comment are terminated with
-   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
-   available there.  If hcrc is true, a gzip header crc is included.  Note that
-   the current versions of the command-line version of gzip (up through version
-   1.3.x) do not support header crc's, and will report that it is a "multi-part
-   gzip file" and give up.
-
-      If deflateSetHeader is not used, the default gzip header has text false,
-   the time set to zero, and os set to 255, with no extra, name, or comment
-   fields.  The gzip header is returned to the default state by deflateReset().
-
-      deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-/*
-ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
-                                     int  windowBits));
-
-     This is another version of inflateInit with an extra parameter. The
-   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
-   before by the caller.
-
-     The windowBits parameter is the base two logarithm of the maximum window
-   size (the size of the history buffer).  It should be in the range 8..15 for
-   this version of the library. The default value is 15 if inflateInit is used
-   instead. windowBits must be greater than or equal to the windowBits value
-   provided to deflateInit2() while compressing, or it must be equal to 15 if
-   deflateInit2() was not used. If a compressed stream with a larger window
-   size is given as input, inflate() will return with the error code
-   Z_DATA_ERROR instead of trying to allocate a larger window.
-
-     windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
-   determines the window size. inflate() will then process raw deflate data,
-   not looking for a zlib or gzip header, not generating a check value, and not
-   looking for any check values for comparison at the end of the stream. This
-   is for use with other formats that use the deflate compressed data format
-   such as zip.  Those formats provide their own check values. If a custom
-   format is developed using the raw deflate format for compressed data, it is
-   recommended that a check value such as an adler32 or a crc32 be applied to
-   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
-   most applications, the zlib format should be used as is. Note that comments
-   above on the use in deflateInit2() applies to the magnitude of windowBits.
-
-     windowBits can also be greater than 15 for optional gzip decoding. Add
-   32 to windowBits to enable zlib and gzip decoding with automatic header
-   detection, or add 16 to decode only the gzip format (the zlib format will
-   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is
-   a crc32 instead of an adler32.
-
-     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg
-   is set to null if there is no error message.  inflateInit2 does not perform
-   any decompression apart from reading the zlib header if present: this will
-   be done by inflate(). (So next_in and avail_in may be modified, but next_out
-   and avail_out are unchanged.)
-*/
-
-ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
-                                             const Bytef *dictionary,
-                                             uInt  dictLength));
-/*
-     Initializes the decompression dictionary from the given uncompressed byte
-   sequence. This function must be called immediately after a call of inflate,
-   if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
-   can be determined from the adler32 value returned by that call of inflate.
-   The compressor and decompressor must use exactly the same dictionary (see
-   deflateSetDictionary).  For raw inflate, this function can be called
-   immediately after inflateInit2() or inflateReset() and before any call of
-   inflate() to set the dictionary.  The application must insure that the
-   dictionary that was used for compression is provided.
-
-     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
-   parameter is invalid (such as NULL dictionary) or the stream state is
-   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-   expected one (incorrect adler32 value). inflateSetDictionary does not
-   perform any decompression: this will be done by subsequent calls of
-   inflate().
-*/
-
-ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
-/*
-    Skips invalid compressed data until a full flush point (see above the
-  description of deflate with Z_FULL_FLUSH) can be found, or until all
-  available input is skipped. No output is provided.
-
-    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
-  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
-  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
-  case, the application may save the current current value of total_in which
-  indicates where valid compressed data was found. In the error case, the
-  application may repeatedly call inflateSync, providing more input each time,
-  until success or end of the input data.
-*/
-
-ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
-                                    z_streamp source));
-/*
-     Sets the destination stream as a complete copy of the source stream.
-
-     This function can be useful when randomly accessing a large stream.  The
-   first pass through the stream can periodically record the inflate state,
-   allowing restarting inflate at those points when randomly accessing the
-   stream.
-
-     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-   (such as zalloc being NULL). msg is left unchanged in both source and
-   destination.
-*/
-
-ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
-/*
-     This function is equivalent to inflateEnd followed by inflateInit,
-   but does not free and reallocate all the internal decompression state.
-   The stream will keep attributes that may have been set by inflateInit2.
-
-      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being NULL).
-*/
-
-ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
-                                     int bits,
-                                     int value));
-/*
-     This function inserts bits in the inflate input stream.  The intent is
-  that this function is used to start inflating at a bit position in the
-  middle of a byte.  The provided bits will be used before any bytes are used
-  from next_in.  This function should only be used with raw inflate, and
-  should be used before the first inflate() call after inflateInit2() or
-  inflateReset().  bits must be less than or equal to 16, and that many of the
-  least significant bits of value will be inserted in the input.
-
-      inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
-                                         gz_headerp head));
-/*
-      inflateGetHeader() requests that gzip header information be stored in the
-   provided gz_header structure.  inflateGetHeader() may be called after
-   inflateInit2() or inflateReset(), and before the first call of inflate().
-   As inflate() processes the gzip stream, head->done is zero until the header
-   is completed, at which time head->done is set to one.  If a zlib stream is
-   being decoded, then head->done is set to -1 to indicate that there will be
-   no gzip header information forthcoming.  Note that Z_BLOCK can be used to
-   force inflate() to return immediately after header processing is complete
-   and before any actual data is decompressed.
-
-      The text, time, xflags, and os fields are filled in with the gzip header
-   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
-   was valid if done is set to one.)  If extra is not Z_NULL, then extra_max
-   contains the maximum number of bytes to write to extra.  Once done is true,
-   extra_len contains the actual extra field length, and extra contains the
-   extra field, or that field truncated if extra_max is less than extra_len.
-   If name is not Z_NULL, then up to name_max characters are written there,
-   terminated with a zero unless the length is greater than name_max.  If
-   comment is not Z_NULL, then up to comm_max characters are written there,
-   terminated with a zero unless the length is greater than comm_max.  When
-   any of extra, name, or comment are not Z_NULL and the respective field is
-   not present in the header, then that field is set to Z_NULL to signal its
-   absence.  This allows the use of deflateSetHeader() with the returned
-   structure to duplicate the header.  However if those fields are set to
-   allocated memory, then the application will need to save those pointers
-   elsewhere so that they can be eventually freed.
-
-      If inflateGetHeader is not used, then the header information is simply
-   discarded.  The header is always checked for validity, including the header
-   CRC if present.  inflateReset() will reset the process to discard the header
-   information.  The application would need to call inflateGetHeader() again to
-   retrieve the header from the next gzip stream.
-
-      inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-/*
-ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
-                                        unsigned char FAR *window));
-
-     Initialize the internal stream state for decompression using inflateBack()
-   calls.  The fields zalloc, zfree and opaque in strm must be initialized
-   before the call.  If zalloc and zfree are Z_NULL, then the default library-
-   derived memory allocation routines are used.  windowBits is the base two
-   logarithm of the window size, in the range 8..15.  window is a caller
-   supplied buffer of that size.  Except for special applications where it is
-   assured that deflate was used with small window sizes, windowBits must be 15
-   and a 32K byte window must be supplied to be able to decompress general
-   deflate streams.
-
-     See inflateBack() for the usage of these routines.
-
-     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
-   the paramaters are invalid, Z_MEM_ERROR if the internal state could not
-   be allocated, or Z_VERSION_ERROR if the version of the library does not
-   match the version of the header file.
-*/
-
-typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
-typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
-
-ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
-                                    in_func in, void FAR *in_desc,
-                                    out_func out, void FAR *out_desc));
-/*
-     inflateBack() does a raw inflate with a single call using a call-back
-   interface for input and output.  This is more efficient than inflate() for
-   file i/o applications in that it avoids copying between the output and the
-   sliding window by simply making the window itself the output buffer.  This
-   function trusts the application to not change the output buffer passed by
-   the output function, at least until inflateBack() returns.
-
-     inflateBackInit() must be called first to allocate the internal state
-   and to initialize the state with the user-provided window buffer.
-   inflateBack() may then be used multiple times to inflate a complete, raw
-   deflate stream with each call.  inflateBackEnd() is then called to free
-   the allocated state.
-
-     A raw deflate stream is one with no zlib or gzip header or trailer.
-   This routine would normally be used in a utility that reads zip or gzip
-   files and writes out uncompressed files.  The utility would decode the
-   header and process the trailer on its own, hence this routine expects
-   only the raw deflate stream to decompress.  This is different from the
-   normal behavior of inflate(), which expects either a zlib or gzip header and
-   trailer around the deflate stream.
-
-     inflateBack() uses two subroutines supplied by the caller that are then
-   called by inflateBack() for input and output.  inflateBack() calls those
-   routines until it reads a complete deflate stream and writes out all of the
-   uncompressed data, or until it encounters an error.  The function's
-   parameters and return types are defined above in the in_func and out_func
-   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
-   number of bytes of provided input, and a pointer to that input in buf.  If
-   there is no input available, in() must return zero--buf is ignored in that
-   case--and inflateBack() will return a buffer error.  inflateBack() will call
-   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
-   should return zero on success, or non-zero on failure.  If out() returns
-   non-zero, inflateBack() will return with an error.  Neither in() nor out()
-   are permitted to change the contents of the window provided to
-   inflateBackInit(), which is also the buffer that out() uses to write from.
-   The length written by out() will be at most the window size.  Any non-zero
-   amount of input may be provided by in().
-
-     For convenience, inflateBack() can be provided input on the first call by
-   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
-   in() will be called.  Therefore strm->next_in must be initialized before
-   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
-   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
-   must also be initialized, and then if strm->avail_in is not zero, input will
-   initially be taken from strm->next_in[0 .. strm->avail_in - 1].
-
-     The in_desc and out_desc parameters of inflateBack() is passed as the
-   first parameter of in() and out() respectively when they are called.  These
-   descriptors can be optionally used to pass any information that the caller-
-   supplied in() and out() functions need to do their job.
-
-     On return, inflateBack() will set strm->next_in and strm->avail_in to
-   pass back any unused input that was provided by the last in() call.  The
-   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
-   if in() or out() returned an error, Z_DATA_ERROR if there was a format
-   error in the deflate stream (in which case strm->msg is set to indicate the
-   nature of the error), or Z_STREAM_ERROR if the stream was not properly
-   initialized.  In the case of Z_BUF_ERROR, an input or output error can be
-   distinguished using strm->next_in which will be Z_NULL only if in() returned
-   an error.  If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to
-   out() returning non-zero.  (in() will always be called before out(), so
-   strm->next_in is assured to be defined if out() returns non-zero.)  Note
-   that inflateBack() cannot return Z_OK.
-*/
-
-ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
-/*
-     All memory allocated by inflateBackInit() is freed.
-
-     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
-   state was inconsistent.
-*/
-
-//ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
-/* Return flags indicating compile-time options.
-
-    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
-     1.0: size of uInt
-     3.2: size of uLong
-     5.4: size of voidpf (pointer)
-     7.6: size of z_off_t
-
-    Compiler, assembler, and debug options:
-     8: DEBUG
-     9: ASMV or ASMINF -- use ASM code
-     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
-     11: 0 (reserved)
-
-    One-time table building (smaller code, but not thread-safe if true):
-     12: BUILDFIXED -- build static block decoding tables when needed
-     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
-     14,15: 0 (reserved)
-
-    Library content (indicates missing functionality):
-     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
-                          deflate code when not needed)
-     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
-                    and decode gzip streams (to avoid linking crc code)
-     18-19: 0 (reserved)
-
-    Operation variations (changes in library functionality):
-     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
-     21: FASTEST -- deflate algorithm with only one, lowest compression level
-     22,23: 0 (reserved)
-
-    The sprintf variant used by gzprintf (zero is best):
-     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
-     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
-     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
-
-    Remainder:
-     27-31: 0 (reserved)
- */
-
-
-                        /* utility functions */
-
-/*
-     The following utility functions are implemented on top of the
-   basic stream-oriented functions. To simplify the interface, some
-   default options are assumed (compression level and memory usage,
-   standard memory allocation functions). The source code of these
-   utility functions can easily be modified if you need special options.
-*/
-
-ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
-                                 const Bytef *source, uLong sourceLen));
-/*
-     Compresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be at least the value returned
-   by compressBound(sourceLen). Upon exit, destLen is the actual size of the
-   compressed buffer.
-     This function can be used to compress a whole file at once if the
-   input file is mmap'ed.
-     compress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer.
-*/
-
-ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
-                                  const Bytef *source, uLong sourceLen,
-                                  int level));
-/*
-     Compresses the source buffer into the destination buffer. The level
-   parameter has the same meaning as in deflateInit.  sourceLen is the byte
-   length of the source buffer. Upon entry, destLen is the total size of the
-   destination buffer, which must be at least the value returned by
-   compressBound(sourceLen). Upon exit, destLen is the actual size of the
-   compressed buffer.
-
-     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
-   Z_STREAM_ERROR if the level parameter is invalid.
-*/
-
-ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
-/*
-     compressBound() returns an upper bound on the compressed size after
-   compress() or compress2() on sourceLen bytes.  It would be used before
-   a compress() or compress2() call to allocate the destination buffer.
-*/
-
-ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
-                                   const Bytef *source, uLong sourceLen));
-/*
-     Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be large enough to hold the
-   entire uncompressed data. (The size of the uncompressed data must have
-   been saved previously by the compressor and transmitted to the decompressor
-   by some mechanism outside the scope of this compression library.)
-   Upon exit, destLen is the actual size of the compressed buffer.
-     This function can be used to decompress a whole file at once if the
-   input file is mmap'ed.
-
-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.
-*/
-
-
-typedef voidp gzFile;
-
-ZEXTERN gzFile ZEXPORT gzopen  OF((const char *path, const char *mode));
-/*
-     Opens a gzip (.gz) file for reading or writing. The mode parameter
-   is as in fopen ("rb" or "wb") but can also include a compression level
-   ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
-   Huffman only compression as in "wb1h", or 'R' for run-length encoding
-   as in "wb1R". (See the description of deflateInit2 for more information
-   about the strategy parameter.)
-
-     gzopen can be used to read a file which is not in gzip format; in this
-   case gzread will directly read from the file without decompression.
-
-     gzopen returns NULL if the file could not be opened or if there was
-   insufficient memory to allocate the (de)compression state; errno
-   can be checked to distinguish the two cases (if errno is zero, the
-   zlib error is Z_MEM_ERROR).  */
-
-ZEXTERN gzFile ZEXPORT gzdopen  OF((int fd, const char *mode));
-/*
-     gzdopen() associates a gzFile with the file descriptor fd.  File
-   descriptors are obtained from calls like open, dup, creat, pipe or
-   fileno (in the file has been previously opened with fopen).
-   The mode parameter is as in gzopen.
-     The next call of gzclose on the returned gzFile will also close the
-   file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
-   descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
-     gzdopen returns NULL if there was insufficient memory to allocate
-   the (de)compression state.
-*/
-
-ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
-/*
-     Dynamically update the compression level or strategy. See the description
-   of deflateInit2 for the meaning of these parameters.
-     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
-   opened for writing.
-*/
-
-ZEXTERN int ZEXPORT    gzread  OF((gzFile file, voidp buf, unsigned len));
-/*
-     Reads the given number of uncompressed bytes from the compressed file.
-   If the input file was not in gzip format, gzread copies the given number
-   of bytes into the buffer.
-     gzread returns the number of uncompressed bytes actually read (0 for
-   end of file, -1 for error). */
-
-ZEXTERN int ZEXPORT    gzwrite OF((gzFile file,
-                                   voidpc buf, unsigned len));
-/*
-     Writes the given number of uncompressed bytes into the compressed file.
-   gzwrite returns the number of uncompressed bytes actually written
-   (0 in case of error).
-*/
-
-ZEXTERN int ZEXPORTVA   gzprintf OF((gzFile file, const char *format, ...));
-/*
-     Converts, formats, and writes the args to the compressed file under
-   control of the format string, as in fprintf. gzprintf returns the number of
-   uncompressed bytes actually written (0 in case of error).  The number of
-   uncompressed bytes written is limited to 4095. The caller should assure that
-   this limit is not exceeded. If it is exceeded, then gzprintf() will return
-   return an error (0) with nothing written. In this case, there may also be a
-   buffer overflow with unpredictable consequences, which is possible only if
-   zlib was compiled with the insecure functions sprintf() or vsprintf()
-   because the secure snprintf() or vsnprintf() functions were not available.
-*/
-
-ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
-/*
-      Writes the given null-terminated string to the compressed file, excluding
-   the terminating null character.
-      gzputs returns the number of characters written, or -1 in case of error.
-*/
-
-ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
-/*
-      Reads bytes from the compressed file until len-1 characters are read, or
-   a newline character is read and transferred to buf, or an end-of-file
-   condition is encountered.  The string is then terminated with a null
-   character.
-      gzgets returns buf, or Z_NULL in case of error.
-*/
-
-ZEXTERN int ZEXPORT    gzputc OF((gzFile file, int c));
-/*
-      Writes c, converted to an unsigned char, into the compressed file.
-   gzputc returns the value that was written, or -1 in case of error.
-*/
-
-ZEXTERN int ZEXPORT    gzgetc OF((gzFile file));
-/*
-      Reads one byte from the compressed file. gzgetc returns this byte
-   or -1 in case of end of file or error.
-*/
-
-ZEXTERN int ZEXPORT    gzungetc OF((int c, gzFile file));
-/*
-      Push one character back onto the stream to be read again later.
-   Only one character of push-back is allowed.  gzungetc() returns the
-   character pushed, or -1 on failure.  gzungetc() will fail if a
-   character has been pushed but not read yet, or if c is -1. The pushed
-   character will be discarded if the stream is repositioned with gzseek()
-   or gzrewind().
-*/
-
-ZEXTERN int ZEXPORT    gzflush OF((gzFile file, int flush));
-/*
-     Flushes all pending output into the compressed file. The parameter
-   flush is as in the deflate() function. The return value is the zlib
-   error number (see function gzerror below). gzflush returns Z_OK if
-   the flush parameter is Z_FINISH and all output could be flushed.
-     gzflush should be called only when strictly necessary because it can
-   degrade compression.
-*/
-
-ZEXTERN z_off_t ZEXPORT    gzseek OF((gzFile file,
-                                      z_off_t offset, int whence));
-/*
-      Sets the starting position for the next gzread or gzwrite on the
-   given compressed file. The offset represents a number of bytes in the
-   uncompressed data stream. The whence parameter is defined as in lseek(2);
-   the value SEEK_END is not supported.
-     If the file is opened for reading, this function is emulated but can be
-   extremely slow. If the file is opened for writing, only forward seeks are
-   supported; gzseek then compresses a sequence of zeroes up to the new
-   starting position.
-
-      gzseek returns the resulting offset location as measured in bytes from
-   the beginning of the uncompressed stream, or -1 in case of error, in
-   particular if the file is opened for writing and the new starting position
-   would be before the current position.
-*/
-
-ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
-/*
-     Rewinds the given file. This function is supported only for reading.
-
-   gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
-*/
-
-ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
-/*
-     Returns the starting position for the next gzread or gzwrite on the
-   given compressed file. This position represents a number of bytes in the
-   uncompressed data stream.
-
-   gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
-*/
-
-ZEXTERN int ZEXPORT gzeof OF((gzFile file));
-/*
-     Returns 1 when EOF has previously been detected reading the given
-   input stream, otherwise zero.
-*/
-
-ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
-/*
-     Returns 1 if file is being read directly without decompression, otherwise
-   zero.
-*/
-
-ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
-/*
-     Flushes all pending output if necessary, closes the compressed file
-   and deallocates all the (de)compression state. The return value is the zlib
-   error number (see function gzerror below).
-*/
-
-ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
-/*
-     Returns the error message for the last error which occurred on the
-   given compressed file. errnum is set to zlib error number. If an
-   error occurred in the file system and not in the compression library,
-   errnum is set to Z_ERRNO and the application may consult errno
-   to get the exact error code.
-*/
-
-ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
-/*
-     Clears the error and end-of-file flags for file. This is analogous to the
-   clearerr() function in stdio. This is useful for continuing to read a gzip
-   file that is being written concurrently.
-*/
-
-                        /* checksum functions */
-
-/*
-     These functions are not related to compression but are exported
-   anyway because they might be useful in applications using the
-   compression library.
-*/
-
-ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
-/*
-     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-   return the updated checksum. If buf is NULL, this function returns
-   the required initial value for the checksum.
-   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-   much faster. Usage example:
-
-     uLong adler = adler32(0L, Z_NULL, 0);
-
-     while (read_buffer(buffer, length) != EOF) {
-       adler = adler32(adler, buffer, length);
-     }
-     if (adler != original_adler) error();
-*/
-
-ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
-                                          z_off_t len2));
-/*
-     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
-   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
-   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
-   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.
-*/
-
-ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
-/*
-     Update a running CRC-32 with the bytes buf[0..len-1] and return the
-   updated CRC-32. If buf is NULL, this function returns the required initial
-   value for the for the crc. Pre- and post-conditioning (one's complement) is
-   performed within this function so it shouldn't be done by the application.
-   Usage example:
-
-     uLong crc = crc32(0L, Z_NULL, 0);
-
-     while (read_buffer(buffer, length) != EOF) {
-       crc = crc32(crc, buffer, length);
-     }
-     if (crc != original_crc) error();
-*/
-
-ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
-
-/*
-     Combine two CRC-32 check values into one.  For two sequences of bytes,
-   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
-   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
-   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
-   len2.
-*/
-
-
-                        /* various hacks, don't look :) */
-
-/* deflateInit and inflateInit are macros to allow checking the zlib version
- * and the compiler's view of z_stream:
- */
-ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
-                                     const char *version, int stream_size));
-ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
-                                     const char *version, int stream_size));
-ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
-                                      int windowBits, int memLevel,
-                                      int strategy, const char *version,
-                                      int stream_size));
-ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
-                                      const char *version, int stream_size));
-ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
-                                         unsigned char FAR *window,
-                                         const char *version,
-                                         int stream_size));
-#define deflateInit(strm, level) \
-        deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit(strm) \
-        inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
-        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-                      (strategy),           ZLIB_VERSION, sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
-        inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
-#define inflateBackInit(strm, windowBits, window) \
-        inflateBackInit_((strm), (windowBits), (window), \
-        ZLIB_VERSION, sizeof(z_stream))
-
-
-#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
-    struct internal_state {int dummy;}; /* hack for buggy compilers */
-#endif
-
-ZEXTERN const char   * ZEXPORT zError           OF((int));
-ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp z));
-ZEXTERN const uLongf * ZEXPORT get_crc_table    OF((void));
-
-#ifdef __cplusplus
-//}
-#endif
-
-#endif /* ZLIB_H */
diff --git a/modules/juce_core/zip/zlib/zutil.c b/modules/juce_core/zip/zlib/zutil.c
deleted file mode 100644
index 630305c..0000000
--- a/modules/juce_core/zip/zlib/zutil.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id: zutil.c,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#include "zutil.h"
-
-#ifndef NO_DUMMY_DECL
-struct internal_state      {int dummy;}; /* for buggy compilers */
-#endif
-
-const char * const z_errmsg[10] = {
-"need dictionary",     /* Z_NEED_DICT       2  */
-"stream end",          /* Z_STREAM_END      1  */
-"",                    /* Z_OK              0  */
-"file error",          /* Z_ERRNO         (-1) */
-"stream error",        /* Z_STREAM_ERROR  (-2) */
-"data error",          /* Z_DATA_ERROR    (-3) */
-"insufficient memory", /* Z_MEM_ERROR     (-4) */
-"buffer error",        /* Z_BUF_ERROR     (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
-
-
-/*const char * ZEXPORT zlibVersion()
-{
-    return ZLIB_VERSION;
-}
-
-uLong ZEXPORT zlibCompileFlags()
-{
-    uLong flags;
-
-    flags = 0;
-    switch (sizeof(uInt)) {
-    case 2:     break;
-    case 4:     flags += 1;     break;
-    case 8:     flags += 2;     break;
-    default:    flags += 3;
-    }
-    switch (sizeof(uLong)) {
-    case 2:     break;
-    case 4:     flags += 1 << 2;        break;
-    case 8:     flags += 2 << 2;        break;
-    default:    flags += 3 << 2;
-    }
-    switch (sizeof(voidpf)) {
-    case 2:     break;
-    case 4:     flags += 1 << 4;        break;
-    case 8:     flags += 2 << 4;        break;
-    default:    flags += 3 << 4;
-    }
-    switch (sizeof(z_off_t)) {
-    case 2:     break;
-    case 4:     flags += 1 << 6;        break;
-    case 8:     flags += 2 << 6;        break;
-    default:    flags += 3 << 6;
-    }
-#ifdef DEBUG
-    flags += 1 << 8;
-#endif
-#if defined(ASMV) || defined(ASMINF)
-    flags += 1 << 9;
-#endif
-#ifdef ZLIB_WINAPI
-    flags += 1 << 10;
-#endif
-#ifdef BUILDFIXED
-    flags += 1 << 12;
-#endif
-#ifdef DYNAMIC_CRC_TABLE
-    flags += 1 << 13;
-#endif
-#ifdef NO_GZCOMPRESS
-    flags += 1L << 16;
-#endif
-#ifdef NO_GZIP
-    flags += 1L << 17;
-#endif
-#ifdef PKZIP_BUG_WORKAROUND
-    flags += 1L << 20;
-#endif
-#ifdef FASTEST
-    flags += 1L << 21;
-#endif
-#ifdef STDC
-#  ifdef NO_vsnprintf
-        flags += 1L << 25;
-#    ifdef HAS_vsprintf_void
-        flags += 1L << 26;
-#    endif
-#  else
-#    ifdef HAS_vsnprintf_void
-        flags += 1L << 26;
-#    endif
-#  endif
-#else
-        flags += 1L << 24;
-#  ifdef NO_snprintf
-        flags += 1L << 25;
-#    ifdef HAS_sprintf_void
-        flags += 1L << 26;
-#    endif
-#  else
-#    ifdef HAS_snprintf_void
-        flags += 1L << 26;
-#    endif
-#  endif
-#endif
-    return flags;
-}*/
-
-#if 0
-
-#  ifndef verbose
-#    define verbose 0
-#  endif
-int z_verbose = verbose;
-
-void z_error (const char *m)
-{
-    fprintf(stderr, "%s\n", m);
-    exit(1);
-}
-#endif
-
-/* exported to allow conversion of error code to string for compress() and
- * uncompress()
- */
-const char * ZEXPORT zError(int err)
-{
-    return ERR_MSG(err);
-}
-
-#if defined(_WIN32_WCE)
-    /* The Microsoft C Run-Time Library for Windows CE doesn't have
-     * errno.  We define it as a global variable to simplify porting.
-     * Its value is always 0 and should not be used.
-     */
-    int errno = 0;
-#endif
-
-#ifndef HAVE_MEMCPY
-
-void zmemcpy(dest, source, len)
-    Bytef* dest;
-    const Bytef* source;
-    uInt  len;
-{
-    if (len == 0) return;
-    do {
-        *dest++ = *source++; /* ??? to be unrolled */
-    } while (--len != 0);
-}
-
-int zmemcmp(s1, s2, len)
-    const Bytef* s1;
-    const Bytef* s2;
-    uInt  len;
-{
-    uInt j;
-
-    for (j = 0; j < len; j++) {
-        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
-    }
-    return 0;
-}
-
-void zmemzero(dest, len)
-    Bytef* dest;
-    uInt  len;
-{
-    if (len == 0) return;
-    do {
-        *dest++ = 0;  /* ??? to be unrolled */
-    } while (--len != 0);
-}
-#endif
-
-
-#ifdef SYS16BIT
-
-#ifdef __TURBOC__
-/* Turbo C in 16-bit mode */
-
-#  define MY_ZCALLOC
-
-/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
- * and farmalloc(64K) returns a pointer with an offset of 8, so we
- * must fix the pointer. Warning: the pointer must be put back to its
- * original form in order to free it, use zcfree().
- */
-
-#define MAX_PTR 10
-/* 10*64K = 640K */
-
-local int next_ptr = 0;
-
-typedef struct ptr_table_s {
-    voidpf org_ptr;
-    voidpf new_ptr;
-} ptr_table;
-
-local ptr_table table[MAX_PTR];
-/* This table is used to remember the original form of pointers
- * to large buffers (64K). Such pointers are normalized with a zero offset.
- * Since MSDOS is not a preemptive multitasking OS, this table is not
- * protected from concurrent access. This hack doesn't work anyway on
- * a protected system like OS/2. Use Microsoft C instead.
- */
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
-    voidpf buf = opaque; /* just to make some compilers happy */
-    ulg bsize = (ulg)items*size;
-
-    /* If we allocate less than 65520 bytes, we assume that farmalloc
-     * will return a usable pointer which doesn't have to be normalized.
-     */
-    if (bsize < 65520L) {
-        buf = farmalloc(bsize);
-        if (*(ush*)&buf != 0) return buf;
-    } else {
-        buf = farmalloc(bsize + 16L);
-    }
-    if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
-    table[next_ptr].org_ptr = buf;
-
-    /* Normalize the pointer to seg:0 */
-    *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
-    *(ush*)&buf = 0;
-    table[next_ptr++].new_ptr = buf;
-    return buf;
-}
-
-void  zcfree (voidpf opaque, voidpf ptr)
-{
-    int n;
-    if (*(ush*)&ptr != 0) { /* object < 64K */
-        farfree(ptr);
-        return;
-    }
-    /* Find the original pointer */
-    for (n = 0; n < next_ptr; n++) {
-        if (ptr != table[n].new_ptr) continue;
-
-        farfree(table[n].org_ptr);
-        while (++n < next_ptr) {
-            table[n-1] = table[n];
-        }
-        next_ptr--;
-        return;
-    }
-    ptr = opaque; /* just to make some compilers happy */
-    Assert(0, "zcfree: ptr not found");
-}
-
-#endif /* __TURBOC__ */
-
-
-#ifdef M_I86
-/* Microsoft C in 16-bit mode */
-
-#  define MY_ZCALLOC
-
-#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
-#  define _halloc  halloc
-#  define _hfree   hfree
-#endif
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
-    if (opaque) opaque = 0; /* to make compiler happy */
-    return _halloc((long)items, size);
-}
-
-void  zcfree (voidpf opaque, voidpf ptr)
-{
-    if (opaque) opaque = 0; /* to make compiler happy */
-    _hfree(ptr);
-}
-
-#endif /* M_I86 */
-
-#endif /* SYS16BIT */
-
-
-#ifndef MY_ZCALLOC /* Any system without a special alloc function */
-
-#ifndef STDC
-extern voidp  malloc OF((uInt size));
-extern voidp  calloc OF((uInt items, uInt size));
-extern void   free   OF((voidpf ptr));
-#endif
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
-    if (opaque) items += size - size; /* make compiler happy */
-    return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
-                              (voidpf)calloc(items, size);
-}
-
-void  zcfree (voidpf opaque, voidpf ptr)
-{
-    free(ptr);
-    if (opaque) return; /* make compiler happy */
-}
-
-#endif /* MY_ZCALLOC */
diff --git a/modules/juce_core/zip/zlib/zutil.h b/modules/juce_core/zip/zlib/zutil.h
deleted file mode 100644
index 3939858..0000000
--- a/modules/juce_core/zip/zlib/zutil.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id: zutil.h,v 1.1 2007/06/07 17:54:37 jules_rms Exp $ */
-
-#ifndef ZUTIL_H
-#define ZUTIL_H
-
-#define ZLIB_INTERNAL
-#include "zlib.h"
-
-#ifdef STDC
-#  ifndef _WIN32_WCE
-#    include <stddef.h>
-#  endif
-#  include <string.h>
-#  include <stdlib.h>
-#endif
-#ifdef NO_ERRNO_H
-#   ifdef _WIN32_WCE
-      /* The Microsoft C Run-Time Library for Windows CE doesn't have
-       * errno.  We define it as a global variable to simplify porting.
-       * Its value is always 0 and should not be used.  We rename it to
-       * avoid conflict with other libraries that use the same workaround.
-       */
-#     define errno z_errno
-#   endif
-    extern int errno;
-#else
-#  ifndef _WIN32_WCE
-#    include <errno.h>
-#  endif
-#endif
-
-#ifndef local
-#  define local static
-#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
-
-typedef unsigned char  uch;
-typedef uch FAR uchf;
-typedef unsigned short ush;
-typedef ush FAR ushf;
-typedef unsigned long  ulg;
-
-extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
-/* (size given to avoid silly warnings with Visual C++) */
-
-#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
-
-#define ERR_RETURN(strm,err) \
-  return (strm->msg = (char*)ERR_MSG(err), (err))
-/* To be used only when the state is known to be valid */
-
-        /* common constants */
-
-#ifndef DEF_WBITS
-#  define DEF_WBITS MAX_WBITS
-#endif
-/* default windowBits for decompression. MAX_WBITS is for compression only */
-
-#if MAX_MEM_LEVEL >= 8
-#  define DEF_MEM_LEVEL 8
-#else
-#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
-#endif
-/* default memLevel */
-
-#define STORED_BLOCK 0
-#define STATIC_TREES 1
-#define DYN_TREES    2
-/* The three kinds of block type */
-
-#define MIN_MATCH  3
-#define MAX_MATCH  258
-/* The minimum and maximum match lengths */
-
-#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
-
-        /* target dependencies */
-
-#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
-#  define OS_CODE  0x00
-#  if defined(__TURBOC__) || defined(__BORLANDC__)
-#    if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
-       /* Allow compilation with ANSI keywords only enabled */
-       void _Cdecl farfree( void *block );
-       void *_Cdecl farmalloc( unsigned long nbytes );
-#    else
-#      include <alloc.h>
-#    endif
-#  else /* MSC or DJGPP */
-#    include <malloc.h>
-#  endif
-#endif
-
-#ifdef AMIGA
-#  define OS_CODE  0x01
-#endif
-
-#if defined(VAXC) || defined(VMS)
-#  define OS_CODE  0x02
-#  define F_OPEN(name, mode) \
-     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
-#endif
-
-#if defined(ATARI) || defined(atarist)
-#  define OS_CODE  0x05
-#endif
-
-#ifdef OS2
-#  define OS_CODE  0x06
-#  ifdef M_I86
-     #include <malloc.h>
-#  endif
-#endif
-
-#if defined(MACOS) || TARGET_OS_MAC
-#  define OS_CODE  0x07
-#  if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-#    include <unix.h> /* for fdopen */
-#  else
-#    ifndef fdopen
-#      define fdopen(fd,mode) NULL /* No fdopen() */
-#    endif
-#  endif
-#endif
-
-#ifdef TOPS20
-#  define OS_CODE  0x0a
-#endif
-
-#ifdef WIN32
-#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
-#    define OS_CODE  0x0b
-#  endif
-#endif
-
-#ifdef __50SERIES /* Prime/PRIMOS */
-#  define OS_CODE  0x0f
-#endif
-
-#if defined(_BEOS_) || defined(RISCOS)
-#  define fdopen(fd,mode) NULL /* No fdopen() */
-#endif
-
-#if (defined(_MSC_VER) && (_MSC_VER > 600))
-#  if defined(_WIN32_WCE)
-#    define fdopen(fd,mode) NULL /* No fdopen() */
-#    ifndef _PTRDIFF_T_DEFINED
-       typedef int ptrdiff_t;
-#      define _PTRDIFF_T_DEFINED
-#    endif
-#  else
-#    define fdopen(fd,type)  _fdopen(fd,type)
-#  endif
-#endif
-
-        /* common defaults */
-
-#ifndef OS_CODE
-#  define OS_CODE  0x03  /* assume Unix */
-#endif
-
-#ifndef F_OPEN
-#  define F_OPEN(name, mode) fopen((name), (mode))
-#endif
-
-         /* functions */
-
-#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-#if defined(__CYGWIN__)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-#ifndef HAVE_VSNPRINTF
-#  ifdef MSDOS
-     /* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
-        but for now we just assume it doesn't. */
-#    define NO_vsnprintf
-#  endif
-#  ifdef __TURBOC__
-#    define NO_vsnprintf
-#  endif
-#  ifdef WIN32
-     /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
-#    if !defined(vsnprintf) && !defined(NO_vsnprintf)
-#      define vsnprintf _vsnprintf
-#    endif
-#  endif
-#  ifdef __SASC
-#    define NO_vsnprintf
-#  endif
-#endif
-#ifdef VMS
-#  define NO_vsnprintf
-#endif
-
-#if defined(pyr)
-#  define NO_MEMCPY
-#endif
-#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
- /* Use our own functions for small and medium model with MSC <= 5.0.
-  * You may have to use the same strategy for Borland C (untested).
-  * The __SC__ check is for Symantec.
-  */
-#  define NO_MEMCPY
-#endif
-#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
-#  define HAVE_MEMCPY
-#endif
-#ifdef HAVE_MEMCPY
-#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
-#    define zmemcpy _fmemcpy
-#    define zmemcmp _fmemcmp
-#    define zmemzero(dest, len) _fmemset(dest, 0, len)
-#  else
-#    define zmemcpy memcpy
-#    define zmemcmp memcmp
-#    define zmemzero(dest, len) memset(dest, 0, len)
-#  endif
-#else
-   extern void zmemcpy  OF((Bytef* dest, const Bytef* source, uInt len));
-   extern int  zmemcmp  OF((const Bytef* s1, const Bytef* s2, uInt len));
-   extern void zmemzero OF((Bytef* dest, uInt len));
-#endif
-
-/* Diagnostic functions */
-#if 0
-#  include <stdio.h>
-   extern int z_verbose;
-   extern void z_error    OF((const char *m));
-#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
-#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
-#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
-#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
-#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
-#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
-#else
-#  define Assert(cond,msg)
-#  define Trace(x)
-#  define Tracev(x)
-#  define Tracevv(x)
-#  define Tracec(c,x)
-#  define Tracecv(c,x)
-#  define z_error(x)
-#  define z_verbose 0
-#endif
-
-
-voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
-void   zcfree  OF((voidpf opaque, voidpf ptr));
-
-#define ZALLOC(strm, items, size) \
-           (*((strm)->zalloc))((strm)->opaque, (items), (size))
-#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
-#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
-
-#endif /* ZUTIL_H */
diff --git a/modules/juce_graphics/image_formats/jpglib/README b/modules/juce_graphics/image_formats/jpglib/README
deleted file mode 100644
index 86cc206..0000000
--- a/modules/juce_graphics/image_formats/jpglib/README
+++ /dev/null
@@ -1,385 +0,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 6b of 27-Mar-1998
-====================================
-
-This distribution contains the sixth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-Serious users of this software (particularly those incorporating it into
-larger programs) should contact IJG at jpeg-info at uunet.uu.net to be added to
-our electronic mailing list.  Mailing list members are notified of updates
-and have a chance to participate in technical discussions, etc.
-
-This software is the work of Tom Lane, Philip Gladstone, Jim Boucher,
-Lee Crocker, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi,
-Guido Vollbeding, Ge' Weijers, and other members of the Independent JPEG
-Group.
-
-IJG is not affiliated with the official ISO JPEG standards committee.
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-RELATED SOFTWARE    Other stuff you should get.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.doc       How to configure and install the IJG software.
-  usage.doc         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.doc).
-  wizard.doc        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.doc       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.doc     Overview of the JPEG library's internal structure.
-  filelist.doc      Road map of IJG files.
-  coderules.doc     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.doc and usage.doc.  Useful information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image compression and
-decompression.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.  JPEG is intended for compressing
-"real-world" scenes; line drawings, cartoons and other non-realistic images
-are not its strong suit.  JPEG is lossy, meaning that the output image is not
-exactly identical to the input image.  Hence you must not use JPEG if you
-have to have identical output bits.  However, on typical photographic images,
-very good compression levels can be obtained with no visible change, and
-remarkably high compression levels are possible if you can tolerate a
-low-quality image.  For more details, see the references, or just experiment
-with various compression settings.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-For legal reasons, we are not distributing code for the arithmetic-coding
-variants of JPEG; see LEGAL ISSUES.  We have made no provision for supporting
-the hierarchical or lossless processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.  We have also included
-"jpegtran", a utility for lossless transcoding between different JPEG
-processes, and "rdjpgcom" and "wrjpgcom", two simple applications for
-inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-1998, Thomas G. Lane.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
-sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
-ansi2knr.c is NOT covered by the above copyright and conditions, but instead
-by the usual distribution terms of the Free Software Foundation; principally,
-that you must include source code if you redistribute it.  (See the file
-ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
-of any program generated from the IJG code, this does not limit you more than
-the foregoing paragraphs do.
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
-by M.I.T. but is also freely distributable.
-
-It appears that the arithmetic coding option of the JPEG spec is covered by
-patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
-legally be used without obtaining one or more licenses.  For this reason,
-support for arithmetic coding has been removed from the free JPEG software.
-(Since arithmetic coding provides only a marginal gain over the unpatented
-Huffman mode, it is unlikely that very many implementations will support it.)
-So far as we are aware, there are no patent restrictions on the remaining
-code.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent, GIF reading support has
-been removed altogether, and the GIF writer has been simplified to produce
-"uncompressed GIFs".  This technique does not use the LZW algorithm; the
-resulting GIF files are larger than usual, but are readable by all standard
-GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We highly recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best full description of JPEG is the textbook "JPEG Still Image Data
-Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published
-by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.  Price US$59.95, 638 pp.
-The book includes the complete text of the ISO JPEG standards (DIS 10918-1
-and draft DIS 10918-2).  This is by far the most complete exposition of JPEG
-in existence, and we highly recommend it.
-
-The JPEG standard itself is not available electronically; you must order a
-paper copy through ISO or ITU.  (Unless you feel a need to own a certified
-official copy, we recommend buying the Pennebaker and Mitchell book instead;
-it's much cheaper and includes a great deal of useful explanatory material.)
-In the USA, copies of the standard may be ordered from ANSI Sales at (212)
-642-4900, or from Global Engineering Documents at (800) 854-7179.  (ANSI
-doesn't take credit card orders, but Global does.)  It's not cheap: as of
-1992, ANSI was charging $95 for Part 1 and $47 for Part 2, plus 7%
-shipping/handling.  The standard is divided into two parts, Part 1 being the
-actual specification, while Part 2 covers compliance testing methods.  Part 1
-is titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-
-Some extensions to the original JPEG standard are defined in JPEG Part 3,
-a newer ISO standard numbered ISO/IEC IS 10918-3 and ITU-T T.84.  IJG
-currently does not support any Part 3 extensions.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  A copy of the JFIF spec is available from:
-	Literature Department
-	C-Cube Microsystems, Inc.
-	1778 McCarthy Blvd.
-	Milpitas, CA 95035
-	phone (408) 944-6300,  fax (408) 944-6314
-A PostScript version of this document is available by FTP at
-ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.  There is also a plain text
-version at ftp://ftp.uu.net/graphics/jpeg/jfif.txt.gz, but it is missing
-the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from ftp.sgi.com or
-from ftp://ftp.uu.net/graphics/jpeg/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.  libtiff is available
-from ftp://ftp.sgi.com/graphics/tiff/.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is ftp.uu.net (Internet
-address 192.48.96.9).  The most recent released version can always be found
-there in directory graphics/jpeg.  This particular version will be archived
-as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz.  If you don't have
-direct Internet access, UUNET's archives are also available via UUCP; contact
-help at uunet.uu.net for information on retrieving files that way.
-
-Numerous Internet sites maintain copies of the UUNET files.  However, only
-ftp.uu.net is guaranteed to have the latest official version.
-
-You can also obtain this software in DOS-compatible "zip" archive format from
-the SimTel archives (ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/), or
-on CompuServe in the Graphics Support forum (GO CIS:GRAPHSUP), library 12
-"JPEG Tools".  Again, these versions may sometimes lag behind the ftp.uu.net
-release.
-
-The JPEG FAQ (Frequently Asked Questions) article is a useful source of
-general information about JPEG.  It is updated constantly and therefore is
-not included in this distribution.  The FAQ is posted every two weeks to
-Usenet newsgroups comp.graphics.misc, news.answers, and other groups.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server at rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-RELATED SOFTWARE
-================
-
-Numerous viewing and image manipulation programs now support JPEG.  (Quite a
-few of them use this library to do so.)  The JPEG FAQ described above lists
-some of the more popular free and shareware viewers, and tells where to
-obtain them on Internet.
-
-If you are on a Unix machine, we highly recommend Jef Poskanzer's free
-PBMPLUS software, which provides many useful operations on PPM-format image
-files.  In particular, it can convert PPM images to and from a wide range of
-other formats, thus making cjpeg/djpeg considerably more useful.  The latest
-version is distributed by the NetPBM group, and is available from numerous
-sites, notably ftp://wuarchive.wustl.edu/graphics/graphics/packages/NetPBM/.
-Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software is;
-you are likely to have difficulty making it work on any non-Unix machine.
-
-A different free JPEG implementation, written by the PVRG group at Stanford,
-is available from ftp://havefun.stanford.edu/pub/jpeg/.  This program
-is designed for research and experimentation rather than production use;
-it is slower, harder to use, and less portable than the IJG code, but it
-is easier to read and modify.  Also, the PVRG code supports lossless JPEG,
-which we do not.  (On the other hand, it doesn't do progressive JPEG.)
-
-
-FILE FORMAT WARS
-================
-
-Some JPEG programs produce files that are not compatible with our library.
-The root of the problem is that the ISO JPEG committee failed to specify a
-concrete file format.  Some vendors "filled in the blanks" on their own,
-creating proprietary formats that no one else could read.  (For example, none
-of the early commercial JPEG implementations for the Macintosh were able to
-exchange compressed files.)
-
-The file format we have adopted is called JFIF (see REFERENCES).  This format
-has been agreed to by a number of major commercial JPEG vendors, and it has
-become the de facto standard.  JFIF is a minimal or "low end" representation.
-We recommend the use of TIFF/JPEG (TIFF revision 6.0 as modified by TIFF
-Technical Note #2) for "high end" applications that need to record a lot of
-additional data about an image.  TIFF/JPEG is fairly new and not yet widely
-supported, unfortunately.
-
-The upcoming JPEG Part 3 standard defines a file format called SPIFF.
-SPIFF is interoperable with JFIF, in the sense that most JFIF decoders should
-be able to read the most common variant of SPIFF.  SPIFF has some technical
-advantages over JFIF, but its major claim to fame is simply that it is an
-official standard rather than an informal one.  At this point it is unclear
-whether SPIFF will supersede JFIF or whether JFIF will remain the de-facto
-standard.  IJG intends to support SPIFF once the standard is frozen, but we
-have not decided whether it should become our default output format or not.
-(In any case, our decoder will remain capable of reading JFIF indefinitely.)
-
-Various proprietary file formats incorporating JPEG compression also exist.
-We have little or no sympathy for the existence of these formats.  Indeed,
-one of the original reasons for developing this free software was to help
-force convergence on common, open format standards for JPEG files.  Don't
-use a proprietary file format!
-
-
-TO DO
-=====
-
-The major thrust for v7 will probably be improvement of visual quality.
-The current method for scaling the quantization tables is known not to be
-very good at low Q values.  We also intend to investigate block boundary
-smoothing, "poor man's variable quantization", and other means of improving
-quality-vs-file-size performance without sacrificing compatibility.
-
-In future versions, we are considering supporting some of the upcoming JPEG
-Part 3 extensions --- principally, variable quantization and the SPIFF file
-format.
-
-As always, speeding things up is of great interest.
-
-Please send bug reports, offers of help, etc. to jpeg-info at uunet.uu.net.
diff --git a/modules/juce_graphics/image_formats/jpglib/cderror.h b/modules/juce_graphics/image_formats/jpglib/cderror.h
deleted file mode 100644
index c19d38f..0000000
--- a/modules/juce_graphics/image_formats/jpglib/cderror.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * cderror.h
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the error and message codes for the cjpeg/djpeg
- * applications.  These strings are not needed as part of the JPEG library
- * proper.
- * Edit this file to add new codes, or to translate the message strings to
- * some other language.
- */
-
-/*
- * To define the enum list of message codes, include this file without
- * defining macro JMESSAGE.  To create a message string table, include it
- * again with a suitable JMESSAGE definition (see jerror.c for an example).
- */
-#ifndef JMESSAGE
-#ifndef CDERROR_H
-#define CDERROR_H
-/* First time through, define the enum list */
-#define JMAKE_ENUM_LIST
-#else
-/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
-#define JMESSAGE(code,string)
-#endif /* CDERROR_H */
-#endif /* JMESSAGE */
-
-#ifdef JMAKE_ENUM_LIST
-
-typedef enum {
-
-#define JMESSAGE(code,string)	code ,
-
-#endif /* JMAKE_ENUM_LIST */
-
-JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */
-
-#ifdef BMP_SUPPORTED
-JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format")
-JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported")
-JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length")
-JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1")
-JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB")
-JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported")
-JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM")
-JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image")
-JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image")
-JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image")
-JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image")
-#endif /* BMP_SUPPORTED */
-
-#ifdef GIF_SUPPORTED
-JMESSAGE(JERR_GIF_BUG, "GIF output got confused")
-JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d")
-JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB")
-JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file")
-JMESSAGE(JERR_GIF_NOT, "Not a GIF file")
-JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image")
-JMESSAGE(JTRC_GIF_BADVERSION,
-	 "Warning: unexpected GIF version number '%c%c%c'")
-JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x")
-JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input")
-JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file")
-JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring")
-JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image")
-JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits")
-#endif /* GIF_SUPPORTED */
-
-#ifdef PPM_SUPPORTED
-JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB")
-JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file")
-JMESSAGE(JERR_PPM_NOT, "Not a PPM/PGM file")
-JMESSAGE(JTRC_PGM, "%ux%u PGM image")
-JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image")
-JMESSAGE(JTRC_PPM, "%ux%u PPM image")
-JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image")
-#endif /* PPM_SUPPORTED */
-
-#ifdef RLE_SUPPORTED
-JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library")
-JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB")
-JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE")
-JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file")
-JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header")
-JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header")
-JMESSAGE(JERR_RLE_NOT, "Not an RLE file")
-JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE")
-JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup")
-JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file")
-JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d")
-JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file")
-JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d")
-JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d")
-#endif /* RLE_SUPPORTED */
-
-#ifdef TARGA_SUPPORTED
-JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format")
-JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file")
-JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB")
-JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image")
-JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image")
-JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image")
-#else
-JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled")
-#endif /* TARGA_SUPPORTED */
-
-JMESSAGE(JERR_BAD_CMAP_FILE,
-	 "Color map file is invalid or of unsupported format")
-JMESSAGE(JERR_TOO_MANY_COLORS,
-	 "Output file format cannot handle %d colormap entries")
-JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed")
-#ifdef TARGA_SUPPORTED
-JMESSAGE(JERR_UNKNOWN_FORMAT,
-	 "Unrecognized input file format --- perhaps you need -targa")
-#else
-JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format")
-#endif
-JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format")
-
-#ifdef JMAKE_ENUM_LIST
-
-  JMSG_LASTADDONCODE
-} ADDON_MESSAGE_CODE;
-
-#undef JMAKE_ENUM_LIST
-#endif /* JMAKE_ENUM_LIST */
-
-/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
-#undef JMESSAGE
diff --git a/modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt b/modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt
deleted file mode 100644
index d4924fe..0000000
--- a/modules/juce_graphics/image_formats/jpglib/changes to libjpeg for JUCE.txt	
+++ /dev/null
@@ -1,16 +0,0 @@
-
-I've included libjpeg in the JUCE tree because loading jpegs is a pretty useful thing to
-be able to do, but I've left out as many files as possible to keep it lean-and-mean.
-
-If you want to get hold of the full version of libjpeg, it's freely available at:
-
-http://www.ijg.org/
-
-
-Please note that part of the IJG's license for libjpeg states that:
-
-  "If you use it in a program, you must acknowledge somewhere in 
-   your documentation that you've used the IJG code".
-
-..so if you release a JUCE program that reads JPEGs, you should probably give them a mention.
-
diff --git a/modules/juce_graphics/image_formats/jpglib/jcapimin.c b/modules/juce_graphics/image_formats/jpglib/jcapimin.c
deleted file mode 100644
index 55e2c9b..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcapimin.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * jcapimin.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the compression half
- * of the JPEG library.  These are the "minimum" API routines that may be
- * needed in either the normal full-compression case or the transcoding-only
- * case.
- *
- * Most of the routines intended to be called directly by an application
- * are in this file or in jcapistd.c.  But also see jcparam.c for
- * parameter-setup helper routines, jcomapi.c for routines shared by
- * compression and decompression, and jctrans.c for the transcoding case.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Initialization of a JPEG compression object.
- * The error manager must already be set up (in case memory manager fails).
- */
-
-GLOBAL(void)
-jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize)
-{
-  int i;
-
-  /* Guard against version mismatches between library and caller. */
-  cinfo->mem = NULL;		/* so jpeg_destroy knows mem mgr not called */
-  if (version != JPEG_LIB_VERSION)
-    ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
-  if (structsize != SIZEOF(struct jpeg_compress_struct))
-    ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
-	     (int) SIZEOF(struct jpeg_compress_struct), (int) structsize);
-
-  /* For debugging purposes, we zero the whole master structure.
-   * But the application has already set the err pointer, and may have set
-   * client_data, so we have to save and restore those fields.
-   * Note: if application hasn't set client_data, tools like Purify may
-   * complain here.
-   */
-  {
-    struct jpeg_error_mgr * err = cinfo->err;
-    void * client_data = cinfo->client_data; /* ignore Purify complaint here */
-    MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct));
-    cinfo->err = err;
-    cinfo->client_data = client_data;
-  }
-  cinfo->is_decompressor = FALSE;
-
-  /* Initialize a memory manager instance for this object */
-  jinit_memory_mgr((j_common_ptr) cinfo);
-
-  /* Zero out pointers to permanent structures. */
-  cinfo->progress = NULL;
-  cinfo->dest = NULL;
-
-  cinfo->comp_info = NULL;
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++)
-    cinfo->quant_tbl_ptrs[i] = NULL;
-
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    cinfo->dc_huff_tbl_ptrs[i] = NULL;
-    cinfo->ac_huff_tbl_ptrs[i] = NULL;
-  }
-
-  cinfo->script_space = NULL;
-
-  cinfo->input_gamma = 1.0;	/* in case application forgets */
-
-  /* OK, I'm ready */
-  cinfo->global_state = CSTATE_START;
-}
-
-
-/*
- * Destruction of a JPEG compression object
- */
-
-GLOBAL(void)
-jpeg_destroy_compress (j_compress_ptr cinfo)
-{
-  jpeg_destroy((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Abort processing of a JPEG compression operation,
- * but don't destroy the object itself.
- */
-
-GLOBAL(void)
-jpeg_abort_compress (j_compress_ptr cinfo)
-{
-  jpeg_abort((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Forcibly suppress or un-suppress all quantization and Huffman tables.
- * Marks all currently defined tables as already written (if suppress)
- * or not written (if !suppress).  This will control whether they get emitted
- * by a subsequent jpeg_start_compress call.
- *
- * This routine is exported for use by applications that want to produce
- * abbreviated JPEG datastreams.  It logically belongs in jcparam.c, but
- * since it is called by jpeg_start_compress, we put it here --- otherwise
- * jcparam.o would be linked whether the application used it or not.
- */
-
-GLOBAL(void)
-jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress)
-{
-  int i;
-  JQUANT_TBL * qtbl;
-  JHUFF_TBL * htbl;
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++) {
-    if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL)
-      qtbl->sent_table = suppress;
-  }
-
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL)
-      htbl->sent_table = suppress;
-    if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL)
-      htbl->sent_table = suppress;
-  }
-}
-
-
-/*
- * Finish JPEG compression.
- *
- * If a multipass operating mode was selected, this may do a great deal of
- * work including most of the actual output.
- */
-
-GLOBAL(void)
-jpeg_finish_compress (j_compress_ptr cinfo)
-{
-  JDIMENSION iMCU_row;
-
-  if (cinfo->global_state == CSTATE_SCANNING ||
-      cinfo->global_state == CSTATE_RAW_OK) {
-    /* Terminate first pass */
-    if (cinfo->next_scanline < cinfo->image_height)
-      ERREXIT(cinfo, JERR_TOO_LITTLE_DATA);
-    (*cinfo->master->finish_pass) (cinfo);
-  } else if (cinfo->global_state != CSTATE_WRCOEFS)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Perform any remaining passes */
-  while (! cinfo->master->is_last_pass) {
-    (*cinfo->master->prepare_for_pass) (cinfo);
-    for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) {
-      if (cinfo->progress != NULL) {
-	cinfo->progress->pass_counter = (long) iMCU_row;
-	cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows;
-	(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-      }
-      /* We bypass the main controller and invoke coef controller directly;
-       * all work is being done from the coefficient buffer.
-       */
-      if (! (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL))
-	ERREXIT(cinfo, JERR_CANT_SUSPEND);
-    }
-    (*cinfo->master->finish_pass) (cinfo);
-  }
-  /* Write EOI, do final cleanup */
-  (*cinfo->marker->write_file_trailer) (cinfo);
-  (*cinfo->dest->term_destination) (cinfo);
-  /* We can use jpeg_abort to release memory and reset global_state */
-  jpeg_abort((j_common_ptr) cinfo);
-}
-
-
-/*
- * Write a special marker.
- * This is only recommended for writing COM or APPn markers.
- * Must be called after jpeg_start_compress() and before
- * first call to jpeg_write_scanlines() or jpeg_write_raw_data().
- */
-
-GLOBAL(void)
-jpeg_write_marker (j_compress_ptr cinfo, int marker,
-		   const JOCTET *dataptr, unsigned int datalen)
-{
-  JMETHOD(void, write_marker_byte, (j_compress_ptr info, int val));
-
-  if (cinfo->next_scanline != 0 ||
-      (cinfo->global_state != CSTATE_SCANNING &&
-       cinfo->global_state != CSTATE_RAW_OK &&
-       cinfo->global_state != CSTATE_WRCOEFS))
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  (*cinfo->marker->write_marker_header) (cinfo, marker, datalen);
-  write_marker_byte = cinfo->marker->write_marker_byte;	/* copy for speed */
-  while (datalen--) {
-    (*write_marker_byte) (cinfo, *dataptr);
-    dataptr++;
-  }
-}
-
-/* Same, but piecemeal. */
-
-GLOBAL(void)
-jpeg_write_m_header (j_compress_ptr cinfo, int marker, unsigned int datalen)
-{
-  if (cinfo->next_scanline != 0 ||
-      (cinfo->global_state != CSTATE_SCANNING &&
-       cinfo->global_state != CSTATE_RAW_OK &&
-       cinfo->global_state != CSTATE_WRCOEFS))
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  (*cinfo->marker->write_marker_header) (cinfo, marker, datalen);
-}
-
-GLOBAL(void)
-jpeg_write_m_byte (j_compress_ptr cinfo, int val)
-{
-  (*cinfo->marker->write_marker_byte) (cinfo, val);
-}
-
-
-/*
- * Alternate compression function: just write an abbreviated table file.
- * Before calling this, all parameters and a data destination must be set up.
- *
- * To produce a pair of files containing abbreviated tables and abbreviated
- * image data, one would proceed as follows:
- *
- *		initialize JPEG object
- *		set JPEG parameters
- *		set destination to table file
- *		jpeg_write_tables(cinfo);
- *		set destination to image file
- *		jpeg_start_compress(cinfo, FALSE);
- *		write data...
- *		jpeg_finish_compress(cinfo);
- *
- * jpeg_write_tables has the side effect of marking all tables written
- * (same as jpeg_suppress_tables(..., TRUE)).  Thus a subsequent start_compress
- * will not re-emit the tables unless it is passed write_all_tables=TRUE.
- */
-
-GLOBAL(void)
-jpeg_write_tables (j_compress_ptr cinfo)
-{
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* (Re)initialize error mgr and destination modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->dest->init_destination) (cinfo);
-  /* Initialize the marker writer ... bit of a crock to do it here. */
-  jinit_marker_writer(cinfo);
-  /* Write them tables! */
-  (*cinfo->marker->write_tables_only) (cinfo);
-  /* And clean up. */
-  (*cinfo->dest->term_destination) (cinfo);
-  /*
-   * In library releases up through v6a, we called jpeg_abort() here to free
-   * any working memory allocated by the destination manager and marker
-   * writer.  Some applications had a problem with that: they allocated space
-   * of their own from the library memory manager, and didn't want it to go
-   * away during write_tables.  So now we do nothing.  This will cause a
-   * memory leak if an app calls write_tables repeatedly without doing a full
-   * compression cycle or otherwise resetting the JPEG object.  However, that
-   * seems less bad than unexpectedly freeing memory in the normal case.
-   * An app that prefers the old behavior can call jpeg_abort for itself after
-   * each call to jpeg_write_tables().
-   */
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcapistd.c b/modules/juce_graphics/image_formats/jpglib/jcapistd.c
deleted file mode 100644
index fed66ca..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcapistd.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * jcapistd.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the compression half
- * of the JPEG library.  These are the "standard" API routines that are
- * used in the normal full-compression case.  They are not used by a
- * transcoding-only application.  Note that if an application links in
- * jpeg_start_compress, it will end up linking in the entire compressor.
- * We thus must separate this file from jcapimin.c to avoid linking the
- * whole compression library into a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Compression initialization.
- * Before calling this, all parameters and a data destination must be set up.
- *
- * We require a write_all_tables parameter as a failsafe check when writing
- * multiple datastreams from the same compression object.  Since prior runs
- * will have left all the tables marked sent_table=TRUE, a subsequent run
- * would emit an abbreviated stream (no tables) by default.  This may be what
- * is wanted, but for safety's sake it should not be the default behavior:
- * programmers should have to make a deliberate choice to emit abbreviated
- * images.  Therefore the documentation and examples should encourage people
- * to pass write_all_tables=TRUE; then it will take active thought to do the
- * wrong thing.
- */
-
-GLOBAL(void)
-jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables)
-{
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  if (write_all_tables)
-    jpeg_suppress_tables(cinfo, FALSE);	/* mark all tables to be written */
-
-  /* (Re)initialize error mgr and destination modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->dest->init_destination) (cinfo);
-  /* Perform master selection of active modules */
-  jinit_compress_master(cinfo);
-  /* Set up for the first pass */
-  (*cinfo->master->prepare_for_pass) (cinfo);
-  /* Ready for application to drive first pass through jpeg_write_scanlines
-   * or jpeg_write_raw_data.
-   */
-  cinfo->next_scanline = 0;
-  cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING);
-}
-
-
-/*
- * Write some scanlines of data to the JPEG compressor.
- *
- * The return value will be the number of lines actually written.
- * This should be less than the supplied num_lines only in case that
- * the data destination module has requested suspension of the compressor,
- * or if more than image_height scanlines are passed in.
- *
- * Note: we warn about excess calls to jpeg_write_scanlines() since
- * this likely signals an application programmer error.  However,
- * excess scanlines passed in the last valid call are *silently* ignored,
- * so that the application need not adjust num_lines for end-of-image
- * when using a multiple-scanline buffer.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines,
-		      JDIMENSION num_lines)
-{
-  JDIMENSION row_ctr, rows_left;
-
-  if (cinfo->global_state != CSTATE_SCANNING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->next_scanline >= cinfo->image_height)
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->next_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->image_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Give master control module another chance if this is first call to
-   * jpeg_write_scanlines.  This lets output of the frame/scan headers be
-   * delayed so that application can write COM, etc, markers between
-   * jpeg_start_compress and jpeg_write_scanlines.
-   */
-  if (cinfo->master->call_pass_startup)
-    (*cinfo->master->pass_startup) (cinfo);
-
-  /* Ignore any extra scanlines at bottom of image. */
-  rows_left = cinfo->image_height - cinfo->next_scanline;
-  if (num_lines > rows_left)
-    num_lines = rows_left;
-
-  row_ctr = 0;
-  (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines);
-  cinfo->next_scanline += row_ctr;
-  return row_ctr;
-}
-
-
-/*
- * Alternate entry point to write raw data.
- * Processes exactly one iMCU row per call, unless suspended.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data,
-		     JDIMENSION num_lines)
-{
-  JDIMENSION lines_per_iMCU_row;
-
-  if (cinfo->global_state != CSTATE_RAW_OK)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->next_scanline >= cinfo->image_height) {
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-    return 0;
-  }
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->next_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->image_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Give master control module another chance if this is first call to
-   * jpeg_write_raw_data.  This lets output of the frame/scan headers be
-   * delayed so that application can write COM, etc, markers between
-   * jpeg_start_compress and jpeg_write_raw_data.
-   */
-  if (cinfo->master->call_pass_startup)
-    (*cinfo->master->pass_startup) (cinfo);
-
-  /* Verify that at least one iMCU row has been passed. */
-  lines_per_iMCU_row = cinfo->max_v_samp_factor * DCTSIZE;
-  if (num_lines < lines_per_iMCU_row)
-    ERREXIT(cinfo, JERR_BUFFER_SIZE);
-
-  /* Directly compress the row. */
-  if (! (*cinfo->coef->compress_data) (cinfo, data)) {
-    /* If compressor did not consume the whole row, suspend processing. */
-    return 0;
-  }
-
-  /* OK, we processed one iMCU row. */
-  cinfo->next_scanline += lines_per_iMCU_row;
-  return lines_per_iMCU_row;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jccoefct.c b/modules/juce_graphics/image_formats/jpglib/jccoefct.c
deleted file mode 100644
index 554a21e..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jccoefct.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * jccoefct.c
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the coefficient buffer controller for compression.
- * This controller is the top level of the JPEG compressor proper.
- * The coefficient buffer lies between forward-DCT and entropy encoding steps.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* We use a full-image coefficient buffer when doing Huffman optimization,
- * and also for writing multiple-scan JPEG files.  In all cases, the DCT
- * step is run during the first pass, and subsequent passes need only read
- * the buffered coefficients.
- */
-#ifdef ENTROPY_OPT_SUPPORTED
-#define FULL_COEF_BUFFER_SUPPORTED
-#else
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-#define FULL_COEF_BUFFER_SUPPORTED
-#endif
-#endif
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_coef_controller pub; /* public fields */
-
-  JDIMENSION iMCU_row_num;	/* iMCU row # within image */
-  JDIMENSION mcu_ctr;		/* counts MCUs processed in current row */
-  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
-  int MCU_rows_per_iMCU_row;	/* number of such rows needed */
-
-  /* For single-pass compression, it's sufficient to buffer just one MCU
-   * (although this may prove a bit slow in practice).  We allocate a
-   * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each
-   * MCU constructed and sent.  (On 80x86, the workspace is FAR even though
-   * it's not really very big; this is to keep the module interfaces unchanged
-   * when a large coefficient buffer is necessary.)
-   * In multi-pass modes, this array points to the current MCU's blocks
-   * within the virtual arrays.
-   */
-  JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU];
-
-  /* In multi-pass modes, we need a virtual block array for each component. */
-  jvirt_barray_ptr whole_image[MAX_COMPONENTS];
-} my_coef_controller;
-
-typedef my_coef_controller * my_coef_ptr;
-
-
-/* Forward declarations */
-METHODDEF(boolean) compress_data
-    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-METHODDEF(boolean) compress_first_pass
-    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
-METHODDEF(boolean) compress_output
-    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
-#endif
-
-
-LOCAL(void)
-start_iMCU_row (j_compress_ptr cinfo)
-/* Reset within-iMCU-row counters for a new row */
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  /* In an interleaved scan, an MCU row is the same as an iMCU row.
-   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
-   * But at the bottom of the image, process only what's left.
-   */
-  if (cinfo->comps_in_scan > 1) {
-    coef->MCU_rows_per_iMCU_row = 1;
-  } else {
-    if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1))
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
-    else
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
-  }
-
-  coef->mcu_ctr = 0;
-  coef->MCU_vert_offset = 0;
-}
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  coef->iMCU_row_num = 0;
-  start_iMCU_row(cinfo);
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-    if (coef->whole_image[0] != NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    coef->pub.compress_data = compress_data;
-    break;
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-  case JBUF_SAVE_AND_PASS:
-    if (coef->whole_image[0] == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    coef->pub.compress_data = compress_first_pass;
-    break;
-  case JBUF_CRANK_DEST:
-    if (coef->whole_image[0] == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    coef->pub.compress_data = compress_output;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-}
-
-
-/*
- * Process some data in the single-pass case.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the image.
- * Returns TRUE if the iMCU row is completed, FALSE if suspended.
- *
- * NB: input_buf contains a plane for each component in image,
- * which we index according to the component's SOF position.
- */
-
-METHODDEF(boolean)
-compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  int blkn, bi, ci, yindex, yoffset, blockcnt;
-  JDIMENSION ypos, xpos;
-  jpeg_component_info *compptr;
-
-  /* Loop to write as much as one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col;
-	 MCU_col_num++) {
-      /* Determine where data comes from in input_buf and do the DCT thing.
-       * Each call on forward_DCT processes a horizontal row of DCT blocks
-       * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks
-       * sequentially.  Dummy blocks at the right or bottom edge are filled in
-       * specially.  The data in them does not matter for image reconstruction,
-       * so we fill them with values that will encode to the smallest amount of
-       * data, viz: all zeroes in the AC entries, DC entries equal to previous
-       * block's DC value.  (Thanks to Thomas Kinsman for this idea.)
-       */
-      blkn = 0;
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
-						: compptr->last_col_width;
-	xpos = MCU_col_num * compptr->MCU_sample_width;
-	ypos = yoffset * DCTSIZE; /* ypos == (yoffset+yindex) * DCTSIZE */
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  if (coef->iMCU_row_num < last_iMCU_row ||
-	      yoffset+yindex < compptr->last_row_height) {
-	    (*cinfo->fdct->forward_DCT) (cinfo, compptr,
-					 input_buf[compptr->component_index],
-					 coef->MCU_buffer[blkn],
-					 ypos, xpos, (JDIMENSION) blockcnt);
-	    if (blockcnt < compptr->MCU_width) {
-	      /* Create some dummy blocks at the right edge of the image. */
-	      jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt],
-			(compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK));
-	      for (bi = blockcnt; bi < compptr->MCU_width; bi++) {
-		coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0];
-	      }
-	    }
-	  } else {
-	    /* Create a row of dummy blocks at the bottom of the image. */
-	    jzero_far((void FAR *) coef->MCU_buffer[blkn],
-		      compptr->MCU_width * SIZEOF(JBLOCK));
-	    for (bi = 0; bi < compptr->MCU_width; bi++) {
-	      coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0];
-	    }
-	  }
-	  blkn += compptr->MCU_width;
-	  ypos += DCTSIZE;
-	}
-      }
-      /* Try to write the MCU.  In event of a suspension failure, we will
-       * re-DCT the MCU on restart (a bit inefficient, could be fixed...)
-       */
-      if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->mcu_ctr = MCU_col_num;
-	return FALSE;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->mcu_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  coef->iMCU_row_num++;
-  start_iMCU_row(cinfo);
-  return TRUE;
-}
-
-
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-
-/*
- * Process some data in the first pass of a multi-pass case.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the image.
- * This amount of data is read from the source buffer, DCT'd and quantized,
- * and saved into the virtual arrays.  We also generate suitable dummy blocks
- * as needed at the right and lower edges.  (The dummy blocks are constructed
- * in the virtual arrays, which have been padded appropriately.)  This makes
- * it possible for subsequent passes not to worry about real vs. dummy blocks.
- *
- * We must also emit the data to the entropy encoder.  This is conveniently
- * done by calling compress_output() after we've loaded the current strip
- * of the virtual arrays.
- *
- * NB: input_buf contains a plane for each component in image.  All
- * components are DCT'd and loaded into the virtual arrays in this pass.
- * However, it may be that only a subset of the components are emitted to
- * the entropy encoder during this first pass; be careful about looking
- * at the scan-dependent variables (MCU dimensions, etc).
- */
-
-METHODDEF(boolean)
-compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  JDIMENSION blocks_across, MCUs_across, MCUindex;
-  int bi, ci, h_samp_factor, block_row, block_rows, ndummy;
-  JCOEF lastDC;
-  jpeg_component_info *compptr;
-  JBLOCKARRAY buffer;
-  JBLOCKROW thisblockrow, lastblockrow;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Align the virtual buffer for this component. */
-    buffer = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[ci],
-       coef->iMCU_row_num * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, TRUE);
-    /* Count non-dummy DCT block rows in this iMCU row. */
-    if (coef->iMCU_row_num < last_iMCU_row)
-      block_rows = compptr->v_samp_factor;
-    else {
-      /* NB: can't use last_row_height here, since may not be set! */
-      block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-      if (block_rows == 0) block_rows = compptr->v_samp_factor;
-    }
-    blocks_across = compptr->width_in_blocks;
-    h_samp_factor = compptr->h_samp_factor;
-    /* Count number of dummy blocks to be added at the right margin. */
-    ndummy = (int) (blocks_across % h_samp_factor);
-    if (ndummy > 0)
-      ndummy = h_samp_factor - ndummy;
-    /* Perform DCT for all non-dummy blocks in this iMCU row.  Each call
-     * on forward_DCT processes a complete horizontal row of DCT blocks.
-     */
-    for (block_row = 0; block_row < block_rows; block_row++) {
-      thisblockrow = buffer[block_row];
-      (*cinfo->fdct->forward_DCT) (cinfo, compptr,
-				   input_buf[ci], thisblockrow,
-				   (JDIMENSION) (block_row * DCTSIZE),
-				   (JDIMENSION) 0, blocks_across);
-      if (ndummy > 0) {
-	/* Create dummy blocks at the right edge of the image. */
-	thisblockrow += blocks_across; /* => first dummy block */
-	jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK));
-	lastDC = thisblockrow[-1][0];
-	for (bi = 0; bi < ndummy; bi++) {
-	  thisblockrow[bi][0] = lastDC;
-	}
-      }
-    }
-    /* If at end of image, create dummy block rows as needed.
-     * The tricky part here is that within each MCU, we want the DC values
-     * of the dummy blocks to match the last real block's DC value.
-     * This squeezes a few more bytes out of the resulting file...
-     */
-    if (coef->iMCU_row_num == last_iMCU_row) {
-      blocks_across += ndummy;	/* include lower right corner */
-      MCUs_across = blocks_across / h_samp_factor;
-      for (block_row = block_rows; block_row < compptr->v_samp_factor;
-	   block_row++) {
-	thisblockrow = buffer[block_row];
-	lastblockrow = buffer[block_row-1];
-	jzero_far((void FAR *) thisblockrow,
-		  (size_t) (blocks_across * SIZEOF(JBLOCK)));
-	for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) {
-	  lastDC = lastblockrow[h_samp_factor-1][0];
-	  for (bi = 0; bi < h_samp_factor; bi++) {
-	    thisblockrow[bi][0] = lastDC;
-	  }
-	  thisblockrow += h_samp_factor; /* advance to next MCU in row */
-	  lastblockrow += h_samp_factor;
-	}
-      }
-    }
-  }
-  /* NB: compress_output will increment iMCU_row_num if successful.
-   * A suspension return will result in redoing all the work above next time.
-   */
-
-  /* Emit data to the entropy encoder, sharing code with subsequent passes */
-  return compress_output(cinfo, input_buf);
-}
-
-
-/*
- * Process some data in subsequent passes of a multi-pass case.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the scan.
- * The data is obtained from the virtual arrays and fed to the entropy coder.
- * Returns TRUE if the iMCU row is completed, FALSE if suspended.
- *
- * NB: input_buf is ignored; it is likely to be a NULL pointer.
- */
-
-METHODDEF(boolean)
-compress_output (j_compress_ptr cinfo, JSAMPIMAGE)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  int blkn, ci, xindex, yindex, yoffset;
-  JDIMENSION start_col;
-  JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
-  JBLOCKROW buffer_ptr;
-  jpeg_component_info *compptr;
-
-  /* Align the virtual buffers for the components used in this scan.
-   * NB: during first pass, this is safe only because the buffers will
-   * already be aligned properly, so jmemmgr.c won't need to do any I/O.
-   */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    buffer[ci] = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
-       coef->iMCU_row_num * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, FALSE);
-  }
-
-  /* Loop to process one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row;
-	 MCU_col_num++) {
-      /* Construct list of pointers to DCT blocks belonging to this MCU */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	start_col = MCU_col_num * compptr->MCU_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
-	  for (xindex = 0; xindex < compptr->MCU_width; xindex++) {
-	    coef->MCU_buffer[blkn++] = buffer_ptr++;
-	  }
-	}
-      }
-      /* Try to write the MCU. */
-      if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->mcu_ctr = MCU_col_num;
-	return FALSE;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->mcu_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  coef->iMCU_row_num++;
-  start_iMCU_row(cinfo);
-  return TRUE;
-}
-
-#endif /* FULL_COEF_BUFFER_SUPPORTED */
-
-
-/*
- * Initialize coefficient buffer controller.
- */
-
-GLOBAL(void)
-jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer)
-{
-  my_coef_ptr coef;
-
-  coef = (my_coef_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_coef_controller));
-  cinfo->coef = (struct jpeg_c_coef_controller *) coef;
-  coef->pub.start_pass = start_pass_coef;
-
-  /* Create the coefficient buffer. */
-  if (need_full_buffer) {
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-    /* Allocate a full-image virtual array for each component, */
-    /* padded to a multiple of samp_factor DCT blocks in each direction. */
-    int ci;
-    jpeg_component_info *compptr;
-
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      coef->whole_image[ci] = (*cinfo->mem->request_virt_barray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
-	 (JDIMENSION) jround_up((long) compptr->width_in_blocks,
-				(long) compptr->h_samp_factor),
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor),
-	 (JDIMENSION) compptr->v_samp_factor);
-    }
-#else
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif
-  } else {
-    /* We only need a single-MCU buffer. */
-    JBLOCKROW buffer;
-    int i;
-
-    buffer = (JBLOCKROW)
-      (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-    for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) {
-      coef->MCU_buffer[i] = buffer + i;
-    }
-    coef->whole_image[0] = NULL; /* flag for no virtual arrays */
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jccolor.c b/modules/juce_graphics/image_formats/jpglib/jccolor.c
deleted file mode 100644
index fa239c1..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jccolor.c
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * jccolor.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains input colorspace conversion routines.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_color_converter pub; /* public fields */
-
-  /* Private state for RGB->YCC conversion */
-  INT32 * rgb_ycc_tab;		/* => table for RGB to YCbCr conversion */
-} my_color_converter;
-
-typedef my_color_converter * my_cconvert_ptr;
-
-
-/**************** RGB -> YCbCr conversion: most common case **************/
-
-/*
- * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
- * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
- * The conversion equations to be implemented are therefore
- *	Y  =  0.29900 * R + 0.58700 * G + 0.11400 * B
- *	Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B  + CENTERJSAMPLE
- *	Cr =  0.50000 * R - 0.41869 * G - 0.08131 * B  + CENTERJSAMPLE
- * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
- * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2,
- * rather than CENTERJSAMPLE, for Cb and Cr.  This gave equal positive and
- * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0)
- * were not represented exactly.  Now we sacrifice exact representation of
- * maximum red and maximum blue in order to get exact grayscales.
- *
- * To avoid floating-point arithmetic, we represent the fractional constants
- * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
- * the products by 2^16, with appropriate rounding, to get the correct answer.
- *
- * For even more speed, we avoid doing any multiplications in the inner loop
- * by precalculating the constants times R,G,B for all possible values.
- * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
- * for 12-bit samples it is still acceptable.  It's not very reasonable for
- * 16-bit samples, but if you want lossless storage you shouldn't be changing
- * colorspace anyway.
- * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included
- * in the tables to save adding them separately in the inner loop.
- */
-
-#define SCALEBITS	16	/* speediest right-shift on some machines */
-#define CBCR_OFFSET	((INT32) CENTERJSAMPLE << SCALEBITS)
-#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
-#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
-
-/* We allocate one big table and divide it up into eight parts, instead of
- * doing eight alloc_small requests.  This lets us use a single table base
- * address, which can be held in a register in the inner loops on many
- * machines (more than can hold all eight addresses, anyway).
- */
-
-#define R_Y_OFF		0			/* offset to R => Y section */
-#define G_Y_OFF		(1*(MAXJSAMPLE+1))	/* offset to G => Y section */
-#define B_Y_OFF		(2*(MAXJSAMPLE+1))	/* etc. */
-#define R_CB_OFF	(3*(MAXJSAMPLE+1))
-#define G_CB_OFF	(4*(MAXJSAMPLE+1))
-#define B_CB_OFF	(5*(MAXJSAMPLE+1))
-#define R_CR_OFF	B_CB_OFF		/* B=>Cb, R=>Cr are the same */
-#define G_CR_OFF	(6*(MAXJSAMPLE+1))
-#define B_CR_OFF	(7*(MAXJSAMPLE+1))
-#define TABLE_SIZE	(8*(MAXJSAMPLE+1))
-
-
-/*
- * Initialize for RGB->YCC colorspace conversion.
- */
-
-METHODDEF(void)
-rgb_ycc_start (j_compress_ptr cinfo)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  INT32 * rgb_ycc_tab;
-  INT32 i;
-
-  /* Allocate and fill in the conversion tables. */
-  cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(TABLE_SIZE * SIZEOF(INT32)));
-
-  for (i = 0; i <= MAXJSAMPLE; i++) {
-    rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i;
-    rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i;
-    rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i     + ONE_HALF;
-    rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i;
-    rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i;
-    /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr.
-     * This ensures that the maximum output will round to MAXJSAMPLE
-     * not MAXJSAMPLE+1, and thus that we don't have to range-limit.
-     */
-    rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i    + CBCR_OFFSET + ONE_HALF-1;
-/*  B=>Cb and R=>Cr tables are the same
-    rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i    + CBCR_OFFSET + ONE_HALF-1;
-*/
-    rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i;
-    rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i;
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- *
- * Note that we change from the application's interleaved-pixel format
- * to our internal noninterleaved, one-plane-per-component format.
- * The input buffer is therefore three times as wide as the output buffer.
- *
- * A starting row offset is provided only for the output buffer.  The caller
- * can easily adjust the passed input_buf value to accommodate any row
- * offset required on that side.
- */
-
-METHODDEF(void)
-rgb_ycc_convert (j_compress_ptr cinfo,
-		 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		 JDIMENSION output_row, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register int r, g, b;
-  register INT32 * ctab = cconvert->rgb_ycc_tab;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr0, outptr1, outptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr0 = output_buf[0][output_row];
-    outptr1 = output_buf[1][output_row];
-    outptr2 = output_buf[2][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr[RGB_RED]);
-      g = GETJSAMPLE(inptr[RGB_GREEN]);
-      b = GETJSAMPLE(inptr[RGB_BLUE]);
-      inptr += RGB_PIXELSIZE;
-      /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
-       * must be too; we do not need an explicit range-limiting operation.
-       * Hence the value being shifted is never negative, and we don't
-       * need the general RIGHT_SHIFT macro.
-       */
-      /* Y */
-      outptr0[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-      /* Cb */
-      outptr1[col] = (JSAMPLE)
-		((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
-		 >> SCALEBITS);
-      /* Cr */
-      outptr2[col] = (JSAMPLE)
-		((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
-		 >> SCALEBITS);
-    }
-  }
-}
-
-
-/**************** Cases other than RGB -> YCbCr **************/
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles RGB->grayscale conversion, which is the same
- * as the RGB->Y portion of RGB->YCbCr.
- * We assume rgb_ycc_start has been called (we only use the Y tables).
- */
-
-METHODDEF(void)
-rgb_gray_convert (j_compress_ptr cinfo,
-		  JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		  JDIMENSION output_row, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register int r, g, b;
-  register INT32 * ctab = cconvert->rgb_ycc_tab;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr = output_buf[0][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr[RGB_RED]);
-      g = GETJSAMPLE(inptr[RGB_GREEN]);
-      b = GETJSAMPLE(inptr[RGB_BLUE]);
-      inptr += RGB_PIXELSIZE;
-      /* Y */
-      outptr[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles Adobe-style CMYK->YCCK conversion,
- * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same
- * conversion as above, while passing K (black) unchanged.
- * We assume rgb_ycc_start has been called.
- */
-
-METHODDEF(void)
-cmyk_ycck_convert (j_compress_ptr cinfo,
-		   JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		   JDIMENSION output_row, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register int r, g, b;
-  register INT32 * ctab = cconvert->rgb_ycc_tab;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr0, outptr1, outptr2, outptr3;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr0 = output_buf[0][output_row];
-    outptr1 = output_buf[1][output_row];
-    outptr2 = output_buf[2][output_row];
-    outptr3 = output_buf[3][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      r = MAXJSAMPLE - GETJSAMPLE(inptr[0]);
-      g = MAXJSAMPLE - GETJSAMPLE(inptr[1]);
-      b = MAXJSAMPLE - GETJSAMPLE(inptr[2]);
-      /* K passes through as-is */
-      outptr3[col] = inptr[3];	/* don't need GETJSAMPLE here */
-      inptr += 4;
-      /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
-       * must be too; we do not need an explicit range-limiting operation.
-       * Hence the value being shifted is never negative, and we don't
-       * need the general RIGHT_SHIFT macro.
-       */
-      /* Y */
-      outptr0[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-      /* Cb */
-      outptr1[col] = (JSAMPLE)
-		((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
-		 >> SCALEBITS);
-      /* Cr */
-      outptr2[col] = (JSAMPLE)
-		((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
-		 >> SCALEBITS);
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles grayscale output with no conversion.
- * The source can be either plain grayscale or YCbCr (since Y == gray).
- */
-
-METHODDEF(void)
-grayscale_convert (j_compress_ptr cinfo,
-		   JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		   JDIMENSION output_row, int num_rows)
-{
-  register JSAMPROW inptr;
-  register JSAMPROW outptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-  int instride = cinfo->input_components;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr = output_buf[0][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      outptr[col] = inptr[0];	/* don't need GETJSAMPLE() here */
-      inptr += instride;
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles multi-component colorspaces without conversion.
- * We assume input_components == num_components.
- */
-
-METHODDEF(void)
-null_convert (j_compress_ptr cinfo,
-	      JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-	      JDIMENSION output_row, int num_rows)
-{
-  register JSAMPROW inptr;
-  register JSAMPROW outptr;
-  register JDIMENSION col;
-  register int ci;
-  int nc = cinfo->num_components;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    /* It seems fastest to make a separate pass for each component. */
-    for (ci = 0; ci < nc; ci++) {
-      inptr = *input_buf;
-      outptr = output_buf[ci][output_row];
-      for (col = 0; col < num_cols; col++) {
-	outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */
-	inptr += nc;
-      }
-    }
-    input_buf++;
-    output_row++;
-  }
-}
-
-
-/*
- * Empty method for start_pass.
- */
-
-METHODDEF(void)
-null_method (j_compress_ptr)
-{
-  /* no work needed */
-}
-
-
-/*
- * Module initialization routine for input colorspace conversion.
- */
-
-GLOBAL(void)
-jinit_color_converter (j_compress_ptr cinfo)
-{
-  my_cconvert_ptr cconvert;
-
-  cconvert = (my_cconvert_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_color_converter));
-  cinfo->cconvert = (struct jpeg_color_converter *) cconvert;
-  /* set start_pass to null method until we find out differently */
-  cconvert->pub.start_pass = null_method;
-
-  /* Make sure input_components agrees with in_color_space */
-  switch (cinfo->in_color_space) {
-  case JCS_GRAYSCALE:
-    if (cinfo->input_components != 1)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  case JCS_RGB:
-#if RGB_PIXELSIZE != 3
-    if (cinfo->input_components != RGB_PIXELSIZE)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-#endif /* else share code with YCbCr */
-
-  case JCS_YCbCr:
-    if (cinfo->input_components != 3)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  case JCS_CMYK:
-  case JCS_YCCK:
-    if (cinfo->input_components != 4)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  default:			/* JCS_UNKNOWN can be anything */
-    if (cinfo->input_components < 1)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-  }
-
-  /* Check num_components, set conversion method based on requested space */
-  switch (cinfo->jpeg_color_space) {
-  case JCS_GRAYSCALE:
-    if (cinfo->num_components != 1)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == JCS_GRAYSCALE)
-      cconvert->pub.color_convert = grayscale_convert;
-    else if (cinfo->in_color_space == JCS_RGB) {
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = rgb_gray_convert;
-    } else if (cinfo->in_color_space == JCS_YCbCr)
-      cconvert->pub.color_convert = grayscale_convert;
-    else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_RGB:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3)
-      cconvert->pub.color_convert = null_convert;
-    else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_YCbCr:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == JCS_RGB) {
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = rgb_ycc_convert;
-    } else if (cinfo->in_color_space == JCS_YCbCr)
-      cconvert->pub.color_convert = null_convert;
-    else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_CMYK:
-    if (cinfo->num_components != 4)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == JCS_CMYK)
-      cconvert->pub.color_convert = null_convert;
-    else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_YCCK:
-    if (cinfo->num_components != 4)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == JCS_CMYK) {
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = cmyk_ycck_convert;
-    } else if (cinfo->in_color_space == JCS_YCCK)
-      cconvert->pub.color_convert = null_convert;
-    else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  default:			/* allow null conversion of JCS_UNKNOWN */
-    if (cinfo->jpeg_color_space != cinfo->in_color_space ||
-	cinfo->num_components != cinfo->input_components)
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    cconvert->pub.color_convert = null_convert;
-    break;
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcdctmgr.c b/modules/juce_graphics/image_formats/jpglib/jcdctmgr.c
deleted file mode 100644
index e3f90dc..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcdctmgr.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * jcdctmgr.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the forward-DCT management logic.
- * This code selects a particular DCT implementation to be used,
- * and it performs related housekeeping chores including coefficient
- * quantization.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-
-/* Private subobject for this module */
-
-typedef struct {
-  struct jpeg_forward_dct pub;	/* public fields */
-
-  /* Pointer to the DCT routine actually in use */
-  forward_DCT_method_ptr do_dct;
-
-  /* The actual post-DCT divisors --- not identical to the quant table
-   * entries, because of scaling (especially for an unnormalized DCT).
-   * Each table is given in normal array order.
-   */
-  DCTELEM * divisors[NUM_QUANT_TBLS];
-
-#ifdef DCT_FLOAT_SUPPORTED
-  /* Same as above for the floating-point case. */
-  float_DCT_method_ptr do_float_dct;
-  FAST_FLOAT * float_divisors[NUM_QUANT_TBLS];
-#endif
-} my_fdct_controller;
-
-typedef my_fdct_controller * my_fdct_ptr;
-
-
-/*
- * Initialize for a processing pass.
- * Verify that all referenced Q-tables are present, and set up
- * the divisor table for each one.
- * In the current implementation, DCT of all components is done during
- * the first pass, even if only some components will be output in the
- * first scan.  Hence all components should be examined here.
- */
-
-METHODDEF(void)
-start_pass_fdctmgr (j_compress_ptr cinfo)
-{
-  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
-  int ci, qtblno, i;
-  jpeg_component_info *compptr;
-  JQUANT_TBL * qtbl;
-  DCTELEM * dtbl;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    qtblno = compptr->quant_tbl_no;
-    /* Make sure specified quantization table is present */
-    if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS ||
-	cinfo->quant_tbl_ptrs[qtblno] == NULL)
-      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
-    qtbl = cinfo->quant_tbl_ptrs[qtblno];
-    /* Compute divisors for this quant table */
-    /* We may do this more than once for same table, but it's not a big deal */
-    switch (cinfo->dct_method) {
-#ifdef DCT_ISLOW_SUPPORTED
-    case JDCT_ISLOW:
-      /* For LL&M IDCT method, divisors are equal to raw quantization
-       * coefficients multiplied by 8 (to counteract scaling).
-       */
-      if (fdct->divisors[qtblno] == NULL) {
-	fdct->divisors[qtblno] = (DCTELEM *)
-	  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				      DCTSIZE2 * SIZEOF(DCTELEM));
-      }
-      dtbl = fdct->divisors[qtblno];
-      for (i = 0; i < DCTSIZE2; i++) {
-	dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3;
-      }
-      break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-    case JDCT_IFAST:
-      {
-	/* For AA&N IDCT method, divisors are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * We apply a further scale factor of 8.
-	 */
-#define CONST_BITS 14
-	static const INT16 aanscales[DCTSIZE2] = {
-	  /* precomputed values scaled up by 14 bits */
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
-	  21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
-	  19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
-	   8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
-	   4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
-	};
-	SHIFT_TEMPS
-
-	if (fdct->divisors[qtblno] == NULL) {
-	  fdct->divisors[qtblno] = (DCTELEM *)
-	    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-					DCTSIZE2 * SIZEOF(DCTELEM));
-	}
-	dtbl = fdct->divisors[qtblno];
-	for (i = 0; i < DCTSIZE2; i++) {
-	  dtbl[i] = (DCTELEM)
-	    DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
-				  (INT32) aanscales[i]),
-		    CONST_BITS-3);
-	}
-      }
-      break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-    case JDCT_FLOAT:
-      {
-	/* For float AA&N IDCT method, divisors are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * We apply a further scale factor of 8.
-	 * What's actually stored is 1/divisor so that the inner loop can
-	 * use a multiplication rather than a division.
-	 */
-	FAST_FLOAT * fdtbl;
-	int row, col;
-	static const double aanscalefactor[DCTSIZE] = {
-	  1.0, 1.387039845, 1.306562965, 1.175875602,
-	  1.0, 0.785694958, 0.541196100, 0.275899379
-	};
-
-	if (fdct->float_divisors[qtblno] == NULL) {
-	  fdct->float_divisors[qtblno] = (FAST_FLOAT *)
-	    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-					DCTSIZE2 * SIZEOF(FAST_FLOAT));
-	}
-	fdtbl = fdct->float_divisors[qtblno];
-	i = 0;
-	for (row = 0; row < DCTSIZE; row++) {
-	  for (col = 0; col < DCTSIZE; col++) {
-	    fdtbl[i] = (FAST_FLOAT)
-	      (1.0 / (((double) qtbl->quantval[i] *
-		       aanscalefactor[row] * aanscalefactor[col] * 8.0)));
-	    i++;
-	  }
-	}
-      }
-      break;
-#endif
-    default:
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-      break;
-    }
-  }
-}
-
-
-/*
- * Perform forward DCT on one or more blocks of a component.
- *
- * The input samples are taken from the sample_data[] array starting at
- * position start_row/start_col, and moving to the right for any additional
- * blocks. The quantized coefficients are returned in coef_blocks[].
- */
-
-METHODDEF(void)
-forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr,
-	     JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-	     JDIMENSION start_row, JDIMENSION start_col,
-	     JDIMENSION num_blocks)
-/* This version is used for integer DCT implementations. */
-{
-  /* This routine is heavily used, so it's worth coding it tightly. */
-  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
-  forward_DCT_method_ptr do_dct = fdct->do_dct;
-  DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no];
-  DCTELEM workspace[DCTSIZE2];	/* work area for FDCT subroutine */
-  JDIMENSION bi;
-
-  sample_data += start_row;	/* fold in the vertical offset once */
-
-  for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) {
-    /* Load data into workspace, applying unsigned->signed conversion */
-    { register DCTELEM *workspaceptr;
-      register JSAMPROW elemptr;
-      register int elemr;
-
-      workspaceptr = workspace;
-      for (elemr = 0; elemr < DCTSIZE; elemr++) {
-	elemptr = sample_data[elemr] + start_col;
-#if DCTSIZE == 8		/* unroll the inner loop */
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	*workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-#else
-	{ register int elemc;
-	  for (elemc = DCTSIZE; elemc > 0; elemc--) {
-	    *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE;
-	  }
-	}
-#endif
-      }
-    }
-
-    /* Perform the DCT */
-    (*do_dct) (workspace);
-
-    /* Quantize/descale the coefficients, and store into coef_blocks[] */
-    { register DCTELEM temp, qval;
-      register int i;
-      register JCOEFPTR output_ptr = coef_blocks[bi];
-
-      for (i = 0; i < DCTSIZE2; i++) {
-	qval = divisors[i];
-	temp = workspace[i];
-	/* Divide the coefficient value by qval, ensuring proper rounding.
-	 * Since C does not specify the direction of rounding for negative
-	 * quotients, we have to force the dividend positive for portability.
-	 *
-	 * In most files, at least half of the output values will be zero
-	 * (at default quantization settings, more like three-quarters...)
-	 * so we should ensure that this case is fast.  On many machines,
-	 * a comparison is enough cheaper than a divide to make a special test
-	 * a win.  Since both inputs will be nonnegative, we need only test
-	 * for a < b to discover whether a/b is 0.
-	 * If your machine's division is fast enough, define FAST_DIVIDE.
-	 */
-#ifdef FAST_DIVIDE
-#define DIVIDE_BY(a,b)	a /= b
-#else
-#define DIVIDE_BY(a,b)	if (a >= b) a /= b; else a = 0
-#endif
-	if (temp < 0) {
-	  temp = -temp;
-	  temp += qval>>1;	/* for rounding */
-	  DIVIDE_BY(temp, qval);
-	  temp = -temp;
-	} else {
-	  temp += qval>>1;	/* for rounding */
-	  DIVIDE_BY(temp, qval);
-	}
-	output_ptr[i] = (JCOEF) temp;
-      }
-    }
-  }
-}
-
-
-#ifdef DCT_FLOAT_SUPPORTED
-
-METHODDEF(void)
-forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		   JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-		   JDIMENSION start_row, JDIMENSION start_col,
-		   JDIMENSION num_blocks)
-/* This version is used for floating-point DCT implementations. */
-{
-  /* This routine is heavily used, so it's worth coding it tightly. */
-  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
-  float_DCT_method_ptr do_dct = fdct->do_float_dct;
-  FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no];
-  FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */
-  JDIMENSION bi;
-
-  sample_data += start_row;	/* fold in the vertical offset once */
-
-  for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) {
-    /* Load data into workspace, applying unsigned->signed conversion */
-    { register FAST_FLOAT *workspaceptr;
-      register JSAMPROW elemptr;
-      register int elemr;
-
-      workspaceptr = workspace;
-      for (elemr = 0; elemr < DCTSIZE; elemr++) {
-	elemptr = sample_data[elemr] + start_col;
-#if DCTSIZE == 8		/* unroll the inner loop */
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	*workspaceptr++ = (FAST_FLOAT)(GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-#else
-	{ register int elemc;
-	  for (elemc = DCTSIZE; elemc > 0; elemc--) {
-	    *workspaceptr++ = (FAST_FLOAT)
-	      (GETJSAMPLE(*elemptr++) - CENTERJSAMPLE);
-	  }
-	}
-#endif
-      }
-    }
-
-    /* Perform the DCT */
-    (*do_dct) (workspace);
-
-    /* Quantize/descale the coefficients, and store into coef_blocks[] */
-    { register FAST_FLOAT temp;
-      register int i;
-      register JCOEFPTR output_ptr = coef_blocks[bi];
-
-      for (i = 0; i < DCTSIZE2; i++) {
-	/* Apply the quantization and scaling factor */
-	temp = workspace[i] * divisors[i];
-	/* Round to nearest integer.
-	 * Since C does not specify the direction of rounding for negative
-	 * quotients, we have to force the dividend positive for portability.
-	 * The maximum coefficient size is +-16K (for 12-bit data), so this
-	 * code should work for either 16-bit or 32-bit ints.
-	 */
-	output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384);
-      }
-    }
-  }
-}
-
-#endif /* DCT_FLOAT_SUPPORTED */
-
-
-/*
- * Initialize FDCT manager.
- */
-
-GLOBAL(void)
-jinit_forward_dct (j_compress_ptr cinfo)
-{
-  my_fdct_ptr fdct;
-  int i;
-
-  fdct = (my_fdct_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_fdct_controller));
-  cinfo->fdct = (struct jpeg_forward_dct *) fdct;
-  fdct->pub.start_pass = start_pass_fdctmgr;
-
-  switch (cinfo->dct_method) {
-#ifdef DCT_ISLOW_SUPPORTED
-  case JDCT_ISLOW:
-    fdct->pub.forward_DCT = forward_DCT;
-    fdct->do_dct = jpeg_fdct_islow;
-    break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-  case JDCT_IFAST:
-    fdct->pub.forward_DCT = forward_DCT;
-    fdct->do_dct = jpeg_fdct_ifast;
-    break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-  case JDCT_FLOAT:
-    fdct->pub.forward_DCT = forward_DCT_float;
-    fdct->do_float_dct = jpeg_fdct_float;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-    break;
-  }
-
-  /* Mark divisor tables unallocated */
-  for (i = 0; i < NUM_QUANT_TBLS; i++) {
-    fdct->divisors[i] = NULL;
-#ifdef DCT_FLOAT_SUPPORTED
-    fdct->float_divisors[i] = NULL;
-#endif
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jchuff.c b/modules/juce_graphics/image_formats/jpglib/jchuff.c
deleted file mode 100644
index 581ed59..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jchuff.c
+++ /dev/null
@@ -1,909 +0,0 @@
-/*
- * jchuff.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains Huffman entropy encoding routines.
- *
- * Much of the complexity here has to do with supporting output suspension.
- * If the data destination module demands suspension, we want to be able to
- * back up to the start of the current MCU.  To do this, we copy state
- * variables into local working storage, and update them back to the
- * permanent JPEG objects only upon successful completion of an MCU.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jchuff.h"		/* Declarations shared with jcphuff.c */
-
-
-/* Expanded entropy encoder object for Huffman encoding.
- *
- * The savable_state subrecord contains fields that change within an MCU,
- * but must not be updated permanently until we complete the MCU.
- */
-
-typedef struct {
-  INT32 put_buffer;		/* current bit-accumulation buffer */
-  int put_bits;			/* # of bits now in it */
-  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-} savable_state;
-
-/* This macro is to work around compilers with missing or broken
- * structure assignment.  You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest,src)  ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest,src)  \
-	((dest).put_buffer = (src).put_buffer, \
-	 (dest).put_bits = (src).put_bits, \
-	 (dest).last_dc_val[0] = (src).last_dc_val[0], \
-	 (dest).last_dc_val[1] = (src).last_dc_val[1], \
-	 (dest).last_dc_val[2] = (src).last_dc_val[2], \
-	 (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
-typedef struct {
-  struct jpeg_entropy_encoder pub; /* public fields */
-
-  savable_state saved;		/* Bit buffer & DC state at start of MCU */
-
-  /* These fields are NOT loaded into local working state. */
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-  int next_restart_num;		/* next restart number to write (0-7) */
-
-  /* Pointers to derived tables (these workspaces have image lifespan) */
-  c_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS];
-  c_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS];
-
-#ifdef ENTROPY_OPT_SUPPORTED	/* Statistics tables for optimization */
-  long * dc_count_ptrs[NUM_HUFF_TBLS];
-  long * ac_count_ptrs[NUM_HUFF_TBLS];
-#endif
-} huff_entropy_encoder;
-
-typedef huff_entropy_encoder * huff_entropy_ptr;
-
-/* Working state while writing an MCU.
- * This struct contains all the fields that are needed by subroutines.
- */
-
-typedef struct {
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-  savable_state cur;		/* Current bit buffer & DC state */
-  j_compress_ptr cinfo;		/* dump_buffer needs access to this */
-} working_state;
-
-
-/* Forward declarations */
-METHODDEF(boolean) encode_mcu_huff JPP((j_compress_ptr cinfo,
-					JBLOCKROW *MCU_data));
-METHODDEF(void) finish_pass_huff JPP((j_compress_ptr cinfo));
-#ifdef ENTROPY_OPT_SUPPORTED
-METHODDEF(boolean) encode_mcu_gather JPP((j_compress_ptr cinfo,
-					  JBLOCKROW *MCU_data));
-METHODDEF(void) finish_pass_gather JPP((j_compress_ptr cinfo));
-#endif
-
-
-/*
- * Initialize for a Huffman-compressed scan.
- * If gather_statistics is TRUE, we do not output anything during the scan,
- * just count the Huffman symbols used and generate Huffman code tables.
- */
-
-METHODDEF(void)
-start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int ci, dctbl, actbl;
-  jpeg_component_info * compptr;
-
-  if (gather_statistics) {
-#ifdef ENTROPY_OPT_SUPPORTED
-    entropy->pub.encode_mcu = encode_mcu_gather;
-    entropy->pub.finish_pass = finish_pass_gather;
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    entropy->pub.encode_mcu = encode_mcu_huff;
-    entropy->pub.finish_pass = finish_pass_huff;
-  }
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    dctbl = compptr->dc_tbl_no;
-    actbl = compptr->ac_tbl_no;
-    if (gather_statistics) {
-#ifdef ENTROPY_OPT_SUPPORTED
-      /* Check for invalid table indexes */
-      /* (make_c_derived_tbl does this in the other path) */
-      if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS)
-	ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl);
-      if (actbl < 0 || actbl >= NUM_HUFF_TBLS)
-	ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl);
-      /* Allocate and zero the statistics tables */
-      /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */
-      if (entropy->dc_count_ptrs[dctbl] == NULL)
-	entropy->dc_count_ptrs[dctbl] = (long *)
-	  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				      257 * SIZEOF(long));
-      MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long));
-      if (entropy->ac_count_ptrs[actbl] == NULL)
-	entropy->ac_count_ptrs[actbl] = (long *)
-	  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				      257 * SIZEOF(long));
-      MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long));
-#endif
-    } else {
-      /* Compute derived values for Huffman tables */
-      /* We may do this more than once for a table, but it's not expensive */
-      jpeg_make_c_derived_tbl(cinfo, TRUE, dctbl,
-			      & entropy->dc_derived_tbls[dctbl]);
-      jpeg_make_c_derived_tbl(cinfo, FALSE, actbl,
-			      & entropy->ac_derived_tbls[actbl]);
-    }
-    /* Initialize DC predictions to 0 */
-    entropy->saved.last_dc_val[ci] = 0;
-  }
-
-  /* Initialize bit buffer to empty */
-  entropy->saved.put_buffer = 0;
-  entropy->saved.put_bits = 0;
-
-  /* Initialize restart stuff */
-  entropy->restarts_to_go = cinfo->restart_interval;
-  entropy->next_restart_num = 0;
-}
-
-
-/*
- * Compute the derived values for a Huffman table.
- * This routine also performs some validation checks on the table.
- *
- * Note this is also used by jcphuff.c.
- */
-
-GLOBAL(void)
-jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno,
-			 c_derived_tbl ** pdtbl)
-{
-  JHUFF_TBL *htbl;
-  c_derived_tbl *dtbl;
-  int p, i, l, lastp, si, maxsymbol;
-  char huffsize[257];
-  unsigned int huffcode[257];
-  unsigned int code;
-
-  /* Note that huffsize[] and huffcode[] are filled in code-length order,
-   * paralleling the order of the symbols themselves in htbl->huffval[].
-   */
-
-  /* Find the input Huffman table */
-  if (tblno < 0 || tblno >= NUM_HUFF_TBLS)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-  htbl =
-    isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno];
-  if (htbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-
-  /* Allocate a workspace if we haven't already done so. */
-  if (*pdtbl == NULL)
-    *pdtbl = (c_derived_tbl *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(c_derived_tbl));
-  dtbl = *pdtbl;
-
-  /* Figure C.1: make table of Huffman code length for each symbol */
-
-  p = 0;
-  for (l = 1; l <= 16; l++) {
-    i = (int) htbl->bits[l];
-    if (i < 0 || p + i > 256)	/* protect against table overrun */
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    while (i--)
-      huffsize[p++] = (char) l;
-  }
-  huffsize[p] = 0;
-  lastp = p;
-
-  /* Figure C.2: generate the codes themselves */
-  /* We also validate that the counts represent a legal Huffman code tree. */
-
-  code = 0;
-  si = huffsize[0];
-  p = 0;
-  while (huffsize[p]) {
-    while (((int) huffsize[p]) == si) {
-      huffcode[p++] = code;
-      code++;
-    }
-    /* code is now 1 more than the last code used for codelength si; but
-     * it must still fit in si bits, since no code is allowed to be all ones.
-     */
-    if (((INT32) code) >= (((INT32) 1) << si))
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    code <<= 1;
-    si++;
-  }
-
-  /* Figure C.3: generate encoding tables */
-  /* These are code and size indexed by symbol value */
-
-  /* Set all codeless symbols to have code length 0;
-   * this lets us detect duplicate VAL entries here, and later
-   * allows emit_bits to detect any attempt to emit such symbols.
-   */
-  MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi));
-
-  /* This is also a convenient place to check for out-of-range
-   * and duplicated VAL entries.  We allow 0..255 for AC symbols
-   * but only 0..15 for DC.  (We could constrain them further
-   * based on data depth and mode, but this seems enough.)
-   */
-  maxsymbol = isDC ? 15 : 255;
-
-  for (p = 0; p < lastp; p++) {
-    i = htbl->huffval[p];
-    if (i < 0 || i > maxsymbol || dtbl->ehufsi[i])
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    dtbl->ehufco[i] = huffcode[p];
-    dtbl->ehufsi[i] = huffsize[p];
-  }
-}
-
-
-/* Outputting bytes to the file */
-
-/* Emit a byte, taking 'action' if must suspend. */
-#define emit_byte(state,val,action)  \
-	{ *(state)->next_output_byte++ = (JOCTET) (val);  \
-	  if (--(state)->free_in_buffer == 0)  \
-	    if (! dump_buffer(state))  \
-	      { action; } }
-
-
-LOCAL(boolean)
-dump_buffer (working_state * state)
-/* Empty the output buffer; return TRUE if successful, FALSE if must suspend */
-{
-  struct jpeg_destination_mgr * dest = state->cinfo->dest;
-
-  if (! (*dest->empty_output_buffer) (state->cinfo))
-    return FALSE;
-  /* After a successful buffer dump, must reset buffer pointers */
-  state->next_output_byte = dest->next_output_byte;
-  state->free_in_buffer = dest->free_in_buffer;
-  return TRUE;
-}
-
-
-/* Outputting bits to the file */
-
-/* Only the right 24 bits of put_buffer are used; the valid bits are
- * left-justified in this part.  At most 16 bits can be passed to emit_bits
- * in one call, and we never retain more than 7 bits in put_buffer
- * between calls, so 24 bits are sufficient.
- */
-
-INLINE
-LOCAL(boolean)
-emit_bits (working_state * state, unsigned int code, int size)
-/* Emit some bits; return TRUE if successful, FALSE if must suspend */
-{
-  /* This routine is heavily used, so it's worth coding tightly. */
-  register INT32 put_buffer = (INT32) code;
-  register int put_bits = state->cur.put_bits;
-
-  /* if size is 0, caller used an invalid Huffman table entry */
-  if (size == 0)
-    ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE);
-
-  put_buffer &= (((INT32) 1)<<size) - 1; /* mask off any extra bits in code */
-
-  put_bits += size;		/* new number of bits in buffer */
-
-  put_buffer <<= 24 - put_bits; /* align incoming bits */
-
-  put_buffer |= state->cur.put_buffer; /* and merge with old buffer contents */
-
-  while (put_bits >= 8) {
-    int c = (int) ((put_buffer >> 16) & 0xFF);
-
-    emit_byte(state, c, return FALSE);
-    if (c == 0xFF) {		/* need to stuff a zero byte? */
-      emit_byte(state, 0, return FALSE);
-    }
-    put_buffer <<= 8;
-    put_bits -= 8;
-  }
-
-  state->cur.put_buffer = put_buffer; /* update state variables */
-  state->cur.put_bits = put_bits;
-
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-flush_bits (working_state * state)
-{
-  if (! emit_bits(state, 0x7F, 7)) /* fill any partial byte with ones */
-    return FALSE;
-  state->cur.put_buffer = 0;	/* and reset bit-buffer to empty */
-  state->cur.put_bits = 0;
-  return TRUE;
-}
-
-
-/* Encode a single block's worth of coefficients */
-
-LOCAL(boolean)
-encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val,
-		  c_derived_tbl *dctbl, c_derived_tbl *actbl)
-{
-  register int temp, temp2;
-  register int nbits;
-  register int k, r, i;
-
-  /* Encode the DC coefficient difference per section F.1.2.1 */
-
-  temp = temp2 = block[0] - last_dc_val;
-
-  if (temp < 0) {
-    temp = -temp;		/* temp is abs value of input */
-    /* For a negative input, want temp2 = bitwise complement of abs(input) */
-    /* This code assumes we are on a two's complement machine */
-    temp2--;
-  }
-
-  /* Find the number of bits needed for the magnitude of the coefficient */
-  nbits = 0;
-  while (temp) {
-    nbits++;
-    temp >>= 1;
-  }
-  /* Check for out-of-range coefficient values.
-   * Since we're encoding a difference, the range limit is twice as much.
-   */
-  if (nbits > MAX_COEF_BITS+1)
-    ERREXIT(state->cinfo, JERR_BAD_DCT_COEF);
-
-  /* Emit the Huffman-coded symbol for the number of bits */
-  if (! emit_bits(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits]))
-    return FALSE;
-
-  /* Emit that number of bits of the value, if positive, */
-  /* or the complement of its magnitude, if negative. */
-  if (nbits)			/* emit_bits rejects calls with size 0 */
-    if (! emit_bits(state, (unsigned int) temp2, nbits))
-      return FALSE;
-
-  /* Encode the AC coefficients per section F.1.2.2 */
-
-  r = 0;			/* r = run length of zeros */
-
-  for (k = 1; k < DCTSIZE2; k++) {
-    if ((temp = block[jpeg_natural_order[k]]) == 0) {
-      r++;
-    } else {
-      /* if run length > 15, must emit special run-length-16 codes (0xF0) */
-      while (r > 15) {
-	if (! emit_bits(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0]))
-	  return FALSE;
-	r -= 16;
-      }
-
-      temp2 = temp;
-      if (temp < 0) {
-	temp = -temp;		/* temp is abs value of input */
-	/* This code assumes we are on a two's complement machine */
-	temp2--;
-      }
-
-      /* Find the number of bits needed for the magnitude of the coefficient */
-      nbits = 1;		/* there must be at least one 1 bit */
-      while ((temp >>= 1))
-	nbits++;
-      /* Check for out-of-range coefficient values */
-      if (nbits > MAX_COEF_BITS)
-	ERREXIT(state->cinfo, JERR_BAD_DCT_COEF);
-
-      /* Emit Huffman symbol for run length / number of bits */
-      i = (r << 4) + nbits;
-      if (! emit_bits(state, actbl->ehufco[i], actbl->ehufsi[i]))
-	return FALSE;
-
-      /* Emit that number of bits of the value, if positive, */
-      /* or the complement of its magnitude, if negative. */
-      if (! emit_bits(state, (unsigned int) temp2, nbits))
-	return FALSE;
-
-      r = 0;
-    }
-  }
-
-  /* If the last coef(s) were zero, emit an end-of-block code */
-  if (r > 0)
-    if (! emit_bits(state, actbl->ehufco[0], actbl->ehufsi[0]))
-      return FALSE;
-
-  return TRUE;
-}
-
-
-/*
- * Emit a restart marker & resynchronize predictions.
- */
-
-LOCAL(boolean)
-emit_restart (working_state * state, int restart_num)
-{
-  int ci;
-
-  if (! flush_bits(state))
-    return FALSE;
-
-  emit_byte(state, 0xFF, return FALSE);
-  emit_byte(state, JPEG_RST0 + restart_num, return FALSE);
-
-  /* Re-initialize DC predictions to 0 */
-  for (ci = 0; ci < state->cinfo->comps_in_scan; ci++)
-    state->cur.last_dc_val[ci] = 0;
-
-  /* The restart counter is not updated until we successfully write the MCU. */
-
-  return TRUE;
-}
-
-
-/*
- * Encode and output one MCU's worth of Huffman-compressed coefficients.
- */
-
-METHODDEF(boolean)
-encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  working_state state;
-  int blkn, ci;
-  jpeg_component_info * compptr;
-
-  /* Load up working state */
-  state.next_output_byte = cinfo->dest->next_output_byte;
-  state.free_in_buffer = cinfo->dest->free_in_buffer;
-  ASSIGN_STATE(state.cur, entropy->saved);
-  state.cinfo = cinfo;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! emit_restart(&state, entropy->next_restart_num))
-	return FALSE;
-  }
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-    if (! encode_one_block(&state,
-			   MCU_data[blkn][0], state.cur.last_dc_val[ci],
-			   entropy->dc_derived_tbls[compptr->dc_tbl_no],
-			   entropy->ac_derived_tbls[compptr->ac_tbl_no]))
-      return FALSE;
-    /* Update last_dc_val */
-    state.cur.last_dc_val[ci] = MCU_data[blkn][0][0];
-  }
-
-  /* Completed MCU, so update state */
-  cinfo->dest->next_output_byte = state.next_output_byte;
-  cinfo->dest->free_in_buffer = state.free_in_buffer;
-  ASSIGN_STATE(entropy->saved, state.cur);
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Finish up at the end of a Huffman-compressed scan.
- */
-
-METHODDEF(void)
-finish_pass_huff (j_compress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  working_state state;
-
-  /* Load up working state ... flush_bits needs it */
-  state.next_output_byte = cinfo->dest->next_output_byte;
-  state.free_in_buffer = cinfo->dest->free_in_buffer;
-  ASSIGN_STATE(state.cur, entropy->saved);
-  state.cinfo = cinfo;
-
-  /* Flush out the last data */
-  if (! flush_bits(&state))
-    ERREXIT(cinfo, JERR_CANT_SUSPEND);
-
-  /* Update state */
-  cinfo->dest->next_output_byte = state.next_output_byte;
-  cinfo->dest->free_in_buffer = state.free_in_buffer;
-  ASSIGN_STATE(entropy->saved, state.cur);
-}
-
-
-/*
- * Huffman coding optimization.
- *
- * We first scan the supplied data and count the number of uses of each symbol
- * that is to be Huffman-coded. (This process MUST agree with the code above.)
- * Then we build a Huffman coding tree for the observed counts.
- * Symbols which are not needed at all for the particular image are not
- * assigned any code, which saves space in the DHT marker as well as in
- * the compressed data.
- */
-
-#ifdef ENTROPY_OPT_SUPPORTED
-
-
-/* Process a single block's worth of coefficients */
-
-LOCAL(void)
-htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val,
-		 long dc_counts[], long ac_counts[])
-{
-  register int temp;
-  register int nbits;
-  register int k, r;
-
-  /* Encode the DC coefficient difference per section F.1.2.1 */
-
-  temp = block[0] - last_dc_val;
-  if (temp < 0)
-    temp = -temp;
-
-  /* Find the number of bits needed for the magnitude of the coefficient */
-  nbits = 0;
-  while (temp) {
-    nbits++;
-    temp >>= 1;
-  }
-  /* Check for out-of-range coefficient values.
-   * Since we're encoding a difference, the range limit is twice as much.
-   */
-  if (nbits > MAX_COEF_BITS+1)
-    ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-  /* Count the Huffman symbol for the number of bits */
-  dc_counts[nbits]++;
-
-  /* Encode the AC coefficients per section F.1.2.2 */
-
-  r = 0;			/* r = run length of zeros */
-
-  for (k = 1; k < DCTSIZE2; k++) {
-    if ((temp = block[jpeg_natural_order[k]]) == 0) {
-      r++;
-    } else {
-      /* if run length > 15, must emit special run-length-16 codes (0xF0) */
-      while (r > 15) {
-	ac_counts[0xF0]++;
-	r -= 16;
-      }
-
-      /* Find the number of bits needed for the magnitude of the coefficient */
-      if (temp < 0)
-	temp = -temp;
-
-      /* Find the number of bits needed for the magnitude of the coefficient */
-      nbits = 1;		/* there must be at least one 1 bit */
-      while ((temp >>= 1))
-	nbits++;
-      /* Check for out-of-range coefficient values */
-      if (nbits > MAX_COEF_BITS)
-	ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-      /* Count Huffman symbol for run length / number of bits */
-      ac_counts[(r << 4) + nbits]++;
-
-      r = 0;
-    }
-  }
-
-  /* If the last coef(s) were zero, emit an end-of-block code */
-  if (r > 0)
-    ac_counts[0]++;
-}
-
-
-/*
- * Trial-encode one MCU's worth of Huffman-compressed coefficients.
- * No data is actually output, so no suspension return is possible.
- */
-
-METHODDEF(boolean)
-encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int blkn, ci;
-  jpeg_component_info * compptr;
-
-  /* Take care of restart intervals if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      /* Re-initialize DC predictions to 0 */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++)
-	entropy->saved.last_dc_val[ci] = 0;
-      /* Update restart state */
-      entropy->restarts_to_go = cinfo->restart_interval;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-    htest_one_block(cinfo, MCU_data[blkn][0], entropy->saved.last_dc_val[ci],
-		    entropy->dc_count_ptrs[compptr->dc_tbl_no],
-		    entropy->ac_count_ptrs[compptr->ac_tbl_no]);
-    entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0];
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Generate the best Huffman code table for the given counts, fill htbl.
- * Note this is also used by jcphuff.c.
- *
- * The JPEG standard requires that no symbol be assigned a codeword of all
- * one bits (so that padding bits added at the end of a compressed segment
- * can't look like a valid code).  Because of the canonical ordering of
- * codewords, this just means that there must be an unused slot in the
- * longest codeword length category.  Section K.2 of the JPEG spec suggests
- * reserving such a slot by pretending that symbol 256 is a valid symbol
- * with count 1.  In theory that's not optimal; giving it count zero but
- * including it in the symbol set anyway should give a better Huffman code.
- * But the theoretically better code actually seems to come out worse in
- * practice, because it produces more all-ones bytes (which incur stuffed
- * zero bytes in the final file).  In any case the difference is tiny.
- *
- * The JPEG standard requires Huffman codes to be no more than 16 bits long.
- * If some symbols have a very small but nonzero probability, the Huffman tree
- * must be adjusted to meet the code length restriction.  We currently use
- * the adjustment method suggested in JPEG section K.2.  This method is *not*
- * optimal; it may not choose the best possible limited-length code.  But
- * typically only very-low-frequency symbols will be given less-than-optimal
- * lengths, so the code is almost optimal.  Experimental comparisons against
- * an optimal limited-length-code algorithm indicate that the difference is
- * microscopic --- usually less than a hundredth of a percent of total size.
- * So the extra complexity of an optimal algorithm doesn't seem worthwhile.
- */
-
-GLOBAL(void)
-jpeg_gen_optimal_table (j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[])
-{
-#define MAX_CLEN 32		/* assumed maximum initial code length */
-  UINT8 bits[MAX_CLEN+1];	/* bits[k] = # of symbols with code length k */
-  int codesize[257];		/* codesize[k] = code length of symbol k */
-  int others[257];		/* next symbol in current branch of tree */
-  int c1, c2;
-  int p, i, j;
-  long v;
-
-  /* This algorithm is explained in section K.2 of the JPEG standard */
-
-  MEMZERO(bits, SIZEOF(bits));
-  MEMZERO(codesize, SIZEOF(codesize));
-  for (i = 0; i < 257; i++)
-    others[i] = -1;		/* init links to empty */
-
-  freq[256] = 1;		/* make sure 256 has a nonzero count */
-  /* Including the pseudo-symbol 256 in the Huffman procedure guarantees
-   * that no real symbol is given code-value of all ones, because 256
-   * will be placed last in the largest codeword category.
-   */
-
-  /* Huffman's basic algorithm to assign optimal code lengths to symbols */
-
-  for (;;) {
-    /* Find the smallest nonzero frequency, set c1 = its symbol */
-    /* In case of ties, take the larger symbol number */
-    c1 = -1;
-    v = 1000000000L;
-    for (i = 0; i <= 256; i++) {
-      if (freq[i] && freq[i] <= v) {
-	v = freq[i];
-	c1 = i;
-      }
-    }
-
-    /* Find the next smallest nonzero frequency, set c2 = its symbol */
-    /* In case of ties, take the larger symbol number */
-    c2 = -1;
-    v = 1000000000L;
-    for (i = 0; i <= 256; i++) {
-      if (freq[i] && freq[i] <= v && i != c1) {
-	v = freq[i];
-	c2 = i;
-      }
-    }
-
-    /* Done if we've merged everything into one frequency */
-    if (c2 < 0)
-      break;
-
-    /* Else merge the two counts/trees */
-    freq[c1] += freq[c2];
-    freq[c2] = 0;
-
-    /* Increment the codesize of everything in c1's tree branch */
-    codesize[c1]++;
-    while (others[c1] >= 0) {
-      c1 = others[c1];
-      codesize[c1]++;
-    }
-
-    others[c1] = c2;		/* chain c2 onto c1's tree branch */
-
-    /* Increment the codesize of everything in c2's tree branch */
-    codesize[c2]++;
-    while (others[c2] >= 0) {
-      c2 = others[c2];
-      codesize[c2]++;
-    }
-  }
-
-  /* Now count the number of symbols of each code length */
-  for (i = 0; i <= 256; i++) {
-    if (codesize[i]) {
-      /* The JPEG standard seems to think that this can't happen, */
-      /* but I'm paranoid... */
-      if (codesize[i] > MAX_CLEN)
-	ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW);
-
-      bits[codesize[i]]++;
-    }
-  }
-
-  /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure
-   * Huffman procedure assigned any such lengths, we must adjust the coding.
-   * Here is what the JPEG spec says about how this next bit works:
-   * Since symbols are paired for the longest Huffman code, the symbols are
-   * removed from this length category two at a time.  The prefix for the pair
-   * (which is one bit shorter) is allocated to one of the pair; then,
-   * skipping the BITS entry for that prefix length, a code word from the next
-   * shortest nonzero BITS entry is converted into a prefix for two code words
-   * one bit longer.
-   */
-
-  for (i = MAX_CLEN; i > 16; i--) {
-    while (bits[i] > 0) {
-      j = i - 2;		/* find length of new prefix to be used */
-      while (bits[j] == 0)
-	j--;
-
-      bits[i] -= 2;		/* remove two symbols */
-      bits[i-1]++;		/* one goes in this length */
-      bits[j+1] += 2;		/* two new symbols in this length */
-      bits[j]--;		/* symbol of this length is now a prefix */
-    }
-  }
-
-  /* Remove the count for the pseudo-symbol 256 from the largest codelength */
-  while (bits[i] == 0)		/* find largest codelength still in use */
-    i--;
-  bits[i]--;
-
-  /* Return final symbol counts (only for lengths 0..16) */
-  MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits));
-
-  /* Return a list of the symbols sorted by code length */
-  /* It's not real clear to me why we don't need to consider the codelength
-   * changes made above, but the JPEG spec seems to think this works.
-   */
-  p = 0;
-  for (i = 1; i <= MAX_CLEN; i++) {
-    for (j = 0; j <= 255; j++) {
-      if (codesize[j] == i) {
-	htbl->huffval[p] = (UINT8) j;
-	p++;
-      }
-    }
-  }
-
-  /* Set sent_table FALSE so updated table will be written to JPEG file. */
-  htbl->sent_table = FALSE;
-}
-
-
-/*
- * Finish up a statistics-gathering pass and create the new Huffman tables.
- */
-
-METHODDEF(void)
-finish_pass_gather (j_compress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int ci, dctbl, actbl;
-  jpeg_component_info * compptr;
-  JHUFF_TBL **htblptr;
-  boolean did_dc[NUM_HUFF_TBLS];
-  boolean did_ac[NUM_HUFF_TBLS];
-
-  /* It's important not to apply jpeg_gen_optimal_table more than once
-   * per table, because it clobbers the input frequency counts!
-   */
-  MEMZERO(did_dc, SIZEOF(did_dc));
-  MEMZERO(did_ac, SIZEOF(did_ac));
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    dctbl = compptr->dc_tbl_no;
-    actbl = compptr->ac_tbl_no;
-    if (! did_dc[dctbl]) {
-      htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl];
-      if (*htblptr == NULL)
-	*htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-      jpeg_gen_optimal_table(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]);
-      did_dc[dctbl] = TRUE;
-    }
-    if (! did_ac[actbl]) {
-      htblptr = & cinfo->ac_huff_tbl_ptrs[actbl];
-      if (*htblptr == NULL)
-	*htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-      jpeg_gen_optimal_table(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]);
-      did_ac[actbl] = TRUE;
-    }
-  }
-}
-
-
-#endif /* ENTROPY_OPT_SUPPORTED */
-
-
-/*
- * Module initialization routine for Huffman entropy encoding.
- */
-
-GLOBAL(void)
-jinit_huff_encoder (j_compress_ptr cinfo)
-{
-  huff_entropy_ptr entropy;
-  int i;
-
-  entropy = (huff_entropy_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(huff_entropy_encoder));
-  cinfo->entropy = (struct jpeg_entropy_encoder *) entropy;
-  entropy->pub.start_pass = start_pass_huff;
-
-  /* Mark tables unallocated */
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
-#ifdef ENTROPY_OPT_SUPPORTED
-    entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL;
-#endif
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jchuff.h b/modules/juce_graphics/image_formats/jpglib/jchuff.h
deleted file mode 100644
index 783b32b..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jchuff.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * jchuff.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains declarations for Huffman entropy encoding routines
- * that are shared between the sequential encoder (jchuff.c) and the
- * progressive encoder (jcphuff.c).  No other modules need to see these.
- */
-
-/* The legal range of a DCT coefficient is
- *  -1024 .. +1023  for 8-bit data;
- * -16384 .. +16383 for 12-bit data.
- * Hence the magnitude should always fit in 10 or 14 bits respectively.
- */
-
-#ifndef _jchuff_h_
-#define _jchuff_h_
-
-#if BITS_IN_JSAMPLE == 8
-#define MAX_COEF_BITS 10
-#else
-#define MAX_COEF_BITS 14
-#endif
-
-/* Derived data constructed for each Huffman table */
-
-typedef struct {
-  unsigned int ehufco[256];	/* code for each symbol */
-  char ehufsi[256];		/* length of code for each symbol */
-  /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */
-} c_derived_tbl;
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_make_c_derived_tbl	jMkCDerived
-#define jpeg_gen_optimal_table	jGenOptTbl
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-/* Expand a Huffman table definition into the derived format */
-EXTERN(void) jpeg_make_c_derived_tbl
-	JPP((j_compress_ptr cinfo, boolean isDC, int tblno,
-	     c_derived_tbl ** pdtbl));
-
-/* Generate an optimal table definition given the specified counts */
-EXTERN(void) jpeg_gen_optimal_table
-	JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[]));
-
-#endif
diff --git a/modules/juce_graphics/image_formats/jpglib/jcinit.c b/modules/juce_graphics/image_formats/jpglib/jcinit.c
deleted file mode 100644
index 19de8d0..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcinit.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * jcinit.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains initialization logic for the JPEG compressor.
- * This routine is in charge of selecting the modules to be executed and
- * making an initialization call to each one.
- *
- * Logically, this code belongs in jcmaster.c.  It's split out because
- * linking this routine implies linking the entire compression library.
- * For a transcoding-only application, we want to be able to use jcmaster.c
- * without linking in the whole library.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Master selection of compression modules.
- * This is done once at the start of processing an image.  We determine
- * which modules will be used and give them appropriate initialization calls.
- */
-
-GLOBAL(void)
-jinit_compress_master (j_compress_ptr cinfo)
-{
-  /* Initialize master control (includes parameter checking/processing) */
-  jinit_c_master_control(cinfo, FALSE /* full compression */);
-
-  /* Preprocessing */
-  if (! cinfo->raw_data_in) {
-    jinit_color_converter(cinfo);
-    jinit_downsampler(cinfo);
-    jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */);
-  }
-  /* Forward DCT */
-  jinit_forward_dct(cinfo);
-  /* Entropy encoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code) {
-    ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
-  } else {
-    if (cinfo->progressive_mode) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-      jinit_phuff_encoder(cinfo);
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    } else
-      jinit_huff_encoder(cinfo);
-  }
-
-  /* Need a full-image coefficient buffer in any multi-pass mode. */
-  jinit_c_coef_controller(cinfo,
-		(boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding));
-  jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */);
-
-  jinit_marker_writer(cinfo);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Write the datastream header (SOI) immediately.
-   * Frame and scan headers are postponed till later.
-   * This lets application insert special markers after the SOI.
-   */
-  (*cinfo->marker->write_file_header) (cinfo);
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcmainct.c b/modules/juce_graphics/image_formats/jpglib/jcmainct.c
deleted file mode 100644
index 261b284..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcmainct.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * jcmainct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the main buffer controller for compression.
- * The main buffer lies between the pre-processor and the JPEG
- * compressor proper; it holds downsampled data in the JPEG colorspace.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Note: currently, there is no operating mode in which a full-image buffer
- * is needed at this step.  If there were, that mode could not be used with
- * "raw data" input, since this module is bypassed in that case.  However,
- * we've left the code here for possible use in special applications.
- */
-#undef FULL_MAIN_BUFFER_SUPPORTED
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_main_controller pub; /* public fields */
-
-  JDIMENSION cur_iMCU_row;	/* number of current iMCU row */
-  JDIMENSION rowgroup_ctr;	/* counts row groups received in iMCU row */
-  boolean suspended;		/* remember if we suspended output */
-  J_BUF_MODE pass_mode;		/* current operating mode */
-
-  /* If using just a strip buffer, this points to the entire set of buffers
-   * (we allocate one for each component).  In the full-image case, this
-   * points to the currently accessible strips of the virtual arrays.
-   */
-  JSAMPARRAY buffer[MAX_COMPONENTS];
-
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-  /* If using full-image storage, this array holds pointers to virtual-array
-   * control blocks for each component.  Unused if not full-image storage.
-   */
-  jvirt_sarray_ptr whole_image[MAX_COMPONENTS];
-#endif
-} my_main_controller;
-
-typedef my_main_controller * my_main_ptr;
-
-
-/* Forward declarations */
-METHODDEF(void) process_data_simple_main
-	JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf,
-	     JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail));
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-METHODDEF(void) process_data_buffer_main
-	JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf,
-	     JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail));
-#endif
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_main_ptr main_ = (my_main_ptr) cinfo->main;
-
-  /* Do nothing in raw-data mode. */
-  if (cinfo->raw_data_in)
-    return;
-
-  main_->cur_iMCU_row = 0;	/* initialize counters */
-  main_->rowgroup_ctr = 0;
-  main_->suspended = FALSE;
-  main_->pass_mode = pass_mode;	/* save mode for use by process_data */
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-    if (main_->whole_image[0] != NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif
-    main_->pub.process_data = process_data_simple_main;
-    break;
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-  case JBUF_SAVE_SOURCE:
-  case JBUF_CRANK_DEST:
-  case JBUF_SAVE_AND_PASS:
-    if (main_->whole_image[0] == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    main_->pub.process_data = process_data_buffer_main;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-}
-
-
-/*
- * Process some data.
- * This routine handles the simple pass-through mode,
- * where we have only a strip buffer.
- */
-
-METHODDEF(void)
-process_data_simple_main (j_compress_ptr cinfo,
-			  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			  JDIMENSION in_rows_avail)
-{
-  my_main_ptr main_ = (my_main_ptr) cinfo->main;
-
-  while (main_->cur_iMCU_row < cinfo->total_iMCU_rows) {
-    /* Read input data if we haven't filled the main buffer yet */
-    if (main_->rowgroup_ctr < DCTSIZE)
-      (*cinfo->prep->pre_process_data) (cinfo,
-					input_buf, in_row_ctr, in_rows_avail,
-					main_->buffer, &main_->rowgroup_ctr,
-					(JDIMENSION) DCTSIZE);
-
-    /* If we don't have a full iMCU row buffered, return to application for
-     * more data.  Note that preprocessor will always pad to fill the iMCU row
-     * at the bottom of the image.
-     */
-    if (main_->rowgroup_ctr != DCTSIZE)
-      return;
-
-    /* Send the completed row to the compressor */
-    if (! (*cinfo->coef->compress_data) (cinfo, main_->buffer)) {
-      /* If compressor did not consume the whole row, then we must need to
-       * suspend processing and return to the application.  In this situation
-       * we pretend we didn't yet consume the last input row; otherwise, if
-       * it happened to be the last row of the image, the application would
-       * think we were done.
-       */
-      if (! main_->suspended) {
-	(*in_row_ctr)--;
-	main_->suspended = TRUE;
-      }
-      return;
-    }
-    /* We did finish the row.  Undo our little suspension hack if a previous
-     * call suspended; then mark the main buffer empty.
-     */
-    if (main_->suspended) {
-      (*in_row_ctr)++;
-      main_->suspended = FALSE;
-    }
-    main_->rowgroup_ctr = 0;
-    main_->cur_iMCU_row++;
-  }
-}
-
-
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-
-/*
- * Process some data.
- * This routine handles all of the modes that use a full-size buffer.
- */
-
-METHODDEF(void)
-process_data_buffer_main (j_compress_ptr cinfo,
-			  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			  JDIMENSION in_rows_avail)
-{
-  my_main_ptr main = (my_main_ptr) cinfo->main;
-  int ci;
-  jpeg_component_info *compptr;
-  boolean writing = (main->pass_mode != JBUF_CRANK_DEST);
-
-  while (main->cur_iMCU_row < cinfo->total_iMCU_rows) {
-    /* Realign the virtual buffers if at the start of an iMCU row. */
-    if (main->rowgroup_ctr == 0) {
-      for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	   ci++, compptr++) {
-	main->buffer[ci] = (*cinfo->mem->access_virt_sarray)
-	  ((j_common_ptr) cinfo, main->whole_image[ci],
-	   main->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE),
-	   (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing);
-      }
-      /* In a read pass, pretend we just read some source data. */
-      if (! writing) {
-	*in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE;
-	main->rowgroup_ctr = DCTSIZE;
-      }
-    }
-
-    /* If a write pass, read input data until the current iMCU row is full. */
-    /* Note: preprocessor will pad if necessary to fill the last iMCU row. */
-    if (writing) {
-      (*cinfo->prep->pre_process_data) (cinfo,
-					input_buf, in_row_ctr, in_rows_avail,
-					main->buffer, &main->rowgroup_ctr,
-					(JDIMENSION) DCTSIZE);
-      /* Return to application if we need more data to fill the iMCU row. */
-      if (main->rowgroup_ctr < DCTSIZE)
-	return;
-    }
-
-    /* Emit data, unless this is a sink-only pass. */
-    if (main->pass_mode != JBUF_SAVE_SOURCE) {
-      if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) {
-	/* If compressor did not consume the whole row, then we must need to
-	 * suspend processing and return to the application.  In this situation
-	 * we pretend we didn't yet consume the last input row; otherwise, if
-	 * it happened to be the last row of the image, the application would
-	 * think we were done.
-	 */
-	if (! main->suspended) {
-	  (*in_row_ctr)--;
-	  main->suspended = TRUE;
-	}
-	return;
-      }
-      /* We did finish the row.  Undo our little suspension hack if a previous
-       * call suspended; then mark the main buffer empty.
-       */
-      if (main->suspended) {
-	(*in_row_ctr)++;
-	main->suspended = FALSE;
-      }
-    }
-
-    /* If get here, we are done with this iMCU row.  Mark buffer empty. */
-    main->rowgroup_ctr = 0;
-    main->cur_iMCU_row++;
-  }
-}
-
-#endif /* FULL_MAIN_BUFFER_SUPPORTED */
-
-
-/*
- * Initialize main buffer controller.
- */
-
-GLOBAL(void)
-jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer)
-{
-  my_main_ptr main_;
-  int ci;
-  jpeg_component_info *compptr;
-
-  main_ = (my_main_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_main_controller));
-  cinfo->main = (struct jpeg_c_main_controller *) main_;
-  main_->pub.start_pass = start_pass_main;
-
-  /* We don't need to create a buffer in raw-data mode. */
-  if (cinfo->raw_data_in)
-    return;
-
-  /* Create the buffer.  It holds downsampled data, so each component
-   * may be of a different size.
-   */
-  if (need_full_buffer) {
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-    /* Allocate a full-image virtual array for each component */
-    /* Note we pad the bottom to a multiple of the iMCU height */
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      main->whole_image[ci] = (*cinfo->mem->request_virt_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
-	 compptr->width_in_blocks * DCTSIZE,
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor) * DCTSIZE,
-	 (JDIMENSION) (compptr->v_samp_factor * DCTSIZE));
-    }
-#else
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif
-  } else {
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-    main_->whole_image[0] = NULL; /* flag for no virtual arrays */
-#endif
-    /* Allocate a strip buffer for each component */
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      main_->buffer[ci] = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 compptr->width_in_blocks * DCTSIZE,
-	 (JDIMENSION) (compptr->v_samp_factor * DCTSIZE));
-    }
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcmarker.c b/modules/juce_graphics/image_formats/jpglib/jcmarker.c
deleted file mode 100644
index be90314..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcmarker.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
- * jcmarker.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains routines to write JPEG datastream markers.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_marker_writer pub; /* public fields */
-
-  unsigned int last_restart_interval; /* last DRI value emitted; 0 after SOI */
-} my_marker_writer;
-
-typedef my_marker_writer * my_marker_ptr;
-
-
-/*
- * Basic output routines.
- *
- * Note that we do not support suspension while writing a marker.
- * Therefore, an application using suspension must ensure that there is
- * enough buffer space for the initial markers (typ. 600-700 bytes) before
- * calling jpeg_start_compress, and enough space to write the trailing EOI
- * (a few bytes) before calling jpeg_finish_compress.  Multipass compression
- * modes are not supported at all with suspension, so those two are the only
- * points where markers will be written.
- */
-
-LOCAL(void)
-emit_byte (j_compress_ptr cinfo, int val)
-/* Emit a byte */
-{
-  struct jpeg_destination_mgr * dest = cinfo->dest;
-
-  *(dest->next_output_byte)++ = (JOCTET) val;
-  if (--dest->free_in_buffer == 0) {
-    if (! (*dest->empty_output_buffer) (cinfo))
-      ERREXIT(cinfo, JERR_CANT_SUSPEND);
-  }
-}
-
-
-LOCAL(void)
-emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark)
-/* Emit a marker code */
-{
-  emit_byte(cinfo, 0xFF);
-  emit_byte(cinfo, (int) mark);
-}
-
-
-LOCAL(void)
-emit_2bytes (j_compress_ptr cinfo, int value)
-/* Emit a 2-byte integer; these are always MSB first in JPEG files */
-{
-  emit_byte(cinfo, (value >> 8) & 0xFF);
-  emit_byte(cinfo, value & 0xFF);
-}
-
-
-/*
- * Routines to write specific marker types.
- */
-
-LOCAL(int)
-emit_dqt (j_compress_ptr cinfo, int index)
-/* Emit a DQT marker */
-/* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */
-{
-  JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index];
-  int prec;
-  int i;
-
-  if (qtbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index);
-
-  prec = 0;
-  for (i = 0; i < DCTSIZE2; i++) {
-    if (qtbl->quantval[i] > 255)
-      prec = 1;
-  }
-
-  if (! qtbl->sent_table) {
-    emit_marker(cinfo, M_DQT);
-
-    emit_2bytes(cinfo, prec ? DCTSIZE2*2 + 1 + 2 : DCTSIZE2 + 1 + 2);
-
-    emit_byte(cinfo, index + (prec<<4));
-
-    for (i = 0; i < DCTSIZE2; i++) {
-      /* The table entries must be emitted in zigzag order. */
-      unsigned int qval = qtbl->quantval[jpeg_natural_order[i]];
-      if (prec)
-	emit_byte(cinfo, (int) (qval >> 8));
-      emit_byte(cinfo, (int) (qval & 0xFF));
-    }
-
-    qtbl->sent_table = TRUE;
-  }
-
-  return prec;
-}
-
-
-LOCAL(void)
-emit_dht (j_compress_ptr cinfo, int index, boolean is_ac)
-/* Emit a DHT marker */
-{
-  JHUFF_TBL * htbl;
-  int length, i;
-
-  if (is_ac) {
-    htbl = cinfo->ac_huff_tbl_ptrs[index];
-    index += 0x10;		/* output index has AC bit set */
-  } else {
-    htbl = cinfo->dc_huff_tbl_ptrs[index];
-  }
-
-  if (htbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index);
-
-  if (! htbl->sent_table) {
-    emit_marker(cinfo, M_DHT);
-
-    length = 0;
-    for (i = 1; i <= 16; i++)
-      length += htbl->bits[i];
-
-    emit_2bytes(cinfo, length + 2 + 1 + 16);
-    emit_byte(cinfo, index);
-
-    for (i = 1; i <= 16; i++)
-      emit_byte(cinfo, htbl->bits[i]);
-
-    for (i = 0; i < length; i++)
-      emit_byte(cinfo, htbl->huffval[i]);
-
-    htbl->sent_table = TRUE;
-  }
-}
-
-
-LOCAL(void)
-emit_dac (j_compress_ptr)
-/* Emit a DAC marker */
-/* Since the useful info is so small, we want to emit all the tables in */
-/* one DAC marker.  Therefore this routine does its own scan of the table. */
-{
-#ifdef C_ARITH_CODING_SUPPORTED
-  char dc_in_use[NUM_ARITH_TBLS];
-  char ac_in_use[NUM_ARITH_TBLS];
-  int length, i;
-  jpeg_component_info *compptr;
-
-  for (i = 0; i < NUM_ARITH_TBLS; i++)
-    dc_in_use[i] = ac_in_use[i] = 0;
-
-  for (i = 0; i < cinfo->comps_in_scan; i++) {
-    compptr = cinfo->cur_comp_info[i];
-    dc_in_use[compptr->dc_tbl_no] = 1;
-    ac_in_use[compptr->ac_tbl_no] = 1;
-  }
-
-  length = 0;
-  for (i = 0; i < NUM_ARITH_TBLS; i++)
-    length += dc_in_use[i] + ac_in_use[i];
-
-  emit_marker(cinfo, M_DAC);
-
-  emit_2bytes(cinfo, length*2 + 2);
-
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    if (dc_in_use[i]) {
-      emit_byte(cinfo, i);
-      emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4));
-    }
-    if (ac_in_use[i]) {
-      emit_byte(cinfo, i + 0x10);
-      emit_byte(cinfo, cinfo->arith_ac_K[i]);
-    }
-  }
-#endif /* C_ARITH_CODING_SUPPORTED */
-}
-
-
-LOCAL(void)
-emit_dri (j_compress_ptr cinfo)
-/* Emit a DRI marker */
-{
-  emit_marker(cinfo, M_DRI);
-
-  emit_2bytes(cinfo, 4);	/* fixed length */
-
-  emit_2bytes(cinfo, (int) cinfo->restart_interval);
-}
-
-
-LOCAL(void)
-emit_sof (j_compress_ptr cinfo, JPEG_MARKER code)
-/* Emit a SOF marker */
-{
-  int ci;
-  jpeg_component_info *compptr;
-
-  emit_marker(cinfo, code);
-
-  emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */
-
-  /* Make sure image isn't bigger than SOF field can handle */
-  if ((long) cinfo->image_height > 65535L ||
-      (long) cinfo->image_width > 65535L)
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535);
-
-  emit_byte(cinfo, cinfo->data_precision);
-  emit_2bytes(cinfo, (int) cinfo->image_height);
-  emit_2bytes(cinfo, (int) cinfo->image_width);
-
-  emit_byte(cinfo, cinfo->num_components);
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    emit_byte(cinfo, compptr->component_id);
-    emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor);
-    emit_byte(cinfo, compptr->quant_tbl_no);
-  }
-}
-
-
-LOCAL(void)
-emit_sos (j_compress_ptr cinfo)
-/* Emit a SOS marker */
-{
-  int i, td, ta;
-  jpeg_component_info *compptr;
-
-  emit_marker(cinfo, M_SOS);
-
-  emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */
-
-  emit_byte(cinfo, cinfo->comps_in_scan);
-
-  for (i = 0; i < cinfo->comps_in_scan; i++) {
-    compptr = cinfo->cur_comp_info[i];
-    emit_byte(cinfo, compptr->component_id);
-    td = compptr->dc_tbl_no;
-    ta = compptr->ac_tbl_no;
-    if (cinfo->progressive_mode) {
-      /* Progressive mode: only DC or only AC tables are used in one scan;
-       * furthermore, Huffman coding of DC refinement uses no table at all.
-       * We emit 0 for unused field(s); this is recommended by the P&M text
-       * but does not seem to be specified in the standard.
-       */
-      if (cinfo->Ss == 0) {
-	ta = 0;			/* DC scan */
-	if (cinfo->Ah != 0 && !cinfo->arith_code)
-	  td = 0;		/* no DC table either */
-      } else {
-	td = 0;			/* AC scan */
-      }
-    }
-    emit_byte(cinfo, (td << 4) + ta);
-  }
-
-  emit_byte(cinfo, cinfo->Ss);
-  emit_byte(cinfo, cinfo->Se);
-  emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al);
-}
-
-
-LOCAL(void)
-emit_jfif_app0 (j_compress_ptr cinfo)
-/* Emit a JFIF-compliant APP0 marker */
-{
-  /*
-   * Length of APP0 block	(2 bytes)
-   * Block ID			(4 bytes - ASCII "JFIF")
-   * Zero byte			(1 byte to terminate the ID string)
-   * Version Major, Minor	(2 bytes - major first)
-   * Units			(1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm)
-   * Xdpu			(2 bytes - dots per unit horizontal)
-   * Ydpu			(2 bytes - dots per unit vertical)
-   * Thumbnail X size		(1 byte)
-   * Thumbnail Y size		(1 byte)
-   */
-
-  emit_marker(cinfo, M_APP0);
-
-  emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */
-
-  emit_byte(cinfo, 0x4A);	/* Identifier: ASCII "JFIF" */
-  emit_byte(cinfo, 0x46);
-  emit_byte(cinfo, 0x49);
-  emit_byte(cinfo, 0x46);
-  emit_byte(cinfo, 0);
-  emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */
-  emit_byte(cinfo, cinfo->JFIF_minor_version);
-  emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */
-  emit_2bytes(cinfo, (int) cinfo->X_density);
-  emit_2bytes(cinfo, (int) cinfo->Y_density);
-  emit_byte(cinfo, 0);		/* No thumbnail image */
-  emit_byte(cinfo, 0);
-}
-
-
-LOCAL(void)
-emit_adobe_app14 (j_compress_ptr cinfo)
-/* Emit an Adobe APP14 marker */
-{
-  /*
-   * Length of APP14 block	(2 bytes)
-   * Block ID			(5 bytes - ASCII "Adobe")
-   * Version Number		(2 bytes - currently 100)
-   * Flags0			(2 bytes - currently 0)
-   * Flags1			(2 bytes - currently 0)
-   * Color transform		(1 byte)
-   *
-   * Although Adobe TN 5116 mentions Version = 101, all the Adobe files
-   * now in circulation seem to use Version = 100, so that's what we write.
-   *
-   * We write the color transform byte as 1 if the JPEG color space is
-   * YCbCr, 2 if it's YCCK, 0 otherwise.  Adobe's definition has to do with
-   * whether the encoder performed a transformation, which is pretty useless.
-   */
-
-  emit_marker(cinfo, M_APP14);
-
-  emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */
-
-  emit_byte(cinfo, 0x41);	/* Identifier: ASCII "Adobe" */
-  emit_byte(cinfo, 0x64);
-  emit_byte(cinfo, 0x6F);
-  emit_byte(cinfo, 0x62);
-  emit_byte(cinfo, 0x65);
-  emit_2bytes(cinfo, 100);	/* Version */
-  emit_2bytes(cinfo, 0);	/* Flags0 */
-  emit_2bytes(cinfo, 0);	/* Flags1 */
-  switch (cinfo->jpeg_color_space) {
-  case JCS_YCbCr:
-    emit_byte(cinfo, 1);	/* Color transform = 1 */
-    break;
-  case JCS_YCCK:
-    emit_byte(cinfo, 2);	/* Color transform = 2 */
-    break;
-  default:
-    emit_byte(cinfo, 0);	/* Color transform = 0 */
-    break;
-  }
-}
-
-
-/*
- * These routines allow writing an arbitrary marker with parameters.
- * The only intended use is to emit COM or APPn markers after calling
- * write_file_header and before calling write_frame_header.
- * Other uses are not guaranteed to produce desirable results.
- * Counting the parameter bytes properly is the caller's responsibility.
- */
-
-METHODDEF(void)
-write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen)
-/* Emit an arbitrary marker header */
-{
-  if (datalen > (unsigned int) 65533)		/* safety check */
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  emit_marker(cinfo, (JPEG_MARKER) marker);
-
-  emit_2bytes(cinfo, (int) (datalen + 2));	/* total length */
-}
-
-METHODDEF(void)
-write_marker_byte (j_compress_ptr cinfo, int val)
-/* Emit one byte of marker parameters following write_marker_header */
-{
-  emit_byte(cinfo, val);
-}
-
-
-/*
- * Write datastream header.
- * This consists of an SOI and optional APPn markers.
- * We recommend use of the JFIF marker, but not the Adobe marker,
- * when using YCbCr or grayscale data.  The JFIF marker should NOT
- * be used for any other JPEG colorspace.  The Adobe marker is helpful
- * to distinguish RGB, CMYK, and YCCK colorspaces.
- * Note that an application can write additional header markers after
- * jpeg_start_compress returns.
- */
-
-METHODDEF(void)
-write_file_header (j_compress_ptr cinfo)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-
-  emit_marker(cinfo, M_SOI);	/* first the SOI */
-
-  /* SOI is defined to reset restart interval to 0 */
-  marker->last_restart_interval = 0;
-
-  if (cinfo->write_JFIF_header)	/* next an optional JFIF APP0 */
-    emit_jfif_app0(cinfo);
-  if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */
-    emit_adobe_app14(cinfo);
-}
-
-
-/*
- * Write frame header.
- * This consists of DQT and SOFn markers.
- * Note that we do not emit the SOF until we have emitted the DQT(s).
- * This avoids compatibility problems with incorrect implementations that
- * try to error-check the quant table numbers as soon as they see the SOF.
- */
-
-METHODDEF(void)
-write_frame_header (j_compress_ptr cinfo)
-{
-  int ci, prec;
-  boolean is_baseline;
-  jpeg_component_info *compptr;
-
-  /* Emit DQT for each quantization table.
-   * Note that emit_dqt() suppresses any duplicate tables.
-   */
-  prec = 0;
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    prec += emit_dqt(cinfo, compptr->quant_tbl_no);
-  }
-  /* now prec is nonzero iff there are any 16-bit quant tables. */
-
-  /* Check for a non-baseline specification.
-   * Note we assume that Huffman table numbers won't be changed later.
-   */
-  if (cinfo->arith_code || cinfo->progressive_mode ||
-      cinfo->data_precision != 8) {
-    is_baseline = FALSE;
-  } else {
-    is_baseline = TRUE;
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1)
-	is_baseline = FALSE;
-    }
-    if (prec && is_baseline) {
-      is_baseline = FALSE;
-      /* If it's baseline except for quantizer size, warn the user */
-      TRACEMS(cinfo, 0, JTRC_16BIT_TABLES);
-    }
-  }
-
-  /* Emit the proper SOF marker */
-  if (cinfo->arith_code) {
-    emit_sof(cinfo, M_SOF9);	/* SOF code for arithmetic coding */
-  } else {
-    if (cinfo->progressive_mode)
-      emit_sof(cinfo, M_SOF2);	/* SOF code for progressive Huffman */
-    else if (is_baseline)
-      emit_sof(cinfo, M_SOF0);	/* SOF code for baseline implementation */
-    else
-      emit_sof(cinfo, M_SOF1);	/* SOF code for non-baseline Huffman file */
-  }
-}
-
-
-/*
- * Write scan header.
- * This consists of DHT or DAC markers, optional DRI, and SOS.
- * Compressed data will be written following the SOS.
- */
-
-METHODDEF(void)
-write_scan_header (j_compress_ptr cinfo)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-  int i;
-  jpeg_component_info *compptr;
-
-  if (cinfo->arith_code) {
-    /* Emit arith conditioning info.  We may have some duplication
-     * if the file has multiple scans, but it's so small it's hardly
-     * worth worrying about.
-     */
-    emit_dac(cinfo);
-  } else {
-    /* Emit Huffman tables.
-     * Note that emit_dht() suppresses any duplicate tables.
-     */
-    for (i = 0; i < cinfo->comps_in_scan; i++) {
-      compptr = cinfo->cur_comp_info[i];
-      if (cinfo->progressive_mode) {
-	/* Progressive mode: only DC or only AC tables are used in one scan */
-	if (cinfo->Ss == 0) {
-	  if (cinfo->Ah == 0)	/* DC needs no table for refinement scan */
-	    emit_dht(cinfo, compptr->dc_tbl_no, FALSE);
-	} else {
-	  emit_dht(cinfo, compptr->ac_tbl_no, TRUE);
-	}
-      } else {
-	/* Sequential mode: need both DC and AC tables */
-	emit_dht(cinfo, compptr->dc_tbl_no, FALSE);
-	emit_dht(cinfo, compptr->ac_tbl_no, TRUE);
-      }
-    }
-  }
-
-  /* Emit DRI if required --- note that DRI value could change for each scan.
-   * We avoid wasting space with unnecessary DRIs, however.
-   */
-  if (cinfo->restart_interval != marker->last_restart_interval) {
-    emit_dri(cinfo);
-    marker->last_restart_interval = cinfo->restart_interval;
-  }
-
-  emit_sos(cinfo);
-}
-
-
-/*
- * Write datastream trailer.
- */
-
-METHODDEF(void)
-write_file_trailer (j_compress_ptr cinfo)
-{
-  emit_marker(cinfo, M_EOI);
-}
-
-
-/*
- * Write an abbreviated table-specification datastream.
- * This consists of SOI, DQT and DHT tables, and EOI.
- * Any table that is defined and not marked sent_table = TRUE will be
- * emitted.  Note that all tables will be marked sent_table = TRUE at exit.
- */
-
-METHODDEF(void)
-write_tables_only (j_compress_ptr cinfo)
-{
-  int i;
-
-  emit_marker(cinfo, M_SOI);
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++) {
-    if (cinfo->quant_tbl_ptrs[i] != NULL)
-      (void) emit_dqt(cinfo, i);
-  }
-
-  if (! cinfo->arith_code) {
-    for (i = 0; i < NUM_HUFF_TBLS; i++) {
-      if (cinfo->dc_huff_tbl_ptrs[i] != NULL)
-	emit_dht(cinfo, i, FALSE);
-      if (cinfo->ac_huff_tbl_ptrs[i] != NULL)
-	emit_dht(cinfo, i, TRUE);
-    }
-  }
-
-  emit_marker(cinfo, M_EOI);
-}
-
-
-/*
- * Initialize the marker writer module.
- */
-
-GLOBAL(void)
-jinit_marker_writer (j_compress_ptr cinfo)
-{
-  my_marker_ptr marker;
-
-  /* Create the subobject */
-  marker = (my_marker_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_marker_writer));
-  cinfo->marker = (struct jpeg_marker_writer *) marker;
-  /* Initialize method pointers */
-  marker->pub.write_file_header = write_file_header;
-  marker->pub.write_frame_header = write_frame_header;
-  marker->pub.write_scan_header = write_scan_header;
-  marker->pub.write_file_trailer = write_file_trailer;
-  marker->pub.write_tables_only = write_tables_only;
-  marker->pub.write_marker_header = write_marker_header;
-  marker->pub.write_marker_byte = write_marker_byte;
-  /* Initialize private state */
-  marker->last_restart_interval = 0;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcmaster.c b/modules/juce_graphics/image_formats/jpglib/jcmaster.c
deleted file mode 100644
index a45b03b..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcmaster.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * jcmaster.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains master control logic for the JPEG compressor.
- * These routines are concerned with parameter validation, initial setup,
- * and inter-pass control (determining the number of passes and the work
- * to be done in each pass).
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef enum {
-	main_pass,		/* input data, also do first output step */
-	huff_opt_pass,		/* Huffman code optimization pass */
-	output_pass		/* data output pass */
-} c_pass_type;
-
-typedef struct {
-  struct jpeg_comp_master pub;	/* public fields */
-
-  c_pass_type pass_type;	/* the type of the current pass */
-
-  int pass_number;		/* # of passes completed */
-  int total_passes;		/* total # of passes needed */
-
-  int scan_number;		/* current index in scan_info[] */
-} my_comp_master;
-
-typedef my_comp_master * my_master_ptr;
-
-
-/*
- * Support routines that do various essential calculations.
- */
-
-LOCAL(void)
-initial_setup (j_compress_ptr cinfo)
-/* Do computations that are needed before master selection phase */
-{
-  int ci;
-  jpeg_component_info *compptr;
-  long samplesperrow;
-  JDIMENSION jd_samplesperrow;
-
-  /* Sanity check on image dimensions */
-  if (cinfo->image_height <= 0 || cinfo->image_width <= 0
-      || cinfo->num_components <= 0 || cinfo->input_components <= 0)
-    ERREXIT(cinfo, JERR_EMPTY_IMAGE);
-
-  /* Make sure image isn't bigger than I can handle */
-  if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION ||
-      (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION)
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
-
-  /* Width of an input scanline must be representable as JDIMENSION. */
-  samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components;
-  jd_samplesperrow = (JDIMENSION) samplesperrow;
-  if ((long) jd_samplesperrow != samplesperrow)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-
-  /* For now, precision must match compiled-in value... */
-  if (cinfo->data_precision != BITS_IN_JSAMPLE)
-    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
-
-  /* Check that number of components won't exceed internal array sizes */
-  if (cinfo->num_components > MAX_COMPONENTS)
-    ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	     MAX_COMPONENTS);
-
-  /* Compute maximum sampling factors; check factor validity */
-  cinfo->max_h_samp_factor = 1;
-  cinfo->max_v_samp_factor = 1;
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR ||
-	compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR)
-      ERREXIT(cinfo, JERR_BAD_SAMPLING);
-    cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor,
-				   compptr->h_samp_factor);
-    cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor,
-				   compptr->v_samp_factor);
-  }
-
-  /* Compute dimensions of components */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Fill in the correct component_index value; don't rely on application */
-    compptr->component_index = ci;
-    /* For compression, we never do DCT scaling. */
-    compptr->DCT_scaled_size = DCTSIZE;
-    /* Size in DCT blocks */
-    compptr->width_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
-		    (long) (cinfo->max_h_samp_factor * DCTSIZE));
-    compptr->height_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
-		    (long) (cinfo->max_v_samp_factor * DCTSIZE));
-    /* Size in samples */
-    compptr->downsampled_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
-		    (long) cinfo->max_h_samp_factor);
-    compptr->downsampled_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
-		    (long) cinfo->max_v_samp_factor);
-    /* Mark component needed (this flag isn't actually used for compression) */
-    compptr->component_needed = TRUE;
-  }
-
-  /* Compute number of fully interleaved MCU rows (number of times that
-   * main controller will call coefficient controller).
-   */
-  cinfo->total_iMCU_rows = (JDIMENSION)
-    jdiv_round_up((long) cinfo->image_height,
-		  (long) (cinfo->max_v_samp_factor*DCTSIZE));
-}
-
-
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-
-LOCAL(void)
-validate_script (j_compress_ptr cinfo)
-/* Verify that the scan script in cinfo->scan_info[] is valid; also
- * determine whether it uses progressive JPEG, and set cinfo->progressive_mode.
- */
-{
-  const jpeg_scan_info * scanptr;
-  int scanno, ncomps, ci, coefi, thisi;
-  int Ss, Se, Ah, Al;
-  boolean component_sent[MAX_COMPONENTS];
-#ifdef C_PROGRESSIVE_SUPPORTED
-  int * last_bitpos_ptr;
-  int last_bitpos[MAX_COMPONENTS][DCTSIZE2];
-  /* -1 until that coefficient has been seen; then last Al for it */
-#endif
-
-  if (cinfo->num_scans <= 0)
-    ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, 0);
-
-  /* For sequential JPEG, all scans must have Ss=0, Se=DCTSIZE2-1;
-   * for progressive JPEG, no scan can have this.
-   */
-  scanptr = cinfo->scan_info;
-  if (scanptr->Ss != 0 || scanptr->Se != DCTSIZE2-1) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-    cinfo->progressive_mode = TRUE;
-    last_bitpos_ptr = & last_bitpos[0][0];
-    for (ci = 0; ci < cinfo->num_components; ci++)
-      for (coefi = 0; coefi < DCTSIZE2; coefi++)
-	*last_bitpos_ptr++ = -1;
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    cinfo->progressive_mode = FALSE;
-    for (ci = 0; ci < cinfo->num_components; ci++)
-      component_sent[ci] = FALSE;
-  }
-
-  for (scanno = 1; scanno <= cinfo->num_scans; scanptr++, scanno++) {
-    /* Validate component indexes */
-    ncomps = scanptr->comps_in_scan;
-    if (ncomps <= 0 || ncomps > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, ncomps, MAX_COMPS_IN_SCAN);
-    for (ci = 0; ci < ncomps; ci++) {
-      thisi = scanptr->component_index[ci];
-      if (thisi < 0 || thisi >= cinfo->num_components)
-	ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno);
-      /* Components must appear in SOF order within each scan */
-      if (ci > 0 && thisi <= scanptr->component_index[ci-1])
-	ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno);
-    }
-    /* Validate progression parameters */
-    Ss = scanptr->Ss;
-    Se = scanptr->Se;
-    Ah = scanptr->Ah;
-    Al = scanptr->Al;
-    if (cinfo->progressive_mode) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-      /* The JPEG spec simply gives the ranges 0..13 for Ah and Al, but that
-       * seems wrong: the upper bound ought to depend on data precision.
-       * Perhaps they really meant 0..N+1 for N-bit precision.
-       * Here we allow 0..10 for 8-bit data; Al larger than 10 results in
-       * out-of-range reconstructed DC values during the first DC scan,
-       * which might cause problems for some decoders.
-       */
-#if BITS_IN_JSAMPLE == 8
-#define MAX_AH_AL 10
-#else
-#define MAX_AH_AL 13
-#endif
-      if (Ss < 0 || Ss >= DCTSIZE2 || Se < Ss || Se >= DCTSIZE2 ||
-	  Ah < 0 || Ah > MAX_AH_AL || Al < 0 || Al > MAX_AH_AL)
-	ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      if (Ss == 0) {
-	if (Se != 0)		/* DC and AC together not OK */
-	  ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      } else {
-	if (ncomps != 1)	/* AC scans must be for only one component */
-	  ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      }
-      for (ci = 0; ci < ncomps; ci++) {
-	last_bitpos_ptr = & last_bitpos[scanptr->component_index[ci]][0];
-	if (Ss != 0 && last_bitpos_ptr[0] < 0) /* AC without prior DC scan */
-	  ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-	for (coefi = Ss; coefi <= Se; coefi++) {
-	  if (last_bitpos_ptr[coefi] < 0) {
-	    /* first scan of this coefficient */
-	    if (Ah != 0)
-	      ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-	  } else {
-	    /* not first scan */
-	    if (Ah != last_bitpos_ptr[coefi] || Al != Ah-1)
-	      ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-	  }
-	  last_bitpos_ptr[coefi] = Al;
-	}
-      }
-#endif
-    } else {
-      /* For sequential JPEG, all progression parameters must be these: */
-      if (Ss != 0 || Se != DCTSIZE2-1 || Ah != 0 || Al != 0)
-	ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      /* Make sure components are not sent twice */
-      for (ci = 0; ci < ncomps; ci++) {
-	thisi = scanptr->component_index[ci];
-	if (component_sent[thisi])
-	  ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno);
-	component_sent[thisi] = TRUE;
-      }
-    }
-  }
-
-  /* Now verify that everything got sent. */
-  if (cinfo->progressive_mode) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-    /* For progressive mode, we only check that at least some DC data
-     * got sent for each component; the spec does not require that all bits
-     * of all coefficients be transmitted.  Would it be wiser to enforce
-     * transmission of all coefficient bits??
-     */
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      if (last_bitpos[ci][0] < 0)
-	ERREXIT(cinfo, JERR_MISSING_DATA);
-    }
-#endif
-  } else {
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      if (! component_sent[ci])
-	ERREXIT(cinfo, JERR_MISSING_DATA);
-    }
-  }
-}
-
-#endif /* C_MULTISCAN_FILES_SUPPORTED */
-
-
-LOCAL(void)
-select_scan_parameters (j_compress_ptr cinfo)
-/* Set up the scan parameters for the current scan */
-{
-  int ci;
-
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-  if (cinfo->scan_info != NULL) {
-    /* Prepare for current scan --- the script is already validated */
-    my_master_ptr master = (my_master_ptr) cinfo->master;
-    const jpeg_scan_info * scanptr = cinfo->scan_info + master->scan_number;
-
-    cinfo->comps_in_scan = scanptr->comps_in_scan;
-    for (ci = 0; ci < scanptr->comps_in_scan; ci++) {
-      cinfo->cur_comp_info[ci] =
-	&cinfo->comp_info[scanptr->component_index[ci]];
-    }
-    cinfo->Ss = scanptr->Ss;
-    cinfo->Se = scanptr->Se;
-    cinfo->Ah = scanptr->Ah;
-    cinfo->Al = scanptr->Al;
-  }
-  else
-#endif
-  {
-    /* Prepare for single sequential-JPEG scan containing all components */
-    if (cinfo->num_components > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	       MAX_COMPS_IN_SCAN);
-    cinfo->comps_in_scan = cinfo->num_components;
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci];
-    }
-    cinfo->Ss = 0;
-    cinfo->Se = DCTSIZE2-1;
-    cinfo->Ah = 0;
-    cinfo->Al = 0;
-  }
-}
-
-
-LOCAL(void)
-per_scan_setup (j_compress_ptr cinfo)
-/* Do computations that are needed before processing a JPEG scan */
-/* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */
-{
-  int ci, mcublks, tmp;
-  jpeg_component_info *compptr;
-
-  if (cinfo->comps_in_scan == 1) {
-
-    /* Noninterleaved (single-component) scan */
-    compptr = cinfo->cur_comp_info[0];
-
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = compptr->width_in_blocks;
-    cinfo->MCU_rows_in_scan = compptr->height_in_blocks;
-
-    /* For noninterleaved scan, always one block per MCU */
-    compptr->MCU_width = 1;
-    compptr->MCU_height = 1;
-    compptr->MCU_blocks = 1;
-    compptr->MCU_sample_width = DCTSIZE;
-    compptr->last_col_width = 1;
-    /* For noninterleaved scans, it is convenient to define last_row_height
-     * as the number of block rows present in the last iMCU row.
-     */
-    tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-    if (tmp == 0) tmp = compptr->v_samp_factor;
-    compptr->last_row_height = tmp;
-
-    /* Prepare array describing MCU composition */
-    cinfo->blocks_in_MCU = 1;
-    cinfo->MCU_membership[0] = 0;
-
-  } else {
-
-    /* Interleaved (multi-component) scan */
-    if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan,
-	       MAX_COMPS_IN_SCAN);
-
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width,
-		    (long) (cinfo->max_h_samp_factor*DCTSIZE));
-    cinfo->MCU_rows_in_scan = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height,
-		    (long) (cinfo->max_v_samp_factor*DCTSIZE));
-
-    cinfo->blocks_in_MCU = 0;
-
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      compptr = cinfo->cur_comp_info[ci];
-      /* Sampling factors give # of blocks of component in each MCU */
-      compptr->MCU_width = compptr->h_samp_factor;
-      compptr->MCU_height = compptr->v_samp_factor;
-      compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height;
-      compptr->MCU_sample_width = compptr->MCU_width * DCTSIZE;
-      /* Figure number of non-dummy blocks in last MCU column & row */
-      tmp = (int) (compptr->width_in_blocks % compptr->MCU_width);
-      if (tmp == 0) tmp = compptr->MCU_width;
-      compptr->last_col_width = tmp;
-      tmp = (int) (compptr->height_in_blocks % compptr->MCU_height);
-      if (tmp == 0) tmp = compptr->MCU_height;
-      compptr->last_row_height = tmp;
-      /* Prepare array describing MCU composition */
-      mcublks = compptr->MCU_blocks;
-      if (cinfo->blocks_in_MCU + mcublks > C_MAX_BLOCKS_IN_MCU)
-	ERREXIT(cinfo, JERR_BAD_MCU_SIZE);
-      while (mcublks-- > 0) {
-	cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci;
-      }
-    }
-
-  }
-
-  /* Convert restart specified in rows to actual MCU count. */
-  /* Note that count must fit in 16 bits, so we provide limiting. */
-  if (cinfo->restart_in_rows > 0) {
-    long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row;
-    cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L);
-  }
-}
-
-
-/*
- * Per-pass setup.
- * This is called at the beginning of each pass.  We determine which modules
- * will be active during this pass and give them appropriate start_pass calls.
- * We also set is_last_pass to indicate whether any more passes will be
- * required.
- */
-
-METHODDEF(void)
-prepare_for_pass (j_compress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  switch (master->pass_type) {
-  case main_pass:
-    /* Initial pass: will collect input data, and do either Huffman
-     * optimization or data output for the first scan.
-     */
-    select_scan_parameters(cinfo);
-    per_scan_setup(cinfo);
-    if (! cinfo->raw_data_in) {
-      (*cinfo->cconvert->start_pass) (cinfo);
-      (*cinfo->downsample->start_pass) (cinfo);
-      (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU);
-    }
-    (*cinfo->fdct->start_pass) (cinfo);
-    (*cinfo->entropy->start_pass) (cinfo, cinfo->optimize_coding);
-    (*cinfo->coef->start_pass) (cinfo,
-				(master->total_passes > 1 ?
-				 JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
-    (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU);
-    if (cinfo->optimize_coding) {
-      /* No immediate data output; postpone writing frame/scan headers */
-      master->pub.call_pass_startup = FALSE;
-    } else {
-      /* Will write frame/scan headers at first jpeg_write_scanlines call */
-      master->pub.call_pass_startup = TRUE;
-    }
-    break;
-#ifdef ENTROPY_OPT_SUPPORTED
-  case huff_opt_pass:
-    /* Do Huffman optimization for a scan after the first one. */
-    select_scan_parameters(cinfo);
-    per_scan_setup(cinfo);
-    if (cinfo->Ss != 0 || cinfo->Ah == 0 || cinfo->arith_code) {
-      (*cinfo->entropy->start_pass) (cinfo, TRUE);
-      (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST);
-      master->pub.call_pass_startup = FALSE;
-      break;
-    }
-    /* Special case: Huffman DC refinement scans need no Huffman table
-     * and therefore we can skip the optimization pass for them.
-     */
-    master->pass_type = output_pass;
-    master->pass_number++;
-    /*FALLTHROUGH*/
-#endif
-  case output_pass:
-    /* Do a data-output pass. */
-    /* We need not repeat per-scan setup if prior optimization pass did it. */
-    if (! cinfo->optimize_coding) {
-      select_scan_parameters(cinfo);
-      per_scan_setup(cinfo);
-    }
-    (*cinfo->entropy->start_pass) (cinfo, FALSE);
-    (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST);
-    /* We emit frame/scan headers now */
-    if (master->scan_number == 0)
-      (*cinfo->marker->write_frame_header) (cinfo);
-    (*cinfo->marker->write_scan_header) (cinfo);
-    master->pub.call_pass_startup = FALSE;
-    break;
-  default:
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-  }
-
-  master->pub.is_last_pass = (master->pass_number == master->total_passes-1);
-
-  /* Set up progress monitor's pass info if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->completed_passes = master->pass_number;
-    cinfo->progress->total_passes = master->total_passes;
-  }
-}
-
-
-/*
- * Special start-of-pass hook.
- * This is called by jpeg_write_scanlines if call_pass_startup is TRUE.
- * In single-pass processing, we need this hook because we don't want to
- * write frame/scan headers during jpeg_start_compress; we want to let the
- * application write COM markers etc. between jpeg_start_compress and the
- * jpeg_write_scanlines loop.
- * In multi-pass processing, this routine is not used.
- */
-
-METHODDEF(void)
-pass_startup (j_compress_ptr cinfo)
-{
-  cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */
-
-  (*cinfo->marker->write_frame_header) (cinfo);
-  (*cinfo->marker->write_scan_header) (cinfo);
-}
-
-
-/*
- * Finish up at end of pass.
- */
-
-METHODDEF(void)
-finish_pass_master (j_compress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  /* The entropy coder always needs an end-of-pass call,
-   * either to analyze statistics or to flush its output buffer.
-   */
-  (*cinfo->entropy->finish_pass) (cinfo);
-
-  /* Update state for next pass */
-  switch (master->pass_type) {
-  case main_pass:
-    /* next pass is either output of scan 0 (after optimization)
-     * or output of scan 1 (if no optimization).
-     */
-    master->pass_type = output_pass;
-    if (! cinfo->optimize_coding)
-      master->scan_number++;
-    break;
-  case huff_opt_pass:
-    /* next pass is always output of current scan */
-    master->pass_type = output_pass;
-    break;
-  case output_pass:
-    /* next pass is either optimization or output of next scan */
-    if (cinfo->optimize_coding)
-      master->pass_type = huff_opt_pass;
-    master->scan_number++;
-    break;
-  }
-
-  master->pass_number++;
-}
-
-
-/*
- * Initialize master compression control.
- */
-
-GLOBAL(void)
-jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only)
-{
-  my_master_ptr master;
-
-  master = (my_master_ptr)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(my_comp_master));
-  cinfo->master = (struct jpeg_comp_master *) master;
-  master->pub.prepare_for_pass = prepare_for_pass;
-  master->pub.pass_startup = pass_startup;
-  master->pub.finish_pass = finish_pass_master;
-  master->pub.is_last_pass = FALSE;
-
-  /* Validate parameters, determine derived values */
-  initial_setup(cinfo);
-
-  if (cinfo->scan_info != NULL) {
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-    validate_script(cinfo);
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    cinfo->progressive_mode = FALSE;
-    cinfo->num_scans = 1;
-  }
-
-  if (cinfo->progressive_mode)	/*  TEMPORARY HACK ??? */
-    cinfo->optimize_coding = TRUE; /* assume default tables no good for progressive mode */
-
-  /* Initialize my private state */
-  if (transcode_only) {
-    /* no main pass in transcoding */
-    if (cinfo->optimize_coding)
-      master->pass_type = huff_opt_pass;
-    else
-      master->pass_type = output_pass;
-  } else {
-    /* for normal compression, first pass is always this type: */
-    master->pass_type = main_pass;
-  }
-  master->scan_number = 0;
-  master->pass_number = 0;
-  if (cinfo->optimize_coding)
-    master->total_passes = cinfo->num_scans * 2;
-  else
-    master->total_passes = cinfo->num_scans;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcomapi.c b/modules/juce_graphics/image_formats/jpglib/jcomapi.c
deleted file mode 100644
index 1b1a340..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcomapi.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * jcomapi.c
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface routines that are used for both
- * compression and decompression.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Abort processing of a JPEG compression or decompression operation,
- * but don't destroy the object itself.
- *
- * For this, we merely clean up all the nonpermanent memory pools.
- * Note that temp files (virtual arrays) are not allowed to belong to
- * the permanent pool, so we will be able to close all temp files here.
- * Closing a data source or destination, if necessary, is the application's
- * responsibility.
- */
-
-GLOBAL(void)
-jpeg_abort (j_common_ptr cinfo)
-{
-  int pool;
-
-  /* Do nothing if called on a not-initialized or destroyed JPEG object. */
-  if (cinfo->mem == NULL)
-    return;
-
-  /* Releasing pools in reverse order might help avoid fragmentation
-   * with some (brain-damaged) malloc libraries.
-   */
-  for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) {
-    (*cinfo->mem->free_pool) (cinfo, pool);
-  }
-
-  /* Reset overall state for possible reuse of object */
-  if (cinfo->is_decompressor) {
-    cinfo->global_state = DSTATE_START;
-    /* Try to keep application from accessing now-deleted marker list.
-     * A bit kludgy to do it here, but this is the most central place.
-     */
-    ((j_decompress_ptr) cinfo)->marker_list = NULL;
-  } else {
-    cinfo->global_state = CSTATE_START;
-  }
-}
-
-
-/*
- * Destruction of a JPEG object.
- *
- * Everything gets deallocated except the master jpeg_compress_struct itself
- * and the error manager struct.  Both of these are supplied by the application
- * and must be freed, if necessary, by the application.  (Often they are on
- * the stack and so don't need to be freed anyway.)
- * Closing a data source or destination, if necessary, is the application's
- * responsibility.
- */
-
-GLOBAL(void)
-jpeg_destroy (j_common_ptr cinfo)
-{
-  /* We need only tell the memory manager to release everything. */
-  /* NB: mem pointer is NULL if memory mgr failed to initialize. */
-  if (cinfo->mem != NULL)
-    (*cinfo->mem->self_destruct) (cinfo);
-  cinfo->mem = NULL;		/* be safe if jpeg_destroy is called twice */
-  cinfo->global_state = 0;	/* mark it destroyed */
-}
-
-
-/*
- * Convenience routines for allocating quantization and Huffman tables.
- * (Would jutils.c be a more reasonable place to put these?)
- */
-
-GLOBAL(JQUANT_TBL *)
-jpeg_alloc_quant_table (j_common_ptr cinfo)
-{
-  JQUANT_TBL *tbl;
-
-  tbl = (JQUANT_TBL *)
-    (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL));
-  tbl->sent_table = FALSE;	/* make sure this is false in any new table */
-  return tbl;
-}
-
-
-GLOBAL(JHUFF_TBL *)
-jpeg_alloc_huff_table (j_common_ptr cinfo)
-{
-  JHUFF_TBL *tbl;
-
-  tbl = (JHUFF_TBL *)
-    (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL));
-  tbl->sent_table = FALSE;	/* make sure this is false in any new table */
-  return tbl;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jconfig.h b/modules/juce_graphics/image_formats/jpglib/jconfig.h
deleted file mode 100644
index 22f6140..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jconfig.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* jconfig.vc --- jconfig.h for Microsoft Visual C++ on Windows 95 or NT. */
-/* see jconfig.doc for explanations */
-
-// disable all the warnings under MSVC
-#ifdef _MSC_VER
-#pragma warning (disable: 4996 4267 4100 4127 4702 4244)
-#endif
-
-#ifdef __BORLANDC__
-#pragma warn -8057
-#pragma warn -8019
-#pragma warn -8004
-#pragma warn -8008
-#endif
-
-#define HAVE_PROTOTYPES
-#define HAVE_UNSIGNED_CHAR
-#define HAVE_UNSIGNED_SHORT
-/* #define void char */
-/* #define const */
-#undef CHAR_IS_UNSIGNED
-#define HAVE_STDDEF_H
-#define HAVE_STDLIB_H
-#undef NEED_BSD_STRINGS
-#undef NEED_SYS_TYPES_H
-#undef NEED_FAR_POINTERS	/* we presume a 32-bit flat memory model */
-#undef NEED_SHORT_EXTERNAL_NAMES
-#undef INCOMPLETE_TYPES_BROKEN
-
-/* Define "boolean" as unsigned char, not int, per Windows custom */
-#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */
-typedef unsigned char boolean;
-#endif
-#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */
-
-
-#ifdef JPEG_INTERNALS
-
-#undef RIGHT_SHIFT_IS_UNSIGNED
-
-#endif /* JPEG_INTERNALS */
-
-#ifdef JPEG_CJPEG_DJPEG
-
-#define BMP_SUPPORTED		/* BMP image file format */
-#define GIF_SUPPORTED		/* GIF image file format */
-#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */
-#undef RLE_SUPPORTED		/* Utah RLE image file format */
-#define TARGA_SUPPORTED		/* Targa image file format */
-
-#define TWO_FILE_COMMANDLINE	/* optional */
-#define USE_SETMODE		/* Microsoft has setmode() */
-#undef NEED_SIGNAL_CATCHER
-#undef DONT_USE_B_MODE
-#undef PROGRESS_REPORT		/* optional */
-
-#endif /* JPEG_CJPEG_DJPEG */
diff --git a/modules/juce_graphics/image_formats/jpglib/jcparam.c b/modules/juce_graphics/image_formats/jpglib/jcparam.c
deleted file mode 100644
index 739dcdf..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcparam.c
+++ /dev/null
@@ -1,610 +0,0 @@
-/*
- * jcparam.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains optional default-setting code for the JPEG compressor.
- * Applications do not have to use this file, but those that don't use it
- * must know a lot more about the innards of the JPEG code.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Quantization table setup routines
- */
-
-GLOBAL(void)
-jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl,
-		      const unsigned int *basic_table,
-		      int scale_factor, boolean force_baseline)
-/* Define a quantization table equal to the basic_table times
- * a scale factor (given as a percentage).
- * If force_baseline is TRUE, the computed quantization table entries
- * are limited to 1..255 for JPEG baseline compatibility.
- */
-{
-  JQUANT_TBL ** qtblptr;
-  int i;
-  long temp;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS)
-    ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl);
-
-  qtblptr = & cinfo->quant_tbl_ptrs[which_tbl];
-
-  if (*qtblptr == NULL)
-    *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo);
-
-  for (i = 0; i < DCTSIZE2; i++) {
-    temp = ((long) basic_table[i] * scale_factor + 50L) / 100L;
-    /* limit the values to the valid range */
-    if (temp <= 0L) temp = 1L;
-    if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */
-    if (force_baseline && temp > 255L)
-      temp = 255L;		/* limit to baseline range if requested */
-    (*qtblptr)->quantval[i] = (UINT16) temp;
-  }
-
-  /* Initialize sent_table FALSE so table will be written to JPEG file. */
-  (*qtblptr)->sent_table = FALSE;
-}
-
-
-GLOBAL(void)
-jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor,
-			 boolean force_baseline)
-/* Set or change the 'quality' (quantization) setting, using default tables
- * and a straight percentage-scaling quality scale.  In most cases it's better
- * to use jpeg_set_quality (below); this entry point is provided for
- * applications that insist on a linear percentage scaling.
- */
-{
-  /* These are the sample quantization tables given in JPEG spec section K.1.
-   * The spec says that the values given produce "good" quality, and
-   * when divided by 2, "very good" quality.
-   */
-  static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = {
-    16,  11,  10,  16,  24,  40,  51,  61,
-    12,  12,  14,  19,  26,  58,  60,  55,
-    14,  13,  16,  24,  40,  57,  69,  56,
-    14,  17,  22,  29,  51,  87,  80,  62,
-    18,  22,  37,  56,  68, 109, 103,  77,
-    24,  35,  55,  64,  81, 104, 113,  92,
-    49,  64,  78,  87, 103, 121, 120, 101,
-    72,  92,  95,  98, 112, 100, 103,  99
-  };
-  static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = {
-    17,  18,  24,  47,  99,  99,  99,  99,
-    18,  21,  26,  66,  99,  99,  99,  99,
-    24,  26,  56,  99,  99,  99,  99,  99,
-    47,  66,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99
-  };
-
-  /* Set up two quantization tables using the specified scaling */
-  jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl,
-		       scale_factor, force_baseline);
-  jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl,
-		       scale_factor, force_baseline);
-}
-
-
-GLOBAL(int)
-jpeg_quality_scaling (int quality)
-/* Convert a user-specified quality rating to a percentage scaling factor
- * for an underlying quantization table, using our recommended scaling curve.
- * The input 'quality' factor should be 0 (terrible) to 100 (very good).
- */
-{
-  /* Safety limit on quality factor.  Convert 0 to 1 to avoid zero divide. */
-  if (quality <= 0) quality = 1;
-  if (quality > 100) quality = 100;
-
-  /* The basic table is used as-is (scaling 100) for a quality of 50.
-   * Qualities 50..100 are converted to scaling percentage 200 - 2*Q;
-   * note that at Q=100 the scaling is 0, which will cause jpeg_add_quant_table
-   * to make all the table entries 1 (hence, minimum quantization loss).
-   * Qualities 1..50 are converted to scaling percentage 5000/Q.
-   */
-  if (quality < 50)
-    quality = 5000 / quality;
-  else
-    quality = 200 - quality*2;
-
-  return quality;
-}
-
-
-GLOBAL(void)
-jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline)
-/* Set or change the 'quality' (quantization) setting, using default tables.
- * This is the standard quality-adjusting entry point for typical user
- * interfaces; only those who want detailed control over quantization tables
- * would use the preceding three routines directly.
- */
-{
-  /* Convert user 0-100 rating to percentage scaling */
-  quality = jpeg_quality_scaling(quality);
-
-  /* Set up standard quality tables */
-  jpeg_set_linear_quality(cinfo, quality, force_baseline);
-}
-
-
-/*
- * Huffman table setup routines
- */
-
-LOCAL(void)
-add_huff_table (j_compress_ptr cinfo,
-		JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val)
-/* Define a Huffman table */
-{
-  int nsymbols, len;
-
-  if (*htblptr == NULL)
-    *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-
-  /* Copy the number-of-symbols-of-each-code-length counts */
-  MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
-
-  /* Validate the counts.  We do this here mainly so we can copy the right
-   * number of symbols from the val[] array, without risking marching off
-   * the end of memory.  jchuff.c will do a more thorough test later.
-   */
-  nsymbols = 0;
-  for (len = 1; len <= 16; len++)
-    nsymbols += bits[len];
-  if (nsymbols < 1 || nsymbols > 256)
-    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-
-  MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8));
-
-  /* Initialize sent_table FALSE so table will be written to JPEG file. */
-  (*htblptr)->sent_table = FALSE;
-}
-
-
-LOCAL(void)
-std_huff_tables (j_compress_ptr cinfo)
-/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
-/* IMPORTANT: these are only valid for 8-bit data precision! */
-{
-  static const UINT8 bits_dc_luminance[17] =
-    { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
-  static const UINT8 val_dc_luminance[] =
-    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
-
-  static const UINT8 bits_dc_chrominance[17] =
-    { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
-  static const UINT8 val_dc_chrominance[] =
-    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
-
-  static const UINT8 bits_ac_luminance[17] =
-    { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
-  static const UINT8 val_ac_luminance[] =
-    { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
-      0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
-      0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
-      0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
-      0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
-      0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
-      0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
-      0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
-      0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
-      0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
-      0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
-      0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
-      0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-      0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
-      0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
-      0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
-      0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
-      0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
-      0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
-      0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa };
-
-  static const UINT8 bits_ac_chrominance[17] =
-    { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
-  static const UINT8 val_ac_chrominance[] =
-    { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
-      0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
-      0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
-      0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
-      0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
-      0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
-      0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
-      0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-      0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-      0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-      0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-      0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-      0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
-      0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
-      0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
-      0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
-      0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
-      0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
-      0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
-      0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa };
-
-  add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0],
-		 bits_dc_luminance, val_dc_luminance);
-  add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0],
-		 bits_ac_luminance, val_ac_luminance);
-  add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1],
-		 bits_dc_chrominance, val_dc_chrominance);
-  add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1],
-		 bits_ac_chrominance, val_ac_chrominance);
-}
-
-
-/*
- * Default parameter setup for compression.
- *
- * Applications that don't choose to use this routine must do their
- * own setup of all these parameters.  Alternately, you can call this
- * to establish defaults and then alter parameters selectively.  This
- * is the recommended approach since, if we add any new parameters,
- * your code will still work (they'll be set to reasonable defaults).
- */
-
-GLOBAL(void)
-jpeg_set_defaults (j_compress_ptr cinfo)
-{
-  int i;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* Allocate comp_info array large enough for maximum component count.
-   * Array is made permanent in case application wants to compress
-   * multiple images at same param settings.
-   */
-  if (cinfo->comp_info == NULL)
-    cinfo->comp_info = (jpeg_component_info *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  MAX_COMPONENTS * SIZEOF(jpeg_component_info));
-
-  /* Initialize everything not dependent on the color space */
-
-  cinfo->data_precision = BITS_IN_JSAMPLE;
-  /* Set up two quantization tables using default quality of 75 */
-  jpeg_set_quality(cinfo, 75, TRUE);
-  /* Set up two Huffman tables */
-  std_huff_tables(cinfo);
-
-  /* Initialize default arithmetic coding conditioning */
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    cinfo->arith_dc_L[i] = 0;
-    cinfo->arith_dc_U[i] = 1;
-    cinfo->arith_ac_K[i] = 5;
-  }
-
-  /* Default is no multiple-scan output */
-  cinfo->scan_info = NULL;
-  cinfo->num_scans = 0;
-
-  /* Expect normal source image, not raw downsampled data */
-  cinfo->raw_data_in = FALSE;
-
-  /* Use Huffman coding, not arithmetic coding, by default */
-  cinfo->arith_code = FALSE;
-
-  /* By default, don't do extra passes to optimize entropy coding */
-  cinfo->optimize_coding = FALSE;
-  /* The standard Huffman tables are only valid for 8-bit data precision.
-   * If the precision is higher, force optimization on so that usable
-   * tables will be computed.  This test can be removed if default tables
-   * are supplied that are valid for the desired precision.
-   */
-  if (cinfo->data_precision > 8)
-    cinfo->optimize_coding = TRUE;
-
-  /* By default, use the simpler non-cosited sampling alignment */
-  cinfo->CCIR601_sampling = FALSE;
-
-  /* No input smoothing */
-  cinfo->smoothing_factor = 0;
-
-  /* DCT algorithm preference */
-  cinfo->dct_method = JDCT_DEFAULT;
-
-  /* No restart markers */
-  cinfo->restart_interval = 0;
-  cinfo->restart_in_rows = 0;
-
-  /* Fill in default JFIF marker parameters.  Note that whether the marker
-   * will actually be written is determined by jpeg_set_colorspace.
-   *
-   * By default, the library emits JFIF version code 1.01.
-   * An application that wants to emit JFIF 1.02 extension markers should set
-   * JFIF_minor_version to 2.  We could probably get away with just defaulting
-   * to 1.02, but there may still be some decoders in use that will complain
-   * about that; saying 1.01 should minimize compatibility problems.
-   */
-  cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */
-  cinfo->JFIF_minor_version = 1;
-  cinfo->density_unit = 0;	/* Pixel size is unknown by default */
-  cinfo->X_density = 1;		/* Pixel aspect ratio is square by default */
-  cinfo->Y_density = 1;
-
-  /* Choose JPEG colorspace based on input space, set defaults accordingly */
-
-  jpeg_default_colorspace(cinfo);
-}
-
-
-/*
- * Select an appropriate JPEG colorspace for in_color_space.
- */
-
-GLOBAL(void)
-jpeg_default_colorspace (j_compress_ptr cinfo)
-{
-  switch (cinfo->in_color_space) {
-  case JCS_GRAYSCALE:
-    jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
-    break;
-  case JCS_RGB:
-    jpeg_set_colorspace(cinfo, JCS_YCbCr);
-    break;
-  case JCS_YCbCr:
-    jpeg_set_colorspace(cinfo, JCS_YCbCr);
-    break;
-  case JCS_CMYK:
-    jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */
-    break;
-  case JCS_YCCK:
-    jpeg_set_colorspace(cinfo, JCS_YCCK);
-    break;
-  case JCS_UNKNOWN:
-    jpeg_set_colorspace(cinfo, JCS_UNKNOWN);
-    break;
-  default:
-    ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-  }
-}
-
-
-/*
- * Set the JPEG colorspace, and choose colorspace-dependent default values.
- */
-
-GLOBAL(void)
-jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
-{
-  jpeg_component_info * compptr;
-  int ci;
-
-#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl)  \
-  (compptr = &cinfo->comp_info[index], \
-   compptr->component_id = (id), \
-   compptr->h_samp_factor = (hsamp), \
-   compptr->v_samp_factor = (vsamp), \
-   compptr->quant_tbl_no = (quant), \
-   compptr->dc_tbl_no = (dctbl), \
-   compptr->ac_tbl_no = (actbl) )
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* For all colorspaces, we use Q and Huff tables 0 for luminance components,
-   * tables 1 for chrominance components.
-   */
-
-  cinfo->jpeg_color_space = colorspace;
-
-  cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */
-  cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */
-
-  switch (colorspace) {
-  case JCS_GRAYSCALE:
-    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */
-    cinfo->num_components = 1;
-    /* JFIF specifies component ID 1 */
-    SET_COMP(0, 1, 1,1, 0, 0,0);
-    break;
-  case JCS_RGB:
-    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */
-    cinfo->num_components = 3;
-    SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0);
-    SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0);
-    SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0);
-    break;
-  case JCS_YCbCr:
-    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */
-    cinfo->num_components = 3;
-    /* JFIF specifies component IDs 1,2,3 */
-    /* We default to 2x2 subsamples of chrominance */
-    SET_COMP(0, 1, 2,2, 0, 0,0);
-    SET_COMP(1, 2, 1,1, 1, 1,1);
-    SET_COMP(2, 3, 1,1, 1, 1,1);
-    break;
-  case JCS_CMYK:
-    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */
-    cinfo->num_components = 4;
-    SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0);
-    SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0);
-    SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0);
-    SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0);
-    break;
-  case JCS_YCCK:
-    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */
-    cinfo->num_components = 4;
-    SET_COMP(0, 1, 2,2, 0, 0,0);
-    SET_COMP(1, 2, 1,1, 1, 1,1);
-    SET_COMP(2, 3, 1,1, 1, 1,1);
-    SET_COMP(3, 4, 2,2, 0, 0,0);
-    break;
-  case JCS_UNKNOWN:
-    cinfo->num_components = cinfo->input_components;
-    if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	       MAX_COMPONENTS);
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      SET_COMP(ci, ci, 1,1, 0, 0,0);
-    }
-    break;
-  default:
-    ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-  }
-}
-
-
-#ifdef C_PROGRESSIVE_SUPPORTED
-
-LOCAL(jpeg_scan_info *)
-fill_a_scan (jpeg_scan_info * scanptr, int ci,
-	     int Ss, int Se, int Ah, int Al)
-/* Support routine: generate one scan for specified component */
-{
-  scanptr->comps_in_scan = 1;
-  scanptr->component_index[0] = ci;
-  scanptr->Ss = Ss;
-  scanptr->Se = Se;
-  scanptr->Ah = Ah;
-  scanptr->Al = Al;
-  scanptr++;
-  return scanptr;
-}
-
-LOCAL(jpeg_scan_info *)
-fill_scans (jpeg_scan_info * scanptr, int ncomps,
-	    int Ss, int Se, int Ah, int Al)
-/* Support routine: generate one scan for each component */
-{
-  int ci;
-
-  for (ci = 0; ci < ncomps; ci++) {
-    scanptr->comps_in_scan = 1;
-    scanptr->component_index[0] = ci;
-    scanptr->Ss = Ss;
-    scanptr->Se = Se;
-    scanptr->Ah = Ah;
-    scanptr->Al = Al;
-    scanptr++;
-  }
-  return scanptr;
-}
-
-LOCAL(jpeg_scan_info *)
-fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al)
-/* Support routine: generate interleaved DC scan if possible, else N scans */
-{
-  int ci;
-
-  if (ncomps <= MAX_COMPS_IN_SCAN) {
-    /* Single interleaved DC scan */
-    scanptr->comps_in_scan = ncomps;
-    for (ci = 0; ci < ncomps; ci++)
-      scanptr->component_index[ci] = ci;
-    scanptr->Ss = scanptr->Se = 0;
-    scanptr->Ah = Ah;
-    scanptr->Al = Al;
-    scanptr++;
-  } else {
-    /* Noninterleaved DC scan for each component */
-    scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al);
-  }
-  return scanptr;
-}
-
-
-/*
- * Create a recommended progressive-JPEG script.
- * cinfo->num_components and cinfo->jpeg_color_space must be correct.
- */
-
-GLOBAL(void)
-jpeg_simple_progression (j_compress_ptr cinfo)
-{
-  int ncomps = cinfo->num_components;
-  int nscans;
-  jpeg_scan_info * scanptr;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* Figure space needed for script.  Calculation must match code below! */
-  if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) {
-    /* Custom script for YCbCr color images. */
-    nscans = 10;
-  } else {
-    /* All-purpose script for other color spaces. */
-    if (ncomps > MAX_COMPS_IN_SCAN)
-      nscans = 6 * ncomps;	/* 2 DC + 4 AC scans per component */
-    else
-      nscans = 2 + 4 * ncomps;	/* 2 DC scans; 4 AC scans per component */
-  }
-
-  /* Allocate space for script.
-   * We need to put it in the permanent pool in case the application performs
-   * multiple compressions without changing the settings.  To avoid a memory
-   * leak if jpeg_simple_progression is called repeatedly for the same JPEG
-   * object, we try to re-use previously allocated space, and we allocate
-   * enough space to handle YCbCr even if initially asked for grayscale.
-   */
-  if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) {
-    cinfo->script_space_size = MAX(nscans, 10);
-    cinfo->script_space = (jpeg_scan_info *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-			cinfo->script_space_size * SIZEOF(jpeg_scan_info));
-  }
-  scanptr = cinfo->script_space;
-  cinfo->scan_info = scanptr;
-  cinfo->num_scans = nscans;
-
-  if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) {
-    /* Custom script for YCbCr color images. */
-    /* Initial DC scan */
-    scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
-    /* Initial AC scan: get some luma data out in a hurry */
-    scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2);
-    /* Chroma data is too small to be worth expending many scans on */
-    scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1);
-    scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1);
-    /* Complete spectral selection for luma AC */
-    scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2);
-    /* Refine next bit of luma AC */
-    scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1);
-    /* Finish DC successive approximation */
-    scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
-    /* Finish AC successive approximation */
-    scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0);
-    scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0);
-    /* Luma bottom bit comes last since it's usually largest scan */
-    fill_a_scan(scanptr, 0, 1, 63, 1, 0);
-  } else {
-    /* All-purpose script for other color spaces. */
-    /* Successive approximation first pass */
-    scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
-    scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2);
-    scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2);
-    /* Successive approximation second pass */
-    scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1);
-    /* Successive approximation final pass */
-    scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
-    fill_scans(scanptr, ncomps, 1, 63, 1, 0);
-  }
-}
-
-#endif /* C_PROGRESSIVE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jcphuff.c b/modules/juce_graphics/image_formats/jpglib/jcphuff.c
deleted file mode 100644
index 692b52b..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcphuff.c
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- * jcphuff.c
- *
- * Copyright (C) 1995-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains Huffman entropy encoding routines for progressive JPEG.
- *
- * We do not support output suspension in this module, since the library
- * currently does not allow multiple-scan files to be written with output
- * suspension.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jchuff.h"		/* Declarations shared with jchuff.c */
-
-#ifdef C_PROGRESSIVE_SUPPORTED
-
-/* Expanded entropy encoder object for progressive Huffman encoding. */
-
-typedef struct {
-  struct jpeg_entropy_encoder pub; /* public fields */
-
-  /* Mode flag: TRUE for optimization, FALSE for actual data output */
-  boolean gather_statistics;
-
-  /* Bit-level coding status.
-   * next_output_byte/free_in_buffer are local copies of cinfo->dest fields.
-   */
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-  INT32 put_buffer;		/* current bit-accumulation buffer */
-  int put_bits;			/* # of bits now in it */
-  j_compress_ptr cinfo;		/* link to cinfo (needed for dump_buffer) */
-
-  /* Coding status for DC components */
-  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-
-  /* Coding status for AC components */
-  int ac_tbl_no;		/* the table number of the single component */
-  unsigned int EOBRUN;		/* run length of EOBs */
-  unsigned int BE;		/* # of buffered correction bits before MCU */
-  char * bit_buffer;		/* buffer for correction bits (1 per char) */
-  /* packing correction bits tightly would save some space but cost time... */
-
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-  int next_restart_num;		/* next restart number to write (0-7) */
-
-  /* Pointers to derived tables (these workspaces have image lifespan).
-   * Since any one scan codes only DC or only AC, we only need one set
-   * of tables, not one for DC and one for AC.
-   */
-  c_derived_tbl * derived_tbls[NUM_HUFF_TBLS];
-
-  /* Statistics tables for optimization; again, one set is enough */
-  long * count_ptrs[NUM_HUFF_TBLS];
-} phuff_entropy_encoder;
-
-typedef phuff_entropy_encoder * phuff_entropy_ptr;
-
-/* MAX_CORR_BITS is the number of bits the AC refinement correction-bit
- * buffer can hold.  Larger sizes may slightly improve compression, but
- * 1000 is already well into the realm of overkill.
- * The minimum safe size is 64 bits.
- */
-
-#define MAX_CORR_BITS  1000	/* Max # of correction bits I can buffer */
-
-/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32.
- * We assume that int right shift is unsigned if INT32 right shift is,
- * which should be safe.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define ISHIFT_TEMPS	int ishift_temp;
-#define IRIGHT_SHIFT(x,shft)  \
-	((ishift_temp = (x)) < 0 ? \
-	 (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \
-	 (ishift_temp >> (shft)))
-#else
-#define ISHIFT_TEMPS
-#define IRIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-/* Forward declarations */
-METHODDEF(boolean) encode_mcu_DC_first JPP((j_compress_ptr cinfo,
-					    JBLOCKROW *MCU_data));
-METHODDEF(boolean) encode_mcu_AC_first JPP((j_compress_ptr cinfo,
-					    JBLOCKROW *MCU_data));
-METHODDEF(boolean) encode_mcu_DC_refine JPP((j_compress_ptr cinfo,
-					     JBLOCKROW *MCU_data));
-METHODDEF(boolean) encode_mcu_AC_refine JPP((j_compress_ptr cinfo,
-					     JBLOCKROW *MCU_data));
-METHODDEF(void) finish_pass_phuff JPP((j_compress_ptr cinfo));
-METHODDEF(void) finish_pass_gather_phuff JPP((j_compress_ptr cinfo));
-
-
-/*
- * Initialize for a Huffman-compressed scan using progressive JPEG.
- */
-
-METHODDEF(void)
-start_pass_phuff (j_compress_ptr cinfo, boolean gather_statistics)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-  boolean is_DC_band;
-  int ci, tbl;
-  jpeg_component_info * compptr;
-
-  entropy->cinfo = cinfo;
-  entropy->gather_statistics = gather_statistics;
-
-  is_DC_band = (cinfo->Ss == 0);
-
-  /* We assume jcmaster.c already validated the scan parameters. */
-
-  /* Select execution routines */
-  if (cinfo->Ah == 0) {
-    if (is_DC_band)
-      entropy->pub.encode_mcu = encode_mcu_DC_first;
-    else
-      entropy->pub.encode_mcu = encode_mcu_AC_first;
-  } else {
-    if (is_DC_band)
-      entropy->pub.encode_mcu = encode_mcu_DC_refine;
-    else {
-      entropy->pub.encode_mcu = encode_mcu_AC_refine;
-      /* AC refinement needs a correction bit buffer */
-      if (entropy->bit_buffer == NULL)
-	entropy->bit_buffer = (char *)
-	  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				      MAX_CORR_BITS * SIZEOF(char));
-    }
-  }
-  if (gather_statistics)
-    entropy->pub.finish_pass = finish_pass_gather_phuff;
-  else
-    entropy->pub.finish_pass = finish_pass_phuff;
-
-  /* Only DC coefficients may be interleaved, so cinfo->comps_in_scan = 1
-   * for AC coefficients.
-   */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* Initialize DC predictions to 0 */
-    entropy->last_dc_val[ci] = 0;
-    /* Get table index */
-    if (is_DC_band) {
-      if (cinfo->Ah != 0)	/* DC refinement needs no table */
-	continue;
-      tbl = compptr->dc_tbl_no;
-    } else {
-      entropy->ac_tbl_no = tbl = compptr->ac_tbl_no;
-    }
-    if (gather_statistics) {
-      /* Check for invalid table index */
-      /* (make_c_derived_tbl does this in the other path) */
-      if (tbl < 0 || tbl >= NUM_HUFF_TBLS)
-        ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl);
-      /* Allocate and zero the statistics tables */
-      /* Note that jpeg_gen_optimal_table expects 257 entries in each table! */
-      if (entropy->count_ptrs[tbl] == NULL)
-	entropy->count_ptrs[tbl] = (long *)
-	  (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				      257 * SIZEOF(long));
-      MEMZERO(entropy->count_ptrs[tbl], 257 * SIZEOF(long));
-    } else {
-      /* Compute derived values for Huffman table */
-      /* We may do this more than once for a table, but it's not expensive */
-      jpeg_make_c_derived_tbl(cinfo, is_DC_band, tbl,
-			      & entropy->derived_tbls[tbl]);
-    }
-  }
-
-  /* Initialize AC stuff */
-  entropy->EOBRUN = 0;
-  entropy->BE = 0;
-
-  /* Initialize bit buffer to empty */
-  entropy->put_buffer = 0;
-  entropy->put_bits = 0;
-
-  /* Initialize restart stuff */
-  entropy->restarts_to_go = cinfo->restart_interval;
-  entropy->next_restart_num = 0;
-}
-
-
-/* Outputting bytes to the file.
- * NB: these must be called only when actually outputting,
- * that is, entropy->gather_statistics == FALSE.
- */
-
-/* Emit a byte */
-#define emit_byte(entropy,val)  \
-	{ *(entropy)->next_output_byte++ = (JOCTET) (val);  \
-	  if (--(entropy)->free_in_buffer == 0)  \
-	    dump_buffer_p(entropy); }
-
-
-LOCAL(void)
-dump_buffer_p (phuff_entropy_ptr entropy)
-/* Empty the output buffer; we do not support suspension in this module. */
-{
-  struct jpeg_destination_mgr * dest = entropy->cinfo->dest;
-
-  if (! (*dest->empty_output_buffer) (entropy->cinfo))
-    ERREXIT(entropy->cinfo, JERR_CANT_SUSPEND);
-  /* After a successful buffer dump, must reset buffer pointers */
-  entropy->next_output_byte = dest->next_output_byte;
-  entropy->free_in_buffer = dest->free_in_buffer;
-}
-
-
-/* Outputting bits to the file */
-
-/* Only the right 24 bits of put_buffer are used; the valid bits are
- * left-justified in this part.  At most 16 bits can be passed to emit_bits
- * in one call, and we never retain more than 7 bits in put_buffer
- * between calls, so 24 bits are sufficient.
- */
-
-INLINE
-LOCAL(void)
-emit_bits_p (phuff_entropy_ptr entropy, unsigned int code, int size)
-/* Emit some bits, unless we are in gather mode */
-{
-  /* This routine is heavily used, so it's worth coding tightly. */
-  register INT32 put_buffer = (INT32) code;
-  register int put_bits = entropy->put_bits;
-
-  /* if size is 0, caller used an invalid Huffman table entry */
-  if (size == 0)
-    ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE);
-
-  if (entropy->gather_statistics)
-    return;			/* do nothing if we're only getting stats */
-
-  put_buffer &= (((INT32) 1)<<size) - 1; /* mask off any extra bits in code */
-
-  put_bits += size;		/* new number of bits in buffer */
-
-  put_buffer <<= 24 - put_bits; /* align incoming bits */
-
-  put_buffer |= entropy->put_buffer; /* and merge with old buffer contents */
-
-  while (put_bits >= 8) {
-    int c = (int) ((put_buffer >> 16) & 0xFF);
-
-    emit_byte(entropy, c);
-    if (c == 0xFF) {		/* need to stuff a zero byte? */
-      emit_byte(entropy, 0);
-    }
-    put_buffer <<= 8;
-    put_bits -= 8;
-  }
-
-  entropy->put_buffer = put_buffer; /* update variables */
-  entropy->put_bits = put_bits;
-}
-
-
-LOCAL(void)
-flush_bits_p (phuff_entropy_ptr entropy)
-{
-  emit_bits_p(entropy, 0x7F, 7); /* fill any partial byte with ones */
-  entropy->put_buffer = 0;     /* and reset bit-buffer to empty */
-  entropy->put_bits = 0;
-}
-
-
-/*
- * Emit (or just count) a Huffman symbol.
- */
-
-INLINE
-LOCAL(void)
-emit_symbol (phuff_entropy_ptr entropy, int tbl_no, int symbol)
-{
-  if (entropy->gather_statistics)
-    entropy->count_ptrs[tbl_no][symbol]++;
-  else {
-    c_derived_tbl * tbl = entropy->derived_tbls[tbl_no];
-    emit_bits_p(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]);
-  }
-}
-
-
-/*
- * Emit bits from a correction bit buffer.
- */
-
-LOCAL(void)
-emit_buffered_bits (phuff_entropy_ptr entropy, char * bufstart,
-		    unsigned int nbits)
-{
-  if (entropy->gather_statistics)
-    return;			/* no real work */
-
-  while (nbits > 0) {
-    emit_bits_p(entropy, (unsigned int) (*bufstart), 1);
-    bufstart++;
-    nbits--;
-  }
-}
-
-
-/*
- * Emit any pending EOBRUN symbol.
- */
-
-LOCAL(void)
-emit_eobrun (phuff_entropy_ptr entropy)
-{
-  register int temp, nbits;
-
-  if (entropy->EOBRUN > 0) {	/* if there is any pending EOBRUN */
-    temp = entropy->EOBRUN;
-    nbits = 0;
-    while ((temp >>= 1))
-      nbits++;
-    /* safety check: shouldn't happen given limited correction-bit buffer */
-    if (nbits > 14)
-      ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE);
-
-    emit_symbol(entropy, entropy->ac_tbl_no, nbits << 4);
-    if (nbits)
-      emit_bits_p(entropy, entropy->EOBRUN, nbits);
-
-    entropy->EOBRUN = 0;
-
-    /* Emit any buffered correction bits */
-    emit_buffered_bits(entropy, entropy->bit_buffer, entropy->BE);
-    entropy->BE = 0;
-  }
-}
-
-
-/*
- * Emit a restart marker & resynchronize predictions.
- */
-
-LOCAL(void)
-emit_restart_p (phuff_entropy_ptr entropy, int restart_num)
-{
-  int ci;
-
-  emit_eobrun(entropy);
-
-  if (! entropy->gather_statistics) {
-    flush_bits_p(entropy);
-    emit_byte(entropy, 0xFF);
-    emit_byte(entropy, JPEG_RST0 + restart_num);
-  }
-
-  if (entropy->cinfo->Ss == 0) {
-    /* Re-initialize DC predictions to 0 */
-    for (ci = 0; ci < entropy->cinfo->comps_in_scan; ci++)
-      entropy->last_dc_val[ci] = 0;
-  } else {
-    /* Re-initialize all AC-related fields to 0 */
-    entropy->EOBRUN = 0;
-    entropy->BE = 0;
-  }
-}
-
-
-/*
- * MCU encoding for DC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-  register int temp, temp2;
-  register int nbits;
-  int blkn, ci;
-  int Al = cinfo->Al;
-  JBLOCKROW block;
-  jpeg_component_info * compptr;
-  ISHIFT_TEMPS
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_p(entropy, entropy->next_restart_num);
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    block = MCU_data[blkn];
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-
-    /* Compute the DC value after the required point transform by Al.
-     * This is simply an arithmetic right shift.
-     */
-    temp2 = IRIGHT_SHIFT((int) ((*block)[0]), Al);
-
-    /* DC differences are figured on the point-transformed values. */
-    temp = temp2 - entropy->last_dc_val[ci];
-    entropy->last_dc_val[ci] = temp2;
-
-    /* Encode the DC coefficient difference per section G.1.2.1 */
-    temp2 = temp;
-    if (temp < 0) {
-      temp = -temp;		/* temp is abs value of input */
-      /* For a negative input, want temp2 = bitwise complement of abs(input) */
-      /* This code assumes we are on a two's complement machine */
-      temp2--;
-    }
-
-    /* Find the number of bits needed for the magnitude of the coefficient */
-    nbits = 0;
-    while (temp) {
-      nbits++;
-      temp >>= 1;
-    }
-    /* Check for out-of-range coefficient values.
-     * Since we're encoding a difference, the range limit is twice as much.
-     */
-    if (nbits > MAX_COEF_BITS+1)
-      ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-    /* Count/emit the Huffman-coded symbol for the number of bits */
-    emit_symbol(entropy, compptr->dc_tbl_no, nbits);
-
-    /* Emit that number of bits of the value, if positive, */
-    /* or the complement of its magnitude, if negative. */
-    if (nbits)			/* emit_bits rejects calls with size 0 */
-      emit_bits_p(entropy, (unsigned int) temp2, nbits);
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for AC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-  register int temp, temp2;
-  register int nbits;
-  register int r, k;
-  int Se = cinfo->Se;
-  int Al = cinfo->Al;
-  JBLOCKROW block;
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_p(entropy, entropy->next_restart_num);
-
-  /* Encode the MCU data block */
-  block = MCU_data[0];
-
-  /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */
-
-  r = 0;			/* r = run length of zeros */
-
-  for (k = cinfo->Ss; k <= Se; k++) {
-    if ((temp = (*block)[jpeg_natural_order[k]]) == 0) {
-      r++;
-      continue;
-    }
-    /* We must apply the point transform by Al.  For AC coefficients this
-     * is an integer division with rounding towards 0.  To do this portably
-     * in C, we shift after obtaining the absolute value; so the code is
-     * interwoven with finding the abs value (temp) and output bits (temp2).
-     */
-    if (temp < 0) {
-      temp = -temp;		/* temp is abs value of input */
-      temp >>= Al;		/* apply the point transform */
-      /* For a negative coef, want temp2 = bitwise complement of abs(coef) */
-      temp2 = ~temp;
-    } else {
-      temp >>= Al;		/* apply the point transform */
-      temp2 = temp;
-    }
-    /* Watch out for case that nonzero coef is zero after point transform */
-    if (temp == 0) {
-      r++;
-      continue;
-    }
-
-    /* Emit any pending EOBRUN */
-    if (entropy->EOBRUN > 0)
-      emit_eobrun(entropy);
-    /* if run length > 15, must emit special run-length-16 codes (0xF0) */
-    while (r > 15) {
-      emit_symbol(entropy, entropy->ac_tbl_no, 0xF0);
-      r -= 16;
-    }
-
-    /* Find the number of bits needed for the magnitude of the coefficient */
-    nbits = 1;			/* there must be at least one 1 bit */
-    while ((temp >>= 1))
-      nbits++;
-    /* Check for out-of-range coefficient values */
-    if (nbits > MAX_COEF_BITS)
-      ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-    /* Count/emit Huffman symbol for run length / number of bits */
-    emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + nbits);
-
-    /* Emit that number of bits of the value, if positive, */
-    /* or the complement of its magnitude, if negative. */
-    emit_bits_p(entropy, (unsigned int) temp2, nbits);
-
-    r = 0;			/* reset zero run length */
-  }
-
-  if (r > 0) {			/* If there are trailing zeroes, */
-    entropy->EOBRUN++;		/* count an EOB */
-    if (entropy->EOBRUN == 0x7FFF)
-      emit_eobrun(entropy);	/* force it out to avoid overflow */
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for DC successive approximation refinement scan.
- * Note: we assume such scans can be multi-component, although the spec
- * is not very clear on the point.
- */
-
-METHODDEF(boolean)
-encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-  register int temp;
-  int blkn;
-  int Al = cinfo->Al;
-  JBLOCKROW block;
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_p(entropy, entropy->next_restart_num);
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    block = MCU_data[blkn];
-
-    /* We simply emit the Al'th bit of the DC coefficient value. */
-    temp = (*block)[0];
-    emit_bits_p(entropy, (unsigned int) (temp >> Al), 1);
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for AC successive approximation refinement scan.
- */
-
-METHODDEF(boolean)
-encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-  register int temp;
-  register int r, k;
-  int EOB;
-  char *BR_buffer;
-  unsigned int BR;
-  int Se = cinfo->Se;
-  int Al = cinfo->Al;
-  JBLOCKROW block;
-  int absvalues[DCTSIZE2];
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_p(entropy, entropy->next_restart_num);
-
-  /* Encode the MCU data block */
-  block = MCU_data[0];
-
-  /* It is convenient to make a pre-pass to determine the transformed
-   * coefficients' absolute values and the EOB position.
-   */
-  EOB = 0;
-  for (k = cinfo->Ss; k <= Se; k++) {
-    temp = (*block)[jpeg_natural_order[k]];
-    /* We must apply the point transform by Al.  For AC coefficients this
-     * is an integer division with rounding towards 0.  To do this portably
-     * in C, we shift after obtaining the absolute value.
-     */
-    if (temp < 0)
-      temp = -temp;		/* temp is abs value of input */
-    temp >>= Al;		/* apply the point transform */
-    absvalues[k] = temp;	/* save abs value for main pass */
-    if (temp == 1)
-      EOB = k;			/* EOB = index of last newly-nonzero coef */
-  }
-
-  /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */
-
-  r = 0;			/* r = run length of zeros */
-  BR = 0;			/* BR = count of buffered bits added now */
-  BR_buffer = entropy->bit_buffer + entropy->BE; /* Append bits to buffer */
-
-  for (k = cinfo->Ss; k <= Se; k++) {
-    if ((temp = absvalues[k]) == 0) {
-      r++;
-      continue;
-    }
-
-    /* Emit any required ZRLs, but not if they can be folded into EOB */
-    while (r > 15 && k <= EOB) {
-      /* emit any pending EOBRUN and the BE correction bits */
-      emit_eobrun(entropy);
-      /* Emit ZRL */
-      emit_symbol(entropy, entropy->ac_tbl_no, 0xF0);
-      r -= 16;
-      /* Emit buffered correction bits that must be associated with ZRL */
-      emit_buffered_bits(entropy, BR_buffer, BR);
-      BR_buffer = entropy->bit_buffer; /* BE bits are gone now */
-      BR = 0;
-    }
-
-    /* If the coef was previously nonzero, it only needs a correction bit.
-     * NOTE: a straight translation of the spec's figure G.7 would suggest
-     * that we also need to test r > 15.  But if r > 15, we can only get here
-     * if k > EOB, which implies that this coefficient is not 1.
-     */
-    if (temp > 1) {
-      /* The correction bit is the next bit of the absolute value. */
-      BR_buffer[BR++] = (char) (temp & 1);
-      continue;
-    }
-
-    /* Emit any pending EOBRUN and the BE correction bits */
-    emit_eobrun(entropy);
-
-    /* Count/emit Huffman symbol for run length / number of bits */
-    emit_symbol(entropy, entropy->ac_tbl_no, (r << 4) + 1);
-
-    /* Emit output bit for newly-nonzero coef */
-    temp = ((*block)[jpeg_natural_order[k]] < 0) ? 0 : 1;
-    emit_bits_p(entropy, (unsigned int) temp, 1);
-
-    /* Emit buffered correction bits that must be associated with this code */
-    emit_buffered_bits(entropy, BR_buffer, BR);
-    BR_buffer = entropy->bit_buffer; /* BE bits are gone now */
-    BR = 0;
-    r = 0;			/* reset zero run length */
-  }
-
-  if (r > 0 || BR > 0) {	/* If there are trailing zeroes, */
-    entropy->EOBRUN++;		/* count an EOB */
-    entropy->BE += BR;		/* concat my correction bits to older ones */
-    /* We force out the EOB if we risk either:
-     * 1. overflow of the EOB counter;
-     * 2. overflow of the correction bit buffer during the next MCU.
-     */
-    if (entropy->EOBRUN == 0x7FFF || entropy->BE > (MAX_CORR_BITS-DCTSIZE2+1))
-      emit_eobrun(entropy);
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Finish up at the end of a Huffman-compressed progressive scan.
- */
-
-METHODDEF(void)
-finish_pass_phuff (j_compress_ptr cinfo)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Flush out any buffered data */
-  emit_eobrun(entropy);
-  flush_bits_p(entropy);
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-}
-
-
-/*
- * Finish up a statistics-gathering pass and create the new Huffman tables.
- */
-
-METHODDEF(void)
-finish_pass_gather_phuff (j_compress_ptr cinfo)
-{
-  phuff_entropy_ptr entropy = (phuff_entropy_ptr) cinfo->entropy;
-  boolean is_DC_band;
-  int ci, tbl;
-  jpeg_component_info * compptr;
-  JHUFF_TBL **htblptr;
-  boolean did[NUM_HUFF_TBLS];
-
-  /* Flush out buffered data (all we care about is counting the EOB symbol) */
-  emit_eobrun(entropy);
-
-  is_DC_band = (cinfo->Ss == 0);
-
-  /* It's important not to apply jpeg_gen_optimal_table more than once
-   * per table, because it clobbers the input frequency counts!
-   */
-  MEMZERO(did, SIZEOF(did));
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    if (is_DC_band) {
-      if (cinfo->Ah != 0)	/* DC refinement needs no table */
-	continue;
-      tbl = compptr->dc_tbl_no;
-    } else {
-      tbl = compptr->ac_tbl_no;
-    }
-    if (! did[tbl]) {
-      if (is_DC_band)
-        htblptr = & cinfo->dc_huff_tbl_ptrs[tbl];
-      else
-        htblptr = & cinfo->ac_huff_tbl_ptrs[tbl];
-      if (*htblptr == NULL)
-        *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-      jpeg_gen_optimal_table(cinfo, *htblptr, entropy->count_ptrs[tbl]);
-      did[tbl] = TRUE;
-    }
-  }
-}
-
-
-/*
- * Module initialization routine for progressive Huffman entropy encoding.
- */
-
-GLOBAL(void)
-jinit_phuff_encoder (j_compress_ptr cinfo)
-{
-  phuff_entropy_ptr entropy;
-  int i;
-
-  entropy = (phuff_entropy_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(phuff_entropy_encoder));
-  cinfo->entropy = (struct jpeg_entropy_encoder *) entropy;
-  entropy->pub.start_pass = start_pass_phuff;
-
-  /* Mark tables unallocated */
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    entropy->derived_tbls[i] = NULL;
-    entropy->count_ptrs[i] = NULL;
-  }
-  entropy->bit_buffer = NULL;	/* needed only in AC refinement scan */
-}
-
-#endif /* C_PROGRESSIVE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jcprepct.c b/modules/juce_graphics/image_formats/jpglib/jcprepct.c
deleted file mode 100644
index fdc4bc2..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcprepct.c
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * jcprepct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the compression preprocessing controller.
- * This controller manages the color conversion, downsampling,
- * and edge expansion steps.
- *
- * Most of the complexity here is associated with buffering input rows
- * as required by the downsampler.  See the comments at the head of
- * jcsample.c for the downsampler's needs.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* At present, jcsample.c can request context rows only for smoothing.
- * In the future, we might also need context rows for CCIR601 sampling
- * or other more-complex downsampling procedures.  The code to support
- * context rows should be compiled only if needed.
- */
-#ifdef INPUT_SMOOTHING_SUPPORTED
-#define CONTEXT_ROWS_SUPPORTED
-#endif
-
-
-/*
- * For the simple (no-context-row) case, we just need to buffer one
- * row group's worth of pixels for the downsampling step.  At the bottom of
- * the image, we pad to a full row group by replicating the last pixel row.
- * The downsampler's last output row is then replicated if needed to pad
- * out to a full iMCU row.
- *
- * When providing context rows, we must buffer three row groups' worth of
- * pixels.  Three row groups are physically allocated, but the row pointer
- * arrays are made five row groups high, with the extra pointers above and
- * below "wrapping around" to point to the last and first real row groups.
- * This allows the downsampler to access the proper context rows.
- * At the top and bottom of the image, we create dummy context rows by
- * copying the first or last real pixel row.  This copying could be avoided
- * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the
- * trouble on the compression side.
- */
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_prep_controller pub; /* public fields */
-
-  /* Downsampling input buffer.  This buffer holds color-converted data
-   * until we have enough to do a downsample step.
-   */
-  JSAMPARRAY color_buf[MAX_COMPONENTS];
-
-  JDIMENSION rows_to_go;	/* counts rows remaining in source image */
-  int next_buf_row;		/* index of next row to store in color_buf */
-
-#ifdef CONTEXT_ROWS_SUPPORTED	/* only needed for context case */
-  int this_row_group;		/* starting row index of group to process */
-  int next_buf_stop;		/* downsample when we reach this index */
-#endif
-} my_prep_controller;
-
-typedef my_prep_controller * my_prep_ptr;
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-
-  if (pass_mode != JBUF_PASS_THRU)
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  /* Initialize total-height counter for detecting bottom of image */
-  prep->rows_to_go = cinfo->image_height;
-  /* Mark the conversion buffer empty */
-  prep->next_buf_row = 0;
-#ifdef CONTEXT_ROWS_SUPPORTED
-  /* Preset additional state variables for context mode.
-   * These aren't used in non-context mode, so we needn't test which mode.
-   */
-  prep->this_row_group = 0;
-  /* Set next_buf_stop to stop after two row groups have been read in. */
-  prep->next_buf_stop = 2 * cinfo->max_v_samp_factor;
-#endif
-}
-
-
-/*
- * Expand an image vertically from height input_rows to height output_rows,
- * by duplicating the bottom row.
- */
-
-LOCAL(void)
-expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols,
-		    int input_rows, int output_rows)
-{
-  register int row;
-
-  for (row = input_rows; row < output_rows; row++) {
-    jcopy_sample_rows(image_data, input_rows-1, image_data, row,
-		      1, num_cols);
-  }
-}
-
-
-/*
- * Process some data in the simple no-context case.
- *
- * Preprocessor output data is counted in "row groups".  A row group
- * is defined to be v_samp_factor sample rows of each component.
- * Downsampling will produce this much data from each max_v_samp_factor
- * input rows.
- */
-
-METHODDEF(void)
-pre_process_data (j_compress_ptr cinfo,
-		  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-		  JDIMENSION in_rows_avail,
-		  JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr,
-		  JDIMENSION out_row_groups_avail)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-  int numrows, ci;
-  JDIMENSION inrows;
-  jpeg_component_info * compptr;
-
-  while (*in_row_ctr < in_rows_avail &&
-	 *out_row_group_ctr < out_row_groups_avail) {
-    /* Do color conversion to fill the conversion buffer. */
-    inrows = in_rows_avail - *in_row_ctr;
-    numrows = cinfo->max_v_samp_factor - prep->next_buf_row;
-    numrows = (int) MIN((JDIMENSION) numrows, inrows);
-    (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr,
-				       prep->color_buf,
-				       (JDIMENSION) prep->next_buf_row,
-				       numrows);
-    *in_row_ctr += numrows;
-    prep->next_buf_row += numrows;
-    prep->rows_to_go -= numrows;
-    /* If at bottom of image, pad to fill the conversion buffer. */
-    if (prep->rows_to_go == 0 &&
-	prep->next_buf_row < cinfo->max_v_samp_factor) {
-      for (ci = 0; ci < cinfo->num_components; ci++) {
-	expand_bottom_edge(prep->color_buf[ci], cinfo->image_width,
-			   prep->next_buf_row, cinfo->max_v_samp_factor);
-      }
-      prep->next_buf_row = cinfo->max_v_samp_factor;
-    }
-    /* If we've filled the conversion buffer, empty it. */
-    if (prep->next_buf_row == cinfo->max_v_samp_factor) {
-      (*cinfo->downsample->downsample) (cinfo,
-					prep->color_buf, (JDIMENSION) 0,
-					output_buf, *out_row_group_ctr);
-      prep->next_buf_row = 0;
-      (*out_row_group_ctr)++;
-    }
-    /* If at bottom of image, pad the output to a full iMCU height.
-     * Note we assume the caller is providing a one-iMCU-height output buffer!
-     */
-    if (prep->rows_to_go == 0 &&
-	*out_row_group_ctr < out_row_groups_avail) {
-      for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	   ci++, compptr++) {
-	expand_bottom_edge(output_buf[ci],
-			   compptr->width_in_blocks * DCTSIZE,
-			   (int) (*out_row_group_ctr * compptr->v_samp_factor),
-			   (int) (out_row_groups_avail * compptr->v_samp_factor));
-      }
-      *out_row_group_ctr = out_row_groups_avail;
-      break;			/* can exit outer loop without test */
-    }
-  }
-}
-
-
-#ifdef CONTEXT_ROWS_SUPPORTED
-
-/*
- * Process some data in the context case.
- */
-
-METHODDEF(void)
-pre_process_context (j_compress_ptr cinfo,
-		     JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-		     JDIMENSION in_rows_avail,
-		     JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr,
-		     JDIMENSION out_row_groups_avail)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-  int numrows, ci;
-  int buf_height = cinfo->max_v_samp_factor * 3;
-  JDIMENSION inrows;
-
-  while (*out_row_group_ctr < out_row_groups_avail) {
-    if (*in_row_ctr < in_rows_avail) {
-      /* Do color conversion to fill the conversion buffer. */
-      inrows = in_rows_avail - *in_row_ctr;
-      numrows = prep->next_buf_stop - prep->next_buf_row;
-      numrows = (int) MIN((JDIMENSION) numrows, inrows);
-      (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr,
-					 prep->color_buf,
-					 (JDIMENSION) prep->next_buf_row,
-					 numrows);
-      /* Pad at top of image, if first time through */
-      if (prep->rows_to_go == cinfo->image_height) {
-	for (ci = 0; ci < cinfo->num_components; ci++) {
-	  int row;
-	  for (row = 1; row <= cinfo->max_v_samp_factor; row++) {
-	    jcopy_sample_rows(prep->color_buf[ci], 0,
-			      prep->color_buf[ci], -row,
-			      1, cinfo->image_width);
-	  }
-	}
-      }
-      *in_row_ctr += numrows;
-      prep->next_buf_row += numrows;
-      prep->rows_to_go -= numrows;
-    } else {
-      /* Return for more data, unless we are at the bottom of the image. */
-      if (prep->rows_to_go != 0)
-	break;
-      /* When at bottom of image, pad to fill the conversion buffer. */
-      if (prep->next_buf_row < prep->next_buf_stop) {
-	for (ci = 0; ci < cinfo->num_components; ci++) {
-	  expand_bottom_edge(prep->color_buf[ci], cinfo->image_width,
-			     prep->next_buf_row, prep->next_buf_stop);
-	}
-	prep->next_buf_row = prep->next_buf_stop;
-      }
-    }
-    /* If we've gotten enough data, downsample a row group. */
-    if (prep->next_buf_row == prep->next_buf_stop) {
-      (*cinfo->downsample->downsample) (cinfo,
-					prep->color_buf,
-					(JDIMENSION) prep->this_row_group,
-					output_buf, *out_row_group_ctr);
-      (*out_row_group_ctr)++;
-      /* Advance pointers with wraparound as necessary. */
-      prep->this_row_group += cinfo->max_v_samp_factor;
-      if (prep->this_row_group >= buf_height)
-	prep->this_row_group = 0;
-      if (prep->next_buf_row >= buf_height)
-	prep->next_buf_row = 0;
-      prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor;
-    }
-  }
-}
-
-
-/*
- * Create the wrapped-around downsampling input buffer needed for context mode.
- */
-
-LOCAL(void)
-create_context_buffer (j_compress_ptr cinfo)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-  int rgroup_height = cinfo->max_v_samp_factor;
-  int ci, i;
-  jpeg_component_info * compptr;
-  JSAMPARRAY true_buffer, fake_buffer;
-
-  /* Grab enough space for fake row pointers for all the components;
-   * we need five row groups' worth of pointers for each component.
-   */
-  fake_buffer = (JSAMPARRAY)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(cinfo->num_components * 5 * rgroup_height) *
-				SIZEOF(JSAMPROW));
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Allocate the actual buffer space (3 row groups) for this component.
-     * We make the buffer wide enough to allow the downsampler to edge-expand
-     * horizontally within the buffer, if it so chooses.
-     */
-    true_buffer = (*cinfo->mem->alloc_sarray)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE *
-		      cinfo->max_h_samp_factor) / compptr->h_samp_factor),
-       (JDIMENSION) (3 * rgroup_height));
-    /* Copy true buffer row pointers into the middle of the fake row array */
-    MEMCOPY(fake_buffer + rgroup_height, true_buffer,
-	    3 * rgroup_height * SIZEOF(JSAMPROW));
-    /* Fill in the above and below wraparound pointers */
-    for (i = 0; i < rgroup_height; i++) {
-      fake_buffer[i] = true_buffer[2 * rgroup_height + i];
-      fake_buffer[4 * rgroup_height + i] = true_buffer[i];
-    }
-    prep->color_buf[ci] = fake_buffer + rgroup_height;
-    fake_buffer += 5 * rgroup_height; /* point to space for next component */
-  }
-}
-
-#endif /* CONTEXT_ROWS_SUPPORTED */
-
-
-/*
- * Initialize preprocessing controller.
- */
-
-GLOBAL(void)
-jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer)
-{
-  my_prep_ptr prep;
-  int ci;
-  jpeg_component_info * compptr;
-
-  if (need_full_buffer)		/* safety check */
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  prep = (my_prep_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_prep_controller));
-  cinfo->prep = (struct jpeg_c_prep_controller *) prep;
-  prep->pub.start_pass = start_pass_prep;
-
-  /* Allocate the color conversion buffer.
-   * We make the buffer wide enough to allow the downsampler to edge-expand
-   * horizontally within the buffer, if it so chooses.
-   */
-  if (cinfo->downsample->need_context_rows) {
-    /* Set up to provide context rows */
-#ifdef CONTEXT_ROWS_SUPPORTED
-    prep->pub.pre_process_data = pre_process_context;
-    create_context_buffer(cinfo);
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    /* No context, just make it tall enough for one row group */
-    prep->pub.pre_process_data = pre_process_data;
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      prep->color_buf[ci] = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE *
-			cinfo->max_h_samp_factor) / compptr->h_samp_factor),
-	 (JDIMENSION) cinfo->max_v_samp_factor);
-    }
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jcsample.c b/modules/juce_graphics/image_formats/jpglib/jcsample.c
deleted file mode 100644
index 37c658f..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jcsample.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * jcsample.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains downsampling routines.
- *
- * Downsampling input data is counted in "row groups".  A row group
- * is defined to be max_v_samp_factor pixel rows of each component,
- * from which the downsampler produces v_samp_factor sample rows.
- * A single row group is processed in each call to the downsampler module.
- *
- * The downsampler is responsible for edge-expansion of its output data
- * to fill an integral number of DCT blocks horizontally.  The source buffer
- * may be modified if it is helpful for this purpose (the source buffer is
- * allocated wide enough to correspond to the desired output width).
- * The caller (the prep controller) is responsible for vertical padding.
- *
- * The downsampler may request "context rows" by setting need_context_rows
- * during startup.  In this case, the input arrays will contain at least
- * one row group's worth of pixels above and below the passed-in data;
- * the caller will create dummy rows at image top and bottom by replicating
- * the first or last real pixel row.
- *
- * An excellent reference for image resampling is
- *   Digital Image Warping, George Wolberg, 1990.
- *   Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7.
- *
- * The downsampling algorithm used here is a simple average of the source
- * pixels covered by the output pixel.  The hi-falutin sampling literature
- * refers to this as a "box filter".  In general the characteristics of a box
- * filter are not very good, but for the specific cases we normally use (1:1
- * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not
- * nearly so bad.  If you intend to use other sampling ratios, you'd be well
- * advised to improve this code.
- *
- * A simple input-smoothing capability is provided.  This is mainly intended
- * for cleaning up color-dithered GIF input files (if you find it inadequate,
- * we suggest using an external filtering program such as pnmconvol).  When
- * enabled, each input pixel P is replaced by a weighted sum of itself and its
- * eight neighbors.  P's weight is 1-8*SF and each neighbor's weight is SF,
- * where SF = (smoothing_factor / 1024).
- * Currently, smoothing is only supported for 2h2v sampling factors.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Pointer to routine to downsample a single component */
-typedef JMETHOD(void, downsample1_ptr,
-		(j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY output_data));
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_downsampler pub;	/* public fields */
-
-  /* Downsampling method pointers, one per component */
-  downsample1_ptr methods[MAX_COMPONENTS];
-} my_downsampler;
-
-typedef my_downsampler * my_downsample_ptr;
-
-
-/*
- * Initialize for a downsampling pass.
- */
-
-METHODDEF(void)
-start_pass_downsample (j_compress_ptr)
-{
-  /* no work for now */
-}
-
-
-/*
- * Expand a component horizontally from width input_cols to width output_cols,
- * by duplicating the rightmost samples.
- */
-
-LOCAL(void)
-expand_right_edge (JSAMPARRAY image_data, int num_rows,
-		   JDIMENSION input_cols, JDIMENSION output_cols)
-{
-  register JSAMPROW ptr;
-  register JSAMPLE pixval;
-  register int count;
-  int row;
-  int numcols = (int) (output_cols - input_cols);
-
-  if (numcols > 0) {
-    for (row = 0; row < num_rows; row++) {
-      ptr = image_data[row] + input_cols;
-      pixval = ptr[-1];		/* don't need GETJSAMPLE() here */
-      for (count = numcols; count > 0; count--)
-	*ptr++ = pixval;
-    }
-  }
-}
-
-
-/*
- * Do downsampling for a whole row group (all components).
- *
- * In this version we simply downsample each component independently.
- */
-
-METHODDEF(void)
-sep_downsample (j_compress_ptr cinfo,
-		JSAMPIMAGE input_buf, JDIMENSION in_row_index,
-		JSAMPIMAGE output_buf, JDIMENSION out_row_group_index)
-{
-  my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample;
-  int ci;
-  jpeg_component_info * compptr;
-  JSAMPARRAY in_ptr, out_ptr;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    in_ptr = input_buf[ci] + in_row_index;
-    out_ptr = output_buf[ci] + (out_row_group_index * compptr->v_samp_factor);
-    (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr);
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * One row group is processed per call.
- * This version handles arbitrary integral sampling ratios, without smoothing.
- * Note that this version is not actually used for customary sampling ratios.
- */
-
-METHODDEF(void)
-int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v;
-  JDIMENSION outcol, outcol_h;	/* outcol_h == outcol*h_expand */
-  JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
-  JSAMPROW inptr, outptr;
-  INT32 outvalue;
-
-  h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor;
-  v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor;
-  numpix = h_expand * v_expand;
-  numpix2 = numpix/2;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, output_cols * h_expand);
-
-  inrow = 0;
-  for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) {
-    outptr = output_data[outrow];
-    for (outcol = 0, outcol_h = 0; outcol < output_cols;
-	 outcol++, outcol_h += h_expand) {
-      outvalue = 0;
-      for (v = 0; v < v_expand; v++) {
-	inptr = input_data[inrow+v] + outcol_h;
-	for (h = 0; h < h_expand; h++) {
-	  outvalue += (INT32) GETJSAMPLE(*inptr++);
-	}
-      }
-      *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix);
-    }
-    inrow += v_expand;
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the special case of a full-size component,
- * without smoothing.
- */
-
-METHODDEF(void)
-fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		     JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  /* Copy the data */
-  jcopy_sample_rows(input_data, 0, output_data, 0,
-		    cinfo->max_v_samp_factor, cinfo->image_width);
-  /* Edge-expand */
-  expand_right_edge(output_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, compptr->width_in_blocks * DCTSIZE);
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the common case of 2:1 horizontal and 1:1 vertical,
- * without smoothing.
- *
- * A note about the "bias" calculations: when rounding fractional values to
- * integer, we do not want to always round 0.5 up to the next integer.
- * If we did that, we'd introduce a noticeable bias towards larger values.
- * Instead, this code is arranged so that 0.5 will be rounded up or down at
- * alternate pixel locations (a simple ordered dither pattern).
- */
-
-METHODDEF(void)
-h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int outrow;
-  JDIMENSION outcol;
-  JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
-  register JSAMPROW inptr, outptr;
-  register int bias;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, output_cols * 2);
-
-  for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) {
-    outptr = output_data[outrow];
-    inptr = input_data[outrow];
-    bias = 0;			/* bias = 0,1,0,1,... for successive samples */
-    for (outcol = 0; outcol < output_cols; outcol++) {
-      *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1])
-			      + bias) >> 1);
-      bias ^= 1;		/* 0=>1, 1=>0 */
-      inptr += 2;
-    }
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the standard case of 2:1 horizontal and 2:1 vertical,
- * without smoothing.
- */
-
-METHODDEF(void)
-h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow, outrow;
-  JDIMENSION outcol;
-  JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
-  register JSAMPROW inptr0, inptr1, outptr;
-  register int bias;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, output_cols * 2);
-
-  inrow = 0;
-  for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) {
-    outptr = output_data[outrow];
-    inptr0 = input_data[inrow];
-    inptr1 = input_data[inrow+1];
-    bias = 1;			/* bias = 1,2,1,2,... for successive samples */
-    for (outcol = 0; outcol < output_cols; outcol++) {
-      *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-			      GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1])
-			      + bias) >> 2);
-      bias ^= 3;		/* 1=>2, 2=>1 */
-      inptr0 += 2; inptr1 += 2;
-    }
-    inrow += 2;
-  }
-}
-
-
-#ifdef INPUT_SMOOTHING_SUPPORTED
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the standard case of 2:1 horizontal and 2:1 vertical,
- * with smoothing.  One row of context is required.
- */
-
-METHODDEF(void)
-h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-			JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow, outrow;
-  JDIMENSION colctr;
-  JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
-  register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr;
-  INT32 membersum, neighsum, memberscale, neighscale;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2,
-		    cinfo->image_width, output_cols * 2);
-
-  /* We don't bother to form the individual "smoothed" input pixel values;
-   * we can directly compute the output which is the average of the four
-   * smoothed values.  Each of the four member pixels contributes a fraction
-   * (1-8*SF) to its own smoothed image and a fraction SF to each of the three
-   * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final
-   * output.  The four corner-adjacent neighbor pixels contribute a fraction
-   * SF to just one smoothed pixel, or SF/4 to the final output; while the
-   * eight edge-adjacent neighbors contribute SF to each of two smoothed
-   * pixels, or SF/2 overall.  In order to use integer arithmetic, these
-   * factors are scaled by 2^16 = 65536.
-   * Also recall that SF = smoothing_factor / 1024.
-   */
-
-  memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */
-  neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */
-
-  inrow = 0;
-  for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) {
-    outptr = output_data[outrow];
-    inptr0 = input_data[inrow];
-    inptr1 = input_data[inrow+1];
-    above_ptr = input_data[inrow-1];
-    below_ptr = input_data[inrow+2];
-
-    /* Special case for first column: pretend column -1 is same as column 0 */
-    membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-		GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
-    neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
-	       GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
-	       GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) +
-	       GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]);
-    neighsum += neighsum;
-    neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) +
-		GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]);
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-    inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2;
-
-    for (colctr = output_cols - 2; colctr > 0; colctr--) {
-      /* sum of pixels directly mapped to this output element */
-      membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-		  GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
-      /* sum of edge-neighbor pixels */
-      neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
-		 GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
-		 GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) +
-		 GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]);
-      /* The edge-neighbors count twice as much as corner-neighbors */
-      neighsum += neighsum;
-      /* Add in the corner-neighbors */
-      neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) +
-		  GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]);
-      /* form final output scaled up by 2^16 */
-      membersum = membersum * memberscale + neighsum * neighscale;
-      /* round, descale and output it */
-      *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-      inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2;
-    }
-
-    /* Special case for last column */
-    membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-		GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
-    neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
-	       GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
-	       GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) +
-	       GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]);
-    neighsum += neighsum;
-    neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) +
-		GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]);
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr = (JSAMPLE) ((membersum + 32768) >> 16);
-
-    inrow += 2;
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the special case of a full-size component,
- * with smoothing.  One row of context is required.
- */
-
-METHODDEF(void)
-fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
-			    JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int outrow;
-  JDIMENSION colctr;
-  JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
-  register JSAMPROW inptr, above_ptr, below_ptr, outptr;
-  INT32 membersum, neighsum, memberscale, neighscale;
-  int colsum, lastcolsum, nextcolsum;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2,
-		    cinfo->image_width, output_cols);
-
-  /* Each of the eight neighbor pixels contributes a fraction SF to the
-   * smoothed pixel, while the main pixel contributes (1-8*SF).  In order
-   * to use integer arithmetic, these factors are multiplied by 2^16 = 65536.
-   * Also recall that SF = smoothing_factor / 1024.
-   */
-
-  memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */
-  neighscale = cinfo->smoothing_factor * 64; /* scaled SF */
-
-  for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) {
-    outptr = output_data[outrow];
-    inptr = input_data[outrow];
-    above_ptr = input_data[outrow-1];
-    below_ptr = input_data[outrow+1];
-
-    /* Special case for first column */
-    colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) +
-	     GETJSAMPLE(*inptr);
-    membersum = GETJSAMPLE(*inptr++);
-    nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) +
-		 GETJSAMPLE(*inptr);
-    neighsum = colsum + (colsum - membersum) + nextcolsum;
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-    lastcolsum = colsum; colsum = nextcolsum;
-
-    for (colctr = output_cols - 2; colctr > 0; colctr--) {
-      membersum = GETJSAMPLE(*inptr++);
-      above_ptr++; below_ptr++;
-      nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) +
-		   GETJSAMPLE(*inptr);
-      neighsum = lastcolsum + (colsum - membersum) + nextcolsum;
-      membersum = membersum * memberscale + neighsum * neighscale;
-      *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-      lastcolsum = colsum; colsum = nextcolsum;
-    }
-
-    /* Special case for last column */
-    membersum = GETJSAMPLE(*inptr);
-    neighsum = lastcolsum + (colsum - membersum) + colsum;
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr = (JSAMPLE) ((membersum + 32768) >> 16);
-
-  }
-}
-
-#endif /* INPUT_SMOOTHING_SUPPORTED */
-
-
-/*
- * Module initialization routine for downsampling.
- * Note that we must select a routine for each component.
- */
-
-GLOBAL(void)
-jinit_downsampler (j_compress_ptr cinfo)
-{
-  my_downsample_ptr downsample;
-  int ci;
-  jpeg_component_info * compptr;
-  boolean smoothok = TRUE;
-
-  downsample = (my_downsample_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_downsampler));
-  cinfo->downsample = (struct jpeg_downsampler *) downsample;
-  downsample->pub.start_pass = start_pass_downsample;
-  downsample->pub.downsample = sep_downsample;
-  downsample->pub.need_context_rows = FALSE;
-
-  if (cinfo->CCIR601_sampling)
-    ERREXIT(cinfo, JERR_CCIR601_NOTIMPL);
-
-  /* Verify we can handle the sampling factors, and set up method pointers */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    if (compptr->h_samp_factor == cinfo->max_h_samp_factor &&
-	compptr->v_samp_factor == cinfo->max_v_samp_factor) {
-#ifdef INPUT_SMOOTHING_SUPPORTED
-      if (cinfo->smoothing_factor) {
-	downsample->methods[ci] = fullsize_smooth_downsample;
-	downsample->pub.need_context_rows = TRUE;
-      } else
-#endif
-	downsample->methods[ci] = fullsize_downsample;
-    } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor &&
-	       compptr->v_samp_factor == cinfo->max_v_samp_factor) {
-      smoothok = FALSE;
-      downsample->methods[ci] = h2v1_downsample;
-    } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor &&
-	       compptr->v_samp_factor * 2 == cinfo->max_v_samp_factor) {
-#ifdef INPUT_SMOOTHING_SUPPORTED
-      if (cinfo->smoothing_factor) {
-	downsample->methods[ci] = h2v2_smooth_downsample;
-	downsample->pub.need_context_rows = TRUE;
-      } else
-#endif
-	downsample->methods[ci] = h2v2_downsample;
-    } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 &&
-	       (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) {
-      smoothok = FALSE;
-      downsample->methods[ci] = int_downsample;
-    } else
-      ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
-  }
-
-#ifdef INPUT_SMOOTHING_SUPPORTED
-  if (cinfo->smoothing_factor && !smoothok)
-    TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL);
-#endif
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jctrans.c b/modules/juce_graphics/image_formats/jpglib/jctrans.c
deleted file mode 100644
index 7e209f9..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jctrans.c
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * jctrans.c
- *
- * Copyright (C) 1995-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains library routines for transcoding compression,
- * that is, writing raw DCT coefficient arrays to an output JPEG file.
- * The routines in jcapimin.c will also be needed by a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Forward declarations */
-LOCAL(void) transencode_master_selection
-	JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays));
-LOCAL(void) transencode_coef_controller
-	JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays));
-
-
-/*
- * Compression initialization for writing raw-coefficient data.
- * Before calling this, all parameters and a data destination must be set up.
- * Call jpeg_finish_compress() to actually write the data.
- *
- * The number of passed virtual arrays must match cinfo->num_components.
- * Note that the virtual arrays need not be filled or even realized at
- * the time write_coefficients is called; indeed, if the virtual arrays
- * were requested from this compression object's memory manager, they
- * typically will be realized during this routine and filled afterwards.
- */
-
-GLOBAL(void)
-jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)
-{
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Mark all tables to be written */
-  jpeg_suppress_tables(cinfo, FALSE);
-  /* (Re)initialize error mgr and destination modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->dest->init_destination) (cinfo);
-  /* Perform master selection of active modules */
-  transencode_master_selection(cinfo, coef_arrays);
-  /* Wait for jpeg_finish_compress() call */
-  cinfo->next_scanline = 0;	/* so jpeg_write_marker works */
-  cinfo->global_state = CSTATE_WRCOEFS;
-}
-
-
-/*
- * Initialize the compression object with default parameters,
- * then copy from the source object all parameters needed for lossless
- * transcoding.  Parameters that can be varied without loss (such as
- * scan script and Huffman optimization) are left in their default states.
- */
-
-GLOBAL(void)
-jpeg_copy_critical_parameters (j_decompress_ptr srcinfo,
-			       j_compress_ptr dstinfo)
-{
-  JQUANT_TBL ** qtblptr;
-  jpeg_component_info *incomp, *outcomp;
-  JQUANT_TBL *c_quant, *slot_quant;
-  int tblno, ci, coefi;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (dstinfo->global_state != CSTATE_START)
-    ERREXIT1(dstinfo, JERR_BAD_STATE, dstinfo->global_state);
-  /* Copy fundamental image dimensions */
-  dstinfo->image_width = srcinfo->image_width;
-  dstinfo->image_height = srcinfo->image_height;
-  dstinfo->input_components = srcinfo->num_components;
-  dstinfo->in_color_space = srcinfo->jpeg_color_space;
-  /* Initialize all parameters to default values */
-  jpeg_set_defaults(dstinfo);
-  /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB.
-   * Fix it to get the right header markers for the image colorspace.
-   */
-  jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space);
-  dstinfo->data_precision = srcinfo->data_precision;
-  dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling;
-  /* Copy the source's quantization tables. */
-  for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) {
-    if (srcinfo->quant_tbl_ptrs[tblno] != NULL) {
-      qtblptr = & dstinfo->quant_tbl_ptrs[tblno];
-      if (*qtblptr == NULL)
-	*qtblptr = jpeg_alloc_quant_table((j_common_ptr) dstinfo);
-      MEMCOPY((*qtblptr)->quantval,
-	      srcinfo->quant_tbl_ptrs[tblno]->quantval,
-	      SIZEOF((*qtblptr)->quantval));
-      (*qtblptr)->sent_table = FALSE;
-    }
-  }
-  /* Copy the source's per-component info.
-   * Note we assume jpeg_set_defaults has allocated the dest comp_info array.
-   */
-  dstinfo->num_components = srcinfo->num_components;
-  if (dstinfo->num_components < 1 || dstinfo->num_components > MAX_COMPONENTS)
-    ERREXIT2(dstinfo, JERR_COMPONENT_COUNT, dstinfo->num_components,
-	     MAX_COMPONENTS);
-  for (ci = 0, incomp = srcinfo->comp_info, outcomp = dstinfo->comp_info;
-       ci < dstinfo->num_components; ci++, incomp++, outcomp++) {
-    outcomp->component_id = incomp->component_id;
-    outcomp->h_samp_factor = incomp->h_samp_factor;
-    outcomp->v_samp_factor = incomp->v_samp_factor;
-    outcomp->quant_tbl_no = incomp->quant_tbl_no;
-    /* Make sure saved quantization table for component matches the qtable
-     * slot.  If not, the input file re-used this qtable slot.
-     * IJG encoder currently cannot duplicate this.
-     */
-    tblno = outcomp->quant_tbl_no;
-    if (tblno < 0 || tblno >= NUM_QUANT_TBLS ||
-	srcinfo->quant_tbl_ptrs[tblno] == NULL)
-      ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno);
-    slot_quant = srcinfo->quant_tbl_ptrs[tblno];
-    c_quant = incomp->quant_table;
-    if (c_quant != NULL) {
-      for (coefi = 0; coefi < DCTSIZE2; coefi++) {
-	if (c_quant->quantval[coefi] != slot_quant->quantval[coefi])
-	  ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno);
-      }
-    }
-    /* Note: we do not copy the source's Huffman table assignments;
-     * instead we rely on jpeg_set_colorspace to have made a suitable choice.
-     */
-  }
-  /* Also copy JFIF version and resolution information, if available.
-   * Strictly speaking this isn't "critical" info, but it's nearly
-   * always appropriate to copy it if available.  In particular,
-   * if the application chooses to copy JFIF 1.02 extension markers from
-   * the source file, we need to copy the version to make sure we don't
-   * emit a file that has 1.02 extensions but a claimed version of 1.01.
-   * We will *not*, however, copy version info from mislabeled "2.01" files.
-   */
-  if (srcinfo->saw_JFIF_marker) {
-    if (srcinfo->JFIF_major_version == 1) {
-      dstinfo->JFIF_major_version = srcinfo->JFIF_major_version;
-      dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version;
-    }
-    dstinfo->density_unit = srcinfo->density_unit;
-    dstinfo->X_density = srcinfo->X_density;
-    dstinfo->Y_density = srcinfo->Y_density;
-  }
-}
-
-
-/*
- * Master selection of compression modules for transcoding.
- * This substitutes for jcinit.c's initialization of the full compressor.
- */
-
-LOCAL(void)
-transencode_master_selection (j_compress_ptr cinfo,
-			      jvirt_barray_ptr * coef_arrays)
-{
-  /* Although we don't actually use input_components for transcoding,
-   * jcmaster.c's initial_setup will complain if input_components is 0.
-   */
-  cinfo->input_components = 1;
-  /* Initialize master control (includes parameter checking/processing) */
-  jinit_c_master_control(cinfo, TRUE /* transcode only */);
-
-  /* Entropy encoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code) {
-    ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
-  } else {
-    if (cinfo->progressive_mode) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-      jinit_phuff_encoder(cinfo);
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    } else
-      jinit_huff_encoder(cinfo);
-  }
-
-  /* We need a special coefficient buffer controller. */
-  transencode_coef_controller(cinfo, coef_arrays);
-
-  jinit_marker_writer(cinfo);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Write the datastream header (SOI, JFIF) immediately.
-   * Frame and scan headers are postponed till later.
-   * This lets application insert special markers after the SOI.
-   */
-  (*cinfo->marker->write_file_header) (cinfo);
-}
-
-
-/*
- * The rest of this file is a special implementation of the coefficient
- * buffer controller.  This is similar to jccoefct.c, but it handles only
- * output from presupplied virtual arrays.  Furthermore, we generate any
- * dummy padding blocks on-the-fly rather than expecting them to be present
- * in the arrays.
- */
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_coef_controller pub; /* public fields */
-
-  JDIMENSION iMCU_row_num;	/* iMCU row # within image */
-  JDIMENSION mcu_ctr;		/* counts MCUs processed in current row */
-  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
-  int MCU_rows_per_iMCU_row;	/* number of such rows needed */
-
-  /* Virtual block array for each component. */
-  jvirt_barray_ptr * whole_image;
-
-  /* Workspace for constructing dummy blocks at right/bottom edges. */
-  JBLOCKROW dummy_buffer[C_MAX_BLOCKS_IN_MCU];
-} my_coef_controller2;
-
-typedef my_coef_controller2 * my_coef_ptr2;
-
-
-LOCAL(void)
-start_iMCU_row2 (j_compress_ptr cinfo)
-/* Reset within-iMCU-row counters for a new row */
-{
-  my_coef_ptr2 coef = (my_coef_ptr2) cinfo->coef;
-
-  /* In an interleaved scan, an MCU row is the same as an iMCU row.
-   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
-   * But at the bottom of the image, process only what's left.
-   */
-  if (cinfo->comps_in_scan > 1) {
-    coef->MCU_rows_per_iMCU_row = 1;
-  } else {
-    if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1))
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
-    else
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
-  }
-
-  coef->mcu_ctr = 0;
-  coef->MCU_vert_offset = 0;
-}
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_coef2 (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_coef_ptr2 coef = (my_coef_ptr2) cinfo->coef;
-
-  if (pass_mode != JBUF_CRANK_DEST)
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  coef->iMCU_row_num = 0;
-  start_iMCU_row2(cinfo);
-}
-
-
-/*
- * Process some data.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the scan.
- * The data is obtained from the virtual arrays and fed to the entropy coder.
- * Returns TRUE if the iMCU row is completed, FALSE if suspended.
- *
- * NB: input_buf is ignored; it is likely to be a NULL pointer.
- */
-
-METHODDEF(boolean)
-compress_output2 (j_compress_ptr cinfo, JSAMPIMAGE)
-{
-  my_coef_ptr2 coef = (my_coef_ptr2) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  int blkn, ci, xindex, yindex, yoffset, blockcnt;
-  JDIMENSION start_col;
-  JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
-  JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU];
-  JBLOCKROW buffer_ptr;
-  jpeg_component_info *compptr;
-
-  /* Align the virtual buffers for the components used in this scan. */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    buffer[ci] = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
-       coef->iMCU_row_num * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, FALSE);
-  }
-
-  /* Loop to process one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row;
-	 MCU_col_num++) {
-      /* Construct list of pointers to DCT blocks belonging to this MCU */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	start_col = MCU_col_num * compptr->MCU_width;
-	blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
-						: compptr->last_col_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  if (coef->iMCU_row_num < last_iMCU_row ||
-	      yindex+yoffset < compptr->last_row_height) {
-	    /* Fill in pointers to real blocks in this row */
-	    buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
-	    for (xindex = 0; xindex < blockcnt; xindex++)
-	      MCU_buffer[blkn++] = buffer_ptr++;
-	  } else {
-	    /* At bottom of image, need a whole row of dummy blocks */
-	    xindex = 0;
-	  }
-	  /* Fill in any dummy blocks needed in this row.
-	   * Dummy blocks are filled in the same way as in jccoefct.c:
-	   * all zeroes in the AC entries, DC entries equal to previous
-	   * block's DC value.  The init routine has already zeroed the
-	   * AC entries, so we need only set the DC entries correctly.
-	   */
-	  for (; xindex < compptr->MCU_width; xindex++) {
-	    MCU_buffer[blkn] = coef->dummy_buffer[blkn];
-	    MCU_buffer[blkn][0][0] = MCU_buffer[blkn-1][0][0];
-	    blkn++;
-	  }
-	}
-      }
-      /* Try to write the MCU. */
-      if (! (*cinfo->entropy->encode_mcu) (cinfo, MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->mcu_ctr = MCU_col_num;
-	return FALSE;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->mcu_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  coef->iMCU_row_num++;
-  start_iMCU_row2(cinfo);
-  return TRUE;
-}
-
-
-/*
- * Initialize coefficient buffer controller.
- *
- * Each passed coefficient array must be the right size for that
- * coefficient: width_in_blocks wide and height_in_blocks high,
- * with unitheight at least v_samp_factor.
- */
-
-LOCAL(void)
-transencode_coef_controller (j_compress_ptr cinfo,
-			     jvirt_barray_ptr * coef_arrays)
-{
-  my_coef_ptr2 coef;
-  JBLOCKROW buffer;
-  int i;
-
-  coef = (my_coef_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_coef_controller2));
-  cinfo->coef = (struct jpeg_c_coef_controller *) coef;
-  coef->pub.start_pass = start_pass_coef2;
-  coef->pub.compress_data = compress_output2;
-
-  /* Save pointer to virtual arrays */
-  coef->whole_image = coef_arrays;
-
-  /* Allocate and pre-zero space for dummy DCT blocks. */
-  buffer = (JBLOCKROW)
-    (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-  jzero_far((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-  for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) {
-    coef->dummy_buffer[i] = buffer + i;
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdapimin.c b/modules/juce_graphics/image_formats/jpglib/jdapimin.c
deleted file mode 100644
index bdff21b..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdapimin.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * jdapimin.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the decompression half
- * of the JPEG library.  These are the "minimum" API routines that may be
- * needed in either the normal full-decompression case or the
- * transcoding-only case.
- *
- * Most of the routines intended to be called directly by an application
- * are in this file or in jdapistd.c.  But also see jcomapi.c for routines
- * shared by compression and decompression, and jdtrans.c for the transcoding
- * case.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Initialization of a JPEG decompression object.
- * The error manager must already be set up (in case memory manager fails).
- */
-
-GLOBAL(void)
-jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize)
-{
-  int i;
-
-  /* Guard against version mismatches between library and caller. */
-  cinfo->mem = NULL;		/* so jpeg_destroy knows mem mgr not called */
-  if (version != JPEG_LIB_VERSION)
-    ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
-  if (structsize != SIZEOF(struct jpeg_decompress_struct))
-    ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE,
-	     (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize);
-
-  /* For debugging purposes, we zero the whole master structure.
-   * But the application has already set the err pointer, and may have set
-   * client_data, so we have to save and restore those fields.
-   * Note: if application hasn't set client_data, tools like Purify may
-   * complain here.
-   */
-  {
-    struct jpeg_error_mgr * err = cinfo->err;
-    void * client_data = cinfo->client_data; /* ignore Purify complaint here */
-    MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct));
-    cinfo->err = err;
-    cinfo->client_data = client_data;
-  }
-  cinfo->is_decompressor = TRUE;
-
-  /* Initialize a memory manager instance for this object */
-  jinit_memory_mgr((j_common_ptr) cinfo);
-
-  /* Zero out pointers to permanent structures. */
-  cinfo->progress = NULL;
-  cinfo->src = NULL;
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++)
-    cinfo->quant_tbl_ptrs[i] = NULL;
-
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    cinfo->dc_huff_tbl_ptrs[i] = NULL;
-    cinfo->ac_huff_tbl_ptrs[i] = NULL;
-  }
-
-  /* Initialize marker processor so application can override methods
-   * for COM, APPn markers before calling jpeg_read_header.
-   */
-  cinfo->marker_list = NULL;
-  jinit_marker_reader(cinfo);
-
-  /* And initialize the overall input controller. */
-  jinit_input_controller(cinfo);
-
-  /* OK, I'm ready */
-  cinfo->global_state = DSTATE_START;
-}
-
-
-/*
- * Destruction of a JPEG decompression object
- */
-
-GLOBAL(void)
-jpeg_destroy_decompress (j_decompress_ptr cinfo)
-{
-  jpeg_destroy((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Abort processing of a JPEG decompression operation,
- * but don't destroy the object itself.
- */
-
-GLOBAL(void)
-jpeg_abort_decompress (j_decompress_ptr cinfo)
-{
-  jpeg_abort((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Set default decompression parameters.
- */
-
-LOCAL(void)
-default_decompress_parms (j_decompress_ptr cinfo)
-{
-  /* Guess the input colorspace, and set output colorspace accordingly. */
-  /* (Wish JPEG committee had provided a real way to specify this...) */
-  /* Note application may override our guesses. */
-  switch (cinfo->num_components) {
-  case 1:
-    cinfo->jpeg_color_space = JCS_GRAYSCALE;
-    cinfo->out_color_space = JCS_GRAYSCALE;
-    break;
-
-  case 3:
-    if (cinfo->saw_JFIF_marker) {
-      cinfo->jpeg_color_space = JCS_YCbCr; /* JFIF implies YCbCr */
-    } else if (cinfo->saw_Adobe_marker) {
-      switch (cinfo->Adobe_transform) {
-      case 0:
-	cinfo->jpeg_color_space = JCS_RGB;
-	break;
-      case 1:
-	cinfo->jpeg_color_space = JCS_YCbCr;
-	break;
-      default:
-	WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
-	cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
-	break;
-      }
-    } else {
-      /* Saw no special markers, try to guess from the component IDs */
-      int cid0 = cinfo->comp_info[0].component_id;
-      int cid1 = cinfo->comp_info[1].component_id;
-      int cid2 = cinfo->comp_info[2].component_id;
-
-      if (cid0 == 1 && cid1 == 2 && cid2 == 3)
-	cinfo->jpeg_color_space = JCS_YCbCr; /* assume JFIF w/out marker */
-      else if (cid0 == 82 && cid1 == 71 && cid2 == 66)
-	cinfo->jpeg_color_space = JCS_RGB; /* ASCII 'R', 'G', 'B' */
-      else {
-	TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2);
-	cinfo->jpeg_color_space = JCS_YCbCr; /* assume it's YCbCr */
-      }
-    }
-    /* Always guess RGB is proper output colorspace. */
-    cinfo->out_color_space = JCS_RGB;
-    break;
-
-  case 4:
-    if (cinfo->saw_Adobe_marker) {
-      switch (cinfo->Adobe_transform) {
-      case 0:
-	cinfo->jpeg_color_space = JCS_CMYK;
-	break;
-      case 2:
-	cinfo->jpeg_color_space = JCS_YCCK;
-	break;
-      default:
-	WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
-	cinfo->jpeg_color_space = JCS_YCCK; /* assume it's YCCK */
-	break;
-      }
-    } else {
-      /* No special markers, assume straight CMYK. */
-      cinfo->jpeg_color_space = JCS_CMYK;
-    }
-    cinfo->out_color_space = JCS_CMYK;
-    break;
-
-  default:
-    cinfo->jpeg_color_space = JCS_UNKNOWN;
-    cinfo->out_color_space = JCS_UNKNOWN;
-    break;
-  }
-
-  /* Set defaults for other decompression parameters. */
-  cinfo->scale_num = 1;		/* 1:1 scaling */
-  cinfo->scale_denom = 1;
-  cinfo->output_gamma = 1.0;
-  cinfo->buffered_image = FALSE;
-  cinfo->raw_data_out = FALSE;
-  cinfo->dct_method = JDCT_DEFAULT;
-  cinfo->do_fancy_upsampling = TRUE;
-  cinfo->do_block_smoothing = TRUE;
-  cinfo->quantize_colors = FALSE;
-  /* We set these in case application only sets quantize_colors. */
-  cinfo->dither_mode = JDITHER_FS;
-#ifdef QUANT_2PASS_SUPPORTED
-  cinfo->two_pass_quantize = TRUE;
-#else
-  cinfo->two_pass_quantize = FALSE;
-#endif
-  cinfo->desired_number_of_colors = 256;
-  cinfo->colormap = NULL;
-  /* Initialize for no mode change in buffered-image mode. */
-  cinfo->enable_1pass_quant = FALSE;
-  cinfo->enable_external_quant = FALSE;
-  cinfo->enable_2pass_quant = FALSE;
-}
-
-
-/*
- * Decompression startup: read start of JPEG datastream to see what's there.
- * Need only initialize JPEG object and supply a data source before calling.
- *
- * This routine will read as far as the first SOS marker (ie, actual start of
- * compressed data), and will save all tables and parameters in the JPEG
- * object.  It will also initialize the decompression parameters to default
- * values, and finally return JPEG_HEADER_OK.  On return, the application may
- * adjust the decompression parameters and then call jpeg_start_decompress.
- * (Or, if the application only wanted to determine the image parameters,
- * the data need not be decompressed.  In that case, call jpeg_abort or
- * jpeg_destroy to release any temporary space.)
- * If an abbreviated (tables only) datastream is presented, the routine will
- * return JPEG_HEADER_TABLES_ONLY upon reaching EOI.  The application may then
- * re-use the JPEG object to read the abbreviated image datastream(s).
- * It is unnecessary (but OK) to call jpeg_abort in this case.
- * The JPEG_SUSPENDED return code only occurs if the data source module
- * requests suspension of the decompressor.  In this case the application
- * should load more source data and then re-call jpeg_read_header to resume
- * processing.
- * If a non-suspending data source is used and require_image is TRUE, then the
- * return code need not be inspected since only JPEG_HEADER_OK is possible.
- *
- * This routine is now just a front end to jpeg_consume_input, with some
- * extra error checking.
- */
-
-GLOBAL(int)
-jpeg_read_header (j_decompress_ptr cinfo, boolean require_image)
-{
-  int retcode;
-
-  if (cinfo->global_state != DSTATE_START &&
-      cinfo->global_state != DSTATE_INHEADER)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  retcode = jpeg_consume_input(cinfo);
-
-  switch (retcode) {
-  case JPEG_REACHED_SOS:
-    retcode = JPEG_HEADER_OK;
-    break;
-  case JPEG_REACHED_EOI:
-    if (require_image)		/* Complain if application wanted an image */
-      ERREXIT(cinfo, JERR_NO_IMAGE);
-    /* Reset to start state; it would be safer to require the application to
-     * call jpeg_abort, but we can't change it now for compatibility reasons.
-     * A side effect is to free any temporary memory (there shouldn't be any).
-     */
-    jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */
-    retcode = JPEG_HEADER_TABLES_ONLY;
-    break;
-  case JPEG_SUSPENDED:
-    /* no work */
-    break;
-  }
-
-  return retcode;
-}
-
-
-/*
- * Consume data in advance of what the decompressor requires.
- * This can be called at any time once the decompressor object has
- * been created and a data source has been set up.
- *
- * This routine is essentially a state machine that handles a couple
- * of critical state-transition actions, namely initial setup and
- * transition from header scanning to ready-for-start_decompress.
- * All the actual input is done via the input controller's consume_input
- * method.
- */
-
-GLOBAL(int)
-jpeg_consume_input (j_decompress_ptr cinfo)
-{
-  int retcode = JPEG_SUSPENDED;
-
-  /* NB: every possible DSTATE value should be listed in this switch */
-  switch (cinfo->global_state) {
-  case DSTATE_START:
-    /* Start-of-datastream actions: reset appropriate modules */
-    (*cinfo->inputctl->reset_input_controller) (cinfo);
-    /* Initialize application's data source module */
-    (*cinfo->src->init_source) (cinfo);
-    cinfo->global_state = DSTATE_INHEADER;
-    /*FALLTHROUGH*/
-  case DSTATE_INHEADER:
-    retcode = (*cinfo->inputctl->consume_input) (cinfo);
-    if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */
-      /* Set up default parameters based on header data */
-      default_decompress_parms(cinfo);
-      /* Set global state: ready for start_decompress */
-      cinfo->global_state = DSTATE_READY;
-    }
-    break;
-  case DSTATE_READY:
-    /* Can't advance past first SOS until start_decompress is called */
-    retcode = JPEG_REACHED_SOS;
-    break;
-  case DSTATE_PRELOAD:
-  case DSTATE_PRESCAN:
-  case DSTATE_SCANNING:
-  case DSTATE_RAW_OK:
-  case DSTATE_BUFIMAGE:
-  case DSTATE_BUFPOST:
-  case DSTATE_STOPPING:
-    retcode = (*cinfo->inputctl->consume_input) (cinfo);
-    break;
-  default:
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  }
-  return retcode;
-}
-
-
-/*
- * Have we finished reading the input file?
- */
-
-GLOBAL(boolean)
-jpeg_input_complete (j_decompress_ptr cinfo)
-{
-  /* Check for valid jpeg object */
-  if (cinfo->global_state < DSTATE_START ||
-      cinfo->global_state > DSTATE_STOPPING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  return cinfo->inputctl->eoi_reached;
-}
-
-
-/*
- * Is there more than one scan?
- */
-
-GLOBAL(boolean)
-jpeg_has_multiple_scans (j_decompress_ptr cinfo)
-{
-  /* Only valid after jpeg_read_header completes */
-  if (cinfo->global_state < DSTATE_READY ||
-      cinfo->global_state > DSTATE_STOPPING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  return cinfo->inputctl->has_multiple_scans;
-}
-
-
-/*
- * Finish JPEG decompression.
- *
- * This will normally just verify the file trailer and release temp storage.
- *
- * Returns FALSE if suspended.  The return value need be inspected only if
- * a suspending data source is used.
- */
-
-GLOBAL(boolean)
-jpeg_finish_decompress (j_decompress_ptr cinfo)
-{
-  if ((cinfo->global_state == DSTATE_SCANNING ||
-       cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) {
-    /* Terminate final pass of non-buffered mode */
-    if (cinfo->output_scanline < cinfo->output_height)
-      ERREXIT(cinfo, JERR_TOO_LITTLE_DATA);
-    (*cinfo->master->finish_output_pass) (cinfo);
-    cinfo->global_state = DSTATE_STOPPING;
-  } else if (cinfo->global_state == DSTATE_BUFIMAGE) {
-    /* Finishing after a buffered-image operation */
-    cinfo->global_state = DSTATE_STOPPING;
-  } else if (cinfo->global_state != DSTATE_STOPPING) {
-    /* STOPPING = repeat call after a suspension, anything else is error */
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  }
-  /* Read until EOI */
-  while (! cinfo->inputctl->eoi_reached) {
-    if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED)
-      return FALSE;		/* Suspend, come back later */
-  }
-  /* Do final cleanup */
-  (*cinfo->src->term_source) (cinfo);
-  /* We can use jpeg_abort to release memory and reset global_state */
-  jpeg_abort((j_common_ptr) cinfo);
-  return TRUE;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdapistd.c b/modules/juce_graphics/image_formats/jpglib/jdapistd.c
deleted file mode 100644
index f6c7fff..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdapistd.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * jdapistd.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the decompression half
- * of the JPEG library.  These are the "standard" API routines that are
- * used in the normal full-decompression case.  They are not used by a
- * transcoding-only application.  Note that if an application links in
- * jpeg_start_decompress, it will end up linking in the entire decompressor.
- * We thus must separate this file from jdapimin.c to avoid linking the
- * whole decompression library into a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Forward declarations */
-LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo));
-
-
-/*
- * Decompression initialization.
- * jpeg_read_header must be completed before calling this.
- *
- * If a multipass operating mode was selected, this will do all but the
- * last pass, and thus may take a great deal of time.
- *
- * Returns FALSE if suspended.  The return value need be inspected only if
- * a suspending data source is used.
- */
-
-GLOBAL(boolean)
-jpeg_start_decompress (j_decompress_ptr cinfo)
-{
-  if (cinfo->global_state == DSTATE_READY) {
-    /* First call: initialize master control, select active modules */
-    jinit_master_decompress(cinfo);
-    if (cinfo->buffered_image) {
-      /* No more work here; expecting jpeg_start_output next */
-      cinfo->global_state = DSTATE_BUFIMAGE;
-      return TRUE;
-    }
-    cinfo->global_state = DSTATE_PRELOAD;
-  }
-  if (cinfo->global_state == DSTATE_PRELOAD) {
-    /* If file has multiple scans, absorb them all into the coef buffer */
-    if (cinfo->inputctl->has_multiple_scans) {
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-      for (;;) {
-	int retcode;
-	/* Call progress monitor hook if present */
-	if (cinfo->progress != NULL)
-	  (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-	/* Absorb some more input */
-	retcode = (*cinfo->inputctl->consume_input) (cinfo);
-	if (retcode == JPEG_SUSPENDED)
-	  return FALSE;
-	if (retcode == JPEG_REACHED_EOI)
-	  break;
-	/* Advance progress counter if appropriate */
-	if (cinfo->progress != NULL &&
-	    (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
-	  if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
-	    /* jdmaster underestimated number of scans; ratchet up one scan */
-	    cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
-	  }
-	}
-      }
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-    }
-    cinfo->output_scan_number = cinfo->input_scan_number;
-  } else if (cinfo->global_state != DSTATE_PRESCAN)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Perform any dummy output passes, and set up for the final pass */
-  return output_pass_setup(cinfo);
-}
-
-
-/*
- * Set up for an output pass, and perform any dummy pass(es) needed.
- * Common subroutine for jpeg_start_decompress and jpeg_start_output.
- * Entry: global_state = DSTATE_PRESCAN only if previously suspended.
- * Exit: If done, returns TRUE and sets global_state for proper output mode.
- *       If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN.
- */
-
-LOCAL(boolean)
-output_pass_setup (j_decompress_ptr cinfo)
-{
-  if (cinfo->global_state != DSTATE_PRESCAN) {
-    /* First call: do pass setup */
-    (*cinfo->master->prepare_for_output_pass) (cinfo);
-    cinfo->output_scanline = 0;
-    cinfo->global_state = DSTATE_PRESCAN;
-  }
-  /* Loop over any required dummy passes */
-  while (cinfo->master->is_dummy_pass) {
-#ifdef QUANT_2PASS_SUPPORTED
-    /* Crank through the dummy pass */
-    while (cinfo->output_scanline < cinfo->output_height) {
-      JDIMENSION last_scanline;
-      /* Call progress monitor hook if present */
-      if (cinfo->progress != NULL) {
-	cinfo->progress->pass_counter = (long) cinfo->output_scanline;
-	cinfo->progress->pass_limit = (long) cinfo->output_height;
-	(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-      }
-      /* Process some data */
-      last_scanline = cinfo->output_scanline;
-      (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL,
-				    &cinfo->output_scanline, (JDIMENSION) 0);
-      if (cinfo->output_scanline == last_scanline)
-	return FALSE;		/* No progress made, must suspend */
-    }
-    /* Finish up dummy pass, and set up for another one */
-    (*cinfo->master->finish_output_pass) (cinfo);
-    (*cinfo->master->prepare_for_output_pass) (cinfo);
-    cinfo->output_scanline = 0;
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif /* QUANT_2PASS_SUPPORTED */
-  }
-  /* Ready for application to drive output pass through
-   * jpeg_read_scanlines or jpeg_read_raw_data.
-   */
-  cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING;
-  return TRUE;
-}
-
-
-/*
- * Read some scanlines of data from the JPEG decompressor.
- *
- * The return value will be the number of lines actually read.
- * This may be less than the number requested in several cases,
- * including bottom of image, data source suspension, and operating
- * modes that emit multiple scanlines at a time.
- *
- * Note: we warn about excess calls to jpeg_read_scanlines() since
- * this likely signals an application programmer error.  However,
- * an oversize buffer (max_lines > scanlines remaining) is not an error.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines,
-		     JDIMENSION max_lines)
-{
-  JDIMENSION row_ctr;
-
-  if (cinfo->global_state != DSTATE_SCANNING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->output_scanline >= cinfo->output_height) {
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-    return 0;
-  }
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->output_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->output_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Process some data */
-  row_ctr = 0;
-  (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines);
-  cinfo->output_scanline += row_ctr;
-  return row_ctr;
-}
-
-
-/*
- * Alternate entry point to read raw data.
- * Processes exactly one iMCU row per call, unless suspended.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data,
-		    JDIMENSION max_lines)
-{
-  JDIMENSION lines_per_iMCU_row;
-
-  if (cinfo->global_state != DSTATE_RAW_OK)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->output_scanline >= cinfo->output_height) {
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-    return 0;
-  }
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->output_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->output_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Verify that at least one iMCU row can be returned. */
-  lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size;
-  if (max_lines < lines_per_iMCU_row)
-    ERREXIT(cinfo, JERR_BUFFER_SIZE);
-
-  /* Decompress directly into user's buffer. */
-  if (! (*cinfo->coef->decompress_data) (cinfo, data))
-    return 0;			/* suspension forced, can do nothing more */
-
-  /* OK, we processed one iMCU row. */
-  cinfo->output_scanline += lines_per_iMCU_row;
-  return lines_per_iMCU_row;
-}
-
-
-/* Additional entry points for buffered-image mode. */
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-
-/*
- * Initialize for an output pass in buffered-image mode.
- */
-
-GLOBAL(boolean)
-jpeg_start_output (j_decompress_ptr cinfo, int scan_number)
-{
-  if (cinfo->global_state != DSTATE_BUFIMAGE &&
-      cinfo->global_state != DSTATE_PRESCAN)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Limit scan number to valid range */
-  if (scan_number <= 0)
-    scan_number = 1;
-  if (cinfo->inputctl->eoi_reached &&
-      scan_number > cinfo->input_scan_number)
-    scan_number = cinfo->input_scan_number;
-  cinfo->output_scan_number = scan_number;
-  /* Perform any dummy output passes, and set up for the real pass */
-  return output_pass_setup(cinfo);
-}
-
-
-/*
- * Finish up after an output pass in buffered-image mode.
- *
- * Returns FALSE if suspended.  The return value need be inspected only if
- * a suspending data source is used.
- */
-
-GLOBAL(boolean)
-jpeg_finish_output (j_decompress_ptr cinfo)
-{
-  if ((cinfo->global_state == DSTATE_SCANNING ||
-       cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) {
-    /* Terminate this pass. */
-    /* We do not require the whole pass to have been completed. */
-    (*cinfo->master->finish_output_pass) (cinfo);
-    cinfo->global_state = DSTATE_BUFPOST;
-  } else if (cinfo->global_state != DSTATE_BUFPOST) {
-    /* BUFPOST = repeat call after a suspension, anything else is error */
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  }
-  /* Read markers looking for SOS or EOI */
-  while (cinfo->input_scan_number <= cinfo->output_scan_number &&
-	 ! cinfo->inputctl->eoi_reached) {
-    if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED)
-      return FALSE;		/* Suspend, come back later */
-  }
-  cinfo->global_state = DSTATE_BUFIMAGE;
-  return TRUE;
-}
-
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jdatasrc.c b/modules/juce_graphics/image_formats/jpglib/jdatasrc.c
deleted file mode 100644
index bd4770e..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdatasrc.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * jdatasrc.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains decompression data source routines for the case of
- * reading JPEG data from a file (or any stdio stream).  While these routines
- * are sufficient for most applications, some will want to use a different
- * source manager.
- * IMPORTANT: we assume that fread() will correctly transcribe an array of
- * JOCTETs from 8-bit-wide elements on external storage.  If char is wider
- * than 8 bits on your machine, you may need to do some tweaking.
- */
-
-/* this is not a core library module, so it doesn't define JPEG_INTERNALS */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jerror.h"
-
-
-/* Expanded data source object for stdio input */
-
-typedef struct {
-  struct jpeg_source_mgr pub;	/* public fields */
-
-  FILE * infile;		/* source stream */
-  JOCTET * buffer;		/* start of buffer */
-  boolean start_of_file;	/* have we gotten any data yet? */
-} my_source_mgr;
-
-typedef my_source_mgr * my_src_ptr;
-
-#define INPUT_BUF_SIZE  4096	/* choose an efficiently fread'able size */
-
-
-/*
- * Initialize source --- called by jpeg_read_header
- * before any data is actually read.
- */
-
-METHODDEF(void)
-init_source (j_decompress_ptr cinfo)
-{
-  my_src_ptr src = (my_src_ptr) cinfo->src;
-
-  /* We reset the empty-input-file flag for each image,
-   * but we don't clear the input buffer.
-   * This is correct behavior for reading a series of images from one source.
-   */
-  src->start_of_file = TRUE;
-}
-
-
-/*
- * Fill the input buffer --- called whenever buffer is emptied.
- *
- * In typical applications, this should read fresh data into the buffer
- * (ignoring the current state of next_input_byte & bytes_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been reloaded.  It is not necessary to
- * fill the buffer entirely, only to obtain at least one more byte.
- *
- * There is no such thing as an EOF return.  If the end of the file has been
- * reached, the routine has a choice of ERREXIT() or inserting fake data into
- * the buffer.  In most cases, generating a warning message and inserting a
- * fake EOI marker is the best course of action --- this will allow the
- * decompressor to output however much of the image is there.  However,
- * the resulting error message is misleading if the real problem is an empty
- * input file, so we handle that case specially.
- *
- * In applications that need to be able to suspend compression due to input
- * not being available yet, a FALSE return indicates that no more data can be
- * obtained right now, but more may be forthcoming later.  In this situation,
- * the decompressor will return to its caller (with an indication of the
- * number of scanlines it has read, if any).  The application should resume
- * decompression after it has loaded more data into the input buffer.  Note
- * that there are substantial restrictions on the use of suspension --- see
- * the documentation.
- *
- * When suspending, the decompressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_input_byte & bytes_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point must be rescanned after resumption, so move it to
- * the front of the buffer rather than discarding it.
- */
-
-METHODDEF(boolean)
-fill_input_buffer (j_decompress_ptr cinfo)
-{
-  my_src_ptr src = (my_src_ptr) cinfo->src;
-  size_t nbytes;
-
-  nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE);
-
-  if (nbytes <= 0) {
-    if (src->start_of_file)	/* Treat empty input file as fatal error */
-      ERREXIT(cinfo, JERR_INPUT_EMPTY);
-    WARNMS(cinfo, JWRN_JPEG_EOF);
-    /* Insert a fake EOI marker */
-    src->buffer[0] = (JOCTET) 0xFF;
-    src->buffer[1] = (JOCTET) JPEG_EOI;
-    nbytes = 2;
-  }
-
-  src->pub.next_input_byte = src->buffer;
-  src->pub.bytes_in_buffer = nbytes;
-  src->start_of_file = FALSE;
-
-  return TRUE;
-}
-
-
-/*
- * Skip data --- used to skip over a potentially large amount of
- * uninteresting data (such as an APPn marker).
- *
- * Writers of suspendable-input applications must note that skip_input_data
- * is not granted the right to give a suspension return.  If the skip extends
- * beyond the data currently in the buffer, the buffer can be marked empty so
- * that the next read will cause a fill_input_buffer call that can suspend.
- * Arranging for additional bytes to be discarded before reloading the input
- * buffer is the application writer's problem.
- */
-
-METHODDEF(void)
-skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-{
-  my_src_ptr src = (my_src_ptr) cinfo->src;
-
-  /* Just a dumb implementation for now.  Could use fseek() except
-   * it doesn't work on pipes.  Not clear that being smart is worth
-   * any trouble anyway --- large skips are infrequent.
-   */
-  if (num_bytes > 0) {
-    while (num_bytes > (long) src->pub.bytes_in_buffer) {
-      num_bytes -= (long) src->pub.bytes_in_buffer;
-      (void) fill_input_buffer(cinfo);
-      /* note we assume that fill_input_buffer will never return FALSE,
-       * so suspension need not be handled.
-       */
-    }
-    src->pub.next_input_byte += (size_t) num_bytes;
-    src->pub.bytes_in_buffer -= (size_t) num_bytes;
-  }
-}
-
-
-/*
- * An additional method that can be provided by data source modules is the
- * resync_to_restart method for error recovery in the presence of RST markers.
- * For the moment, this source module just uses the default resync method
- * provided by the JPEG library.  That method assumes that no backtracking
- * is possible.
- */
-
-
-/*
- * Terminate source --- called by jpeg_finish_decompress
- * after all data has been read.  Often a no-op.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-METHODDEF(void)
-term_source (j_decompress_ptr)
-{
-  /* no work necessary here */
-}
-
-
-/*
- * Prepare for input from a stdio stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing decompression.
- */
-
-GLOBAL(void)
-jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile)
-{
-  my_src_ptr src;
-
-  /* The source object and input buffer are made permanent so that a series
-   * of JPEG images can be read from the same file by calling jpeg_stdio_src
-   * only before the first one.  (If we discarded the buffer at the end of
-   * one image, we'd likely lose the start of the next one.)
-   * This makes it unsafe to use this manager and a different source
-   * manager serially with the same JPEG object.  Caveat programmer.
-   */
-  if (cinfo->src == NULL) {	/* first time for this JPEG object? */
-    cinfo->src = (struct jpeg_source_mgr *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  SIZEOF(my_source_mgr));
-    src = (my_src_ptr) cinfo->src;
-    src->buffer = (JOCTET *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  INPUT_BUF_SIZE * SIZEOF(JOCTET));
-  }
-
-  src = (my_src_ptr) cinfo->src;
-  src->pub.init_source = init_source;
-  src->pub.fill_input_buffer = fill_input_buffer;
-  src->pub.skip_input_data = skip_input_data;
-  src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
-  src->pub.term_source = term_source;
-  src->infile = infile;
-  src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
-  src->pub.next_input_byte = NULL; /* until buffer loaded */
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdcoefct.c b/modules/juce_graphics/image_formats/jpglib/jdcoefct.c
deleted file mode 100644
index 4f15e63..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdcoefct.c
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * jdcoefct.c
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the coefficient buffer controller for decompression.
- * This controller is the top level of the JPEG decompressor proper.
- * The coefficient buffer lies between entropy decoding and inverse-DCT steps.
- *
- * In buffered-image mode, this controller is the interface between
- * input-oriented processing and output-oriented processing.
- * Also, the input side (only) is used when reading a file for transcoding.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-/* Block smoothing is only applicable for progressive JPEG, so: */
-#ifndef D_PROGRESSIVE_SUPPORTED
-#undef BLOCK_SMOOTHING_SUPPORTED
-#endif
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_d_coef_controller pub; /* public fields */
-
-  /* These variables keep track of the current location of the input side. */
-  /* cinfo->input_iMCU_row is also used for this. */
-  JDIMENSION MCU_ctr;		/* counts MCUs processed in current row */
-  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
-  int MCU_rows_per_iMCU_row;	/* number of such rows needed */
-
-  /* The output side's location is represented by cinfo->output_iMCU_row. */
-
-  /* In single-pass modes, it's sufficient to buffer just one MCU.
-   * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks,
-   * and let the entropy decoder write into that workspace each time.
-   * (On 80x86, the workspace is FAR even though it's not really very big;
-   * this is to keep the module interfaces unchanged when a large coefficient
-   * buffer is necessary.)
-   * In multi-pass modes, this array points to the current MCU's blocks
-   * within the virtual arrays; it is used only by the input side.
-   */
-  JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU];
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-  /* In multi-pass modes, we need a virtual block array for each component. */
-  jvirt_barray_ptr whole_image[MAX_COMPONENTS];
-#endif
-
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-  /* When doing block smoothing, we latch coefficient Al values here */
-  int * coef_bits_latch;
-#define SAVED_COEFS  6		/* we save coef_bits[0..5] */
-#endif
-} my_coef_controller3;
-
-typedef my_coef_controller3 * my_coef_ptr3;
-
-/* Forward declarations */
-METHODDEF(int) decompress_onepass
-	JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf));
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-METHODDEF(int) decompress_data
-	JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf));
-#endif
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo));
-METHODDEF(int) decompress_smooth_data
-	JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf));
-#endif
-
-
-LOCAL(void)
-start_iMCU_row3 (j_decompress_ptr cinfo)
-/* Reset within-iMCU-row counters for a new row (input side) */
-{
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-
-  /* In an interleaved scan, an MCU row is the same as an iMCU row.
-   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
-   * But at the bottom of the image, process only what's left.
-   */
-  if (cinfo->comps_in_scan > 1) {
-    coef->MCU_rows_per_iMCU_row = 1;
-  } else {
-    if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1))
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
-    else
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
-  }
-
-  coef->MCU_ctr = 0;
-  coef->MCU_vert_offset = 0;
-}
-
-
-/*
- * Initialize for an input processing pass.
- */
-
-METHODDEF(void)
-start_input_pass (j_decompress_ptr cinfo)
-{
-  cinfo->input_iMCU_row = 0;
-  start_iMCU_row3(cinfo);
-}
-
-
-/*
- * Initialize for an output processing pass.
- */
-
-METHODDEF(void)
-start_output_pass (j_decompress_ptr cinfo)
-{
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-
-  /* If multipass, check to see whether to use block smoothing on this pass */
-  if (coef->pub.coef_arrays != NULL) {
-    if (cinfo->do_block_smoothing && smoothing_ok(cinfo))
-      coef->pub.decompress_data = decompress_smooth_data;
-    else
-      coef->pub.decompress_data = decompress_data;
-  }
-#endif
-  cinfo->output_iMCU_row = 0;
-}
-
-
-/*
- * Decompress and return some data in the single-pass case.
- * Always attempts to emit one fully interleaved MCU row ("iMCU" row).
- * Input and output must run in lockstep since we have only a one-MCU buffer.
- * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED.
- *
- * NB: output_buf contains a plane for each component in image,
- * which we index according to the component's SOF position.
- */
-
-METHODDEF(int)
-decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
-{
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  int blkn, ci, xindex, yindex, yoffset, useful_width;
-  JSAMPARRAY output_ptr;
-  JDIMENSION start_col, output_col;
-  jpeg_component_info *compptr;
-  inverse_DCT_method_ptr inverse_DCT;
-
-  /* Loop to process as much as one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col;
-	 MCU_col_num++) {
-      /* Try to fetch an MCU.  Entropy decoder expects buffer to be zeroed. */
-      jzero_far((void FAR *) coef->MCU_buffer[0],
-		(size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK)));
-      if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->MCU_ctr = MCU_col_num;
-	return JPEG_SUSPENDED;
-      }
-      /* Determine where data should go in output_buf and do the IDCT thing.
-       * We skip dummy blocks at the right and bottom edges (but blkn gets
-       * incremented past them!).  Note the inner loop relies on having
-       * allocated the MCU_buffer[] blocks sequentially.
-       */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	/* Don't bother to IDCT an uninteresting component. */
-	if (! compptr->component_needed) {
-	  blkn += compptr->MCU_blocks;
-	  continue;
-	}
-	inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index];
-	useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
-						    : compptr->last_col_width;
-	output_ptr = output_buf[compptr->component_index] +
-	  yoffset * compptr->DCT_scaled_size;
-	start_col = MCU_col_num * compptr->MCU_sample_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  if (cinfo->input_iMCU_row < last_iMCU_row ||
-	      yoffset+yindex < compptr->last_row_height) {
-	    output_col = start_col;
-	    for (xindex = 0; xindex < useful_width; xindex++) {
-	      (*inverse_DCT) (cinfo, compptr,
-			      (JCOEFPTR) coef->MCU_buffer[blkn+xindex],
-			      output_ptr, output_col);
-	      output_col += compptr->DCT_scaled_size;
-	    }
-	  }
-	  blkn += compptr->MCU_width;
-	  output_ptr += compptr->DCT_scaled_size;
-	}
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->MCU_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  cinfo->output_iMCU_row++;
-  if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
-    start_iMCU_row3(cinfo);
-    return JPEG_ROW_COMPLETED;
-  }
-  /* Completed the scan */
-  (*cinfo->inputctl->finish_input_pass) (cinfo);
-  return JPEG_SCAN_COMPLETED;
-}
-
-
-/*
- * Dummy consume-input routine for single-pass operation.
- */
-
-METHODDEF(int)
-dummy_consume_data (j_decompress_ptr)
-{
-  return JPEG_SUSPENDED;	/* Always indicate nothing was done */
-}
-
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-
-/*
- * Consume input data and store it in the full-image coefficient buffer.
- * We read as much as one fully interleaved MCU row ("iMCU" row) per call,
- * ie, v_samp_factor block rows for each component in the scan.
- * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED.
- */
-
-METHODDEF(int)
-consume_data (j_decompress_ptr cinfo)
-{
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  int blkn, ci, xindex, yindex, yoffset;
-  JDIMENSION start_col;
-  JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
-  JBLOCKROW buffer_ptr;
-  jpeg_component_info *compptr;
-
-  /* Align the virtual buffers for the components used in this scan. */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    buffer[ci] = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
-       cinfo->input_iMCU_row * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, TRUE);
-    /* Note: entropy decoder expects buffer to be zeroed,
-     * but this is handled automatically by the memory manager
-     * because we requested a pre-zeroed array.
-     */
-  }
-
-  /* Loop to process one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row;
-	 MCU_col_num++) {
-      /* Construct list of pointers to DCT blocks belonging to this MCU */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	start_col = MCU_col_num * compptr->MCU_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
-	  for (xindex = 0; xindex < compptr->MCU_width; xindex++) {
-	    coef->MCU_buffer[blkn++] = buffer_ptr++;
-	  }
-	}
-      }
-      /* Try to fetch the MCU. */
-      if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->MCU_ctr = MCU_col_num;
-	return JPEG_SUSPENDED;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->MCU_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
-    start_iMCU_row3(cinfo);
-    return JPEG_ROW_COMPLETED;
-  }
-  /* Completed the scan */
-  (*cinfo->inputctl->finish_input_pass) (cinfo);
-  return JPEG_SCAN_COMPLETED;
-}
-
-
-/*
- * Decompress and return some data in the multi-pass case.
- * Always attempts to emit one fully interleaved MCU row ("iMCU" row).
- * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED.
- *
- * NB: output_buf contains a plane for each component in image.
- */
-
-METHODDEF(int)
-decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
-{
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  JDIMENSION block_num;
-  int ci, block_row, block_rows;
-  JBLOCKARRAY buffer;
-  JBLOCKROW buffer_ptr;
-  JSAMPARRAY output_ptr;
-  JDIMENSION output_col;
-  jpeg_component_info *compptr;
-  inverse_DCT_method_ptr inverse_DCT;
-
-  /* Force some input to be done if we are getting ahead of the input. */
-  while (cinfo->input_scan_number < cinfo->output_scan_number ||
-	 (cinfo->input_scan_number == cinfo->output_scan_number &&
-	  cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) {
-    if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED)
-      return JPEG_SUSPENDED;
-  }
-
-  /* OK, output from the virtual arrays. */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Don't bother to IDCT an uninteresting component. */
-    if (! compptr->component_needed)
-      continue;
-    /* Align the virtual buffer for this component. */
-    buffer = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[ci],
-       cinfo->output_iMCU_row * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, FALSE);
-    /* Count non-dummy DCT block rows in this iMCU row. */
-    if (cinfo->output_iMCU_row < last_iMCU_row)
-      block_rows = compptr->v_samp_factor;
-    else {
-      /* NB: can't use last_row_height here; it is input-side-dependent! */
-      block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-      if (block_rows == 0) block_rows = compptr->v_samp_factor;
-    }
-    inverse_DCT = cinfo->idct->inverse_DCT[ci];
-    output_ptr = output_buf[ci];
-    /* Loop over all DCT blocks to be processed. */
-    for (block_row = 0; block_row < block_rows; block_row++) {
-      buffer_ptr = buffer[block_row];
-      output_col = 0;
-      for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) {
-	(*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr,
-			output_ptr, output_col);
-	buffer_ptr++;
-	output_col += compptr->DCT_scaled_size;
-      }
-      output_ptr += compptr->DCT_scaled_size;
-    }
-  }
-
-  if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows)
-    return JPEG_ROW_COMPLETED;
-  return JPEG_SCAN_COMPLETED;
-}
-
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-
-
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-
-/*
- * This code applies interblock smoothing as described by section K.8
- * of the JPEG standard: the first 5 AC coefficients are estimated from
- * the DC values of a DCT block and its 8 neighboring blocks.
- * We apply smoothing only for progressive JPEG decoding, and only if
- * the coefficients it can estimate are not yet known to full precision.
- */
-
-/* Natural-order array positions of the first 5 zigzag-order coefficients */
-#define Q01_POS  1
-#define Q10_POS  8
-#define Q20_POS  16
-#define Q11_POS  9
-#define Q02_POS  2
-
-/*
- * Determine whether block smoothing is applicable and safe.
- * We also latch the current states of the coef_bits[] entries for the
- * AC coefficients; otherwise, if the input side of the decompressor
- * advances into a new scan, we might think the coefficients are known
- * more accurately than they really are.
- */
-
-LOCAL(boolean)
-smoothing_ok (j_decompress_ptr cinfo)
-{
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-  boolean smoothing_useful = FALSE;
-  int ci, coefi;
-  jpeg_component_info *compptr;
-  JQUANT_TBL * qtable;
-  int * coef_bits;
-  int * coef_bits_latch;
-
-  if (! cinfo->progressive_mode || cinfo->coef_bits == NULL)
-    return FALSE;
-
-  /* Allocate latch area if not already done */
-  if (coef->coef_bits_latch == NULL)
-    coef->coef_bits_latch = (int *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  cinfo->num_components *
-				  (SAVED_COEFS * SIZEOF(int)));
-  coef_bits_latch = coef->coef_bits_latch;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* All components' quantization values must already be latched. */
-    if ((qtable = compptr->quant_table) == NULL)
-      return FALSE;
-    /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */
-    if (qtable->quantval[0] == 0 ||
-	qtable->quantval[Q01_POS] == 0 ||
-	qtable->quantval[Q10_POS] == 0 ||
-	qtable->quantval[Q20_POS] == 0 ||
-	qtable->quantval[Q11_POS] == 0 ||
-	qtable->quantval[Q02_POS] == 0)
-      return FALSE;
-    /* DC values must be at least partly known for all components. */
-    coef_bits = cinfo->coef_bits[ci];
-    if (coef_bits[0] < 0)
-      return FALSE;
-    /* Block smoothing is helpful if some AC coefficients remain inaccurate. */
-    for (coefi = 1; coefi <= 5; coefi++) {
-      coef_bits_latch[coefi] = coef_bits[coefi];
-      if (coef_bits[coefi] != 0)
-	smoothing_useful = TRUE;
-    }
-    coef_bits_latch += SAVED_COEFS;
-  }
-
-  return smoothing_useful;
-}
-
-
-/*
- * Variant of decompress_data for use when doing block smoothing.
- */
-
-METHODDEF(int)
-decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
-{
-  my_coef_ptr3 coef = (my_coef_ptr3) cinfo->coef;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  JDIMENSION block_num, last_block_column;
-  int ci, block_row, block_rows, access_rows;
-  JBLOCKARRAY buffer;
-  JBLOCKROW buffer_ptr, prev_block_row, next_block_row;
-  JSAMPARRAY output_ptr;
-  JDIMENSION output_col;
-  jpeg_component_info *compptr;
-  inverse_DCT_method_ptr inverse_DCT;
-  boolean first_row, last_row;
-  JBLOCK workspace;
-  int *coef_bits;
-  JQUANT_TBL *quanttbl;
-  INT32 Q00,Q01,Q02,Q10,Q11,Q20, num;
-  int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9;
-  int Al, pred;
-
-  /* Force some input to be done if we are getting ahead of the input. */
-  while (cinfo->input_scan_number <= cinfo->output_scan_number &&
-	 ! cinfo->inputctl->eoi_reached) {
-    if (cinfo->input_scan_number == cinfo->output_scan_number) {
-      /* If input is working on current scan, we ordinarily want it to
-       * have completed the current row.  But if input scan is DC,
-       * we want it to keep one row ahead so that next block row's DC
-       * values are up to date.
-       */
-      JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0;
-      if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta)
-	break;
-    }
-    if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED)
-      return JPEG_SUSPENDED;
-  }
-
-  /* OK, output from the virtual arrays. */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Don't bother to IDCT an uninteresting component. */
-    if (! compptr->component_needed)
-      continue;
-    /* Count non-dummy DCT block rows in this iMCU row. */
-    if (cinfo->output_iMCU_row < last_iMCU_row) {
-      block_rows = compptr->v_samp_factor;
-      access_rows = block_rows * 2; /* this and next iMCU row */
-      last_row = FALSE;
-    } else {
-      /* NB: can't use last_row_height here; it is input-side-dependent! */
-      block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-      if (block_rows == 0) block_rows = compptr->v_samp_factor;
-      access_rows = block_rows; /* this iMCU row only */
-      last_row = TRUE;
-    }
-    /* Align the virtual buffer for this component. */
-    if (cinfo->output_iMCU_row > 0) {
-      access_rows += compptr->v_samp_factor; /* prior iMCU row too */
-      buffer = (*cinfo->mem->access_virt_barray)
-	((j_common_ptr) cinfo, coef->whole_image[ci],
-	 (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor,
-	 (JDIMENSION) access_rows, FALSE);
-      buffer += compptr->v_samp_factor;	/* point to current iMCU row */
-      first_row = FALSE;
-    } else {
-      buffer = (*cinfo->mem->access_virt_barray)
-	((j_common_ptr) cinfo, coef->whole_image[ci],
-	 (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE);
-      first_row = TRUE;
-    }
-    /* Fetch component-dependent info */
-    coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS);
-    quanttbl = compptr->quant_table;
-    Q00 = quanttbl->quantval[0];
-    Q01 = quanttbl->quantval[Q01_POS];
-    Q10 = quanttbl->quantval[Q10_POS];
-    Q20 = quanttbl->quantval[Q20_POS];
-    Q11 = quanttbl->quantval[Q11_POS];
-    Q02 = quanttbl->quantval[Q02_POS];
-    inverse_DCT = cinfo->idct->inverse_DCT[ci];
-    output_ptr = output_buf[ci];
-    /* Loop over all DCT blocks to be processed. */
-    for (block_row = 0; block_row < block_rows; block_row++) {
-      buffer_ptr = buffer[block_row];
-      if (first_row && block_row == 0)
-	prev_block_row = buffer_ptr;
-      else
-	prev_block_row = buffer[block_row-1];
-      if (last_row && block_row == block_rows-1)
-	next_block_row = buffer_ptr;
-      else
-	next_block_row = buffer[block_row+1];
-      /* We fetch the surrounding DC values using a sliding-register approach.
-       * Initialize all nine here so as to do the right thing on narrow pics.
-       */
-      DC1 = DC2 = DC3 = (int) prev_block_row[0][0];
-      DC4 = DC5 = DC6 = (int) buffer_ptr[0][0];
-      DC7 = DC8 = DC9 = (int) next_block_row[0][0];
-      output_col = 0;
-      last_block_column = compptr->width_in_blocks - 1;
-      for (block_num = 0; block_num <= last_block_column; block_num++) {
-	/* Fetch current DCT block into workspace so we can modify it. */
-	jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1);
-	/* Update DC values */
-	if (block_num < last_block_column) {
-	  DC3 = (int) prev_block_row[1][0];
-	  DC6 = (int) buffer_ptr[1][0];
-	  DC9 = (int) next_block_row[1][0];
-	}
-	/* Compute coefficient estimates per K.8.
-	 * An estimate is applied only if coefficient is still zero,
-	 * and is not known to be fully accurate.
-	 */
-	/* AC01 */
-	if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) {
-	  num = 36 * Q00 * (DC4 - DC6);
-	  if (num >= 0) {
-	    pred = (int) (((Q01<<7) + num) / (Q01<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q01<<7) - num) / (Q01<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[1] = (JCOEF) pred;
-	}
-	/* AC10 */
-	if ((Al=coef_bits[2]) != 0 && workspace[8] == 0) {
-	  num = 36 * Q00 * (DC2 - DC8);
-	  if (num >= 0) {
-	    pred = (int) (((Q10<<7) + num) / (Q10<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q10<<7) - num) / (Q10<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[8] = (JCOEF) pred;
-	}
-	/* AC20 */
-	if ((Al=coef_bits[3]) != 0 && workspace[16] == 0) {
-	  num = 9 * Q00 * (DC2 + DC8 - 2*DC5);
-	  if (num >= 0) {
-	    pred = (int) (((Q20<<7) + num) / (Q20<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q20<<7) - num) / (Q20<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[16] = (JCOEF) pred;
-	}
-	/* AC11 */
-	if ((Al=coef_bits[4]) != 0 && workspace[9] == 0) {
-	  num = 5 * Q00 * (DC1 - DC3 - DC7 + DC9);
-	  if (num >= 0) {
-	    pred = (int) (((Q11<<7) + num) / (Q11<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q11<<7) - num) / (Q11<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[9] = (JCOEF) pred;
-	}
-	/* AC02 */
-	if ((Al=coef_bits[5]) != 0 && workspace[2] == 0) {
-	  num = 9 * Q00 * (DC4 + DC6 - 2*DC5);
-	  if (num >= 0) {
-	    pred = (int) (((Q02<<7) + num) / (Q02<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q02<<7) - num) / (Q02<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[2] = (JCOEF) pred;
-	}
-	/* OK, do the IDCT */
-	(*inverse_DCT) (cinfo, compptr, (JCOEFPTR) workspace,
-			output_ptr, output_col);
-	/* Advance for next column */
-	DC1 = DC2; DC2 = DC3;
-	DC4 = DC5; DC5 = DC6;
-	DC7 = DC8; DC8 = DC9;
-	buffer_ptr++, prev_block_row++, next_block_row++;
-	output_col += compptr->DCT_scaled_size;
-      }
-      output_ptr += compptr->DCT_scaled_size;
-    }
-  }
-
-  if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows)
-    return JPEG_ROW_COMPLETED;
-  return JPEG_SCAN_COMPLETED;
-}
-
-#endif /* BLOCK_SMOOTHING_SUPPORTED */
-
-
-/*
- * Initialize coefficient buffer controller.
- */
-
-GLOBAL(void)
-jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
-{
-  my_coef_ptr3 coef;
-
-  coef = (my_coef_ptr3)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_coef_controller3));
-  cinfo->coef = (struct jpeg_d_coef_controller *) coef;
-  coef->pub.start_input_pass = start_input_pass;
-  coef->pub.start_output_pass = start_output_pass;
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-  coef->coef_bits_latch = NULL;
-#endif
-
-  /* Create the coefficient buffer. */
-  if (need_full_buffer) {
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-    /* Allocate a full-image virtual array for each component, */
-    /* padded to a multiple of samp_factor DCT blocks in each direction. */
-    /* Note we ask for a pre-zeroed array. */
-    int ci, access_rows;
-    jpeg_component_info *compptr;
-
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      access_rows = compptr->v_samp_factor;
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-      /* If block smoothing could be used, need a bigger window */
-      if (cinfo->progressive_mode)
-	access_rows *= 3;
-#endif
-      coef->whole_image[ci] = (*cinfo->mem->request_virt_barray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE,
-	 (JDIMENSION) jround_up((long) compptr->width_in_blocks,
-				(long) compptr->h_samp_factor),
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor),
-	 (JDIMENSION) access_rows);
-    }
-    coef->pub.consume_data = consume_data;
-    coef->pub.decompress_data = decompress_data;
-    coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    /* We only need a single-MCU buffer. */
-    JBLOCKROW buffer;
-    int i;
-
-    buffer = (JBLOCKROW)
-      (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-    for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) {
-      coef->MCU_buffer[i] = buffer + i;
-    }
-    coef->pub.consume_data = dummy_consume_data;
-    coef->pub.decompress_data = decompress_onepass;
-    coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdcolor.c b/modules/juce_graphics/image_formats/jpglib/jdcolor.c
deleted file mode 100644
index a4ca256..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdcolor.c
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * jdcolor.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains output colorspace conversion routines.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_color_deconverter pub; /* public fields */
-
-  /* Private state for YCC->RGB conversion */
-  int * Cr_r_tab;		/* => table for Cr to R conversion */
-  int * Cb_b_tab;		/* => table for Cb to B conversion */
-  INT32 * Cr_g_tab;		/* => table for Cr to G conversion */
-  INT32 * Cb_g_tab;		/* => table for Cb to G conversion */
-} my_color_deconverter2;
-
-typedef my_color_deconverter2 * my_cconvert_ptr2;
-
-
-/**************** YCbCr -> RGB conversion: most common case **************/
-
-/*
- * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
- * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
- * The conversion equations to be implemented are therefore
- *	R = Y                + 1.40200 * Cr
- *	G = Y - 0.34414 * Cb - 0.71414 * Cr
- *	B = Y + 1.77200 * Cb
- * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
- * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
- *
- * To avoid floating-point arithmetic, we represent the fractional constants
- * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
- * the products by 2^16, with appropriate rounding, to get the correct answer.
- * Notice that Y, being an integral input, does not contribute any fraction
- * so it need not participate in the rounding.
- *
- * For even more speed, we avoid doing any multiplications in the inner loop
- * by precalculating the constants times Cb and Cr for all possible values.
- * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
- * for 12-bit samples it is still acceptable.  It's not very reasonable for
- * 16-bit samples, but if you want lossless storage you shouldn't be changing
- * colorspace anyway.
- * The Cr=>R and Cb=>B values can be rounded to integers in advance; the
- * values for the G calculation are left scaled up, since we must add them
- * together before rounding.
- */
-
-#define SCALEBITS	16	/* speediest right-shift on some machines */
-#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
-#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
-
-
-/*
- * Initialize tables for YCC->RGB colorspace conversion.
- */
-
-LOCAL(void)
-build_ycc_rgb_table (j_decompress_ptr cinfo)
-{
-  my_cconvert_ptr2 cconvert = (my_cconvert_ptr2) cinfo->cconvert;
-  int i;
-  INT32 x;
-  SHIFT_TEMPS
-
-  cconvert->Cr_r_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  cconvert->Cb_b_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  cconvert->Cr_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-  cconvert->Cb_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-
-  for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
-    /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
-    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
-    /* Cr=>R value is nearest int to 1.40200 * x */
-    cconvert->Cr_r_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS);
-    /* Cb=>B value is nearest int to 1.77200 * x */
-    cconvert->Cb_b_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS);
-    /* Cr=>G value is scaled-up -0.71414 * x */
-    cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x;
-    /* Cb=>G value is scaled-up -0.34414 * x */
-    /* We also add in ONE_HALF so that need not do it in inner loop */
-    cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF;
-  }
-}
-
-
-/*
- * Convert some rows of samples to the output colorspace.
- *
- * Note that we change from noninterleaved, one-plane-per-component format
- * to interleaved-pixel format.  The output buffer is therefore three times
- * as wide as the input buffer.
- * A starting row offset is provided only for the input buffer.  The caller
- * can easily adjust the passed output_buf value to accommodate any row
- * offset required on that side.
- */
-
-METHODDEF(void)
-ycc_rgb_convert (j_decompress_ptr cinfo,
-		 JSAMPIMAGE input_buf, JDIMENSION input_row,
-		 JSAMPARRAY output_buf, int num_rows)
-{
-  my_cconvert_ptr2 cconvert = (my_cconvert_ptr2) cinfo->cconvert;
-  register int y, cb, cr;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  register int * Crrtab = cconvert->Cr_r_tab;
-  register int * Cbbtab = cconvert->Cb_b_tab;
-  register INT32 * Crgtab = cconvert->Cr_g_tab;
-  register INT32 * Cbgtab = cconvert->Cb_g_tab;
-  SHIFT_TEMPS
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      y  = GETJSAMPLE(inptr0[col]);
-      cb = GETJSAMPLE(inptr1[col]);
-      cr = GETJSAMPLE(inptr2[col]);
-      /* Range-limiting is essential due to noise introduced by DCT losses. */
-      outptr[RGB_RED] =   range_limit[y + Crrtab[cr]];
-      outptr[RGB_GREEN] = range_limit[y +
-			      ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
-						 SCALEBITS))];
-      outptr[RGB_BLUE] =  range_limit[y + Cbbtab[cb]];
-      outptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/**************** Cases other than YCbCr -> RGB **************/
-
-
-/*
- * Color conversion for no colorspace change: just copy the data,
- * converting from separate-planes to interleaved representation.
- */
-
-METHODDEF(void)
-null_convert2 (j_decompress_ptr cinfo,
-	      JSAMPIMAGE input_buf, JDIMENSION input_row,
-	      JSAMPARRAY output_buf, int num_rows)
-{
-  register JSAMPROW inptr, outptr;
-  register JDIMENSION count;
-  register int num_components = cinfo->num_components;
-  JDIMENSION num_cols = cinfo->output_width;
-  int ci;
-
-  while (--num_rows >= 0) {
-    for (ci = 0; ci < num_components; ci++) {
-      inptr = input_buf[ci][input_row];
-      outptr = output_buf[0] + ci;
-      for (count = num_cols; count > 0; count--) {
-	*outptr = *inptr++;	/* needn't bother with GETJSAMPLE() here */
-	outptr += num_components;
-      }
-    }
-    input_row++;
-    output_buf++;
-  }
-}
-
-
-/*
- * Color conversion for grayscale: just copy the data.
- * This also works for YCbCr -> grayscale conversion, in which
- * we just copy the Y (luminance) component and ignore chrominance.
- */
-
-METHODDEF(void)
-grayscale_convert2 (j_decompress_ptr cinfo,
-		   JSAMPIMAGE input_buf, JDIMENSION input_row,
-		   JSAMPARRAY output_buf, int num_rows)
-{
-  jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0,
-		    num_rows, cinfo->output_width);
-}
-
-
-/*
- * Convert grayscale to RGB: just duplicate the graylevel three times.
- * This is provided to support applications that don't want to cope
- * with grayscale as a separate case.
- */
-
-METHODDEF(void)
-gray_rgb_convert (j_decompress_ptr cinfo,
-		  JSAMPIMAGE input_buf, JDIMENSION input_row,
-		  JSAMPARRAY output_buf, int num_rows)
-{
-  register JSAMPROW inptr, outptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    inptr = input_buf[0][input_row++];
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      /* We can dispense with GETJSAMPLE() here */
-      outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col];
-      outptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * Adobe-style YCCK->CMYK conversion.
- * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
- * conversion as above, while passing K (black) unchanged.
- * We assume build_ycc_rgb_table has been called.
- */
-
-METHODDEF(void)
-ycck_cmyk_convert (j_decompress_ptr cinfo,
-		   JSAMPIMAGE input_buf, JDIMENSION input_row,
-		   JSAMPARRAY output_buf, int num_rows)
-{
-  my_cconvert_ptr2 cconvert = (my_cconvert_ptr2) cinfo->cconvert;
-  register int y, cb, cr;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2, inptr3;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  register int * Crrtab = cconvert->Cr_r_tab;
-  register int * Cbbtab = cconvert->Cb_b_tab;
-  register INT32 * Crgtab = cconvert->Cr_g_tab;
-  register INT32 * Cbgtab = cconvert->Cb_g_tab;
-  SHIFT_TEMPS
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    inptr3 = input_buf[3][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      y  = GETJSAMPLE(inptr0[col]);
-      cb = GETJSAMPLE(inptr1[col]);
-      cr = GETJSAMPLE(inptr2[col]);
-      /* Range-limiting is essential due to noise introduced by DCT losses. */
-      outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])];	/* red */
-      outptr[1] = range_limit[MAXJSAMPLE - (y +			/* green */
-			      ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
-						 SCALEBITS)))];
-      outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])];	/* blue */
-      /* K passes through unchanged */
-      outptr[3] = inptr3[col];	/* don't need GETJSAMPLE here */
-      outptr += 4;
-    }
-  }
-}
-
-
-/*
- * Empty method for start_pass.
- */
-
-METHODDEF(void)
-start_pass_dcolor (j_decompress_ptr)
-{
-  /* no work needed */
-}
-
-
-/*
- * Module initialization routine for output colorspace conversion.
- */
-
-GLOBAL(void)
-jinit_color_deconverter (j_decompress_ptr cinfo)
-{
-  my_cconvert_ptr2 cconvert;
-  int ci;
-
-  cconvert = (my_cconvert_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_color_deconverter2));
-  cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert;
-  cconvert->pub.start_pass = start_pass_dcolor;
-
-  /* Make sure num_components agrees with jpeg_color_space */
-  switch (cinfo->jpeg_color_space) {
-  case JCS_GRAYSCALE:
-    if (cinfo->num_components != 1)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-
-  case JCS_RGB:
-  case JCS_YCbCr:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-
-  case JCS_CMYK:
-  case JCS_YCCK:
-    if (cinfo->num_components != 4)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-
-  default:			/* JCS_UNKNOWN can be anything */
-    if (cinfo->num_components < 1)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-  }
-
-  /* Set out_color_components and conversion method based on requested space.
-   * Also clear the component_needed flags for any unused components,
-   * so that earlier pipeline stages can avoid useless computation.
-   */
-
-  switch (cinfo->out_color_space) {
-  case JCS_GRAYSCALE:
-    cinfo->out_color_components = 1;
-    if (cinfo->jpeg_color_space == JCS_GRAYSCALE ||
-	cinfo->jpeg_color_space == JCS_YCbCr) {
-      cconvert->pub.color_convert = grayscale_convert2;
-      /* For color->grayscale conversion, only the Y (0) component is needed */
-      for (ci = 1; ci < cinfo->num_components; ci++)
-	cinfo->comp_info[ci].component_needed = FALSE;
-    } else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_RGB:
-    cinfo->out_color_components = RGB_PIXELSIZE;
-    if (cinfo->jpeg_color_space == JCS_YCbCr) {
-      cconvert->pub.color_convert = ycc_rgb_convert;
-      build_ycc_rgb_table(cinfo);
-    } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) {
-      cconvert->pub.color_convert = gray_rgb_convert;
-    } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) {
-      cconvert->pub.color_convert = null_convert2;
-    } else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_CMYK:
-    cinfo->out_color_components = 4;
-    if (cinfo->jpeg_color_space == JCS_YCCK) {
-      cconvert->pub.color_convert = ycck_cmyk_convert;
-      build_ycc_rgb_table(cinfo);
-    } else if (cinfo->jpeg_color_space == JCS_CMYK) {
-      cconvert->pub.color_convert = null_convert2;
-    } else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  default:
-    /* Permit null conversion to same output space */
-    if (cinfo->out_color_space == cinfo->jpeg_color_space) {
-      cinfo->out_color_components = cinfo->num_components;
-      cconvert->pub.color_convert = null_convert2;
-    } else			/* unsupported non-null conversion */
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-  }
-
-  if (cinfo->quantize_colors)
-    cinfo->output_components = 1; /* single colormapped output component */
-  else
-    cinfo->output_components = cinfo->out_color_components;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdct.h b/modules/juce_graphics/image_formats/jpglib/jdct.h
deleted file mode 100644
index d8df1b4..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdct.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * jdct.h
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This include file contains common declarations for the forward and
- * inverse DCT modules.  These declarations are private to the DCT managers
- * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.
- * The individual DCT algorithms are kept in separate files to ease
- * machine-dependent tuning (e.g., assembly coding).
- */
-
-
-/*
- * A forward DCT routine is given a pointer to a work area of type DCTELEM[];
- * the DCT is to be performed in-place in that buffer.  Type DCTELEM is int
- * for 8-bit samples, INT32 for 12-bit samples.  (NOTE: Floating-point DCT
- * implementations use an array of type FAST_FLOAT, instead.)
- * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).
- * The DCT outputs are returned scaled up by a factor of 8; they therefore
- * have a range of +-8K for 8-bit data, +-128K for 12-bit data.  This
- * convention improves accuracy in integer implementations and saves some
- * work in floating-point ones.
- * Quantization of the output coefficients is done by jcdctmgr.c.
- */
-
-#ifndef __jdct_h__
-#define __jdct_h__
-
-#if BITS_IN_JSAMPLE == 8
-typedef int DCTELEM;		/* 16 or 32 bits is fine */
-#else
-typedef INT32 DCTELEM;		/* must have 32 bits */
-#endif
-
-typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data));
-typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data));
-
-
-/*
- * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer
- * to an output sample array.  The routine must dequantize the input data as
- * well as perform the IDCT; for dequantization, it uses the multiplier table
- * pointed to by compptr->dct_table.  The output data is to be placed into the
- * sample array starting at a specified column.  (Any row offset needed will
- * be applied to the array pointer before it is passed to the IDCT code.)
- * Note that the number of samples emitted by the IDCT routine is
- * DCT_scaled_size * DCT_scaled_size.
- */
-
-/* typedef inverse_DCT_method_ptr is declared in jpegint.h */
-
-/*
- * Each IDCT routine has its own ideas about the best dct_table element type.
- */
-
-typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */
-#if BITS_IN_JSAMPLE == 8
-typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */
-#define IFAST_SCALE_BITS  2	/* fractional bits in scale factors */
-#else
-typedef INT32 IFAST_MULT_TYPE;	/* need 32 bits for scaled quantizers */
-#define IFAST_SCALE_BITS  13	/* fractional bits in scale factors */
-#endif
-typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
-
-
-/*
- * Each IDCT routine is responsible for range-limiting its results and
- * converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could
- * be quite far out of range if the input data is corrupt, so a bulletproof
- * range-limiting step is required.  We use a mask-and-table-lookup method
- * to do the combined operations quickly.  See the comments with
- * prepare_range_limit_table (in jdmaster.c) for more info.
- */
-
-#define IDCT_range_limit(cinfo)  ((cinfo)->sample_range_limit + CENTERJSAMPLE)
-
-#define RANGE_MASK  (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_fdct_islow		jFDislow
-#define jpeg_fdct_ifast		jFDifast
-#define jpeg_fdct_float		jFDfloat
-#define jpeg_idct_islow		jRDislow
-#define jpeg_idct_ifast		jRDifast
-#define jpeg_idct_float		jRDfloat
-#define jpeg_idct_4x4		jRD4x4
-#define jpeg_idct_2x2		jRD2x2
-#define jpeg_idct_1x1		jRD1x1
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-/* Extern declarations for the forward and inverse DCT routines. */
-
-EXTERN(void) jpeg_fdct_islow JPP((DCTELEM * data));
-EXTERN(void) jpeg_fdct_ifast JPP((DCTELEM * data));
-EXTERN(void) jpeg_fdct_float JPP((FAST_FLOAT * data));
-
-EXTERN(void) jpeg_idct_islow
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_ifast
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_float
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_4x4
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_2x2
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_1x1
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-
-
-/*
- * Macros for handling fixed-point arithmetic; these are used by many
- * but not all of the DCT/IDCT modules.
- *
- * All values are expected to be of type INT32.
- * Fractional constants are scaled left by CONST_BITS bits.
- * CONST_BITS is defined within each module using these macros,
- * and may differ from one module to the next.
- */
-
-#define ONE	((INT32) 1)
-#define CONST_SCALE (ONE << CONST_BITS)
-
-/* Convert a positive real constant to an integer scaled by CONST_SCALE.
- * Caution: some C compilers fail to reduce "FIX(constant)" at compile time,
- * thus causing a lot of useless floating-point operations at run time.
- */
-
-#define FIX(x)	((INT32) ((x) * CONST_SCALE + 0.5))
-
-/* Descale and correctly round an INT32 value that's scaled by N bits.
- * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
- * the fudge factor is correct for either sign of X.
- */
-
-#define DESCALE(x,n)  RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * This macro is used only when the two inputs will actually be no more than
- * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a
- * full 32x32 multiply.  This provides a useful speedup on many machines.
- * Unfortunately there is no way to specify a 16x16->32 multiply portably
- * in C, but some C compilers will do the right thing if you provide the
- * correct combination of casts.
- */
-
-#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT16) (const)))
-#endif
-#ifdef SHORTxLCONST_32		/* known to work with Microsoft C 6.0 */
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT32) (const)))
-#endif
-
-#ifndef MULTIPLY16C16		/* default definition */
-#define MULTIPLY16C16(var,const)  ((var) * (const))
-#endif
-
-/* Same except both inputs are variables. */
-
-#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
-#define MULTIPLY16V16(var1,var2)  (((INT16) (var1)) * ((INT16) (var2)))
-#endif
-
-#ifndef MULTIPLY16V16		/* default definition */
-#define MULTIPLY16V16(var1,var2)  ((var1) * (var2))
-#endif
-
-
-#endif
diff --git a/modules/juce_graphics/image_formats/jpglib/jddctmgr.c b/modules/juce_graphics/image_formats/jpglib/jddctmgr.c
deleted file mode 100644
index 0e44eb1..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jddctmgr.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * jddctmgr.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the inverse-DCT management logic.
- * This code selects a particular IDCT implementation to be used,
- * and it performs related housekeeping chores.  No code in this file
- * is executed per IDCT step, only during output pass setup.
- *
- * Note that the IDCT routines are responsible for performing coefficient
- * dequantization as well as the IDCT proper.  This module sets up the
- * dequantization multiplier table needed by the IDCT routine.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-
-/*
- * The decompressor input side (jdinput.c) saves away the appropriate
- * quantization table for each component at the start of the first scan
- * involving that component.  (This is necessary in order to correctly
- * decode files that reuse Q-table slots.)
- * When we are ready to make an output pass, the saved Q-table is converted
- * to a multiplier table that will actually be used by the IDCT routine.
- * The multiplier table contents are IDCT-method-dependent.  To support
- * application changes in IDCT method between scans, we can remake the
- * multiplier tables if necessary.
- * In buffered-image mode, the first output pass may occur before any data
- * has been seen for some components, and thus before their Q-tables have
- * been saved away.  To handle this case, multiplier tables are preset
- * to zeroes; the result of the IDCT will be a neutral gray level.
- */
-
-
-/* Private subobject for this module */
-
-typedef struct {
-  struct jpeg_inverse_dct pub;	/* public fields */
-
-  /* This array contains the IDCT method code that each multiplier table
-   * is currently set up for, or -1 if it's not yet set up.
-   * The actual multiplier tables are pointed to by dct_table in the
-   * per-component comp_info structures.
-   */
-  int cur_method[MAX_COMPONENTS];
-} my_idct_controller;
-
-typedef my_idct_controller * my_idct_ptr;
-
-
-/* Allocated multiplier tables: big enough for any supported variant */
-
-typedef union {
-  ISLOW_MULT_TYPE islow_array[DCTSIZE2];
-#ifdef DCT_IFAST_SUPPORTED
-  IFAST_MULT_TYPE ifast_array[DCTSIZE2];
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-  FLOAT_MULT_TYPE float_array[DCTSIZE2];
-#endif
-} multiplier_table;
-
-
-/* The current scaled-IDCT routines require ISLOW-style multiplier tables,
- * so be sure to compile that code if either ISLOW or SCALING is requested.
- */
-#ifdef DCT_ISLOW_SUPPORTED
-#define PROVIDE_ISLOW_TABLES
-#else
-#ifdef IDCT_SCALING_SUPPORTED
-#define PROVIDE_ISLOW_TABLES
-#endif
-#endif
-
-
-/*
- * Prepare for an output pass.
- * Here we select the proper IDCT routine for each component and build
- * a matching multiplier table.
- */
-
-METHODDEF(void)
-start_pass (j_decompress_ptr cinfo)
-{
-  my_idct_ptr idct = (my_idct_ptr) cinfo->idct;
-  int ci, i;
-  jpeg_component_info *compptr;
-  int method = 0;
-  inverse_DCT_method_ptr method_ptr = NULL;
-  JQUANT_TBL * qtbl;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Select the proper IDCT routine for this component's scaling */
-    switch (compptr->DCT_scaled_size) {
-#ifdef IDCT_SCALING_SUPPORTED
-    case 1:
-      method_ptr = jpeg_idct_1x1;
-      method = JDCT_ISLOW;	/* jidctred uses islow-style table */
-      break;
-    case 2:
-      method_ptr = jpeg_idct_2x2;
-      method = JDCT_ISLOW;	/* jidctred uses islow-style table */
-      break;
-    case 4:
-      method_ptr = jpeg_idct_4x4;
-      method = JDCT_ISLOW;	/* jidctred uses islow-style table */
-      break;
-#endif
-    case DCTSIZE:
-      switch (cinfo->dct_method) {
-#ifdef DCT_ISLOW_SUPPORTED
-      case JDCT_ISLOW:
-	method_ptr = jpeg_idct_islow;
-	method = JDCT_ISLOW;
-	break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-      case JDCT_IFAST:
-	method_ptr = jpeg_idct_ifast;
-	method = JDCT_IFAST;
-	break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-      case JDCT_FLOAT:
-	method_ptr = jpeg_idct_float;
-	method = JDCT_FLOAT;
-	break;
-#endif
-      default:
-	ERREXIT(cinfo, JERR_NOT_COMPILED);
-	break;
-      }
-      break;
-    default:
-      ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->DCT_scaled_size);
-      break;
-    }
-    idct->pub.inverse_DCT[ci] = method_ptr;
-    /* Create multiplier table from quant table.
-     * However, we can skip this if the component is uninteresting
-     * or if we already built the table.  Also, if no quant table
-     * has yet been saved for the component, we leave the
-     * multiplier table all-zero; we'll be reading zeroes from the
-     * coefficient controller's buffer anyway.
-     */
-    if (! compptr->component_needed || idct->cur_method[ci] == method)
-      continue;
-    qtbl = compptr->quant_table;
-    if (qtbl == NULL)		/* happens if no data yet for component */
-      continue;
-    idct->cur_method[ci] = method;
-    switch (method) {
-#ifdef PROVIDE_ISLOW_TABLES
-    case JDCT_ISLOW:
-      {
-	/* For LL&M IDCT method, multipliers are equal to raw quantization
-	 * coefficients, but are stored as ints to ensure access efficiency.
-	 */
-	ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table;
-	for (i = 0; i < DCTSIZE2; i++) {
-	  ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i];
-	}
-      }
-      break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-    case JDCT_IFAST:
-      {
-	/* For AA&N IDCT method, multipliers are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * For integer operation, the multiplier table is to be scaled by
-	 * IFAST_SCALE_BITS.
-	 */
-	IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table;
-#define CONST_BITS 14
-	static const INT16 aanscales[DCTSIZE2] = {
-	  /* precomputed values scaled up by 14 bits */
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
-	  21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
-	  19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
-	   8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
-	   4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
-	};
-	SHIFT_TEMPS
-
-	for (i = 0; i < DCTSIZE2; i++) {
-	  ifmtbl[i] = (IFAST_MULT_TYPE)
-	    DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
-				  (INT32) aanscales[i]),
-		    CONST_BITS-IFAST_SCALE_BITS);
-	}
-      }
-      break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-    case JDCT_FLOAT:
-      {
-	/* For float AA&N IDCT method, multipliers are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 */
-	FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table;
-	int row, col;
-	static const double aanscalefactor[DCTSIZE] = {
-	  1.0, 1.387039845, 1.306562965, 1.175875602,
-	  1.0, 0.785694958, 0.541196100, 0.275899379
-	};
-
-	i = 0;
-	for (row = 0; row < DCTSIZE; row++) {
-	  for (col = 0; col < DCTSIZE; col++) {
-	    fmtbl[i] = (FLOAT_MULT_TYPE)
-	      ((double) qtbl->quantval[i] *
-	       aanscalefactor[row] * aanscalefactor[col]);
-	    i++;
-	  }
-	}
-      }
-      break;
-#endif
-    default:
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-      break;
-    }
-  }
-}
-
-
-/*
- * Initialize IDCT manager.
- */
-
-GLOBAL(void)
-jinit_inverse_dct (j_decompress_ptr cinfo)
-{
-  my_idct_ptr idct;
-  int ci;
-  jpeg_component_info *compptr;
-
-  idct = (my_idct_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_idct_controller));
-  cinfo->idct = (struct jpeg_inverse_dct *) idct;
-  idct->pub.start_pass = start_pass;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Allocate and pre-zero a multiplier table for each component */
-    compptr->dct_table =
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(multiplier_table));
-    MEMZERO(compptr->dct_table, SIZEOF(multiplier_table));
-    /* Mark multiplier table not yet set up for any method */
-    idct->cur_method[ci] = -1;
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdhuff.c b/modules/juce_graphics/image_formats/jpglib/jdhuff.c
deleted file mode 100644
index 1468a83..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdhuff.c
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * jdhuff.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains Huffman entropy decoding routines.
- *
- * Much of the complexity here has to do with supporting input suspension.
- * If the data source module demands suspension, we want to be able to back
- * up to the start of the current MCU.  To do this, we copy state variables
- * into local working storage, and update them back to the permanent
- * storage only upon successful completion of an MCU.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdhuff.h"		/* Declarations shared with jdphuff.c */
-
-
-/*
- * Expanded entropy decoder object for Huffman decoding.
- *
- * The savable_state subrecord contains fields that change within an MCU,
- * but must not be updated permanently until we complete the MCU.
- */
-
-typedef struct {
-  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-} savable_state2;
-
-/* This macro is to work around compilers with missing or broken
- * structure assignment.  You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest,src)  ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest,src)  \
-	((dest).last_dc_val[0] = (src).last_dc_val[0], \
-	 (dest).last_dc_val[1] = (src).last_dc_val[1], \
-	 (dest).last_dc_val[2] = (src).last_dc_val[2], \
-	 (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
-typedef struct {
-  struct jpeg_entropy_decoder pub; /* public fields */
-
-  /* These fields are loaded into local variables at start of each MCU.
-   * In case of suspension, we exit WITHOUT updating them.
-   */
-  bitread_perm_state bitstate;	/* Bit buffer at start of MCU */
-  savable_state2 saved;		/* Other state at start of MCU */
-
-  /* These fields are NOT loaded into local working state. */
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-
-  /* Pointers to derived tables (these workspaces have image lifespan) */
-  d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS];
-  d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS];
-
-  /* Precalculated info set up by start_pass for use in decode_mcu: */
-
-  /* Pointers to derived tables to be used for each block within an MCU */
-  d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU];
-  d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU];
-  /* Whether we care about the DC and AC coefficient values for each block */
-  boolean dc_needed[D_MAX_BLOCKS_IN_MCU];
-  boolean ac_needed[D_MAX_BLOCKS_IN_MCU];
-} huff_entropy_decoder2;
-
-typedef huff_entropy_decoder2 * huff_entropy_ptr2;
-
-
-/*
- * Initialize for a Huffman-compressed scan.
- */
-
-METHODDEF(void)
-start_pass_huff_decoder (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr2 entropy = (huff_entropy_ptr2) cinfo->entropy;
-  int ci, blkn, dctbl, actbl;
-  jpeg_component_info * compptr;
-
-  /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
-   * This ought to be an error condition, but we make it a warning because
-   * there are some baseline files out there with all zeroes in these bytes.
-   */
-  if (cinfo->Ss != 0 || cinfo->Se != DCTSIZE2-1 ||
-      cinfo->Ah != 0 || cinfo->Al != 0)
-    WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    dctbl = compptr->dc_tbl_no;
-    actbl = compptr->ac_tbl_no;
-    /* Compute derived values for Huffman tables */
-    /* We may do this more than once for a table, but it's not expensive */
-    jpeg_make_d_derived_tbl(cinfo, TRUE, dctbl,
-			    & entropy->dc_derived_tbls[dctbl]);
-    jpeg_make_d_derived_tbl(cinfo, FALSE, actbl,
-			    & entropy->ac_derived_tbls[actbl]);
-    /* Initialize DC predictions to 0 */
-    entropy->saved.last_dc_val[ci] = 0;
-  }
-
-  /* Precalculate decoding info for each block in an MCU of this scan */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-    /* Precalculate which table to use for each block */
-    entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no];
-    entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no];
-    /* Decide whether we really care about the coefficient values */
-    if (compptr->component_needed) {
-      entropy->dc_needed[blkn] = TRUE;
-      /* we don't need the ACs if producing a 1/8th-size image */
-      entropy->ac_needed[blkn] = (compptr->DCT_scaled_size > 1);
-    } else {
-      entropy->dc_needed[blkn] = entropy->ac_needed[blkn] = FALSE;
-    }
-  }
-
-  /* Initialize bitread state variables */
-  entropy->bitstate.bits_left = 0;
-  entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
-  entropy->pub.insufficient_data = FALSE;
-
-  /* Initialize restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-}
-
-
-/*
- * Compute the derived values for a Huffman table.
- * This routine also performs some validation checks on the table.
- *
- * Note this is also used by jdphuff.c.
- */
-
-GLOBAL(void)
-jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno,
-			 d_derived_tbl ** pdtbl)
-{
-  JHUFF_TBL *htbl;
-  d_derived_tbl *dtbl;
-  int p, i, l, si, numsymbols;
-  int lookbits, ctr;
-  char huffsize[257];
-  unsigned int huffcode[257];
-  unsigned int code;
-
-  /* Note that huffsize[] and huffcode[] are filled in code-length order,
-   * paralleling the order of the symbols themselves in htbl->huffval[].
-   */
-
-  /* Find the input Huffman table */
-  if (tblno < 0 || tblno >= NUM_HUFF_TBLS)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-  htbl =
-    isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno];
-  if (htbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-
-  /* Allocate a workspace if we haven't already done so. */
-  if (*pdtbl == NULL)
-    *pdtbl = (d_derived_tbl *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(d_derived_tbl));
-  dtbl = *pdtbl;
-  dtbl->pub = htbl;		/* fill in back link */
-
-  /* Figure C.1: make table of Huffman code length for each symbol */
-
-  p = 0;
-  for (l = 1; l <= 16; l++) {
-    i = (int) htbl->bits[l];
-    if (i < 0 || p + i > 256)	/* protect against table overrun */
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    while (i--)
-      huffsize[p++] = (char) l;
-  }
-  huffsize[p] = 0;
-  numsymbols = p;
-
-  /* Figure C.2: generate the codes themselves */
-  /* We also validate that the counts represent a legal Huffman code tree. */
-
-  code = 0;
-  si = huffsize[0];
-  p = 0;
-  while (huffsize[p]) {
-    while (((int) huffsize[p]) == si) {
-      huffcode[p++] = code;
-      code++;
-    }
-    /* code is now 1 more than the last code used for codelength si; but
-     * it must still fit in si bits, since no code is allowed to be all ones.
-     */
-    if (((INT32) code) >= (((INT32) 1) << si))
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    code <<= 1;
-    si++;
-  }
-
-  /* Figure F.15: generate decoding tables for bit-sequential decoding */
-
-  p = 0;
-  for (l = 1; l <= 16; l++) {
-    if (htbl->bits[l]) {
-      /* valoffset[l] = huffval[] index of 1st symbol of code length l,
-       * minus the minimum code of length l
-       */
-      dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p];
-      p += htbl->bits[l];
-      dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */
-    } else {
-      dtbl->maxcode[l] = -1;	/* -1 if no codes of this length */
-    }
-  }
-  dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */
-
-  /* Compute lookahead tables to speed up decoding.
-   * First we set all the table entries to 0, indicating "too long";
-   * then we iterate through the Huffman codes that are short enough and
-   * fill in all the entries that correspond to bit sequences starting
-   * with that code.
-   */
-
-  MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits));
-
-  p = 0;
-  for (l = 1; l <= HUFF_LOOKAHEAD; l++) {
-    for (i = 1; i <= (int) htbl->bits[l]; i++, p++) {
-      /* l = current code's length, p = its index in huffcode[] & huffval[]. */
-      /* Generate left-justified code followed by all possible bit sequences */
-      lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l);
-      for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) {
-	dtbl->look_nbits[lookbits] = l;
-	dtbl->look_sym[lookbits] = htbl->huffval[p];
-	lookbits++;
-      }
-    }
-  }
-
-  /* Validate symbols as being reasonable.
-   * For AC tables, we make no check, but accept all byte values 0..255.
-   * For DC tables, we require the symbols to be in range 0..15.
-   * (Tighter bounds could be applied depending on the data depth and mode,
-   * but this is sufficient to ensure safe decoding.)
-   */
-  if (isDC) {
-    for (i = 0; i < numsymbols; i++) {
-      int sym = htbl->huffval[i];
-      if (sym < 0 || sym > 15)
-	ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    }
-  }
-}
-
-
-/*
- * Out-of-line code for bit fetching (shared with jdphuff.c).
- * See jdhuff.h for info about usage.
- * Note: current values of get_buffer and bits_left are passed as parameters,
- * but are returned in the corresponding fields of the state struct.
- *
- * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width
- * of get_buffer to be used.  (On machines with wider words, an even larger
- * buffer could be used.)  However, on some machines 32-bit shifts are
- * quite slow and take time proportional to the number of places shifted.
- * (This is true with most PC compilers, for instance.)  In this case it may
- * be a win to set MIN_GET_BITS to the minimum value of 15.  This reduces the
- * average shift distance at the cost of more calls to jpeg_fill_bit_buffer.
- */
-
-#ifdef SLOW_SHIFT_32
-#define MIN_GET_BITS  15	/* minimum allowable value */
-#else
-#define MIN_GET_BITS  (BIT_BUF_SIZE-7)
-#endif
-
-
-GLOBAL(boolean)
-jpeg_fill_bit_buffer (bitread_working_state * state,
-		      register bit_buf_type get_buffer, register int bits_left,
-		      int nbits)
-/* Load up the bit buffer to a depth of at least nbits */
-{
-  /* Copy heavily used state fields into locals (hopefully registers) */
-  register const JOCTET * next_input_byte = state->next_input_byte;
-  register size_t bytes_in_buffer = state->bytes_in_buffer;
-  j_decompress_ptr cinfo = state->cinfo;
-
-  /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */
-  /* (It is assumed that no request will be for more than that many bits.) */
-  /* We fail to do so only if we hit a marker or are forced to suspend. */
-
-  if (cinfo->unread_marker == 0) {	/* cannot advance past a marker */
-    while (bits_left < MIN_GET_BITS) {
-      register int c;
-
-      /* Attempt to read a byte */
-      if (bytes_in_buffer == 0) {
-	if (! (*cinfo->src->fill_input_buffer) (cinfo))
-	  return FALSE;
-	next_input_byte = cinfo->src->next_input_byte;
-	bytes_in_buffer = cinfo->src->bytes_in_buffer;
-      }
-      bytes_in_buffer--;
-      c = GETJOCTET(*next_input_byte++);
-
-      /* If it's 0xFF, check and discard stuffed zero byte */
-      if (c == 0xFF) {
-	/* Loop here to discard any padding FF's on terminating marker,
-	 * so that we can save a valid unread_marker value.  NOTE: we will
-	 * accept multiple FF's followed by a 0 as meaning a single FF data
-	 * byte.  This data pattern is not valid according to the standard.
-	 */
-	do {
-	  if (bytes_in_buffer == 0) {
-	    if (! (*cinfo->src->fill_input_buffer) (cinfo))
-	      return FALSE;
-	    next_input_byte = cinfo->src->next_input_byte;
-	    bytes_in_buffer = cinfo->src->bytes_in_buffer;
-	  }
-	  bytes_in_buffer--;
-	  c = GETJOCTET(*next_input_byte++);
-	} while (c == 0xFF);
-
-	if (c == 0) {
-	  /* Found FF/00, which represents an FF data byte */
-	  c = 0xFF;
-	} else {
-	  /* Oops, it's actually a marker indicating end of compressed data.
-	   * Save the marker code for later use.
-	   * Fine point: it might appear that we should save the marker into
-	   * bitread working state, not straight into permanent state.  But
-	   * once we have hit a marker, we cannot need to suspend within the
-	   * current MCU, because we will read no more bytes from the data
-	   * source.  So it is OK to update permanent state right away.
-	   */
-	  cinfo->unread_marker = c;
-	  /* See if we need to insert some fake zero bits. */
-	  goto no_more_bytes;
-	}
-      }
-
-      /* OK, load c into get_buffer */
-      get_buffer = (get_buffer << 8) | c;
-      bits_left += 8;
-    } /* end while */
-  } else {
-  no_more_bytes:
-    /* We get here if we've read the marker that terminates the compressed
-     * data segment.  There should be enough bits in the buffer register
-     * to satisfy the request; if so, no problem.
-     */
-    if (nbits > bits_left) {
-      /* Uh-oh.  Report corrupted data to user and stuff zeroes into
-       * the data stream, so that we can produce some kind of image.
-       * We use a nonvolatile flag to ensure that only one warning message
-       * appears per data segment.
-       */
-      if (! cinfo->entropy->insufficient_data) {
-	WARNMS(cinfo, JWRN_HIT_MARKER);
-	cinfo->entropy->insufficient_data = TRUE;
-      }
-      /* Fill the buffer with zero bits */
-      get_buffer <<= MIN_GET_BITS - bits_left;
-      bits_left = MIN_GET_BITS;
-    }
-  }
-
-  /* Unload the local registers */
-  state->next_input_byte = next_input_byte;
-  state->bytes_in_buffer = bytes_in_buffer;
-  state->get_buffer = get_buffer;
-  state->bits_left = bits_left;
-
-  return TRUE;
-}
-
-
-/*
- * Out-of-line code for Huffman code decoding.
- * See jdhuff.h for info about usage.
- */
-
-GLOBAL(int)
-jpeg_huff_decode (bitread_working_state * state,
-		  register bit_buf_type get_buffer, register int bits_left,
-		  d_derived_tbl * htbl, int min_bits)
-{
-  register int l = min_bits;
-  register INT32 code;
-
-  /* HUFF_DECODE has determined that the code is at least min_bits */
-  /* bits long, so fetch that many bits in one swoop. */
-
-  CHECK_BIT_BUFFER(*state, l, return -1);
-  code = GET_BITS(l);
-
-  /* Collect the rest of the Huffman code one bit at a time. */
-  /* This is per Figure F.16 in the JPEG spec. */
-
-  while (code > htbl->maxcode[l]) {
-    code <<= 1;
-    CHECK_BIT_BUFFER(*state, 1, return -1);
-    code |= GET_BITS(1);
-    l++;
-  }
-
-  /* Unload the local registers */
-  state->get_buffer = get_buffer;
-  state->bits_left = bits_left;
-
-  /* With garbage input we may reach the sentinel value l = 17. */
-
-  if (l > 16) {
-    WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE);
-    return 0;			/* fake a zero as the safest result */
-  }
-
-  return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ];
-}
-
-
-/*
- * Check for a restart marker & resynchronize decoder.
- * Returns FALSE if must suspend.
- */
-
-LOCAL(boolean)
-process_restart (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr2 entropy = (huff_entropy_ptr2) cinfo->entropy;
-  int ci;
-
-  /* Throw away any unused bits remaining in bit buffer; */
-  /* include any full bytes in next_marker's count of discarded bytes */
-  cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8;
-  entropy->bitstate.bits_left = 0;
-
-  /* Advance past the RSTn marker */
-  if (! (*cinfo->marker->read_restart_marker) (cinfo))
-    return FALSE;
-
-  /* Re-initialize DC predictions to 0 */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++)
-    entropy->saved.last_dc_val[ci] = 0;
-
-  /* Reset restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-
-  /* Reset out-of-data flag, unless read_restart_marker left us smack up
-   * against a marker.  In that case we will end up treating the next data
-   * segment as empty, and we can avoid producing bogus output pixels by
-   * leaving the flag set.
-   */
-  if (cinfo->unread_marker == 0)
-    entropy->pub.insufficient_data = FALSE;
-
-  return TRUE;
-}
-
-
-/*
- * Decode and return one MCU's worth of Huffman-compressed coefficients.
- * The coefficients are reordered from zigzag order into natural array order,
- * but are not dequantized.
- *
- * The i'th block of the MCU is stored into the block pointed to by
- * MCU_data[i].  WE ASSUME THIS AREA HAS BEEN ZEROED BY THE CALLER.
- * (Wholesale zeroing is usually a little faster than retail...)
- *
- * Returns FALSE if data source requested suspension.  In that case no
- * changes have been made to permanent state.  (Exception: some output
- * coefficients may already have been assigned.  This is harmless for
- * this module, since we'll just re-assign them on the next call.)
- */
-
-METHODDEF(boolean)
-decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr2 entropy = (huff_entropy_ptr2) cinfo->entropy;
-  int blkn;
-  BITREAD_STATE_VARS;
-  savable_state2 state;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->pub.insufficient_data) {
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(state, entropy->saved);
-
-    /* Outer loop handles each block in the MCU */
-
-    for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-      JBLOCKROW block = MCU_data[blkn];
-      d_derived_tbl * dctbl = entropy->dc_cur_tbls[blkn];
-      d_derived_tbl * actbl = entropy->ac_cur_tbls[blkn];
-      register int s, k, r;
-
-      /* Decode a single block's worth of coefficients */
-
-      /* Section F.2.2.1: decode the DC coefficient difference */
-      HUFF_DECODE(s, br_state, dctbl, return FALSE, label1);
-      if (s) {
-	CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	r = GET_BITS(s);
-	s = HUFF_EXTEND(r, s);
-      }
-
-      if (entropy->dc_needed[blkn]) {
-	/* Convert DC difference to actual value, update last_dc_val */
-	int ci = cinfo->MCU_membership[blkn];
-	s += state.last_dc_val[ci];
-	state.last_dc_val[ci] = s;
-	/* Output the DC coefficient (assumes jpeg_natural_order[0] = 0) */
-	(*block)[0] = (JCOEF) s;
-      }
-
-      if (entropy->ac_needed[blkn]) {
-
-	/* Section F.2.2.2: decode the AC coefficients */
-	/* Since zeroes are skipped, output area must be cleared beforehand */
-	for (k = 1; k < DCTSIZE2; k++) {
-	  HUFF_DECODE(s, br_state, actbl, return FALSE, label2);
-
-	  r = s >> 4;
-	  s &= 15;
-
-	  if (s) {
-	    k += r;
-	    CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	    r = GET_BITS(s);
-	    s = HUFF_EXTEND(r, s);
-	    /* Output coefficient in natural (dezigzagged) order.
-	     * Note: the extra entries in jpeg_natural_order[] will save us
-	     * if k >= DCTSIZE2, which could happen if the data is corrupted.
-	     */
-	    (*block)[jpeg_natural_order[k]] = (JCOEF) s;
-	  } else {
-	    if (r != 15)
-	      break;
-	    k += 15;
-	  }
-	}
-
-      } else {
-
-	/* Section F.2.2.2: decode the AC coefficients */
-	/* In this path we just discard the values */
-	for (k = 1; k < DCTSIZE2; k++) {
-	  HUFF_DECODE(s, br_state, actbl, return FALSE, label3);
-
-	  r = s >> 4;
-	  s &= 15;
-
-	  if (s) {
-	    k += r;
-	    CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	    DROP_BITS(s);
-	  } else {
-	    if (r != 15)
-	      break;
-	    k += 15;
-	  }
-	}
-
-      }
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(entropy->saved, state);
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * Module initialization routine for Huffman entropy decoding.
- */
-
-GLOBAL(void)
-jinit_huff_decoder (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr2 entropy;
-  int i;
-
-  entropy = (huff_entropy_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(huff_entropy_decoder2));
-  cinfo->entropy = (struct jpeg_entropy_decoder *) entropy;
-  entropy->pub.start_pass = start_pass_huff_decoder;
-  entropy->pub.decode_mcu = decode_mcu;
-
-  /* Mark tables unallocated */
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdhuff.h b/modules/juce_graphics/image_formats/jpglib/jdhuff.h
deleted file mode 100644
index 1b13987..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdhuff.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * jdhuff.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains declarations for Huffman entropy decoding routines
- * that are shared between the sequential decoder (jdhuff.c) and the
- * progressive decoder (jdphuff.c).  No other modules need to see these.
- */
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifndef __jdhuff_h__
-#define __jdhuff_h__
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_make_d_derived_tbl	jMkDDerived
-#define jpeg_fill_bit_buffer	jFilBitBuf
-#define jpeg_huff_decode	jHufDecode
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Derived data constructed for each Huffman table */
-
-#define HUFF_LOOKAHEAD	8	/* # of bits of lookahead */
-
-typedef struct {
-  /* Basic tables: (element [0] of each array is unused) */
-  INT32 maxcode[18];		/* largest code of length k (-1 if none) */
-  /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */
-  INT32 valoffset[17];		/* huffval[] offset for codes of length k */
-  /* valoffset[k] = huffval[] index of 1st symbol of code length k, less
-   * the smallest code of length k; so given a code of length k, the
-   * corresponding symbol is huffval[code + valoffset[k]]
-   */
-
-  /* Link to public Huffman table (needed only in jpeg_huff_decode) */
-  JHUFF_TBL *pub;
-
-  /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of
-   * the input data stream.  If the next Huffman code is no more
-   * than HUFF_LOOKAHEAD bits long, we can obtain its length and
-   * the corresponding symbol directly from these tables.
-   */
-  int look_nbits[1<<HUFF_LOOKAHEAD]; /* # bits, or 0 if too long */
-  UINT8 look_sym[1<<HUFF_LOOKAHEAD]; /* symbol, or unused */
-} d_derived_tbl;
-
-/* Expand a Huffman table definition into the derived format */
-EXTERN(void) jpeg_make_d_derived_tbl
-	JPP((j_decompress_ptr cinfo, boolean isDC, int tblno,
-	     d_derived_tbl ** pdtbl));
-
-
-/*
- * Fetching the next N bits from the input stream is a time-critical operation
- * for the Huffman decoders.  We implement it with a combination of inline
- * macros and out-of-line subroutines.  Note that N (the number of bits
- * demanded at one time) never exceeds 15 for JPEG use.
- *
- * We read source bytes into get_buffer and dole out bits as needed.
- * If get_buffer already contains enough bits, they are fetched in-line
- * by the macros CHECK_BIT_BUFFER and GET_BITS.  When there aren't enough
- * bits, jpeg_fill_bit_buffer is called; it will attempt to fill get_buffer
- * as full as possible (not just to the number of bits needed; this
- * prefetching reduces the overhead cost of calling jpeg_fill_bit_buffer).
- * Note that jpeg_fill_bit_buffer may return FALSE to indicate suspension.
- * On TRUE return, jpeg_fill_bit_buffer guarantees that get_buffer contains
- * at least the requested number of bits --- dummy zeroes are inserted if
- * necessary.
- */
-
-typedef INT32 bit_buf_type;	/* type of bit-extraction buffer */
-#define BIT_BUF_SIZE  32	/* size of buffer in bits */
-
-/* If long is > 32 bits on your machine, and shifting/masking longs is
- * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE
- * appropriately should be a win.  Unfortunately we can't define the size
- * with something like  #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8)
- * because not all machines measure sizeof in 8-bit bytes.
- */
-
-typedef struct {		/* Bitreading state saved across MCUs */
-  bit_buf_type get_buffer;	/* current bit-extraction buffer */
-  int bits_left;		/* # of unused bits in it */
-} bitread_perm_state;
-
-typedef struct {		/* Bitreading working state within an MCU */
-  /* Current data source location */
-  /* We need a copy, rather than munging the original, in case of suspension */
-  const JOCTET * next_input_byte; /* => next byte to read from source */
-  size_t bytes_in_buffer;	/* # of bytes remaining in source buffer */
-  /* Bit input buffer --- note these values are kept in register variables,
-   * not in this struct, inside the inner loops.
-   */
-  bit_buf_type get_buffer;	/* current bit-extraction buffer */
-  int bits_left;		/* # of unused bits in it */
-  /* Pointer needed by jpeg_fill_bit_buffer. */
-  j_decompress_ptr cinfo;	/* back link to decompress master record */
-} bitread_working_state;
-
-/* Macros to declare and load/save bitread local variables. */
-#define BITREAD_STATE_VARS  \
-	register bit_buf_type get_buffer;  \
-	register int bits_left;  \
-	bitread_working_state br_state
-
-#define BITREAD_LOAD_STATE(cinfop,permstate)  \
-	br_state.cinfo = cinfop; \
-	br_state.next_input_byte = cinfop->src->next_input_byte; \
-	br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \
-	get_buffer = permstate.get_buffer; \
-	bits_left = permstate.bits_left;
-
-#define BITREAD_SAVE_STATE(cinfop,permstate)  \
-	cinfop->src->next_input_byte = br_state.next_input_byte; \
-	cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \
-	permstate.get_buffer = get_buffer; \
-	permstate.bits_left = bits_left
-
-/*
- * These macros provide the in-line portion of bit fetching.
- * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer
- * before using GET_BITS, PEEK_BITS, or DROP_BITS.
- * The variables get_buffer and bits_left are assumed to be locals,
- * but the state struct might not be (jpeg_huff_decode needs this).
- *	CHECK_BIT_BUFFER(state,n,action);
- *		Ensure there are N bits in get_buffer; if suspend, take action.
- *      val = GET_BITS(n);
- *		Fetch next N bits.
- *      val = PEEK_BITS(n);
- *		Fetch next N bits without removing them from the buffer.
- *	DROP_BITS(n);
- *		Discard next N bits.
- * The value N should be a simple variable, not an expression, because it
- * is evaluated multiple times.
- */
-
-#define CHECK_BIT_BUFFER(state,nbits,action) \
-	{ if (bits_left < (nbits)) {  \
-	    if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits))  \
-	      { action; }  \
-	    get_buffer = (state).get_buffer; bits_left = (state).bits_left; } }
-
-#define GET_BITS(nbits) \
-	(((int) (get_buffer >> (bits_left -= (nbits)))) & ((1<<(nbits))-1))
-
-#define PEEK_BITS(nbits) \
-	(((int) (get_buffer >> (bits_left -  (nbits)))) & ((1<<(nbits))-1))
-
-#define DROP_BITS(nbits) \
-	(bits_left -= (nbits))
-
-/* Load up the bit buffer to a depth of at least nbits */
-EXTERN(boolean) jpeg_fill_bit_buffer
-	JPP((bitread_working_state * state, register bit_buf_type get_buffer,
-	     register int bits_left, int nbits));
-
-
-/*
- * Code for extracting next Huffman-coded symbol from input bit stream.
- * Again, this is time-critical and we make the main paths be macros.
- *
- * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits
- * without looping.  Usually, more than 95% of the Huffman codes will be 8
- * or fewer bits long.  The few overlength codes are handled with a loop,
- * which need not be inline code.
- *
- * Notes about the HUFF_DECODE macro:
- * 1. Near the end of the data segment, we may fail to get enough bits
- *    for a lookahead.  In that case, we do it the hard way.
- * 2. If the lookahead table contains no entry, the next code must be
- *    more than HUFF_LOOKAHEAD bits long.
- * 3. jpeg_huff_decode returns -1 if forced to suspend.
- */
-
-#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \
-{ register int nb, look; \
-  if (bits_left < HUFF_LOOKAHEAD) { \
-    if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \
-    get_buffer = state.get_buffer; bits_left = state.bits_left; \
-    if (bits_left < HUFF_LOOKAHEAD) { \
-      nb = 1; goto slowlabel; \
-    } \
-  } \
-  look = PEEK_BITS(HUFF_LOOKAHEAD); \
-  if ((nb = htbl->look_nbits[look]) != 0) { \
-    DROP_BITS(nb); \
-    result = htbl->look_sym[look]; \
-  } else { \
-    nb = HUFF_LOOKAHEAD+1; \
-slowlabel: \
-    if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \
-	{ failaction; } \
-    get_buffer = state.get_buffer; bits_left = state.bits_left; \
-  } \
-}
-
-/* Out-of-line case for Huffman code fetching */
-EXTERN(int) jpeg_huff_decode
-	JPP((bitread_working_state * state, register bit_buf_type get_buffer,
-	     register int bits_left, d_derived_tbl * htbl, int min_bits));
-
-#endif
diff --git a/modules/juce_graphics/image_formats/jpglib/jdinput.c b/modules/juce_graphics/image_formats/jpglib/jdinput.c
deleted file mode 100644
index 621b714..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdinput.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * jdinput.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains input control logic for the JPEG decompressor.
- * These routines are concerned with controlling the decompressor's input
- * processing (marker reading and coefficient decoding).  The actual input
- * reading is done in jdmarker.c, jdhuff.c, and jdphuff.c.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_input_controller pub; /* public fields */
-
-  boolean inheaders;		/* TRUE until first SOS is reached */
-} my_input_controller;
-
-typedef my_input_controller * my_inputctl_ptr;
-
-
-/* Forward declarations */
-METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo));
-
-
-/*
- * Routines to calculate various quantities related to the size of the image.
- */
-
-LOCAL(void)
-initial_setup2 (j_decompress_ptr cinfo)
-/* Called once, when first SOS marker is reached */
-{
-  int ci;
-  jpeg_component_info *compptr;
-
-  /* Make sure image isn't bigger than I can handle */
-  if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION ||
-      (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION)
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
-
-  /* For now, precision must match compiled-in value... */
-  if (cinfo->data_precision != BITS_IN_JSAMPLE)
-    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
-
-  /* Check that number of components won't exceed internal array sizes */
-  if (cinfo->num_components > MAX_COMPONENTS)
-    ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	     MAX_COMPONENTS);
-
-  /* Compute maximum sampling factors; check factor validity */
-  cinfo->max_h_samp_factor = 1;
-  cinfo->max_v_samp_factor = 1;
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR ||
-	compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR)
-      ERREXIT(cinfo, JERR_BAD_SAMPLING);
-    cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor,
-				   compptr->h_samp_factor);
-    cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor,
-				   compptr->v_samp_factor);
-  }
-
-  /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE.
-   * In the full decompressor, this will be overridden by jdmaster.c;
-   * but in the transcoder, jdmaster.c is not used, so we must do it here.
-   */
-  cinfo->min_DCT_scaled_size = DCTSIZE;
-
-  /* Compute dimensions of components */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    compptr->DCT_scaled_size = DCTSIZE;
-    /* Size in DCT blocks */
-    compptr->width_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
-		    (long) (cinfo->max_h_samp_factor * DCTSIZE));
-    compptr->height_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
-		    (long) (cinfo->max_v_samp_factor * DCTSIZE));
-    /* downsampled_width and downsampled_height will also be overridden by
-     * jdmaster.c if we are doing full decompression.  The transcoder library
-     * doesn't use these values, but the calling application might.
-     */
-    /* Size in samples */
-    compptr->downsampled_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
-		    (long) cinfo->max_h_samp_factor);
-    compptr->downsampled_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
-		    (long) cinfo->max_v_samp_factor);
-    /* Mark component needed, until color conversion says otherwise */
-    compptr->component_needed = TRUE;
-    /* Mark no quantization table yet saved for component */
-    compptr->quant_table = NULL;
-  }
-
-  /* Compute number of fully interleaved MCU rows. */
-  cinfo->total_iMCU_rows = (JDIMENSION)
-    jdiv_round_up((long) cinfo->image_height,
-		  (long) (cinfo->max_v_samp_factor*DCTSIZE));
-
-  /* Decide whether file contains multiple scans */
-  if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode)
-    cinfo->inputctl->has_multiple_scans = TRUE;
-  else
-    cinfo->inputctl->has_multiple_scans = FALSE;
-}
-
-
-LOCAL(void)
-per_scan_setup2 (j_decompress_ptr cinfo)
-/* Do computations that are needed before processing a JPEG scan */
-/* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */
-{
-  int ci, mcublks, tmp;
-  jpeg_component_info *compptr;
-
-  if (cinfo->comps_in_scan == 1) {
-
-    /* Noninterleaved (single-component) scan */
-    compptr = cinfo->cur_comp_info[0];
-
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = compptr->width_in_blocks;
-    cinfo->MCU_rows_in_scan = compptr->height_in_blocks;
-
-    /* For noninterleaved scan, always one block per MCU */
-    compptr->MCU_width = 1;
-    compptr->MCU_height = 1;
-    compptr->MCU_blocks = 1;
-    compptr->MCU_sample_width = compptr->DCT_scaled_size;
-    compptr->last_col_width = 1;
-    /* For noninterleaved scans, it is convenient to define last_row_height
-     * as the number of block rows present in the last iMCU row.
-     */
-    tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-    if (tmp == 0) tmp = compptr->v_samp_factor;
-    compptr->last_row_height = tmp;
-
-    /* Prepare array describing MCU composition */
-    cinfo->blocks_in_MCU = 1;
-    cinfo->MCU_membership[0] = 0;
-
-  } else {
-
-    /* Interleaved (multi-component) scan */
-    if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan,
-	       MAX_COMPS_IN_SCAN);
-
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width,
-		    (long) (cinfo->max_h_samp_factor*DCTSIZE));
-    cinfo->MCU_rows_in_scan = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height,
-		    (long) (cinfo->max_v_samp_factor*DCTSIZE));
-
-    cinfo->blocks_in_MCU = 0;
-
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      compptr = cinfo->cur_comp_info[ci];
-      /* Sampling factors give # of blocks of component in each MCU */
-      compptr->MCU_width = compptr->h_samp_factor;
-      compptr->MCU_height = compptr->v_samp_factor;
-      compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height;
-      compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_scaled_size;
-      /* Figure number of non-dummy blocks in last MCU column & row */
-      tmp = (int) (compptr->width_in_blocks % compptr->MCU_width);
-      if (tmp == 0) tmp = compptr->MCU_width;
-      compptr->last_col_width = tmp;
-      tmp = (int) (compptr->height_in_blocks % compptr->MCU_height);
-      if (tmp == 0) tmp = compptr->MCU_height;
-      compptr->last_row_height = tmp;
-      /* Prepare array describing MCU composition */
-      mcublks = compptr->MCU_blocks;
-      if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU)
-	ERREXIT(cinfo, JERR_BAD_MCU_SIZE);
-      while (mcublks-- > 0) {
-	cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci;
-      }
-    }
-
-  }
-}
-
-
-/*
- * Save away a copy of the Q-table referenced by each component present
- * in the current scan, unless already saved during a prior scan.
- *
- * In a multiple-scan JPEG file, the encoder could assign different components
- * the same Q-table slot number, but change table definitions between scans
- * so that each component uses a different Q-table.  (The IJG encoder is not
- * currently capable of doing this, but other encoders might.)  Since we want
- * to be able to dequantize all the components at the end of the file, this
- * means that we have to save away the table actually used for each component.
- * We do this by copying the table at the start of the first scan containing
- * the component.
- * The JPEG spec prohibits the encoder from changing the contents of a Q-table
- * slot between scans of a component using that slot.  If the encoder does so
- * anyway, this decoder will simply use the Q-table values that were current
- * at the start of the first scan for the component.
- *
- * The decompressor output side looks only at the saved quant tables,
- * not at the current Q-table slots.
- */
-
-LOCAL(void)
-latch_quant_tables (j_decompress_ptr cinfo)
-{
-  int ci, qtblno;
-  jpeg_component_info *compptr;
-  JQUANT_TBL * qtbl;
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* No work if we already saved Q-table for this component */
-    if (compptr->quant_table != NULL)
-      continue;
-    /* Make sure specified quantization table is present */
-    qtblno = compptr->quant_tbl_no;
-    if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS ||
-	cinfo->quant_tbl_ptrs[qtblno] == NULL)
-      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
-    /* OK, save away the quantization table */
-    qtbl = (JQUANT_TBL *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(JQUANT_TBL));
-    MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL));
-    compptr->quant_table = qtbl;
-  }
-}
-
-
-/*
- * Initialize the input modules to read a scan of compressed data.
- * The first call to this is done by jdmaster.c after initializing
- * the entire decompressor (during jpeg_start_decompress).
- * Subsequent calls come from consume_markers, below.
- */
-
-METHODDEF(void)
-start_input_pass2 (j_decompress_ptr cinfo)
-{
-  per_scan_setup2(cinfo);
-  latch_quant_tables(cinfo);
-  (*cinfo->entropy->start_pass) (cinfo);
-  (*cinfo->coef->start_input_pass) (cinfo);
-  cinfo->inputctl->consume_input = cinfo->coef->consume_data;
-}
-
-
-/*
- * Finish up after inputting a compressed-data scan.
- * This is called by the coefficient controller after it's read all
- * the expected data of the scan.
- */
-
-METHODDEF(void)
-finish_input_pass (j_decompress_ptr cinfo)
-{
-  cinfo->inputctl->consume_input = consume_markers;
-}
-
-
-/*
- * Read JPEG markers before, between, or after compressed-data scans.
- * Change state as necessary when a new scan is reached.
- * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
- *
- * The consume_input method pointer points either here or to the
- * coefficient controller's consume_data routine, depending on whether
- * we are reading a compressed data segment or inter-segment markers.
- */
-
-METHODDEF(int)
-consume_markers (j_decompress_ptr cinfo)
-{
-  my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl;
-  int val;
-
-  if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */
-    return JPEG_REACHED_EOI;
-
-  val = (*cinfo->marker->read_markers) (cinfo);
-
-  switch (val) {
-  case JPEG_REACHED_SOS:	/* Found SOS */
-    if (inputctl->inheaders) {	/* 1st SOS */
-      initial_setup2(cinfo);
-      inputctl->inheaders = FALSE;
-      /* Note: start_input_pass must be called by jdmaster.c
-       * before any more input can be consumed.  jdapimin.c is
-       * responsible for enforcing this sequencing.
-       */
-    } else {			/* 2nd or later SOS marker */
-      if (! inputctl->pub.has_multiple_scans)
-	ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */
-      start_input_pass2(cinfo);
-    }
-    break;
-  case JPEG_REACHED_EOI:	/* Found EOI */
-    inputctl->pub.eoi_reached = TRUE;
-    if (inputctl->inheaders) {	/* Tables-only datastream, apparently */
-      if (cinfo->marker->saw_SOF)
-	ERREXIT(cinfo, JERR_SOF_NO_SOS);
-    } else {
-      /* Prevent infinite loop in coef ctlr's decompress_data routine
-       * if user set output_scan_number larger than number of scans.
-       */
-      if (cinfo->output_scan_number > cinfo->input_scan_number)
-	cinfo->output_scan_number = cinfo->input_scan_number;
-    }
-    break;
-  case JPEG_SUSPENDED:
-    break;
-  }
-
-  return val;
-}
-
-
-/*
- * Reset state to begin a fresh datastream.
- */
-
-METHODDEF(void)
-reset_input_controller (j_decompress_ptr cinfo)
-{
-  my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl;
-
-  inputctl->pub.consume_input = consume_markers;
-  inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */
-  inputctl->pub.eoi_reached = FALSE;
-  inputctl->inheaders = TRUE;
-  /* Reset other modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->marker->reset_marker_reader) (cinfo);
-  /* Reset progression state -- would be cleaner if entropy decoder did this */
-  cinfo->coef_bits = NULL;
-}
-
-
-/*
- * Initialize the input controller module.
- * This is called only once, when the decompression object is created.
- */
-
-GLOBAL(void)
-jinit_input_controller (j_decompress_ptr cinfo)
-{
-  my_inputctl_ptr inputctl;
-
-  /* Create subobject in permanent pool */
-  inputctl = (my_inputctl_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				SIZEOF(my_input_controller));
-  cinfo->inputctl = (struct jpeg_input_controller *) inputctl;
-  /* Initialize method pointers */
-  inputctl->pub.consume_input = consume_markers;
-  inputctl->pub.reset_input_controller = reset_input_controller;
-  inputctl->pub.start_input_pass = start_input_pass2;
-  inputctl->pub.finish_input_pass = finish_input_pass;
-  /* Initialize state: can't use reset_input_controller since we don't
-   * want to try to reset other modules yet.
-   */
-  inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */
-  inputctl->pub.eoi_reached = FALSE;
-  inputctl->inheaders = TRUE;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdmainct.c b/modules/juce_graphics/image_formats/jpglib/jdmainct.c
deleted file mode 100644
index ee23fa8..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdmainct.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * jdmainct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the main buffer controller for decompression.
- * The main buffer lies between the JPEG decompressor proper and the
- * post-processor; it holds downsampled data in the JPEG colorspace.
- *
- * Note that this code is bypassed in raw-data mode, since the application
- * supplies the equivalent of the main buffer in that case.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * In the current system design, the main buffer need never be a full-image
- * buffer; any full-height buffers will be found inside the coefficient or
- * postprocessing controllers.  Nonetheless, the main controller is not
- * trivial.  Its responsibility is to provide context rows for upsampling/
- * rescaling, and doing this in an efficient fashion is a bit tricky.
- *
- * Postprocessor input data is counted in "row groups".  A row group
- * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size)
- * sample rows of each component.  (We require DCT_scaled_size values to be
- * chosen such that these numbers are integers.  In practice DCT_scaled_size
- * values will likely be powers of two, so we actually have the stronger
- * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.)
- * Upsampling will typically produce max_v_samp_factor pixel rows from each
- * row group (times any additional scale factor that the upsampler is
- * applying).
- *
- * The coefficient controller will deliver data to us one iMCU row at a time;
- * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or
- * exactly min_DCT_scaled_size row groups.  (This amount of data corresponds
- * to one row of MCUs when the image is fully interleaved.)  Note that the
- * number of sample rows varies across components, but the number of row
- * groups does not.  Some garbage sample rows may be included in the last iMCU
- * row at the bottom of the image.
- *
- * Depending on the vertical scaling algorithm used, the upsampler may need
- * access to the sample row(s) above and below its current input row group.
- * The upsampler is required to set need_context_rows TRUE at global selection
- * time if so.  When need_context_rows is FALSE, this controller can simply
- * obtain one iMCU row at a time from the coefficient controller and dole it
- * out as row groups to the postprocessor.
- *
- * When need_context_rows is TRUE, this controller guarantees that the buffer
- * passed to postprocessing contains at least one row group's worth of samples
- * above and below the row group(s) being processed.  Note that the context
- * rows "above" the first passed row group appear at negative row offsets in
- * the passed buffer.  At the top and bottom of the image, the required
- * context rows are manufactured by duplicating the first or last real sample
- * row; this avoids having special cases in the upsampling inner loops.
- *
- * The amount of context is fixed at one row group just because that's a
- * convenient number for this controller to work with.  The existing
- * upsamplers really only need one sample row of context.  An upsampler
- * supporting arbitrary output rescaling might wish for more than one row
- * group of context when shrinking the image; tough, we don't handle that.
- * (This is justified by the assumption that downsizing will be handled mostly
- * by adjusting the DCT_scaled_size values, so that the actual scale factor at
- * the upsample step needn't be much less than one.)
- *
- * To provide the desired context, we have to retain the last two row groups
- * of one iMCU row while reading in the next iMCU row.  (The last row group
- * can't be processed until we have another row group for its below-context,
- * and so we have to save the next-to-last group too for its above-context.)
- * We could do this most simply by copying data around in our buffer, but
- * that'd be very slow.  We can avoid copying any data by creating a rather
- * strange pointer structure.  Here's how it works.  We allocate a workspace
- * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number
- * of row groups per iMCU row).  We create two sets of redundant pointers to
- * the workspace.  Labeling the physical row groups 0 to M+1, the synthesized
- * pointer lists look like this:
- *                   M+1                          M-1
- * master pointer --> 0         master pointer --> 0
- *                    1                            1
- *                   ...                          ...
- *                   M-3                          M-3
- *                   M-2                           M
- *                   M-1                          M+1
- *                    M                           M-2
- *                   M+1                          M-1
- *                    0                            0
- * We read alternate iMCU rows using each master pointer; thus the last two
- * row groups of the previous iMCU row remain un-overwritten in the workspace.
- * The pointer lists are set up so that the required context rows appear to
- * be adjacent to the proper places when we pass the pointer lists to the
- * upsampler.
- *
- * The above pictures describe the normal state of the pointer lists.
- * At top and bottom of the image, we diddle the pointer lists to duplicate
- * the first or last sample row as necessary (this is cheaper than copying
- * sample rows around).
- *
- * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1.  In that
- * situation each iMCU row provides only one row group so the buffering logic
- * must be different (eg, we must read two iMCU rows before we can emit the
- * first row group).  For now, we simply do not support providing context
- * rows when min_DCT_scaled_size is 1.  That combination seems unlikely to
- * be worth providing --- if someone wants a 1/8th-size preview, they probably
- * want it quick and dirty, so a context-free upsampler is sufficient.
- */
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_d_main_controller pub; /* public fields */
-
-  /* Pointer to allocated workspace (M or M+2 row groups). */
-  JSAMPARRAY buffer[MAX_COMPONENTS];
-
-  boolean buffer_full;		/* Have we gotten an iMCU row from decoder? */
-  JDIMENSION rowgroup_ctr;	/* counts row groups output to postprocessor */
-
-  /* Remaining fields are only used in the context case. */
-
-  /* These are the master pointers to the funny-order pointer lists. */
-  JSAMPIMAGE xbuffer[2];	/* pointers to weird pointer lists */
-
-  int whichptr;			/* indicates which pointer set is now in use */
-  int context_state;		/* process_data state machine status */
-  JDIMENSION rowgroups_avail;	/* row groups available to postprocessor */
-  JDIMENSION iMCU_row_ctr;	/* counts iMCU rows to detect image top/bot */
-} my_main_controller4;
-
-typedef my_main_controller4 * my_main_ptr4;
-
-/* context_state values: */
-#define CTX_PREPARE_FOR_IMCU	0	/* need to prepare for MCU row */
-#define CTX_PROCESS_IMCU	1	/* feeding iMCU to postprocessor */
-#define CTX_POSTPONED_ROW	2	/* feeding postponed row group */
-
-
-/* Forward declarations */
-METHODDEF(void) process_data_simple_main2
-	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,
-	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));
-METHODDEF(void) process_data_context_main
-	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,
-	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));
-#ifdef QUANT_2PASS_SUPPORTED
-METHODDEF(void) process_data_crank_post
-	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,
-	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));
-#endif
-
-
-LOCAL(void)
-alloc_funny_pointers (j_decompress_ptr cinfo)
-/* Allocate space for the funny pointer lists.
- * This is done only once, not once per pass.
- */
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-  int ci, rgroup;
-  int M = cinfo->min_DCT_scaled_size;
-  jpeg_component_info *compptr;
-  JSAMPARRAY xbuf;
-
-  /* Get top-level space for component array pointers.
-   * We alloc both arrays with one call to save a few cycles.
-   */
-  main_->xbuffer[0] = (JSAMPIMAGE)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				cinfo->num_components * 2 * SIZEOF(JSAMPARRAY));
-  main_->xbuffer[1] = main_->xbuffer[0] + cinfo->num_components;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /
-      cinfo->min_DCT_scaled_size; /* height of a row group of component */
-    /* Get space for pointer lists --- M+4 row groups in each list.
-     * We alloc both pointer lists with one call to save a few cycles.
-     */
-    xbuf = (JSAMPARRAY)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW));
-    xbuf += rgroup;		/* want one row group at negative offsets */
-    main_->xbuffer[0][ci] = xbuf;
-    xbuf += rgroup * (M + 4);
-    main_->xbuffer[1][ci] = xbuf;
-  }
-}
-
-
-LOCAL(void)
-make_funny_pointers (j_decompress_ptr cinfo)
-/* Create the funny pointer lists discussed in the comments above.
- * The actual workspace is already allocated (in main->buffer),
- * and the space for the pointer lists is allocated too.
- * This routine just fills in the curiously ordered lists.
- * This will be repeated at the beginning of each pass.
- */
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-  int ci, i, rgroup;
-  int M = cinfo->min_DCT_scaled_size;
-  jpeg_component_info *compptr;
-  JSAMPARRAY buf, xbuf0, xbuf1;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /
-      cinfo->min_DCT_scaled_size; /* height of a row group of component */
-    xbuf0 = main_->xbuffer[0][ci];
-    xbuf1 = main_->xbuffer[1][ci];
-    /* First copy the workspace pointers as-is */
-    buf = main_->buffer[ci];
-    for (i = 0; i < rgroup * (M + 2); i++) {
-      xbuf0[i] = xbuf1[i] = buf[i];
-    }
-    /* In the second list, put the last four row groups in swapped order */
-    for (i = 0; i < rgroup * 2; i++) {
-      xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i];
-      xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i];
-    }
-    /* The wraparound pointers at top and bottom will be filled later
-     * (see set_wraparound_pointers, below).  Initially we want the "above"
-     * pointers to duplicate the first actual data line.  This only needs
-     * to happen in xbuffer[0].
-     */
-    for (i = 0; i < rgroup; i++) {
-      xbuf0[i - rgroup] = xbuf0[0];
-    }
-  }
-}
-
-
-LOCAL(void)
-set_wraparound_pointers (j_decompress_ptr cinfo)
-/* Set up the "wraparound" pointers at top and bottom of the pointer lists.
- * This changes the pointer list state from top-of-image to the normal state.
- */
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-  int ci, i, rgroup;
-  int M = cinfo->min_DCT_scaled_size;
-  jpeg_component_info *compptr;
-  JSAMPARRAY xbuf0, xbuf1;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /
-      cinfo->min_DCT_scaled_size; /* height of a row group of component */
-    xbuf0 = main_->xbuffer[0][ci];
-    xbuf1 = main_->xbuffer[1][ci];
-    for (i = 0; i < rgroup; i++) {
-      xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i];
-      xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i];
-      xbuf0[rgroup*(M+2) + i] = xbuf0[i];
-      xbuf1[rgroup*(M+2) + i] = xbuf1[i];
-    }
-  }
-}
-
-
-LOCAL(void)
-set_bottom_pointers (j_decompress_ptr cinfo)
-/* Change the pointer lists to duplicate the last sample row at the bottom
- * of the image.  whichptr indicates which xbuffer holds the final iMCU row.
- * Also sets rowgroups_avail to indicate number of nondummy row groups in row.
- */
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-  int ci, i, rgroup, iMCUheight, rows_left;
-  jpeg_component_info *compptr;
-  JSAMPARRAY xbuf;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Count sample rows in one iMCU row and in one row group */
-    iMCUheight = compptr->v_samp_factor * compptr->DCT_scaled_size;
-    rgroup = iMCUheight / cinfo->min_DCT_scaled_size;
-    /* Count nondummy sample rows remaining for this component */
-    rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight);
-    if (rows_left == 0) rows_left = iMCUheight;
-    /* Count nondummy row groups.  Should get same answer for each component,
-     * so we need only do it once.
-     */
-    if (ci == 0) {
-      main_->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1);
-    }
-    /* Duplicate the last real sample row rgroup*2 times; this pads out the
-     * last partial rowgroup and ensures at least one full rowgroup of context.
-     */
-    xbuf = main_->xbuffer[main_->whichptr][ci];
-    for (i = 0; i < rgroup * 2; i++) {
-      xbuf[rows_left + i] = xbuf[rows_left-1];
-    }
-  }
-}
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_main2 (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-    if (cinfo->upsample->need_context_rows) {
-      main_->pub.process_data = process_data_context_main;
-      make_funny_pointers(cinfo); /* Create the xbuffer[] lists */
-      main_->whichptr = 0;	/* Read first iMCU row into xbuffer[0] */
-      main_->context_state = CTX_PREPARE_FOR_IMCU;
-      main_->iMCU_row_ctr = 0;
-    } else {
-      /* Simple case with no context needed */
-      main_->pub.process_data = process_data_simple_main2;
-    }
-    main_->buffer_full = FALSE;	/* Mark buffer empty */
-    main_->rowgroup_ctr = 0;
-    break;
-#ifdef QUANT_2PASS_SUPPORTED
-  case JBUF_CRANK_DEST:
-    /* For last pass of 2-pass quantization, just crank the postprocessor */
-    main_->pub.process_data = process_data_crank_post;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-}
-
-
-/*
- * Process some data.
- * This handles the simple case where no context is required.
- */
-
-METHODDEF(void)
-process_data_simple_main2 (j_decompress_ptr cinfo,
-			  JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			  JDIMENSION out_rows_avail)
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-  JDIMENSION rowgroups_avail;
-
-  /* Read input data if we haven't filled the main buffer yet */
-  if (! main_->buffer_full) {
-    if (! (*cinfo->coef->decompress_data) (cinfo, main_->buffer))
-      return;			/* suspension forced, can do nothing more */
-    main_->buffer_full = TRUE;	/* OK, we have an iMCU row to work with */
-  }
-
-  /* There are always min_DCT_scaled_size row groups in an iMCU row. */
-  rowgroups_avail = (JDIMENSION) cinfo->min_DCT_scaled_size;
-  /* Note: at the bottom of the image, we may pass extra garbage row groups
-   * to the postprocessor.  The postprocessor has to check for bottom
-   * of image anyway (at row resolution), so no point in us doing it too.
-   */
-
-  /* Feed the postprocessor */
-  (*cinfo->post->post_process_data) (cinfo, main_->buffer,
-				     &main_->rowgroup_ctr, rowgroups_avail,
-				     output_buf, out_row_ctr, out_rows_avail);
-
-  /* Has postprocessor consumed all the data yet? If so, mark buffer empty */
-  if (main_->rowgroup_ctr >= rowgroups_avail) {
-    main_->buffer_full = FALSE;
-    main_->rowgroup_ctr = 0;
-  }
-}
-
-
-/*
- * Process some data.
- * This handles the case where context rows must be provided.
- */
-
-METHODDEF(void)
-process_data_context_main (j_decompress_ptr cinfo,
-			   JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			   JDIMENSION out_rows_avail)
-{
-  my_main_ptr4 main_ = (my_main_ptr4) cinfo->main;
-
-  /* Read input data if we haven't filled the main buffer yet */
-  if (! main_->buffer_full) {
-    if (! (*cinfo->coef->decompress_data) (cinfo,
-					   main_->xbuffer[main_->whichptr]))
-      return;			/* suspension forced, can do nothing more */
-    main_->buffer_full = TRUE;	/* OK, we have an iMCU row to work with */
-    main_->iMCU_row_ctr++;	/* count rows received */
-  }
-
-  /* Postprocessor typically will not swallow all the input data it is handed
-   * in one call (due to filling the output buffer first).  Must be prepared
-   * to exit and restart.  This switch lets us keep track of how far we got.
-   * Note that each case falls through to the next on successful completion.
-   */
-  switch (main_->context_state) {
-  case CTX_POSTPONED_ROW:
-    /* Call postprocessor using previously set pointers for postponed row */
-    (*cinfo->post->post_process_data) (cinfo, main_->xbuffer[main_->whichptr],
-			&main_->rowgroup_ctr, main_->rowgroups_avail,
-			output_buf, out_row_ctr, out_rows_avail);
-    if (main_->rowgroup_ctr < main_->rowgroups_avail)
-      return;			/* Need to suspend */
-    main_->context_state = CTX_PREPARE_FOR_IMCU;
-    if (*out_row_ctr >= out_rows_avail)
-      return;			/* Postprocessor exactly filled output buf */
-    /*FALLTHROUGH*/
-  case CTX_PREPARE_FOR_IMCU:
-    /* Prepare to process first M-1 row groups of this iMCU row */
-    main_->rowgroup_ctr = 0;
-    main_->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size - 1);
-    /* Check for bottom of image: if so, tweak pointers to "duplicate"
-     * the last sample row, and adjust rowgroups_avail to ignore padding rows.
-     */
-    if (main_->iMCU_row_ctr == cinfo->total_iMCU_rows)
-      set_bottom_pointers(cinfo);
-    main_->context_state = CTX_PROCESS_IMCU;
-    /*FALLTHROUGH*/
-  case CTX_PROCESS_IMCU:
-    /* Call postprocessor using previously set pointers */
-    (*cinfo->post->post_process_data) (cinfo, main_->xbuffer[main_->whichptr],
-			&main_->rowgroup_ctr, main_->rowgroups_avail,
-			output_buf, out_row_ctr, out_rows_avail);
-    if (main_->rowgroup_ctr < main_->rowgroups_avail)
-      return;			/* Need to suspend */
-    /* After the first iMCU, change wraparound pointers to normal state */
-    if (main_->iMCU_row_ctr == 1)
-      set_wraparound_pointers(cinfo);
-    /* Prepare to load new iMCU row using other xbuffer list */
-    main_->whichptr ^= 1;	/* 0=>1 or 1=>0 */
-    main_->buffer_full = FALSE;
-    /* Still need to process last row group of this iMCU row, */
-    /* which is saved at index M+1 of the other xbuffer */
-    main_->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_scaled_size + 1);
-    main_->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_scaled_size + 2);
-    main_->context_state = CTX_POSTPONED_ROW;
-  }
-}
-
-
-/*
- * Process some data.
- * Final pass of two-pass quantization: just call the postprocessor.
- * Source data will be the postprocessor controller's internal buffer.
- */
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-METHODDEF(void)
-process_data_crank_post (j_decompress_ptr cinfo,
-			 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			 JDIMENSION out_rows_avail)
-{
-  (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL,
-				     (JDIMENSION *) NULL, (JDIMENSION) 0,
-				     output_buf, out_row_ctr, out_rows_avail);
-}
-
-#endif /* QUANT_2PASS_SUPPORTED */
-
-
-/*
- * Initialize main buffer controller.
- */
-
-GLOBAL(void)
-jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
-{
-  my_main_ptr4 main_;
-  int ci, rgroup, ngroups;
-  jpeg_component_info *compptr;
-
-  main_ = (my_main_ptr4)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_main_controller4));
-  cinfo->main = (struct jpeg_d_main_controller *) main_;
-  main_->pub.start_pass = start_pass_main2;
-
-  if (need_full_buffer)		/* shouldn't happen */
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  /* Allocate the workspace.
-   * ngroups is the number of row groups we need.
-   */
-  if (cinfo->upsample->need_context_rows) {
-    if (cinfo->min_DCT_scaled_size < 2) /* unsupported, see comments above */
-      ERREXIT(cinfo, JERR_NOTIMPL);
-    alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */
-    ngroups = cinfo->min_DCT_scaled_size + 2;
-  } else {
-    ngroups = cinfo->min_DCT_scaled_size;
-  }
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_scaled_size) /
-      cinfo->min_DCT_scaled_size; /* height of a row group of component */
-    main_->buffer[ci] = (*cinfo->mem->alloc_sarray)
-			((j_common_ptr) cinfo, JPOOL_IMAGE,
-			 compptr->width_in_blocks * compptr->DCT_scaled_size,
-			 (JDIMENSION) (rgroup * ngroups));
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdmarker.c b/modules/juce_graphics/image_formats/jpglib/jdmarker.c
deleted file mode 100644
index 0a57cca..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdmarker.c
+++ /dev/null
@@ -1,1292 +0,0 @@
-/*
- * jdmarker.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains routines to decode JPEG datastream markers.
- * Most of the complexity arises from our desire to support input
- * suspension: if not all of the data for a marker is available,
- * we must exit back to the application.  On resumption, we reprocess
- * the marker.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_marker_reader pub; /* public fields */
-
-  /* Application-overridable marker processing methods */
-  jpeg_marker_parser_method process_COM;
-  jpeg_marker_parser_method process_APPn[16];
-
-  /* Limit on marker data length to save for each marker type */
-  unsigned int length_limit_COM;
-  unsigned int length_limit_APPn[16];
-
-  /* Status of COM/APPn marker saving */
-  jpeg_saved_marker_ptr cur_marker;	/* NULL if not processing a marker */
-  unsigned int bytes_read;		/* data bytes read so far in marker */
-  /* Note: cur_marker is not linked into marker_list until it's all read. */
-} my_marker_reader;
-
-typedef my_marker_reader * my_marker_ptr2;
-
-
-/*
- * Macros for fetching data from the data source module.
- *
- * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect
- * the current restart point; we update them only when we have reached a
- * suitable place to restart if a suspension occurs.
- */
-
-/* Declare and initialize local copies of input pointer/count */
-#define INPUT_VARS(cinfo)  \
-	struct jpeg_source_mgr * datasrc = (cinfo)->src;  \
-	const JOCTET * next_input_byte = datasrc->next_input_byte;  \
-	size_t bytes_in_buffer = datasrc->bytes_in_buffer
-
-/* Unload the local copies --- do this only at a restart boundary */
-#define INPUT_SYNC(cinfo)  \
-	( datasrc->next_input_byte = next_input_byte,  \
-	  datasrc->bytes_in_buffer = bytes_in_buffer )
-
-/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */
-#define INPUT_RELOAD(cinfo)  \
-	( next_input_byte = datasrc->next_input_byte,  \
-	  bytes_in_buffer = datasrc->bytes_in_buffer )
-
-/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available.
- * Note we do *not* do INPUT_SYNC before calling fill_input_buffer,
- * but we must reload the local copies after a successful fill.
- */
-#define MAKE_BYTE_AVAIL(cinfo,action)  \
-	if (bytes_in_buffer == 0) {  \
-	  if (! (*datasrc->fill_input_buffer) (cinfo))  \
-	    { action; }  \
-	  INPUT_RELOAD(cinfo);  \
-	}
-
-/* Read a byte into variable V.
- * If must suspend, take the specified action (typically "return FALSE").
- */
-#define INPUT_BYTE(cinfo,V,action)  \
-	MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
-		  bytes_in_buffer--; \
-		  V = GETJOCTET(*next_input_byte++); )
-
-/* As above, but read two bytes interpreted as an unsigned 16-bit integer.
- * V should be declared unsigned int or perhaps INT32.
- */
-#define INPUT_2BYTES(cinfo,V,action)  \
-	MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
-		  bytes_in_buffer--; \
-		  V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \
-		  MAKE_BYTE_AVAIL(cinfo,action); \
-		  bytes_in_buffer--; \
-		  V += GETJOCTET(*next_input_byte++); )
-
-
-/*
- * Routines to process JPEG markers.
- *
- * Entry condition: JPEG marker itself has been read and its code saved
- *   in cinfo->unread_marker; input restart point is just after the marker.
- *
- * Exit: if return TRUE, have read and processed any parameters, and have
- *   updated the restart point to point after the parameters.
- *   If return FALSE, was forced to suspend before reaching end of
- *   marker parameters; restart point has not been moved.  Same routine
- *   will be called again after application supplies more input data.
- *
- * This approach to suspension assumes that all of a marker's parameters
- * can fit into a single input bufferload.  This should hold for "normal"
- * markers.  Some COM/APPn markers might have large parameter segments
- * that might not fit.  If we are simply dropping such a marker, we use
- * skip_input_data to get past it, and thereby put the problem on the
- * source manager's shoulders.  If we are saving the marker's contents
- * into memory, we use a slightly different convention: when forced to
- * suspend, the marker processor updates the restart point to the end of
- * what it's consumed (ie, the end of the buffer) before returning FALSE.
- * On resumption, cinfo->unread_marker still contains the marker code,
- * but the data source will point to the next chunk of marker data.
- * The marker processor must retain internal state to deal with this.
- *
- * Note that we don't bother to avoid duplicate trace messages if a
- * suspension occurs within marker parameters.  Other side effects
- * require more care.
- */
-
-
-LOCAL(boolean)
-get_soi (j_decompress_ptr cinfo)
-/* Process an SOI marker */
-{
-  int i;
-
-  TRACEMS(cinfo, 1, JTRC_SOI);
-
-  if (cinfo->marker->saw_SOI)
-    ERREXIT(cinfo, JERR_SOI_DUPLICATE);
-
-  /* Reset all parameters that are defined to be reset by SOI */
-
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    cinfo->arith_dc_L[i] = 0;
-    cinfo->arith_dc_U[i] = 1;
-    cinfo->arith_ac_K[i] = 5;
-  }
-  cinfo->restart_interval = 0;
-
-  /* Set initial assumptions for colorspace etc */
-
-  cinfo->jpeg_color_space = JCS_UNKNOWN;
-  cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */
-
-  cinfo->saw_JFIF_marker = FALSE;
-  cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */
-  cinfo->JFIF_minor_version = 1;
-  cinfo->density_unit = 0;
-  cinfo->X_density = 1;
-  cinfo->Y_density = 1;
-  cinfo->saw_Adobe_marker = FALSE;
-  cinfo->Adobe_transform = 0;
-
-  cinfo->marker->saw_SOI = TRUE;
-
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith)
-/* Process a SOFn marker */
-{
-  INT32 length;
-  int c, ci;
-  jpeg_component_info * compptr;
-  INPUT_VARS(cinfo);
-
-  cinfo->progressive_mode = is_prog;
-  cinfo->arith_code = is_arith;
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-
-  INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE);
-  INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE);
-  INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE);
-  INPUT_BYTE(cinfo, cinfo->num_components, return FALSE);
-
-  length -= 8;
-
-  TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker,
-	   (int) cinfo->image_width, (int) cinfo->image_height,
-	   cinfo->num_components);
-
-  if (cinfo->marker->saw_SOF)
-    ERREXIT(cinfo, JERR_SOF_DUPLICATE);
-
-  /* We don't support files in which the image height is initially specified */
-  /* as 0 and is later redefined by DNL.  As long as we have to check that,  */
-  /* might as well have a general sanity check. */
-  if (cinfo->image_height <= 0 || cinfo->image_width <= 0
-      || cinfo->num_components <= 0)
-    ERREXIT(cinfo, JERR_EMPTY_IMAGE);
-
-  if (length != (cinfo->num_components * 3))
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  if (cinfo->comp_info == NULL)	/* do only once, even if suspend */
-    cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
-			((j_common_ptr) cinfo, JPOOL_IMAGE,
-			 cinfo->num_components * SIZEOF(jpeg_component_info));
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    compptr->component_index = ci;
-    INPUT_BYTE(cinfo, compptr->component_id, return FALSE);
-    INPUT_BYTE(cinfo, c, return FALSE);
-    compptr->h_samp_factor = (c >> 4) & 15;
-    compptr->v_samp_factor = (c     ) & 15;
-    INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE);
-
-    TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT,
-	     compptr->component_id, compptr->h_samp_factor,
-	     compptr->v_samp_factor, compptr->quant_tbl_no);
-  }
-
-  cinfo->marker->saw_SOF = TRUE;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_sos (j_decompress_ptr cinfo)
-/* Process a SOS marker */
-{
-  INT32 length;
-  int i, ci, n, c, cc;
-  jpeg_component_info * compptr;
-  INPUT_VARS(cinfo);
-
-  if (! cinfo->marker->saw_SOF)
-    ERREXIT(cinfo, JERR_SOS_NO_SOF);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-
-  INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */
-
-  TRACEMS1(cinfo, 1, JTRC_SOS, n);
-
-  if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  cinfo->comps_in_scan = n;
-
-  /* Collect the component-spec parameters */
-
-  for (i = 0; i < n; i++) {
-    INPUT_BYTE(cinfo, cc, return FALSE);
-    INPUT_BYTE(cinfo, c, return FALSE);
-
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      if (cc == compptr->component_id)
-	goto id_found;
-    }
-
-    ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
-
-  id_found:
-
-    cinfo->cur_comp_info[i] = compptr;
-    compptr->dc_tbl_no = (c >> 4) & 15;
-    compptr->ac_tbl_no = (c     ) & 15;
-
-    TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc,
-	     compptr->dc_tbl_no, compptr->ac_tbl_no);
-  }
-
-  /* Collect the additional scan parameters Ss, Se, Ah/Al. */
-  INPUT_BYTE(cinfo, c, return FALSE);
-  cinfo->Ss = c;
-  INPUT_BYTE(cinfo, c, return FALSE);
-  cinfo->Se = c;
-  INPUT_BYTE(cinfo, c, return FALSE);
-  cinfo->Ah = (c >> 4) & 15;
-  cinfo->Al = (c     ) & 15;
-
-  TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se,
-	   cinfo->Ah, cinfo->Al);
-
-  /* Prepare to scan data & restart markers */
-  cinfo->marker->next_restart_num = 0;
-
-  /* Count another SOS marker */
-  cinfo->input_scan_number++;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-#ifdef D_ARITH_CODING_SUPPORTED
-
-LOCAL(boolean)
-get_dac (j_decompress_ptr cinfo)
-/* Process a DAC marker */
-{
-  INT32 length;
-  int index, val;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  while (length > 0) {
-    INPUT_BYTE(cinfo, index, return FALSE);
-    INPUT_BYTE(cinfo, val, return FALSE);
-
-    length -= 2;
-
-    TRACEMS2(cinfo, 1, JTRC_DAC, index, val);
-
-    if (index < 0 || index >= (2*NUM_ARITH_TBLS))
-      ERREXIT1(cinfo, JERR_DAC_INDEX, index);
-
-    if (index >= NUM_ARITH_TBLS) { /* define AC table */
-      cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val;
-    } else {			/* define DC table */
-      cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F);
-      cinfo->arith_dc_U[index] = (UINT8) (val >> 4);
-      if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index])
-	ERREXIT1(cinfo, JERR_DAC_VALUE, val);
-    }
-  }
-
-  if (length != 0)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-#else /* ! D_ARITH_CODING_SUPPORTED */
-
-#define get_dac(cinfo)  skip_variable(cinfo)
-
-#endif /* D_ARITH_CODING_SUPPORTED */
-
-
-LOCAL(boolean)
-get_dht (j_decompress_ptr cinfo)
-/* Process a DHT marker */
-{
-  INT32 length;
-  UINT8 bits[17];
-  UINT8 huffval[256];
-  int i, index, count;
-  JHUFF_TBL **htblptr;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  while (length > 16) {
-    INPUT_BYTE(cinfo, index, return FALSE);
-
-    TRACEMS1(cinfo, 1, JTRC_DHT, index);
-
-    bits[0] = 0;
-    count = 0;
-    for (i = 1; i <= 16; i++) {
-      INPUT_BYTE(cinfo, bits[i], return FALSE);
-      count += bits[i];
-    }
-
-    length -= 1 + 16;
-
-    TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
-	     bits[1], bits[2], bits[3], bits[4],
-	     bits[5], bits[6], bits[7], bits[8]);
-    TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
-	     bits[9], bits[10], bits[11], bits[12],
-	     bits[13], bits[14], bits[15], bits[16]);
-
-    /* Here we just do minimal validation of the counts to avoid walking
-     * off the end of our table space.  jdhuff.c will check more carefully.
-     */
-    if (count > 256 || ((INT32) count) > length)
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-
-    for (i = 0; i < count; i++)
-      INPUT_BYTE(cinfo, huffval[i], return FALSE);
-
-    length -= count;
-
-    if (index & 0x10) {		/* AC table definition */
-      index -= 0x10;
-      htblptr = &cinfo->ac_huff_tbl_ptrs[index];
-    } else {			/* DC table definition */
-      htblptr = &cinfo->dc_huff_tbl_ptrs[index];
-    }
-
-    if (index < 0 || index >= NUM_HUFF_TBLS)
-      ERREXIT1(cinfo, JERR_DHT_INDEX, index);
-
-    if (*htblptr == NULL)
-      *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-
-    MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
-    MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval));
-  }
-
-  if (length != 0)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_dqt (j_decompress_ptr cinfo)
-/* Process a DQT marker */
-{
-  INT32 length;
-  int n, i, prec;
-  unsigned int tmp;
-  JQUANT_TBL *quant_ptr;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  while (length > 0) {
-    INPUT_BYTE(cinfo, n, return FALSE);
-    prec = n >> 4;
-    n &= 0x0F;
-
-    TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);
-
-    if (n >= NUM_QUANT_TBLS)
-      ERREXIT1(cinfo, JERR_DQT_INDEX, n);
-
-    if (cinfo->quant_tbl_ptrs[n] == NULL)
-      cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo);
-    quant_ptr = cinfo->quant_tbl_ptrs[n];
-
-    for (i = 0; i < DCTSIZE2; i++) {
-      if (prec)
-	INPUT_2BYTES(cinfo, tmp, return FALSE);
-      else
-	INPUT_BYTE(cinfo, tmp, return FALSE);
-      /* We convert the zigzag-order table to natural array order. */
-      quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp;
-    }
-
-    if (cinfo->err->trace_level >= 2) {
-      for (i = 0; i < DCTSIZE2; i += 8) {
-	TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
-		 quant_ptr->quantval[i],   quant_ptr->quantval[i+1],
-		 quant_ptr->quantval[i+2], quant_ptr->quantval[i+3],
-		 quant_ptr->quantval[i+4], quant_ptr->quantval[i+5],
-		 quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]);
-      }
-    }
-
-    length -= DCTSIZE2+1;
-    if (prec) length -= DCTSIZE2;
-  }
-
-  if (length != 0)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_dri (j_decompress_ptr cinfo)
-/* Process a DRI marker */
-{
-  INT32 length;
-  unsigned int tmp;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-
-  if (length != 4)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-
-  TRACEMS1(cinfo, 1, JTRC_DRI, tmp);
-
-  cinfo->restart_interval = tmp;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-/*
- * Routines for processing APPn and COM markers.
- * These are either saved in memory or discarded, per application request.
- * APP0 and APP14 are specially checked to see if they are
- * JFIF and Adobe markers, respectively.
- */
-
-#define APP0_DATA_LEN	14	/* Length of interesting data in APP0 */
-#define APP14_DATA_LEN	12	/* Length of interesting data in APP14 */
-#define APPN_DATA_LEN	14	/* Must be the largest of the above!! */
-
-
-LOCAL(void)
-examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data,
-	      unsigned int datalen, INT32 remaining)
-/* Examine first few bytes from an APP0.
- * Take appropriate action if it is a JFIF marker.
- * datalen is # of bytes at data[], remaining is length of rest of marker data.
- */
-{
-  INT32 totallen = (INT32) datalen + remaining;
-
-  if (datalen >= APP0_DATA_LEN &&
-      GETJOCTET(data[0]) == 0x4A &&
-      GETJOCTET(data[1]) == 0x46 &&
-      GETJOCTET(data[2]) == 0x49 &&
-      GETJOCTET(data[3]) == 0x46 &&
-      GETJOCTET(data[4]) == 0) {
-    /* Found JFIF APP0 marker: save info */
-    cinfo->saw_JFIF_marker = TRUE;
-    cinfo->JFIF_major_version = GETJOCTET(data[5]);
-    cinfo->JFIF_minor_version = GETJOCTET(data[6]);
-    cinfo->density_unit = GETJOCTET(data[7]);
-    cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]);
-    cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]);
-    /* Check version.
-     * Major version must be 1, anything else signals an incompatible change.
-     * (We used to treat this as an error, but now it's a nonfatal warning,
-     * because some bozo at Hijaak couldn't read the spec.)
-     * Minor version should be 0..2, but process anyway if newer.
-     */
-    if (cinfo->JFIF_major_version != 1)
-      WARNMS2(cinfo, JWRN_JFIF_MAJOR,
-	      cinfo->JFIF_major_version, cinfo->JFIF_minor_version);
-    /* Generate trace messages */
-    TRACEMS5(cinfo, 1, JTRC_JFIF,
-	     cinfo->JFIF_major_version, cinfo->JFIF_minor_version,
-	     cinfo->X_density, cinfo->Y_density, cinfo->density_unit);
-    /* Validate thumbnail dimensions and issue appropriate messages */
-    if (GETJOCTET(data[12]) | GETJOCTET(data[13]))
-      TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
-	       GETJOCTET(data[12]), GETJOCTET(data[13]));
-    totallen -= APP0_DATA_LEN;
-    if (totallen !=
-	((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3))
-      TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
-  } else if (datalen >= 6 &&
-      GETJOCTET(data[0]) == 0x4A &&
-      GETJOCTET(data[1]) == 0x46 &&
-      GETJOCTET(data[2]) == 0x58 &&
-      GETJOCTET(data[3]) == 0x58 &&
-      GETJOCTET(data[4]) == 0) {
-    /* Found JFIF "JFXX" extension APP0 marker */
-    /* The library doesn't actually do anything with these,
-     * but we try to produce a helpful trace message.
-     */
-    switch (GETJOCTET(data[5])) {
-    case 0x10:
-      TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen);
-      break;
-    case 0x11:
-      TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen);
-      break;
-    case 0x13:
-      TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen);
-      break;
-    default:
-      TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION,
-	       GETJOCTET(data[5]), (int) totallen);
-      break;
-    }
-  } else {
-    /* Start of APP0 does not match "JFIF" or "JFXX", or too short */
-    TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen);
-  }
-}
-
-
-LOCAL(void)
-examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data,
-	       unsigned int datalen, INT32 remaining)
-/* Examine first few bytes from an APP14.
- * Take appropriate action if it is an Adobe marker.
- * datalen is # of bytes at data[], remaining is length of rest of marker data.
- */
-{
-  unsigned int version, flags0, flags1, transform;
-
-  if (datalen >= APP14_DATA_LEN &&
-      GETJOCTET(data[0]) == 0x41 &&
-      GETJOCTET(data[1]) == 0x64 &&
-      GETJOCTET(data[2]) == 0x6F &&
-      GETJOCTET(data[3]) == 0x62 &&
-      GETJOCTET(data[4]) == 0x65) {
-    /* Found Adobe APP14 marker */
-    version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]);
-    flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]);
-    flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]);
-    transform = GETJOCTET(data[11]);
-    TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
-    cinfo->saw_Adobe_marker = TRUE;
-    cinfo->Adobe_transform = (UINT8) transform;
-  } else {
-    /* Start of APP14 does not match "Adobe", or too short */
-    TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining));
-  }
-}
-
-
-METHODDEF(boolean)
-get_interesting_appn (j_decompress_ptr cinfo)
-/* Process an APP0 or APP14 marker without saving it */
-{
-  INT32 length;
-  JOCTET b[APPN_DATA_LEN];
-  unsigned int i, numtoread;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  /* get the interesting part of the marker data */
-  if (length >= APPN_DATA_LEN)
-    numtoread = APPN_DATA_LEN;
-  else if (length > 0)
-    numtoread = (unsigned int) length;
-  else
-    numtoread = 0;
-  for (i = 0; i < numtoread; i++)
-    INPUT_BYTE(cinfo, b[i], return FALSE);
-  length -= numtoread;
-
-  /* process it */
-  switch (cinfo->unread_marker) {
-  case M_APP0:
-    examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length);
-    break;
-  case M_APP14:
-    examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length);
-    break;
-  default:
-    /* can't get here unless jpeg_save_markers chooses wrong processor */
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
-    break;
-  }
-
-  /* skip any remaining data -- could be lots */
-  INPUT_SYNC(cinfo);
-  if (length > 0)
-    (*cinfo->src->skip_input_data) (cinfo, (long) length);
-
-  return TRUE;
-}
-
-
-#ifdef SAVE_MARKERS_SUPPORTED
-
-METHODDEF(boolean)
-save_marker (j_decompress_ptr cinfo)
-/* Save an APPn or COM marker into the marker list */
-{
-  my_marker_ptr2 marker = (my_marker_ptr2) cinfo->marker;
-  jpeg_saved_marker_ptr cur_marker = marker->cur_marker;
-  unsigned int bytes_read, data_length;
-  JOCTET FAR * data;
-  INT32 length = 0;
-  INPUT_VARS(cinfo);
-
-  if (cur_marker == NULL) {
-    /* begin reading a marker */
-    INPUT_2BYTES(cinfo, length, return FALSE);
-    length -= 2;
-    if (length >= 0) {		/* watch out for bogus length word */
-      /* figure out how much we want to save */
-      unsigned int limit;
-      if (cinfo->unread_marker == (int) M_COM)
-	limit = marker->length_limit_COM;
-      else
-	limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0];
-      if ((unsigned int) length < limit)
-	limit = (unsigned int) length;
-      /* allocate and initialize the marker item */
-      cur_marker = (jpeg_saved_marker_ptr)
-	(*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				    SIZEOF(struct jpeg_marker_struct) + limit);
-      cur_marker->next = NULL;
-      cur_marker->marker = (UINT8) cinfo->unread_marker;
-      cur_marker->original_length = (unsigned int) length;
-      cur_marker->data_length = limit;
-      /* data area is just beyond the jpeg_marker_struct */
-      data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1);
-      marker->cur_marker = cur_marker;
-      marker->bytes_read = 0;
-      bytes_read = 0;
-      data_length = limit;
-    } else {
-      /* deal with bogus length word */
-      bytes_read = data_length = 0;
-      data = NULL;
-    }
-  } else {
-    /* resume reading a marker */
-    bytes_read = marker->bytes_read;
-    data_length = cur_marker->data_length;
-    data = cur_marker->data + bytes_read;
-  }
-
-  while (bytes_read < data_length) {
-    INPUT_SYNC(cinfo);		/* move the restart point to here */
-    marker->bytes_read = bytes_read;
-    /* If there's not at least one byte in buffer, suspend */
-    MAKE_BYTE_AVAIL(cinfo, return FALSE);
-    /* Copy bytes with reasonable rapidity */
-    while (bytes_read < data_length && bytes_in_buffer > 0) {
-      *data++ = *next_input_byte++;
-      bytes_in_buffer--;
-      bytes_read++;
-    }
-  }
-
-  /* Done reading what we want to read */
-  if (cur_marker != NULL) {	/* will be NULL if bogus length word */
-    /* Add new marker to end of list */
-    if (cinfo->marker_list == NULL) {
-      cinfo->marker_list = cur_marker;
-    } else {
-      jpeg_saved_marker_ptr prev = cinfo->marker_list;
-      while (prev->next != NULL)
-	prev = prev->next;
-      prev->next = cur_marker;
-    }
-    /* Reset pointer & calc remaining data length */
-    data = cur_marker->data;
-    length = cur_marker->original_length - data_length;
-  }
-  /* Reset to initial state for next marker */
-  marker->cur_marker = NULL;
-
-  /* Process the marker if interesting; else just make a generic trace msg */
-  switch (cinfo->unread_marker) {
-  case M_APP0:
-    examine_app0(cinfo, data, data_length, length);
-    break;
-  case M_APP14:
-    examine_app14(cinfo, data, data_length, length);
-    break;
-  default:
-    TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker,
-	     (int) (data_length + length));
-    break;
-  }
-
-  /* skip any remaining data -- could be lots */
-  INPUT_SYNC(cinfo);		/* do before skip_input_data */
-  if (length > 0)
-    (*cinfo->src->skip_input_data) (cinfo, (long) length);
-
-  return TRUE;
-}
-
-#endif /* SAVE_MARKERS_SUPPORTED */
-
-
-METHODDEF(boolean)
-skip_variable (j_decompress_ptr cinfo)
-/* Skip over an unknown or uninteresting variable-length marker */
-{
-  INT32 length;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length);
-
-  INPUT_SYNC(cinfo);		/* do before skip_input_data */
-  if (length > 0)
-    (*cinfo->src->skip_input_data) (cinfo, (long) length);
-
-  return TRUE;
-}
-
-
-/*
- * Find the next JPEG marker, save it in cinfo->unread_marker.
- * Returns FALSE if had to suspend before reaching a marker;
- * in that case cinfo->unread_marker is unchanged.
- *
- * Note that the result might not be a valid marker code,
- * but it will never be 0 or FF.
- */
-
-LOCAL(boolean)
-next_marker (j_decompress_ptr cinfo)
-{
-  int c;
-  INPUT_VARS(cinfo);
-
-  for (;;) {
-    INPUT_BYTE(cinfo, c, return FALSE);
-    /* Skip any non-FF bytes.
-     * This may look a bit inefficient, but it will not occur in a valid file.
-     * We sync after each discarded byte so that a suspending data source
-     * can discard the byte from its buffer.
-     */
-    while (c != 0xFF) {
-      cinfo->marker->discarded_bytes++;
-      INPUT_SYNC(cinfo);
-      INPUT_BYTE(cinfo, c, return FALSE);
-    }
-    /* This loop swallows any duplicate FF bytes.  Extra FFs are legal as
-     * pad bytes, so don't count them in discarded_bytes.  We assume there
-     * will not be so many consecutive FF bytes as to overflow a suspending
-     * data source's input buffer.
-     */
-    do {
-      INPUT_BYTE(cinfo, c, return FALSE);
-    } while (c == 0xFF);
-    if (c != 0)
-      break;			/* found a valid marker, exit loop */
-    /* Reach here if we found a stuffed-zero data sequence (FF/00).
-     * Discard it and loop back to try again.
-     */
-    cinfo->marker->discarded_bytes += 2;
-    INPUT_SYNC(cinfo);
-  }
-
-  if (cinfo->marker->discarded_bytes != 0) {
-    WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
-    cinfo->marker->discarded_bytes = 0;
-  }
-
-  cinfo->unread_marker = c;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-first_marker (j_decompress_ptr cinfo)
-/* Like next_marker, but used to obtain the initial SOI marker. */
-/* For this marker, we do not allow preceding garbage or fill; otherwise,
- * we might well scan an entire input file before realizing it ain't JPEG.
- * If an application wants to process non-JFIF files, it must seek to the
- * SOI before calling the JPEG library.
- */
-{
-  int c, c2;
-  INPUT_VARS(cinfo);
-
-  INPUT_BYTE(cinfo, c, return FALSE);
-  INPUT_BYTE(cinfo, c2, return FALSE);
-  if (c != 0xFF || c2 != (int) M_SOI)
-    ERREXIT2(cinfo, JERR_NO_SOI, c, c2);
-
-  cinfo->unread_marker = c2;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-/*
- * Read markers until SOS or EOI.
- *
- * Returns same codes as are defined for jpeg_consume_input:
- * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
- */
-
-METHODDEF(int)
-read_markers (j_decompress_ptr cinfo)
-{
-  /* Outer loop repeats once for each marker. */
-  for (;;) {
-    /* Collect the marker proper, unless we already did. */
-    /* NB: first_marker() enforces the requirement that SOI appear first. */
-    if (cinfo->unread_marker == 0) {
-      if (! cinfo->marker->saw_SOI) {
-	if (! first_marker(cinfo))
-	  return JPEG_SUSPENDED;
-      } else {
-	if (! next_marker(cinfo))
-	  return JPEG_SUSPENDED;
-      }
-    }
-    /* At this point cinfo->unread_marker contains the marker code and the
-     * input point is just past the marker proper, but before any parameters.
-     * A suspension will cause us to return with this state still true.
-     */
-    switch (cinfo->unread_marker) {
-    case M_SOI:
-      if (! get_soi(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF0:		/* Baseline */
-    case M_SOF1:		/* Extended sequential, Huffman */
-      if (! get_sof(cinfo, FALSE, FALSE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF2:		/* Progressive, Huffman */
-      if (! get_sof(cinfo, TRUE, FALSE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF9:		/* Extended sequential, arithmetic */
-      if (! get_sof(cinfo, FALSE, TRUE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF10:		/* Progressive, arithmetic */
-      if (! get_sof(cinfo, TRUE, TRUE))
-	return JPEG_SUSPENDED;
-      break;
-
-    /* Currently unsupported SOFn types */
-    case M_SOF3:		/* Lossless, Huffman */
-    case M_SOF5:		/* Differential sequential, Huffman */
-    case M_SOF6:		/* Differential progressive, Huffman */
-    case M_SOF7:		/* Differential lossless, Huffman */
-    case M_JPG:			/* Reserved for JPEG extensions */
-    case M_SOF11:		/* Lossless, arithmetic */
-    case M_SOF13:		/* Differential sequential, arithmetic */
-    case M_SOF14:		/* Differential progressive, arithmetic */
-    case M_SOF15:		/* Differential lossless, arithmetic */
-      ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker);
-      break;
-
-    case M_SOS:
-      if (! get_sos(cinfo))
-	return JPEG_SUSPENDED;
-      cinfo->unread_marker = 0;	/* processed the marker */
-      return JPEG_REACHED_SOS;
-
-    case M_EOI:
-      TRACEMS(cinfo, 1, JTRC_EOI);
-      cinfo->unread_marker = 0;	/* processed the marker */
-      return JPEG_REACHED_EOI;
-
-    case M_DAC:
-      if (! get_dac(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_DHT:
-      if (! get_dht(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_DQT:
-      if (! get_dqt(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_DRI:
-      if (! get_dri(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_APP0:
-    case M_APP1:
-    case M_APP2:
-    case M_APP3:
-    case M_APP4:
-    case M_APP5:
-    case M_APP6:
-    case M_APP7:
-    case M_APP8:
-    case M_APP9:
-    case M_APP10:
-    case M_APP11:
-    case M_APP12:
-    case M_APP13:
-    case M_APP14:
-    case M_APP15:
-      if (! (*((my_marker_ptr2) cinfo->marker)->process_APPn[
-		cinfo->unread_marker - (int) M_APP0]) (cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_COM:
-      if (! (*((my_marker_ptr2) cinfo->marker)->process_COM) (cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_RST0:		/* these are all parameterless */
-    case M_RST1:
-    case M_RST2:
-    case M_RST3:
-    case M_RST4:
-    case M_RST5:
-    case M_RST6:
-    case M_RST7:
-    case M_TEM:
-      TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker);
-      break;
-
-    case M_DNL:			/* Ignore DNL ... perhaps the wrong thing */
-      if (! skip_variable(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    default:			/* must be DHP, EXP, JPGn, or RESn */
-      /* For now, we treat the reserved markers as fatal errors since they are
-       * likely to be used to signal incompatible JPEG Part 3 extensions.
-       * Once the JPEG 3 version-number marker is well defined, this code
-       * ought to change!
-       */
-      ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
-      break;
-    }
-    /* Successfully processed marker, so reset state variable */
-    cinfo->unread_marker = 0;
-  } /* end loop */
-}
-
-
-/*
- * Read a restart marker, which is expected to appear next in the datastream;
- * if the marker is not there, take appropriate recovery action.
- * Returns FALSE if suspension is required.
- *
- * This is called by the entropy decoder after it has read an appropriate
- * number of MCUs.  cinfo->unread_marker may be nonzero if the entropy decoder
- * has already read a marker from the data source.  Under normal conditions
- * cinfo->unread_marker will be reset to 0 before returning; if not reset,
- * it holds a marker which the decoder will be unable to read past.
- */
-
-METHODDEF(boolean)
-read_restart_marker (j_decompress_ptr cinfo)
-{
-  /* Obtain a marker unless we already did. */
-  /* Note that next_marker will complain if it skips any data. */
-  if (cinfo->unread_marker == 0) {
-    if (! next_marker(cinfo))
-      return FALSE;
-  }
-
-  if (cinfo->unread_marker ==
-      ((int) M_RST0 + cinfo->marker->next_restart_num)) {
-    /* Normal case --- swallow the marker and let entropy decoder continue */
-    TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num);
-    cinfo->unread_marker = 0;
-  } else {
-    /* Uh-oh, the restart markers have been messed up. */
-    /* Let the data source manager determine how to resync. */
-    if (! (*cinfo->src->resync_to_restart) (cinfo,
-					    cinfo->marker->next_restart_num))
-      return FALSE;
-  }
-
-  /* Update next-restart state */
-  cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7;
-
-  return TRUE;
-}
-
-
-/*
- * This is the default resync_to_restart method for data source managers
- * to use if they don't have any better approach.  Some data source managers
- * may be able to back up, or may have additional knowledge about the data
- * which permits a more intelligent recovery strategy; such managers would
- * presumably supply their own resync method.
- *
- * read_restart_marker calls resync_to_restart if it finds a marker other than
- * the restart marker it was expecting.  (This code is *not* used unless
- * a nonzero restart interval has been declared.)  cinfo->unread_marker is
- * the marker code actually found (might be anything, except 0 or FF).
- * The desired restart marker number (0..7) is passed as a parameter.
- * This routine is supposed to apply whatever error recovery strategy seems
- * appropriate in order to position the input stream to the next data segment.
- * Note that cinfo->unread_marker is treated as a marker appearing before
- * the current data-source input point; usually it should be reset to zero
- * before returning.
- * Returns FALSE if suspension is required.
- *
- * This implementation is substantially constrained by wanting to treat the
- * input as a data stream; this means we can't back up.  Therefore, we have
- * only the following actions to work with:
- *   1. Simply discard the marker and let the entropy decoder resume at next
- *      byte of file.
- *   2. Read forward until we find another marker, discarding intervening
- *      data.  (In theory we could look ahead within the current bufferload,
- *      without having to discard data if we don't find the desired marker.
- *      This idea is not implemented here, in part because it makes behavior
- *      dependent on buffer size and chance buffer-boundary positions.)
- *   3. Leave the marker unread (by failing to zero cinfo->unread_marker).
- *      This will cause the entropy decoder to process an empty data segment,
- *      inserting dummy zeroes, and then we will reprocess the marker.
- *
- * #2 is appropriate if we think the desired marker lies ahead, while #3 is
- * appropriate if the found marker is a future restart marker (indicating
- * that we have missed the desired restart marker, probably because it got
- * corrupted).
- * We apply #2 or #3 if the found marker is a restart marker no more than
- * two counts behind or ahead of the expected one.  We also apply #2 if the
- * found marker is not a legal JPEG marker code (it's certainly bogus data).
- * If the found marker is a restart marker more than 2 counts away, we do #1
- * (too much risk that the marker is erroneous; with luck we will be able to
- * resync at some future point).
- * For any valid non-restart JPEG marker, we apply #3.  This keeps us from
- * overrunning the end of a scan.  An implementation limited to single-scan
- * files might find it better to apply #2 for markers other than EOI, since
- * any other marker would have to be bogus data in that case.
- */
-
-GLOBAL(boolean)
-jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired)
-{
-  int marker = cinfo->unread_marker;
-  int action = 1;
-
-  /* Always put up a warning. */
-  WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
-
-  /* Outer loop handles repeated decision after scanning forward. */
-  for (;;) {
-    if (marker < (int) M_SOF0)
-      action = 2;		/* invalid marker */
-    else if (marker < (int) M_RST0 || marker > (int) M_RST7)
-      action = 3;		/* valid non-restart marker */
-    else {
-      if (marker == ((int) M_RST0 + ((desired+1) & 7)) ||
-	  marker == ((int) M_RST0 + ((desired+2) & 7)))
-	action = 3;		/* one of the next two expected restarts */
-      else if (marker == ((int) M_RST0 + ((desired-1) & 7)) ||
-	       marker == ((int) M_RST0 + ((desired-2) & 7)))
-	action = 2;		/* a prior restart, so advance */
-      else
-	action = 1;		/* desired restart or too far away */
-    }
-    TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
-    switch (action) {
-    case 1:
-      /* Discard marker and let entropy decoder resume processing. */
-      cinfo->unread_marker = 0;
-      return TRUE;
-    case 2:
-      /* Scan to the next marker, and repeat the decision loop. */
-      if (! next_marker(cinfo))
-	return FALSE;
-      marker = cinfo->unread_marker;
-      break;
-    case 3:
-      /* Return without advancing past this marker. */
-      /* Entropy decoder will be forced to process an empty segment. */
-      return TRUE;
-    }
-  } /* end loop */
-}
-
-
-/*
- * Reset marker processing state to begin a fresh datastream.
- */
-
-METHODDEF(void)
-reset_marker_reader (j_decompress_ptr cinfo)
-{
-  my_marker_ptr2 marker = (my_marker_ptr2) cinfo->marker;
-
-  cinfo->comp_info = NULL;		/* until allocated by get_sof */
-  cinfo->input_scan_number = 0;		/* no SOS seen yet */
-  cinfo->unread_marker = 0;		/* no pending marker */
-  marker->pub.saw_SOI = FALSE;		/* set internal state too */
-  marker->pub.saw_SOF = FALSE;
-  marker->pub.discarded_bytes = 0;
-  marker->cur_marker = NULL;
-}
-
-
-/*
- * Initialize the marker reader module.
- * This is called only once, when the decompression object is created.
- */
-
-GLOBAL(void)
-jinit_marker_reader (j_decompress_ptr cinfo)
-{
-  my_marker_ptr2 marker;
-  int i;
-
-  /* Create subobject in permanent pool */
-  marker = (my_marker_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				SIZEOF(my_marker_reader));
-  cinfo->marker = (struct jpeg_marker_reader *) marker;
-  /* Initialize public method pointers */
-  marker->pub.reset_marker_reader = reset_marker_reader;
-  marker->pub.read_markers = read_markers;
-  marker->pub.read_restart_marker = read_restart_marker;
-  /* Initialize COM/APPn processing.
-   * By default, we examine and then discard APP0 and APP14,
-   * but simply discard COM and all other APPn.
-   */
-  marker->process_COM = skip_variable;
-  marker->length_limit_COM = 0;
-  for (i = 0; i < 16; i++) {
-    marker->process_APPn[i] = skip_variable;
-    marker->length_limit_APPn[i] = 0;
-  }
-  marker->process_APPn[0] = get_interesting_appn;
-  marker->process_APPn[14] = get_interesting_appn;
-  /* Reset marker processing state */
-  reset_marker_reader(cinfo);
-}
-
-
-/*
- * Control saving of COM and APPn markers into marker_list.
- */
-
-#ifdef SAVE_MARKERS_SUPPORTED
-
-GLOBAL(void)
-jpeg_save_markers (j_decompress_ptr cinfo, int marker_code,
-		   unsigned int length_limit)
-{
-  my_marker_ptr2 marker = (my_marker_ptr2) cinfo->marker;
-  long maxlength;
-  jpeg_marker_parser_method processor;
-
-  /* Length limit mustn't be larger than what we can allocate
-   * (should only be a concern in a 16-bit environment).
-   */
-  maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct);
-  if (((long) length_limit) > maxlength)
-    length_limit = (unsigned int) maxlength;
-
-  /* Choose processor routine to use.
-   * APP0/APP14 have special requirements.
-   */
-  if (length_limit) {
-    processor = save_marker;
-    /* If saving APP0/APP14, save at least enough for our internal use. */
-    if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN)
-      length_limit = APP0_DATA_LEN;
-    else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN)
-      length_limit = APP14_DATA_LEN;
-  } else {
-    processor = skip_variable;
-    /* If discarding APP0/APP14, use our regular on-the-fly processor. */
-    if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14)
-      processor = get_interesting_appn;
-  }
-
-  if (marker_code == (int) M_COM) {
-    marker->process_COM = processor;
-    marker->length_limit_COM = length_limit;
-  } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) {
-    marker->process_APPn[marker_code - (int) M_APP0] = processor;
-    marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit;
-  } else
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
-}
-
-#endif /* SAVE_MARKERS_SUPPORTED */
-
-
-/*
- * Install a special processing method for COM or APPn markers.
- */
-
-GLOBAL(void)
-jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code,
-			   jpeg_marker_parser_method routine)
-{
-  my_marker_ptr2 marker = (my_marker_ptr2) cinfo->marker;
-
-  if (marker_code == (int) M_COM)
-    marker->process_COM = routine;
-  else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15)
-    marker->process_APPn[marker_code - (int) M_APP0] = routine;
-  else
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdmaster.c b/modules/juce_graphics/image_formats/jpglib/jdmaster.c
deleted file mode 100644
index 8c7ec43..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdmaster.c
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * jdmaster.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains master control logic for the JPEG decompressor.
- * These routines are concerned with selecting the modules to be executed
- * and with determining the number of passes and the work to be done in each
- * pass.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_decomp_master pub; /* public fields */
-
-  int pass_number;		/* # of passes completed */
-
-  boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */
-
-  /* Saved references to initialized quantizer modules,
-   * in case we need to switch modes.
-   */
-  struct jpeg_color_quantizer * quantizer_1pass;
-  struct jpeg_color_quantizer * quantizer_2pass;
-} my_decomp_master;
-
-typedef my_decomp_master * my_master_ptr6;
-
-
-/*
- * Determine whether merged upsample/color conversion should be used.
- * CRUCIAL: this must match the actual capabilities of jdmerge.c!
- */
-
-LOCAL(boolean)
-use_merged_upsample (j_decompress_ptr cinfo)
-{
-#ifdef UPSAMPLE_MERGING_SUPPORTED
-  /* Merging is the equivalent of plain box-filter upsampling */
-  if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling)
-    return FALSE;
-  /* jdmerge.c only supports YCC=>RGB color conversion */
-  if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 ||
-      cinfo->out_color_space != JCS_RGB ||
-      cinfo->out_color_components != RGB_PIXELSIZE)
-    return FALSE;
-  /* and it only handles 2h1v or 2h2v sampling ratios */
-  if (cinfo->comp_info[0].h_samp_factor != 2 ||
-      cinfo->comp_info[1].h_samp_factor != 1 ||
-      cinfo->comp_info[2].h_samp_factor != 1 ||
-      cinfo->comp_info[0].v_samp_factor >  2 ||
-      cinfo->comp_info[1].v_samp_factor != 1 ||
-      cinfo->comp_info[2].v_samp_factor != 1)
-    return FALSE;
-  /* furthermore, it doesn't work if we've scaled the IDCTs differently */
-  if (cinfo->comp_info[0].DCT_scaled_size != cinfo->min_DCT_scaled_size ||
-      cinfo->comp_info[1].DCT_scaled_size != cinfo->min_DCT_scaled_size ||
-      cinfo->comp_info[2].DCT_scaled_size != cinfo->min_DCT_scaled_size)
-    return FALSE;
-  /* ??? also need to test for upsample-time rescaling, when & if supported */
-  return TRUE;			/* by golly, it'll work... */
-#else
-  return FALSE;
-#endif
-}
-
-
-/*
- * Compute output image dimensions and related values.
- * NOTE: this is exported for possible use by application.
- * Hence it mustn't do anything that can't be done twice.
- * Also note that it may be called before the master module is initialized!
- */
-
-GLOBAL(void)
-jpeg_calc_output_dimensions (j_decompress_ptr cinfo)
-/* Do computations that are needed before master selection phase */
-{
-#ifdef IDCT_SCALING_SUPPORTED
-  int ci;
-  jpeg_component_info *compptr;
-#endif
-
-  /* Prevent application from calling me at wrong times */
-  if (cinfo->global_state != DSTATE_READY)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-#ifdef IDCT_SCALING_SUPPORTED
-
-  /* Compute actual output image dimensions and DCT scaling choices. */
-  if (cinfo->scale_num * 8 <= cinfo->scale_denom) {
-    /* Provide 1/8 scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, 8L);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, 8L);
-    cinfo->min_DCT_scaled_size = 1;
-  } else if (cinfo->scale_num * 4 <= cinfo->scale_denom) {
-    /* Provide 1/4 scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, 4L);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, 4L);
-    cinfo->min_DCT_scaled_size = 2;
-  } else if (cinfo->scale_num * 2 <= cinfo->scale_denom) {
-    /* Provide 1/2 scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, 2L);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, 2L);
-    cinfo->min_DCT_scaled_size = 4;
-  } else {
-    /* Provide 1/1 scaling */
-    cinfo->output_width = cinfo->image_width;
-    cinfo->output_height = cinfo->image_height;
-    cinfo->min_DCT_scaled_size = DCTSIZE;
-  }
-  /* In selecting the actual DCT scaling for each component, we try to
-   * scale up the chroma components via IDCT scaling rather than upsampling.
-   * This saves time if the upsampler gets to use 1:1 scaling.
-   * Note this code assumes that the supported DCT scalings are powers of 2.
-   */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    int ssize = cinfo->min_DCT_scaled_size;
-    while (ssize < DCTSIZE &&
-	   (compptr->h_samp_factor * ssize * 2 <=
-	    cinfo->max_h_samp_factor * cinfo->min_DCT_scaled_size) &&
-	   (compptr->v_samp_factor * ssize * 2 <=
-	    cinfo->max_v_samp_factor * cinfo->min_DCT_scaled_size)) {
-      ssize = ssize * 2;
-    }
-    compptr->DCT_scaled_size = ssize;
-  }
-
-  /* Recompute downsampled dimensions of components;
-   * application needs to know these if using raw downsampled data.
-   */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Size in samples, after IDCT scaling */
-    compptr->downsampled_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width *
-		    (long) (compptr->h_samp_factor * compptr->DCT_scaled_size),
-		    (long) (cinfo->max_h_samp_factor * DCTSIZE));
-    compptr->downsampled_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height *
-		    (long) (compptr->v_samp_factor * compptr->DCT_scaled_size),
-		    (long) (cinfo->max_v_samp_factor * DCTSIZE));
-  }
-
-#else /* !IDCT_SCALING_SUPPORTED */
-
-  /* Hardwire it to "no scaling" */
-  cinfo->output_width = cinfo->image_width;
-  cinfo->output_height = cinfo->image_height;
-  /* jdinput.c has already initialized DCT_scaled_size to DCTSIZE,
-   * and has computed unscaled downsampled_width and downsampled_height.
-   */
-
-#endif /* IDCT_SCALING_SUPPORTED */
-
-  /* Report number of components in selected colorspace. */
-  /* Probably this should be in the color conversion module... */
-  switch (cinfo->out_color_space) {
-  case JCS_GRAYSCALE:
-    cinfo->out_color_components = 1;
-    break;
-  case JCS_RGB:
-#if RGB_PIXELSIZE != 3
-    cinfo->out_color_components = RGB_PIXELSIZE;
-    break;
-#endif /* else share code with YCbCr */
-  case JCS_YCbCr:
-    cinfo->out_color_components = 3;
-    break;
-  case JCS_CMYK:
-  case JCS_YCCK:
-    cinfo->out_color_components = 4;
-    break;
-  default:			/* else must be same colorspace as in file */
-    cinfo->out_color_components = cinfo->num_components;
-    break;
-  }
-  cinfo->output_components = (cinfo->quantize_colors ? 1 :
-			      cinfo->out_color_components);
-
-  /* See if upsampler will want to emit more than one row at a time */
-  if (use_merged_upsample(cinfo))
-    cinfo->rec_outbuf_height = cinfo->max_v_samp_factor;
-  else
-    cinfo->rec_outbuf_height = 1;
-}
-
-
-/*
- * Several decompression processes need to range-limit values to the range
- * 0..MAXJSAMPLE; the input value may fall somewhat outside this range
- * due to noise introduced by quantization, roundoff error, etc.  These
- * processes are inner loops and need to be as fast as possible.  On most
- * machines, particularly CPUs with pipelines or instruction prefetch,
- * a (subscript-check-less) C table lookup
- *		x = sample_range_limit[x];
- * is faster than explicit tests
- *		if (x < 0)  x = 0;
- *		else if (x > MAXJSAMPLE)  x = MAXJSAMPLE;
- * These processes all use a common table prepared by the routine below.
- *
- * For most steps we can mathematically guarantee that the initial value
- * of x is within MAXJSAMPLE+1 of the legal range, so a table running from
- * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient.  But for the initial
- * limiting step (just after the IDCT), a wildly out-of-range value is
- * possible if the input data is corrupt.  To avoid any chance of indexing
- * off the end of memory and getting a bad-pointer trap, we perform the
- * post-IDCT limiting thus:
- *		x = range_limit[x & MASK];
- * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit
- * samples.  Under normal circumstances this is more than enough range and
- * a correct output will be generated; with bogus input data the mask will
- * cause wraparound, and we will safely generate a bogus-but-in-range output.
- * For the post-IDCT step, we want to convert the data from signed to unsigned
- * representation by adding CENTERJSAMPLE at the same time that we limit it.
- * So the post-IDCT limiting table ends up looking like this:
- *   CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE,
- *   MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times),
- *   0          (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times),
- *   0,1,...,CENTERJSAMPLE-1
- * Negative inputs select values from the upper half of the table after
- * masking.
- *
- * We can save some space by overlapping the start of the post-IDCT table
- * with the simpler range limiting table.  The post-IDCT table begins at
- * sample_range_limit + CENTERJSAMPLE.
- *
- * Note that the table is allocated in near data space on PCs; it's small
- * enough and used often enough to justify this.
- */
-
-LOCAL(void)
-prepare_range_limit_table (j_decompress_ptr cinfo)
-/* Allocate and fill in the sample_range_limit table */
-{
-  JSAMPLE * table;
-  int i;
-
-  table = (JSAMPLE *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-		(5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE));
-  table += (MAXJSAMPLE+1);	/* allow negative subscripts of simple table */
-  cinfo->sample_range_limit = table;
-  /* First segment of "simple" table: limit[x] = 0 for x < 0 */
-  MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE));
-  /* Main part of "simple" table: limit[x] = x */
-  for (i = 0; i <= MAXJSAMPLE; i++)
-    table[i] = (JSAMPLE) i;
-  table += CENTERJSAMPLE;	/* Point to where post-IDCT table starts */
-  /* End of simple table, rest of first half of post-IDCT table */
-  for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++)
-    table[i] = MAXJSAMPLE;
-  /* Second half of post-IDCT table */
-  MEMZERO(table + (2 * (MAXJSAMPLE+1)),
-	  (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE));
-  MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE),
-	  cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE));
-}
-
-
-/*
- * Master selection of decompression modules.
- * This is done once at jpeg_start_decompress time.  We determine
- * which modules will be used and give them appropriate initialization calls.
- * We also initialize the decompressor input side to begin consuming data.
- *
- * Since jpeg_read_header has finished, we know what is in the SOF
- * and (first) SOS markers.  We also have all the application parameter
- * settings.
- */
-
-LOCAL(void)
-master_selection (j_decompress_ptr cinfo)
-{
-  my_master_ptr6 master = (my_master_ptr6) cinfo->master;
-  boolean use_c_buffer;
-  long samplesperrow;
-  JDIMENSION jd_samplesperrow;
-
-  /* Initialize dimensions and other stuff */
-  jpeg_calc_output_dimensions(cinfo);
-  prepare_range_limit_table(cinfo);
-
-  /* Width of an output scanline must be representable as JDIMENSION. */
-  samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components;
-  jd_samplesperrow = (JDIMENSION) samplesperrow;
-  if ((long) jd_samplesperrow != samplesperrow)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-
-  /* Initialize my private state */
-  master->pass_number = 0;
-  master->using_merged_upsample = use_merged_upsample(cinfo);
-
-  /* Color quantizer selection */
-  master->quantizer_1pass = NULL;
-  master->quantizer_2pass = NULL;
-  /* No mode changes if not using buffered-image mode. */
-  if (! cinfo->quantize_colors || ! cinfo->buffered_image) {
-    cinfo->enable_1pass_quant = FALSE;
-    cinfo->enable_external_quant = FALSE;
-    cinfo->enable_2pass_quant = FALSE;
-  }
-  if (cinfo->quantize_colors) {
-    if (cinfo->raw_data_out)
-      ERREXIT(cinfo, JERR_NOTIMPL);
-    /* 2-pass quantizer only works in 3-component color space. */
-    if (cinfo->out_color_components != 3) {
-      cinfo->enable_1pass_quant = TRUE;
-      cinfo->enable_external_quant = FALSE;
-      cinfo->enable_2pass_quant = FALSE;
-      cinfo->colormap = NULL;
-    } else if (cinfo->colormap != NULL) {
-      cinfo->enable_external_quant = TRUE;
-    } else if (cinfo->two_pass_quantize) {
-      cinfo->enable_2pass_quant = TRUE;
-    } else {
-      cinfo->enable_1pass_quant = TRUE;
-    }
-
-    if (cinfo->enable_1pass_quant) {
-#ifdef QUANT_1PASS_SUPPORTED
-      jinit_1pass_quantizer(cinfo);
-      master->quantizer_1pass = cinfo->cquantize;
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    }
-
-    /* We use the 2-pass code to map to external colormaps. */
-    if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) {
-#ifdef QUANT_2PASS_SUPPORTED
-      jinit_2pass_quantizer(cinfo);
-      master->quantizer_2pass = cinfo->cquantize;
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    }
-    /* If both quantizers are initialized, the 2-pass one is left active;
-     * this is necessary for starting with quantization to an external map.
-     */
-  }
-
-  /* Post-processing: in particular, color conversion first */
-  if (! cinfo->raw_data_out) {
-    if (master->using_merged_upsample) {
-#ifdef UPSAMPLE_MERGING_SUPPORTED
-      jinit_merged_upsampler(cinfo); /* does color conversion too */
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    } else {
-      jinit_color_deconverter(cinfo);
-      jinit_upsampler(cinfo);
-    }
-    jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant);
-  }
-  /* Inverse DCT */
-  jinit_inverse_dct(cinfo);
-  /* Entropy decoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code) {
-    ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
-  } else {
-    if (cinfo->progressive_mode) {
-#ifdef D_PROGRESSIVE_SUPPORTED
-      jinit_phuff_decoder(cinfo);
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    } else
-      jinit_huff_decoder(cinfo);
-  }
-
-  /* Initialize principal buffer controllers. */
-  use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image;
-  jinit_d_coef_controller(cinfo, use_c_buffer);
-
-  if (! cinfo->raw_data_out)
-    jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Initialize input side of decompressor to consume first scan. */
-  (*cinfo->inputctl->start_input_pass) (cinfo);
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-  /* If jpeg_start_decompress will read the whole file, initialize
-   * progress monitoring appropriately.  The input step is counted
-   * as one pass.
-   */
-  if (cinfo->progress != NULL && ! cinfo->buffered_image &&
-      cinfo->inputctl->has_multiple_scans) {
-    int nscans;
-    /* Estimate number of scans to set pass_limit. */
-    if (cinfo->progressive_mode) {
-      /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
-      nscans = 2 + 3 * cinfo->num_components;
-    } else {
-      /* For a nonprogressive multiscan file, estimate 1 scan per component. */
-      nscans = cinfo->num_components;
-    }
-    cinfo->progress->pass_counter = 0L;
-    cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
-    cinfo->progress->completed_passes = 0;
-    cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2);
-    /* Count the input pass as done */
-    master->pass_number++;
-  }
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-}
-
-
-/*
- * Per-pass setup.
- * This is called at the beginning of each output pass.  We determine which
- * modules will be active during this pass and give them appropriate
- * start_pass calls.  We also set is_dummy_pass to indicate whether this
- * is a "real" output pass or a dummy pass for color quantization.
- * (In the latter case, jdapistd.c will crank the pass to completion.)
- */
-
-METHODDEF(void)
-prepare_for_output_pass (j_decompress_ptr cinfo)
-{
-  my_master_ptr6 master = (my_master_ptr6) cinfo->master;
-
-  if (master->pub.is_dummy_pass) {
-#ifdef QUANT_2PASS_SUPPORTED
-    /* Final pass of 2-pass quantization */
-    master->pub.is_dummy_pass = FALSE;
-    (*cinfo->cquantize->start_pass) (cinfo, FALSE);
-    (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST);
-    (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST);
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif /* QUANT_2PASS_SUPPORTED */
-  } else {
-    if (cinfo->quantize_colors && cinfo->colormap == NULL) {
-      /* Select new quantization method */
-      if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) {
-	cinfo->cquantize = master->quantizer_2pass;
-	master->pub.is_dummy_pass = TRUE;
-      } else if (cinfo->enable_1pass_quant) {
-	cinfo->cquantize = master->quantizer_1pass;
-      } else {
-	ERREXIT(cinfo, JERR_MODE_CHANGE);
-      }
-    }
-    (*cinfo->idct->start_pass) (cinfo);
-    (*cinfo->coef->start_output_pass) (cinfo);
-    if (! cinfo->raw_data_out) {
-      if (! master->using_merged_upsample)
-	(*cinfo->cconvert->start_pass) (cinfo);
-      (*cinfo->upsample->start_pass) (cinfo);
-      if (cinfo->quantize_colors)
-	(*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass);
-      (*cinfo->post->start_pass) (cinfo,
-	    (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
-      (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU);
-    }
-  }
-
-  /* Set up progress monitor's pass info if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->completed_passes = master->pass_number;
-    cinfo->progress->total_passes = master->pass_number +
-				    (master->pub.is_dummy_pass ? 2 : 1);
-    /* In buffered-image mode, we assume one more output pass if EOI not
-     * yet reached, but no more passes if EOI has been reached.
-     */
-    if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) {
-      cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1);
-    }
-  }
-}
-
-
-/*
- * Finish up at end of an output pass.
- */
-
-METHODDEF(void)
-finish_output_pass (j_decompress_ptr cinfo)
-{
-  my_master_ptr6 master = (my_master_ptr6) cinfo->master;
-
-  if (cinfo->quantize_colors)
-    (*cinfo->cquantize->finish_pass) (cinfo);
-  master->pass_number++;
-}
-
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-
-/*
- * Switch to a new external colormap between output passes.
- */
-
-GLOBAL(void)
-jpeg_new_colormap (j_decompress_ptr cinfo)
-{
-  my_master_ptr6 master = (my_master_ptr6) cinfo->master;
-
-  /* Prevent application from calling me at wrong times */
-  if (cinfo->global_state != DSTATE_BUFIMAGE)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  if (cinfo->quantize_colors && cinfo->enable_external_quant &&
-      cinfo->colormap != NULL) {
-    /* Select 2-pass quantizer for external colormap use */
-    cinfo->cquantize = master->quantizer_2pass;
-    /* Notify quantizer of colormap change */
-    (*cinfo->cquantize->new_color_map) (cinfo);
-    master->pub.is_dummy_pass = FALSE; /* just in case */
-  } else
-    ERREXIT(cinfo, JERR_MODE_CHANGE);
-}
-
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-
-
-/*
- * Initialize master decompression control and select active modules.
- * This is performed at the start of jpeg_start_decompress.
- */
-
-GLOBAL(void)
-jinit_master_decompress (j_decompress_ptr cinfo)
-{
-  my_master_ptr6 master;
-
-  master = (my_master_ptr6)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(my_decomp_master));
-  cinfo->master = (struct jpeg_decomp_master *) master;
-  master->pub.prepare_for_output_pass = prepare_for_output_pass;
-  master->pub.finish_output_pass = finish_output_pass;
-
-  master->pub.is_dummy_pass = FALSE;
-
-  master_selection(cinfo);
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdmerge.c b/modules/juce_graphics/image_formats/jpglib/jdmerge.c
deleted file mode 100644
index faee6ce..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdmerge.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * jdmerge.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains code for merged upsampling/color conversion.
- *
- * This file combines functions from jdsample.c and jdcolor.c;
- * read those files first to understand what's going on.
- *
- * When the chroma components are to be upsampled by simple replication
- * (ie, box filtering), we can save some work in color conversion by
- * calculating all the output pixels corresponding to a pair of chroma
- * samples at one time.  In the conversion equations
- *	R = Y           + K1 * Cr
- *	G = Y + K2 * Cb + K3 * Cr
- *	B = Y + K4 * Cb
- * only the Y term varies among the group of pixels corresponding to a pair
- * of chroma samples, so the rest of the terms can be calculated just once.
- * At typical sampling ratios, this eliminates half or three-quarters of the
- * multiplications needed for color conversion.
- *
- * This file currently provides implementations for the following cases:
- *	YCbCr => RGB color conversion only.
- *	Sampling ratios of 2h1v or 2h2v.
- *	No scaling needed at upsample time.
- *	Corner-aligned (non-CCIR601) sampling alignment.
- * Other special cases could be added, but in most applications these are
- * the only common cases.  (For uncommon cases we fall back on the more
- * general code in jdsample.c and jdcolor.c.)
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#ifdef UPSAMPLE_MERGING_SUPPORTED
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_upsampler pub;	/* public fields */
-
-  /* Pointer to routine to do actual upsampling/conversion of one row group */
-  JMETHOD(void, upmethod, (j_decompress_ptr cinfo,
-			   JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
-			   JSAMPARRAY output_buf));
-
-  /* Private state for YCC->RGB conversion */
-  int * Cr_r_tab;		/* => table for Cr to R conversion */
-  int * Cb_b_tab;		/* => table for Cb to B conversion */
-  INT32 * Cr_g_tab;		/* => table for Cr to G conversion */
-  INT32 * Cb_g_tab;		/* => table for Cb to G conversion */
-
-  /* For 2:1 vertical sampling, we produce two output rows at a time.
-   * We need a "spare" row buffer to hold the second output row if the
-   * application provides just a one-row buffer; we also use the spare
-   * to discard the dummy last row if the image height is odd.
-   */
-  JSAMPROW spare_row;
-  boolean spare_full;		/* T if spare buffer is occupied */
-
-  JDIMENSION out_row_width;	/* samples per output row */
-  JDIMENSION rows_to_go;	/* counts rows remaining in image */
-} my_upsampler;
-
-typedef my_upsampler * my_upsample_ptr;
-
-#define SCALEBITS	16	/* speediest right-shift on some machines */
-#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
-#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
-
-
-/*
- * Initialize tables for YCC->RGB colorspace conversion.
- * This is taken directly from jdcolor.c; see that file for more info.
- */
-
-LOCAL(void)
-build_ycc_rgb_table2 (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  int i;
-  INT32 x;
-  SHIFT_TEMPS
-
-  upsample->Cr_r_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  upsample->Cb_b_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  upsample->Cr_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-  upsample->Cb_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-
-  for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
-    /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
-    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
-    /* Cr=>R value is nearest int to 1.40200 * x */
-    upsample->Cr_r_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS);
-    /* Cb=>B value is nearest int to 1.77200 * x */
-    upsample->Cb_b_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS);
-    /* Cr=>G value is scaled-up -0.71414 * x */
-    upsample->Cr_g_tab[i] = (- FIX(0.71414)) * x;
-    /* Cb=>G value is scaled-up -0.34414 * x */
-    /* We also add in ONE_HALF so that need not do it in inner loop */
-    upsample->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF;
-  }
-}
-
-
-/*
- * Initialize for an upsampling pass.
- */
-
-METHODDEF(void)
-start_pass_merged_upsample (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-
-  /* Mark the spare buffer empty */
-  upsample->spare_full = FALSE;
-  /* Initialize total-height counter for detecting bottom of image */
-  upsample->rows_to_go = cinfo->output_height;
-}
-
-
-/*
- * Control routine to do upsampling (and color conversion).
- *
- * The control routine just handles the row buffering considerations.
- */
-
-METHODDEF(void)
-merged_2v_upsample (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-/* 2:1 vertical sampling case: may need a spare row. */
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  JSAMPROW work_ptrs[2];
-  JDIMENSION num_rows;		/* number of rows returned to caller */
-
-  if (upsample->spare_full) {
-    /* If we have a spare row saved from a previous cycle, just return it. */
-    jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0,
-		      1, upsample->out_row_width);
-    num_rows = 1;
-    upsample->spare_full = FALSE;
-  } else {
-    /* Figure number of rows to return to caller. */
-    num_rows = 2;
-    /* Not more than the distance to the end of the image. */
-    if (num_rows > upsample->rows_to_go)
-      num_rows = upsample->rows_to_go;
-    /* And not more than what the client can accept: */
-    out_rows_avail -= *out_row_ctr;
-    if (num_rows > out_rows_avail)
-      num_rows = out_rows_avail;
-    /* Create output pointer array for upsampler. */
-    work_ptrs[0] = output_buf[*out_row_ctr];
-    if (num_rows > 1) {
-      work_ptrs[1] = output_buf[*out_row_ctr + 1];
-    } else {
-      work_ptrs[1] = upsample->spare_row;
-      upsample->spare_full = TRUE;
-    }
-    /* Now do the upsampling. */
-    (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs);
-  }
-
-  /* Adjust counts */
-  *out_row_ctr += num_rows;
-  upsample->rows_to_go -= num_rows;
-  /* When the buffer is emptied, declare this input row group consumed */
-  if (! upsample->spare_full)
-    (*in_row_group_ctr)++;
-}
-
-
-METHODDEF(void)
-merged_1v_upsample (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION)
-/* 1:1 vertical sampling case: much easier, never need a spare row. */
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-
-  /* Just do the upsampling. */
-  (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr,
-			 output_buf + *out_row_ctr);
-  /* Adjust counts */
-  (*out_row_ctr)++;
-  (*in_row_group_ctr)++;
-}
-
-
-/*
- * These are the routines invoked by the control routines to do
- * the actual upsampling/conversion.  One row group is processed per call.
- *
- * Note: since we may be writing directly into application-supplied buffers,
- * we have to be honest about the output width; we can't assume the buffer
- * has been rounded up to an even width.
- */
-
-
-/*
- * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical.
- */
-
-METHODDEF(void)
-h2v1_merged_upsample (j_decompress_ptr cinfo,
-		      JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
-		      JSAMPARRAY output_buf)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  register int y, cred, cgreen, cblue;
-  int cb, cr;
-  register JSAMPROW outptr;
-  JSAMPROW inptr0, inptr1, inptr2;
-  JDIMENSION col;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  int * Crrtab = upsample->Cr_r_tab;
-  int * Cbbtab = upsample->Cb_b_tab;
-  INT32 * Crgtab = upsample->Cr_g_tab;
-  INT32 * Cbgtab = upsample->Cb_g_tab;
-  SHIFT_TEMPS
-
-  inptr0 = input_buf[0][in_row_group_ctr];
-  inptr1 = input_buf[1][in_row_group_ctr];
-  inptr2 = input_buf[2][in_row_group_ctr];
-  outptr = output_buf[0];
-  /* Loop for each pair of output pixels */
-  for (col = cinfo->output_width >> 1; col > 0; col--) {
-    /* Do the chroma part of the calculation */
-    cb = GETJSAMPLE(*inptr1++);
-    cr = GETJSAMPLE(*inptr2++);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    /* Fetch 2 Y values and emit 2 pixels */
-    y  = GETJSAMPLE(*inptr0++);
-    outptr[RGB_RED] =   range_limit[y + cred];
-    outptr[RGB_GREEN] = range_limit[y + cgreen];
-    outptr[RGB_BLUE] =  range_limit[y + cblue];
-    outptr += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr0++);
-    outptr[RGB_RED] =   range_limit[y + cred];
-    outptr[RGB_GREEN] = range_limit[y + cgreen];
-    outptr[RGB_BLUE] =  range_limit[y + cblue];
-    outptr += RGB_PIXELSIZE;
-  }
-  /* If image width is odd, do the last output column separately */
-  if (cinfo->output_width & 1) {
-    cb = GETJSAMPLE(*inptr1);
-    cr = GETJSAMPLE(*inptr2);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    y  = GETJSAMPLE(*inptr0);
-    outptr[RGB_RED] =   range_limit[y + cred];
-    outptr[RGB_GREEN] = range_limit[y + cgreen];
-    outptr[RGB_BLUE] =  range_limit[y + cblue];
-  }
-}
-
-
-/*
- * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical.
- */
-
-METHODDEF(void)
-h2v2_merged_upsample (j_decompress_ptr cinfo,
-		      JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
-		      JSAMPARRAY output_buf)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  register int y, cred, cgreen, cblue;
-  int cb, cr;
-  register JSAMPROW outptr0, outptr1;
-  JSAMPROW inptr00, inptr01, inptr1, inptr2;
-  JDIMENSION col;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  int * Crrtab = upsample->Cr_r_tab;
-  int * Cbbtab = upsample->Cb_b_tab;
-  INT32 * Crgtab = upsample->Cr_g_tab;
-  INT32 * Cbgtab = upsample->Cb_g_tab;
-  SHIFT_TEMPS
-
-  inptr00 = input_buf[0][in_row_group_ctr*2];
-  inptr01 = input_buf[0][in_row_group_ctr*2 + 1];
-  inptr1 = input_buf[1][in_row_group_ctr];
-  inptr2 = input_buf[2][in_row_group_ctr];
-  outptr0 = output_buf[0];
-  outptr1 = output_buf[1];
-  /* Loop for each group of output pixels */
-  for (col = cinfo->output_width >> 1; col > 0; col--) {
-    /* Do the chroma part of the calculation */
-    cb = GETJSAMPLE(*inptr1++);
-    cr = GETJSAMPLE(*inptr2++);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    /* Fetch 4 Y values and emit 4 pixels */
-    y  = GETJSAMPLE(*inptr00++);
-    outptr0[RGB_RED] =   range_limit[y + cred];
-    outptr0[RGB_GREEN] = range_limit[y + cgreen];
-    outptr0[RGB_BLUE] =  range_limit[y + cblue];
-    outptr0 += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr00++);
-    outptr0[RGB_RED] =   range_limit[y + cred];
-    outptr0[RGB_GREEN] = range_limit[y + cgreen];
-    outptr0[RGB_BLUE] =  range_limit[y + cblue];
-    outptr0 += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr01++);
-    outptr1[RGB_RED] =   range_limit[y + cred];
-    outptr1[RGB_GREEN] = range_limit[y + cgreen];
-    outptr1[RGB_BLUE] =  range_limit[y + cblue];
-    outptr1 += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr01++);
-    outptr1[RGB_RED] =   range_limit[y + cred];
-    outptr1[RGB_GREEN] = range_limit[y + cgreen];
-    outptr1[RGB_BLUE] =  range_limit[y + cblue];
-    outptr1 += RGB_PIXELSIZE;
-  }
-  /* If image width is odd, do the last output column separately */
-  if (cinfo->output_width & 1) {
-    cb = GETJSAMPLE(*inptr1);
-    cr = GETJSAMPLE(*inptr2);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    y  = GETJSAMPLE(*inptr00);
-    outptr0[RGB_RED] =   range_limit[y + cred];
-    outptr0[RGB_GREEN] = range_limit[y + cgreen];
-    outptr0[RGB_BLUE] =  range_limit[y + cblue];
-    y  = GETJSAMPLE(*inptr01);
-    outptr1[RGB_RED] =   range_limit[y + cred];
-    outptr1[RGB_GREEN] = range_limit[y + cgreen];
-    outptr1[RGB_BLUE] =  range_limit[y + cblue];
-  }
-}
-
-
-/*
- * Module initialization routine for merged upsampling/color conversion.
- *
- * NB: this is called under the conditions determined by use_merged_upsample()
- * in jdmaster.c.  That routine MUST correspond to the actual capabilities
- * of this module; no safety checks are made here.
- */
-
-GLOBAL(void)
-jinit_merged_upsampler (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample;
-
-  upsample = (my_upsample_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_upsampler));
-  cinfo->upsample = (struct jpeg_upsampler *) upsample;
-  upsample->pub.start_pass = start_pass_merged_upsample;
-  upsample->pub.need_context_rows = FALSE;
-
-  upsample->out_row_width = cinfo->output_width * cinfo->out_color_components;
-
-  if (cinfo->max_v_samp_factor == 2) {
-    upsample->pub.upsample = merged_2v_upsample;
-    upsample->upmethod = h2v2_merged_upsample;
-    /* Allocate a spare row buffer */
-    upsample->spare_row = (JSAMPROW)
-      (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-		(size_t) (upsample->out_row_width * SIZEOF(JSAMPLE)));
-  } else {
-    upsample->pub.upsample = merged_1v_upsample;
-    upsample->upmethod = h2v1_merged_upsample;
-    /* No spare row needed */
-    upsample->spare_row = NULL;
-  }
-
-  build_ycc_rgb_table2(cinfo);
-}
-
-#endif /* UPSAMPLE_MERGING_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jdphuff.c b/modules/juce_graphics/image_formats/jpglib/jdphuff.c
deleted file mode 100644
index c700968..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdphuff.c
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * jdphuff.c
- *
- * Copyright (C) 1995-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains Huffman entropy decoding routines for progressive JPEG.
- *
- * Much of the complexity here has to do with supporting input suspension.
- * If the data source module demands suspension, we want to be able to back
- * up to the start of the current MCU.  To do this, we copy state variables
- * into local working storage, and update them back to the permanent
- * storage only upon successful completion of an MCU.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdhuff.h"		/* Declarations shared with jdhuff.c */
-
-
-#ifdef D_PROGRESSIVE_SUPPORTED
-
-/*
- * Expanded entropy decoder object for progressive Huffman decoding.
- *
- * The savable_state subrecord contains fields that change within an MCU,
- * but must not be updated permanently until we complete the MCU.
- */
-
-typedef struct {
-  unsigned int EOBRUN;			/* remaining EOBs in EOBRUN */
-  int last_dc_val[MAX_COMPS_IN_SCAN];	/* last DC coef for each component */
-} savable_state3;
-
-/* This macro is to work around compilers with missing or broken
- * structure assignment.  You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest,src)  ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest,src)  \
-	((dest).EOBRUN = (src).EOBRUN, \
-	 (dest).last_dc_val[0] = (src).last_dc_val[0], \
-	 (dest).last_dc_val[1] = (src).last_dc_val[1], \
-	 (dest).last_dc_val[2] = (src).last_dc_val[2], \
-	 (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
-typedef struct {
-  struct jpeg_entropy_decoder pub; /* public fields */
-
-  /* These fields are loaded into local variables at start of each MCU.
-   * In case of suspension, we exit WITHOUT updating them.
-   */
-  bitread_perm_state bitstate;	/* Bit buffer at start of MCU */
-  savable_state3 saved;		/* Other state at start of MCU */
-
-  /* These fields are NOT loaded into local working state. */
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-
-  /* Pointers to derived tables (these workspaces have image lifespan) */
-  d_derived_tbl * derived_tbls[NUM_HUFF_TBLS];
-
-  d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */
-} phuff_entropy_decoder;
-
-typedef phuff_entropy_decoder * phuff_entropy_ptr2;
-
-/* Forward declarations */
-METHODDEF(boolean) decode_mcu_DC_first JPP((j_decompress_ptr cinfo,
-					    JBLOCKROW *MCU_data));
-METHODDEF(boolean) decode_mcu_AC_first JPP((j_decompress_ptr cinfo,
-					    JBLOCKROW *MCU_data));
-METHODDEF(boolean) decode_mcu_DC_refine JPP((j_decompress_ptr cinfo,
-					     JBLOCKROW *MCU_data));
-METHODDEF(boolean) decode_mcu_AC_refine JPP((j_decompress_ptr cinfo,
-					     JBLOCKROW *MCU_data));
-
-
-/*
- * Initialize for a Huffman-compressed scan.
- */
-
-METHODDEF(void)
-start_pass_phuff_decoder (j_decompress_ptr cinfo)
-{
-  phuff_entropy_ptr2 entropy = (phuff_entropy_ptr2) cinfo->entropy;
-  boolean is_DC_band, bad;
-  int ci, coefi, tbl;
-  int *coef_bit_ptr;
-  jpeg_component_info * compptr;
-
-  is_DC_band = (cinfo->Ss == 0);
-
-  /* Validate scan parameters */
-  bad = FALSE;
-  if (is_DC_band) {
-    if (cinfo->Se != 0)
-      bad = TRUE;
-  } else {
-    /* need not check Ss/Se < 0 since they came from unsigned bytes */
-    if (cinfo->Ss > cinfo->Se || cinfo->Se >= DCTSIZE2)
-      bad = TRUE;
-    /* AC scans may have only one component */
-    if (cinfo->comps_in_scan != 1)
-      bad = TRUE;
-  }
-  if (cinfo->Ah != 0) {
-    /* Successive approximation refinement scan: must have Al = Ah-1. */
-    if (cinfo->Al != cinfo->Ah-1)
-      bad = TRUE;
-  }
-  if (cinfo->Al > 13)		/* need not check for < 0 */
-    bad = TRUE;
-  /* Arguably the maximum Al value should be less than 13 for 8-bit precision,
-   * but the spec doesn't say so, and we try to be liberal about what we
-   * accept.  Note: large Al values could result in out-of-range DC
-   * coefficients during early scans, leading to bizarre displays due to
-   * overflows in the IDCT math.  But we won't crash.
-   */
-  if (bad)
-    ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
-	     cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
-  /* Update progression status, and verify that scan order is legal.
-   * Note that inter-scan inconsistencies are treated as warnings
-   * not fatal errors ... not clear if this is right way to behave.
-   */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    int cindex = cinfo->cur_comp_info[ci]->component_index;
-    coef_bit_ptr = & cinfo->coef_bits[cindex][0];
-    if (!is_DC_band && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
-      WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
-    for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
-      int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
-      if (cinfo->Ah != expected)
-	WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
-      coef_bit_ptr[coefi] = cinfo->Al;
-    }
-  }
-
-  /* Select MCU decoding routine */
-  if (cinfo->Ah == 0) {
-    if (is_DC_band)
-      entropy->pub.decode_mcu = decode_mcu_DC_first;
-    else
-      entropy->pub.decode_mcu = decode_mcu_AC_first;
-  } else {
-    if (is_DC_band)
-      entropy->pub.decode_mcu = decode_mcu_DC_refine;
-    else
-      entropy->pub.decode_mcu = decode_mcu_AC_refine;
-  }
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* Make sure requested tables are present, and compute derived tables.
-     * We may build same derived table more than once, but it's not expensive.
-     */
-    if (is_DC_band) {
-      if (cinfo->Ah == 0) {	/* DC refinement needs no table */
-	tbl = compptr->dc_tbl_no;
-	jpeg_make_d_derived_tbl(cinfo, TRUE, tbl,
-				& entropy->derived_tbls[tbl]);
-      }
-    } else {
-      tbl = compptr->ac_tbl_no;
-      jpeg_make_d_derived_tbl(cinfo, FALSE, tbl,
-			      & entropy->derived_tbls[tbl]);
-      /* remember the single active table */
-      entropy->ac_derived_tbl = entropy->derived_tbls[tbl];
-    }
-    /* Initialize DC predictions to 0 */
-    entropy->saved.last_dc_val[ci] = 0;
-  }
-
-  /* Initialize bitread state variables */
-  entropy->bitstate.bits_left = 0;
-  entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
-  entropy->pub.insufficient_data = FALSE;
-
-  /* Initialize private state variables */
-  entropy->saved.EOBRUN = 0;
-
-  /* Initialize restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-}
-
-
-/*
- * Check for a restart marker & resynchronize decoder.
- * Returns FALSE if must suspend.
- */
-
-LOCAL(boolean)
-process_restartp (j_decompress_ptr cinfo)
-{
-  phuff_entropy_ptr2 entropy = (phuff_entropy_ptr2) cinfo->entropy;
-  int ci;
-
-  /* Throw away any unused bits remaining in bit buffer; */
-  /* include any full bytes in next_marker's count of discarded bytes */
-  cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8;
-  entropy->bitstate.bits_left = 0;
-
-  /* Advance past the RSTn marker */
-  if (! (*cinfo->marker->read_restart_marker) (cinfo))
-    return FALSE;
-
-  /* Re-initialize DC predictions to 0 */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++)
-    entropy->saved.last_dc_val[ci] = 0;
-  /* Re-init EOB run count, too */
-  entropy->saved.EOBRUN = 0;
-
-  /* Reset restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-
-  /* Reset out-of-data flag, unless read_restart_marker left us smack up
-   * against a marker.  In that case we will end up treating the next data
-   * segment as empty, and we can avoid producing bogus output pixels by
-   * leaving the flag set.
-   */
-  if (cinfo->unread_marker == 0)
-    entropy->pub.insufficient_data = FALSE;
-
-  return TRUE;
-}
-
-
-/*
- * Huffman MCU decoding.
- * Each of these routines decodes and returns one MCU's worth of
- * Huffman-compressed coefficients.
- * The coefficients are reordered from zigzag order into natural array order,
- * but are not dequantized.
- *
- * The i'th block of the MCU is stored into the block pointed to by
- * MCU_data[i].  WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER.
- *
- * We return FALSE if data source requested suspension.  In that case no
- * changes have been made to permanent state.  (Exception: some output
- * coefficients may already have been assigned.  This is harmless for
- * spectral selection, since we'll just re-assign them on the next call.
- * Successive approximation AC refinement has to be more careful, however.)
- */
-
-/*
- * MCU decoding for DC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr2 entropy = (phuff_entropy_ptr2) cinfo->entropy;
-  int Al = cinfo->Al;
-  register int s, r;
-  int blkn, ci;
-  JBLOCKROW block;
-  BITREAD_STATE_VARS;
-  savable_state3 state;
-  d_derived_tbl * tbl;
-  jpeg_component_info * compptr;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restartp(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->pub.insufficient_data) {
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(state, entropy->saved);
-
-    /* Outer loop handles each block in the MCU */
-
-    for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-      block = MCU_data[blkn];
-      ci = cinfo->MCU_membership[blkn];
-      compptr = cinfo->cur_comp_info[ci];
-      tbl = entropy->derived_tbls[compptr->dc_tbl_no];
-
-      /* Decode a single block's worth of coefficients */
-
-      /* Section F.2.2.1: decode the DC coefficient difference */
-      HUFF_DECODE(s, br_state, tbl, return FALSE, label1);
-      if (s) {
-	CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	r = GET_BITS(s);
-	s = HUFF_EXTEND(r, s);
-      }
-
-      /* Convert DC difference to actual value, update last_dc_val */
-      s += state.last_dc_val[ci];
-      state.last_dc_val[ci] = s;
-      /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */
-      (*block)[0] = (JCOEF) (s << Al);
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(entropy->saved, state);
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for AC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr2 entropy = (phuff_entropy_ptr2) cinfo->entropy;
-  int Se = cinfo->Se;
-  int Al = cinfo->Al;
-  register int s, k, r;
-  unsigned int EOBRUN;
-  JBLOCKROW block;
-  BITREAD_STATE_VARS;
-  d_derived_tbl * tbl;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restartp(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->pub.insufficient_data) {
-
-    /* Load up working state.
-     * We can avoid loading/saving bitread state if in an EOB run.
-     */
-    EOBRUN = entropy->saved.EOBRUN;	/* only part of saved state we need */
-
-    /* There is always only one block per MCU */
-
-    if (EOBRUN > 0)		/* if it's a band of zeroes... */
-      EOBRUN--;			/* ...process it now (we do nothing) */
-    else {
-      BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-      block = MCU_data[0];
-      tbl = entropy->ac_derived_tbl;
-
-      for (k = cinfo->Ss; k <= Se; k++) {
-	HUFF_DECODE(s, br_state, tbl, return FALSE, label2);
-	r = s >> 4;
-	s &= 15;
-	if (s) {
-	  k += r;
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  r = GET_BITS(s);
-	  s = HUFF_EXTEND(r, s);
-	  /* Scale and output coefficient in natural (dezigzagged) order */
-	  (*block)[jpeg_natural_order[k]] = (JCOEF) (s << Al);
-	} else {
-	  if (r == 15) {	/* ZRL */
-	    k += 15;		/* skip 15 zeroes in band */
-	  } else {		/* EOBr, run length is 2^r + appended bits */
-	    EOBRUN = 1 << r;
-	    if (r) {		/* EOBr, r > 0 */
-	      CHECK_BIT_BUFFER(br_state, r, return FALSE);
-	      r = GET_BITS(r);
-	      EOBRUN += r;
-	    }
-	    EOBRUN--;		/* this band is processed at this moment */
-	    break;		/* force end-of-band */
-	  }
-	}
-      }
-
-      BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    }
-
-    /* Completed MCU, so update state */
-    entropy->saved.EOBRUN = EOBRUN;	/* only part of saved state we need */
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for DC successive approximation refinement scan.
- * Note: we assume such scans can be multi-component, although the spec
- * is not very clear on the point.
- */
-
-METHODDEF(boolean)
-decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr2 entropy = (phuff_entropy_ptr2) cinfo->entropy;
-  int p1 = 1 << cinfo->Al;	/* 1 in the bit position being coded */
-  int blkn;
-  JBLOCKROW block;
-  BITREAD_STATE_VARS;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restartp(cinfo))
-	return FALSE;
-  }
-
-  /* Not worth the cycles to check insufficient_data here,
-   * since we will not change the data anyway if we read zeroes.
-   */
-
-  /* Load up working state */
-  BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-
-  /* Outer loop handles each block in the MCU */
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    block = MCU_data[blkn];
-
-    /* Encoded data is simply the next bit of the two's-complement DC value */
-    CHECK_BIT_BUFFER(br_state, 1, return FALSE);
-    if (GET_BITS(1))
-      (*block)[0] |= p1;
-    /* Note: since we use |=, repeating the assignment later is safe */
-  }
-
-  /* Completed MCU, so update state */
-  BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for AC successive approximation refinement scan.
- */
-
-METHODDEF(boolean)
-decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  phuff_entropy_ptr2 entropy = (phuff_entropy_ptr2) cinfo->entropy;
-  int Se = cinfo->Se;
-  int p1 = 1 << cinfo->Al;	/* 1 in the bit position being coded */
-  int m1 = (-1) << cinfo->Al;	/* -1 in the bit position being coded */
-  register int s, k, r;
-  unsigned int EOBRUN;
-  JBLOCKROW block;
-  JCOEFPTR thiscoef;
-  BITREAD_STATE_VARS;
-  d_derived_tbl * tbl;
-  int num_newnz;
-  int newnz_pos[DCTSIZE2];
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restartp(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, don't modify the MCU.
-   */
-  if (! entropy->pub.insufficient_data) {
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
-
-    /* There is always only one block per MCU */
-    block = MCU_data[0];
-    tbl = entropy->ac_derived_tbl;
-
-    /* If we are forced to suspend, we must undo the assignments to any newly
-     * nonzero coefficients in the block, because otherwise we'd get confused
-     * next time about which coefficients were already nonzero.
-     * But we need not undo addition of bits to already-nonzero coefficients;
-     * instead, we can test the current bit to see if we already did it.
-     */
-    num_newnz = 0;
-
-    /* initialize coefficient loop counter to start of band */
-    k = cinfo->Ss;
-
-    if (EOBRUN == 0) {
-      for (; k <= Se; k++) {
-	HUFF_DECODE(s, br_state, tbl, goto undoit, label3);
-	r = s >> 4;
-	s &= 15;
-	if (s) {
-	  if (s != 1)		/* size of new coef should always be 1 */
-	    WARNMS(cinfo, JWRN_HUFF_BAD_CODE);
-	  CHECK_BIT_BUFFER(br_state, 1, goto undoit);
-	  if (GET_BITS(1))
-	    s = p1;		/* newly nonzero coef is positive */
-	  else
-	    s = m1;		/* newly nonzero coef is negative */
-	} else {
-	  if (r != 15) {
-	    EOBRUN = 1 << r;	/* EOBr, run length is 2^r + appended bits */
-	    if (r) {
-	      CHECK_BIT_BUFFER(br_state, r, goto undoit);
-	      r = GET_BITS(r);
-	      EOBRUN += r;
-	    }
-	    break;		/* rest of block is handled by EOB logic */
-	  }
-	  /* note s = 0 for processing ZRL */
-	}
-	/* Advance over already-nonzero coefs and r still-zero coefs,
-	 * appending correction bits to the nonzeroes.  A correction bit is 1
-	 * if the absolute value of the coefficient must be increased.
-	 */
-	do {
-	  thiscoef = *block + jpeg_natural_order[k];
-	  if (*thiscoef != 0) {
-	    CHECK_BIT_BUFFER(br_state, 1, goto undoit);
-	    if (GET_BITS(1)) {
-	      if ((*thiscoef & p1) == 0) { /* do nothing if already set it */
-		if (*thiscoef >= 0)
-		  *thiscoef += p1;
-		else
-		  *thiscoef += m1;
-	      }
-	    }
-	  } else {
-	    if (--r < 0)
-	      break;		/* reached target zero coefficient */
-	  }
-	  k++;
-	} while (k <= Se);
-	if (s) {
-	  int pos = jpeg_natural_order[k];
-	  /* Output newly nonzero coefficient */
-	  (*block)[pos] = (JCOEF) s;
-	  /* Remember its position in case we have to suspend */
-	  newnz_pos[num_newnz++] = pos;
-	}
-      }
-    }
-
-    if (EOBRUN > 0) {
-      /* Scan any remaining coefficient positions after the end-of-band
-       * (the last newly nonzero coefficient, if any).  Append a correction
-       * bit to each already-nonzero coefficient.  A correction bit is 1
-       * if the absolute value of the coefficient must be increased.
-       */
-      for (; k <= Se; k++) {
-	thiscoef = *block + jpeg_natural_order[k];
-	if (*thiscoef != 0) {
-	  CHECK_BIT_BUFFER(br_state, 1, goto undoit);
-	  if (GET_BITS(1)) {
-	    if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */
-	      if (*thiscoef >= 0)
-		*thiscoef += p1;
-	      else
-		*thiscoef += m1;
-	    }
-	  }
-	}
-      }
-      /* Count one block completed in EOB run */
-      EOBRUN--;
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-
-undoit:
-  /* Re-zero any output coefficients that we made newly nonzero */
-  while (num_newnz > 0)
-    (*block)[newnz_pos[--num_newnz]] = 0;
-
-  return FALSE;
-}
-
-
-/*
- * Module initialization routine for progressive Huffman entropy decoding.
- */
-
-GLOBAL(void)
-jinit_phuff_decoder (j_decompress_ptr cinfo)
-{
-  phuff_entropy_ptr2 entropy;
-  int *coef_bit_ptr;
-  int ci, i;
-
-  entropy = (phuff_entropy_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(phuff_entropy_decoder));
-  cinfo->entropy = (struct jpeg_entropy_decoder *) entropy;
-  entropy->pub.start_pass = start_pass_phuff_decoder;
-
-  /* Mark derived tables unallocated */
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    entropy->derived_tbls[i] = NULL;
-  }
-
-  /* Create progression status table */
-  cinfo->coef_bits = (int (*)[DCTSIZE2])
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				cinfo->num_components*DCTSIZE2*SIZEOF(int));
-  coef_bit_ptr = & cinfo->coef_bits[0][0];
-  for (ci = 0; ci < cinfo->num_components; ci++)
-    for (i = 0; i < DCTSIZE2; i++)
-      *coef_bit_ptr++ = -1;
-}
-
-#endif /* D_PROGRESSIVE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jdpostct.c b/modules/juce_graphics/image_formats/jpglib/jdpostct.c
deleted file mode 100644
index 2d93839..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdpostct.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * jdpostct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the decompression postprocessing controller.
- * This controller manages the upsampling, color conversion, and color
- * quantization/reduction steps; specifically, it controls the buffering
- * between upsample/color conversion and color quantization/reduction.
- *
- * If no color quantization/reduction is required, then this module has no
- * work to do, and it just hands off to the upsample/color conversion code.
- * An integrated upsample/convert/quantize process would replace this module
- * entirely.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_d_post_controller pub; /* public fields */
-
-  /* Color quantization source buffer: this holds output data from
-   * the upsample/color conversion step to be passed to the quantizer.
-   * For two-pass color quantization, we need a full-image buffer;
-   * for one-pass operation, a strip buffer is sufficient.
-   */
-  jvirt_sarray_ptr whole_image;	/* virtual array, or NULL if one-pass */
-  JSAMPARRAY buffer;		/* strip buffer, or current strip of virtual */
-  JDIMENSION strip_height;	/* buffer size in rows */
-  /* for two-pass mode only: */
-  JDIMENSION starting_row;	/* row # of first row in current strip */
-  JDIMENSION next_row;		/* index of next row to fill/empty in strip */
-} my_post_controller;
-
-typedef my_post_controller * my_post_ptr;
-
-
-/* Forward declarations */
-METHODDEF(void) post_process_1pass
-	JPP((j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	     JDIMENSION in_row_groups_avail,
-	     JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	     JDIMENSION out_rows_avail));
-#ifdef QUANT_2PASS_SUPPORTED
-METHODDEF(void) post_process_prepass
-	JPP((j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	     JDIMENSION in_row_groups_avail,
-	     JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	     JDIMENSION out_rows_avail));
-METHODDEF(void) post_process_2pass
-	JPP((j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	     JDIMENSION in_row_groups_avail,
-	     JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	     JDIMENSION out_rows_avail));
-#endif
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-    if (cinfo->quantize_colors) {
-      /* Single-pass processing with color quantization. */
-      post->pub.post_process_data = post_process_1pass;
-      /* We could be doing buffered-image output before starting a 2-pass
-       * color quantization; in that case, jinit_d_post_controller did not
-       * allocate a strip buffer.  Use the virtual-array buffer as workspace.
-       */
-      if (post->buffer == NULL) {
-	post->buffer = (*cinfo->mem->access_virt_sarray)
-	  ((j_common_ptr) cinfo, post->whole_image,
-	   (JDIMENSION) 0, post->strip_height, TRUE);
-      }
-    } else {
-      /* For single-pass processing without color quantization,
-       * I have no work to do; just call the upsampler directly.
-       */
-      post->pub.post_process_data = cinfo->upsample->upsample;
-    }
-    break;
-#ifdef QUANT_2PASS_SUPPORTED
-  case JBUF_SAVE_AND_PASS:
-    /* First pass of 2-pass quantization */
-    if (post->whole_image == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    post->pub.post_process_data = post_process_prepass;
-    break;
-  case JBUF_CRANK_DEST:
-    /* Second pass of 2-pass quantization */
-    if (post->whole_image == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    post->pub.post_process_data = post_process_2pass;
-    break;
-#endif /* QUANT_2PASS_SUPPORTED */
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-  post->starting_row = post->next_row = 0;
-}
-
-
-/*
- * Process some data in the one-pass (strip buffer) case.
- * This is used for color precision reduction as well as one-pass quantization.
- */
-
-METHODDEF(void)
-post_process_1pass (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION in_row_groups_avail,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-  JDIMENSION num_rows, max_rows;
-
-  /* Fill the buffer, but not more than what we can dump out in one go. */
-  /* Note we rely on the upsampler to detect bottom of image. */
-  max_rows = out_rows_avail - *out_row_ctr;
-  if (max_rows > post->strip_height)
-    max_rows = post->strip_height;
-  num_rows = 0;
-  (*cinfo->upsample->upsample) (cinfo,
-		input_buf, in_row_group_ctr, in_row_groups_avail,
-		post->buffer, &num_rows, max_rows);
-  /* Quantize and emit data. */
-  (*cinfo->cquantize->color_quantize) (cinfo,
-		post->buffer, output_buf + *out_row_ctr, (int) num_rows);
-  *out_row_ctr += num_rows;
-}
-
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-/*
- * Process some data in the first pass of 2-pass quantization.
- */
-
-METHODDEF(void)
-post_process_prepass (j_decompress_ptr cinfo,
-		      JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		      JDIMENSION in_row_groups_avail,
-		      JSAMPARRAY, JDIMENSION *out_row_ctr,
-		      JDIMENSION)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-  JDIMENSION old_next_row, num_rows;
-
-  /* Reposition virtual buffer if at start of strip. */
-  if (post->next_row == 0) {
-    post->buffer = (*cinfo->mem->access_virt_sarray)
-	((j_common_ptr) cinfo, post->whole_image,
-	 post->starting_row, post->strip_height, TRUE);
-  }
-
-  /* Upsample some data (up to a strip height's worth). */
-  old_next_row = post->next_row;
-  (*cinfo->upsample->upsample) (cinfo,
-		input_buf, in_row_group_ctr, in_row_groups_avail,
-		post->buffer, &post->next_row, post->strip_height);
-
-  /* Allow quantizer to scan new data.  No data is emitted, */
-  /* but we advance out_row_ctr so outer loop can tell when we're done. */
-  if (post->next_row > old_next_row) {
-    num_rows = post->next_row - old_next_row;
-    (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row,
-					 (JSAMPARRAY) NULL, (int) num_rows);
-    *out_row_ctr += num_rows;
-  }
-
-  /* Advance if we filled the strip. */
-  if (post->next_row >= post->strip_height) {
-    post->starting_row += post->strip_height;
-    post->next_row = 0;
-  }
-}
-
-
-/*
- * Process some data in the second pass of 2-pass quantization.
- */
-
-METHODDEF(void)
-post_process_2pass (j_decompress_ptr cinfo,
-		    JSAMPIMAGE, JDIMENSION *,
-		    JDIMENSION,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-  JDIMENSION num_rows, max_rows;
-
-  /* Reposition virtual buffer if at start of strip. */
-  if (post->next_row == 0) {
-    post->buffer = (*cinfo->mem->access_virt_sarray)
-	((j_common_ptr) cinfo, post->whole_image,
-	 post->starting_row, post->strip_height, FALSE);
-  }
-
-  /* Determine number of rows to emit. */
-  num_rows = post->strip_height - post->next_row; /* available in strip */
-  max_rows = out_rows_avail - *out_row_ctr; /* available in output area */
-  if (num_rows > max_rows)
-    num_rows = max_rows;
-  /* We have to check bottom of image here, can't depend on upsampler. */
-  max_rows = cinfo->output_height - post->starting_row;
-  if (num_rows > max_rows)
-    num_rows = max_rows;
-
-  /* Quantize and emit data. */
-  (*cinfo->cquantize->color_quantize) (cinfo,
-		post->buffer + post->next_row, output_buf + *out_row_ctr,
-		(int) num_rows);
-  *out_row_ctr += num_rows;
-
-  /* Advance if we filled the strip. */
-  post->next_row += num_rows;
-  if (post->next_row >= post->strip_height) {
-    post->starting_row += post->strip_height;
-    post->next_row = 0;
-  }
-}
-
-#endif /* QUANT_2PASS_SUPPORTED */
-
-
-/*
- * Initialize postprocessing controller.
- */
-
-GLOBAL(void)
-jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
-{
-  my_post_ptr post;
-
-  post = (my_post_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_post_controller));
-  cinfo->post = (struct jpeg_d_post_controller *) post;
-  post->pub.start_pass = start_pass_dpost;
-  post->whole_image = NULL;	/* flag for no virtual arrays */
-  post->buffer = NULL;		/* flag for no strip buffer */
-
-  /* Create the quantization buffer, if needed */
-  if (cinfo->quantize_colors) {
-    /* The buffer strip height is max_v_samp_factor, which is typically
-     * an efficient number of rows for upsampling to return.
-     * (In the presence of output rescaling, we might want to be smarter?)
-     */
-    post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor;
-    if (need_full_buffer) {
-      /* Two-pass color quantization: need full-image storage. */
-      /* We round up the number of rows to a multiple of the strip height. */
-#ifdef QUANT_2PASS_SUPPORTED
-      post->whole_image = (*cinfo->mem->request_virt_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
-	 cinfo->output_width * cinfo->out_color_components,
-	 (JDIMENSION) jround_up((long) cinfo->output_height,
-				(long) post->strip_height),
-	 post->strip_height);
-#else
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif /* QUANT_2PASS_SUPPORTED */
-    } else {
-      /* One-pass color quantization: just make a strip buffer. */
-      post->buffer = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 cinfo->output_width * cinfo->out_color_components,
-	 post->strip_height);
-    }
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdsample.c b/modules/juce_graphics/image_formats/jpglib/jdsample.c
deleted file mode 100644
index c0a142a..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdsample.c
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * jdsample.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains upsampling routines.
- *
- * Upsampling input data is counted in "row groups".  A row group
- * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size)
- * sample rows of each component.  Upsampling will normally produce
- * max_v_samp_factor pixel rows from each row group (but this could vary
- * if the upsampler is applying a scale factor of its own).
- *
- * An excellent reference for image resampling is
- *   Digital Image Warping, George Wolberg, 1990.
- *   Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Pointer to routine to upsample a single component */
-typedef JMETHOD(void, upsample1_ptr,
-		(j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr));
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_upsampler pub;	/* public fields */
-
-  /* Color conversion buffer.  When using separate upsampling and color
-   * conversion steps, this buffer holds one upsampled row group until it
-   * has been color converted and output.
-   * Note: we do not allocate any storage for component(s) which are full-size,
-   * ie do not need rescaling.  The corresponding entry of color_buf[] is
-   * simply set to point to the input data array, thereby avoiding copying.
-   */
-  JSAMPARRAY color_buf[MAX_COMPONENTS];
-
-  /* Per-component upsampling method pointers */
-  upsample1_ptr methods[MAX_COMPONENTS];
-
-  int next_row_out;		/* counts rows emitted from color_buf */
-  JDIMENSION rows_to_go;	/* counts rows remaining in image */
-
-  /* Height of an input row group for each component. */
-  int rowgroup_height[MAX_COMPONENTS];
-
-  /* These arrays save pixel expansion factors so that int_expand need not
-   * recompute them each time.  They are unused for other upsampling methods.
-   */
-  UINT8 h_expand[MAX_COMPONENTS];
-  UINT8 v_expand[MAX_COMPONENTS];
-} my_upsampler2;
-
-typedef my_upsampler2 * my_upsample_ptr2;
-
-
-/*
- * Initialize for an upsampling pass.
- */
-
-METHODDEF(void)
-start_pass_upsample (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr2 upsample = (my_upsample_ptr2) cinfo->upsample;
-
-  /* Mark the conversion buffer empty */
-  upsample->next_row_out = cinfo->max_v_samp_factor;
-  /* Initialize total-height counter for detecting bottom of image */
-  upsample->rows_to_go = cinfo->output_height;
-}
-
-
-/*
- * Control routine to do upsampling (and color conversion).
- *
- * In this version we upsample each component independently.
- * We upsample one row group into the conversion buffer, then apply
- * color conversion a row at a time.
- */
-
-METHODDEF(void)
-sep_upsample (j_decompress_ptr cinfo,
-	      JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	      JDIMENSION,
-	      JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	      JDIMENSION out_rows_avail)
-{
-  my_upsample_ptr2 upsample = (my_upsample_ptr2) cinfo->upsample;
-  int ci;
-  jpeg_component_info * compptr;
-  JDIMENSION num_rows;
-
-  /* Fill the conversion buffer, if it's empty */
-  if (upsample->next_row_out >= cinfo->max_v_samp_factor) {
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      /* Invoke per-component upsample method.  Notice we pass a POINTER
-       * to color_buf[ci], so that fullsize_upsample can change it.
-       */
-      (*upsample->methods[ci]) (cinfo, compptr,
-	input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]),
-	upsample->color_buf + ci);
-    }
-    upsample->next_row_out = 0;
-  }
-
-  /* Color-convert and emit rows */
-
-  /* How many we have in the buffer: */
-  num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out);
-  /* Not more than the distance to the end of the image.  Need this test
-   * in case the image height is not a multiple of max_v_samp_factor:
-   */
-  if (num_rows > upsample->rows_to_go)
-    num_rows = upsample->rows_to_go;
-  /* And not more than what the client can accept: */
-  out_rows_avail -= *out_row_ctr;
-  if (num_rows > out_rows_avail)
-    num_rows = out_rows_avail;
-
-  (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf,
-				     (JDIMENSION) upsample->next_row_out,
-				     output_buf + *out_row_ctr,
-				     (int) num_rows);
-
-  /* Adjust counts */
-  *out_row_ctr += num_rows;
-  upsample->rows_to_go -= num_rows;
-  upsample->next_row_out += num_rows;
-  /* When the buffer is emptied, declare this input row group consumed */
-  if (upsample->next_row_out >= cinfo->max_v_samp_factor)
-    (*in_row_group_ctr)++;
-}
-
-
-/*
- * These are the routines invoked by sep_upsample to upsample pixel values
- * of a single component.  One row group is processed per call.
- */
-
-
-/*
- * For full-size components, we just make color_buf[ci] point at the
- * input buffer, and thus avoid copying any data.  Note that this is
- * safe only because sep_upsample doesn't declare the input row group
- * "consumed" until we are done color converting and emitting it.
- */
-
-METHODDEF(void)
-fullsize_upsample (j_decompress_ptr, jpeg_component_info *,
-		   JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  *output_data_ptr = input_data;
-}
-
-
-/*
- * This is a no-op version used for "uninteresting" components.
- * These components will not be referenced by color conversion.
- */
-
-METHODDEF(void)
-noop_upsample (j_decompress_ptr, jpeg_component_info *,
-	       JSAMPARRAY, JSAMPARRAY * output_data_ptr)
-{
-  *output_data_ptr = NULL;	/* safety check */
-}
-
-
-/*
- * This version handles any integral sampling ratios.
- * This is not used for typical JPEG files, so it need not be fast.
- * Nor, for that matter, is it particularly accurate: the algorithm is
- * simple replication of the input pixel onto the corresponding output
- * pixels.  The hi-falutin sampling literature refers to this as a
- * "box filter".  A box filter tends to introduce visible artifacts,
- * so if you are actually going to use 3:1 or 4:1 sampling ratios
- * you would be well advised to improve this code.
- */
-
-METHODDEF(void)
-int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	      JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  my_upsample_ptr2 upsample = (my_upsample_ptr2) cinfo->upsample;
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register JSAMPLE invalue;
-  register int h;
-  JSAMPROW outend;
-  int h_expand, v_expand;
-  int inrow, outrow;
-
-  h_expand = upsample->h_expand[compptr->component_index];
-  v_expand = upsample->v_expand[compptr->component_index];
-
-  inrow = outrow = 0;
-  while (outrow < cinfo->max_v_samp_factor) {
-    /* Generate one output row with proper horizontal expansion */
-    inptr = input_data[inrow];
-    outptr = output_data[outrow];
-    outend = outptr + cinfo->output_width;
-    while (outptr < outend) {
-      invalue = *inptr++;	/* don't need GETJSAMPLE() here */
-      for (h = h_expand; h > 0; h--) {
-	*outptr++ = invalue;
-      }
-    }
-    /* Generate any additional output rows by duplicating the first one */
-    if (v_expand > 1) {
-      jcopy_sample_rows(output_data, outrow, output_data, outrow+1,
-			v_expand-1, cinfo->output_width);
-    }
-    inrow++;
-    outrow += v_expand;
-  }
-}
-
-
-/*
- * Fast processing for the common case of 2:1 horizontal and 1:1 vertical.
- * It's still a box filter.
- */
-
-METHODDEF(void)
-h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info *,
-	       JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register JSAMPLE invalue;
-  JSAMPROW outend;
-  int inrow;
-
-  for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) {
-    inptr = input_data[inrow];
-    outptr = output_data[inrow];
-    outend = outptr + cinfo->output_width;
-    while (outptr < outend) {
-      invalue = *inptr++;	/* don't need GETJSAMPLE() here */
-      *outptr++ = invalue;
-      *outptr++ = invalue;
-    }
-  }
-}
-
-
-/*
- * Fast processing for the common case of 2:1 horizontal and 2:1 vertical.
- * It's still a box filter.
- */
-
-METHODDEF(void)
-h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info *,
-	       JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register JSAMPLE invalue;
-  JSAMPROW outend;
-  int inrow, outrow;
-
-  inrow = outrow = 0;
-  while (outrow < cinfo->max_v_samp_factor) {
-    inptr = input_data[inrow];
-    outptr = output_data[outrow];
-    outend = outptr + cinfo->output_width;
-    while (outptr < outend) {
-      invalue = *inptr++;	/* don't need GETJSAMPLE() here */
-      *outptr++ = invalue;
-      *outptr++ = invalue;
-    }
-    jcopy_sample_rows(output_data, outrow, output_data, outrow+1,
-		      1, cinfo->output_width);
-    inrow++;
-    outrow += 2;
-  }
-}
-
-
-/*
- * Fancy processing for the common case of 2:1 horizontal and 1:1 vertical.
- *
- * The upsampling algorithm is linear interpolation between pixel centers,
- * also known as a "triangle filter".  This is a good compromise between
- * speed and visual quality.  The centers of the output pixels are 1/4 and 3/4
- * of the way between input pixel centers.
- *
- * A note about the "bias" calculations: when rounding fractional values to
- * integer, we do not want to always round 0.5 up to the next integer.
- * If we did that, we'd introduce a noticeable bias towards larger values.
- * Instead, this code is arranged so that 0.5 will be rounded up or down at
- * alternate pixel locations (a simple ordered dither pattern).
- */
-
-METHODDEF(void)
-h2v1_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		     JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register int invalue;
-  register JDIMENSION colctr;
-  int inrow;
-
-  for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) {
-    inptr = input_data[inrow];
-    outptr = output_data[inrow];
-    /* Special case for first column */
-    invalue = GETJSAMPLE(*inptr++);
-    *outptr++ = (JSAMPLE) invalue;
-    *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(*inptr) + 2) >> 2);
-
-    for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) {
-      /* General case: 3/4 * nearer pixel + 1/4 * further pixel */
-      invalue = GETJSAMPLE(*inptr++) * 3;
-      *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(inptr[-2]) + 1) >> 2);
-      *outptr++ = (JSAMPLE) ((invalue + GETJSAMPLE(*inptr) + 2) >> 2);
-    }
-
-    /* Special case for last column */
-    invalue = GETJSAMPLE(*inptr);
-    *outptr++ = (JSAMPLE) ((invalue * 3 + GETJSAMPLE(inptr[-1]) + 1) >> 2);
-    *outptr++ = (JSAMPLE) invalue;
-  }
-}
-
-
-/*
- * Fancy processing for the common case of 2:1 horizontal and 2:1 vertical.
- * Again a triangle filter; see comments for h2v1 case, above.
- *
- * It is OK for us to reference the adjacent input rows because we demanded
- * context from the main buffer controller (see initialization code).
- */
-
-METHODDEF(void)
-h2v2_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		     JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr0, inptr1, outptr;
-#if BITS_IN_JSAMPLE == 8
-  register int thiscolsum, lastcolsum, nextcolsum;
-#else
-  register INT32 thiscolsum, lastcolsum, nextcolsum;
-#endif
-  register JDIMENSION colctr;
-  int inrow, outrow, v;
-
-  inrow = outrow = 0;
-  while (outrow < cinfo->max_v_samp_factor) {
-    for (v = 0; v < 2; v++) {
-      /* inptr0 points to nearest input row, inptr1 points to next nearest */
-      inptr0 = input_data[inrow];
-      if (v == 0)		/* next nearest is row above */
-	inptr1 = input_data[inrow-1];
-      else			/* next nearest is row below */
-	inptr1 = input_data[inrow+1];
-      outptr = output_data[outrow++];
-
-      /* Special case for first column */
-      thiscolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
-      nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
-      *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 8) >> 4);
-      *outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4);
-      lastcolsum = thiscolsum; thiscolsum = nextcolsum;
-
-      for (colctr = compptr->downsampled_width - 2; colctr > 0; colctr--) {
-	/* General case: 3/4 * nearer pixel + 1/4 * further pixel in each */
-	/* dimension, thus 9/16, 3/16, 3/16, 1/16 overall */
-	nextcolsum = GETJSAMPLE(*inptr0++) * 3 + GETJSAMPLE(*inptr1++);
-	*outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4);
-	*outptr++ = (JSAMPLE) ((thiscolsum * 3 + nextcolsum + 7) >> 4);
-	lastcolsum = thiscolsum; thiscolsum = nextcolsum;
-      }
-
-      /* Special case for last column */
-      *outptr++ = (JSAMPLE) ((thiscolsum * 3 + lastcolsum + 8) >> 4);
-      *outptr++ = (JSAMPLE) ((thiscolsum * 4 + 7) >> 4);
-    }
-    inrow++;
-  }
-}
-
-
-/*
- * Module initialization routine for upsampling.
- */
-
-GLOBAL(void)
-jinit_upsampler (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr2 upsample;
-  int ci;
-  jpeg_component_info * compptr;
-  boolean need_buffer, do_fancy;
-  int h_in_group, v_in_group, h_out_group, v_out_group;
-
-  upsample = (my_upsample_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_upsampler2));
-  cinfo->upsample = (struct jpeg_upsampler *) upsample;
-  upsample->pub.start_pass = start_pass_upsample;
-  upsample->pub.upsample = sep_upsample;
-  upsample->pub.need_context_rows = FALSE; /* until we find out differently */
-
-  if (cinfo->CCIR601_sampling)	/* this isn't supported */
-    ERREXIT(cinfo, JERR_CCIR601_NOTIMPL);
-
-  /* jdmainct.c doesn't support context rows when min_DCT_scaled_size = 1,
-   * so don't ask for it.
-   */
-  do_fancy = cinfo->do_fancy_upsampling && cinfo->min_DCT_scaled_size > 1;
-
-  /* Verify we can handle the sampling factors, select per-component methods,
-   * and create storage as needed.
-   */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Compute size of an "input group" after IDCT scaling.  This many samples
-     * are to be converted to max_h_samp_factor * max_v_samp_factor pixels.
-     */
-    h_in_group = (compptr->h_samp_factor * compptr->DCT_scaled_size) /
-		 cinfo->min_DCT_scaled_size;
-    v_in_group = (compptr->v_samp_factor * compptr->DCT_scaled_size) /
-		 cinfo->min_DCT_scaled_size;
-    h_out_group = cinfo->max_h_samp_factor;
-    v_out_group = cinfo->max_v_samp_factor;
-    upsample->rowgroup_height[ci] = v_in_group; /* save for use later */
-    need_buffer = TRUE;
-    if (! compptr->component_needed) {
-      /* Don't bother to upsample an uninteresting component. */
-      upsample->methods[ci] = noop_upsample;
-      need_buffer = FALSE;
-    } else if (h_in_group == h_out_group && v_in_group == v_out_group) {
-      /* Fullsize components can be processed without any work. */
-      upsample->methods[ci] = fullsize_upsample;
-      need_buffer = FALSE;
-    } else if (h_in_group * 2 == h_out_group &&
-	       v_in_group == v_out_group) {
-      /* Special cases for 2h1v upsampling */
-      if (do_fancy && compptr->downsampled_width > 2)
-	upsample->methods[ci] = h2v1_fancy_upsample;
-      else
-	upsample->methods[ci] = h2v1_upsample;
-    } else if (h_in_group * 2 == h_out_group &&
-	       v_in_group * 2 == v_out_group) {
-      /* Special cases for 2h2v upsampling */
-      if (do_fancy && compptr->downsampled_width > 2) {
-	upsample->methods[ci] = h2v2_fancy_upsample;
-	upsample->pub.need_context_rows = TRUE;
-      } else
-	upsample->methods[ci] = h2v2_upsample;
-    } else if ((h_out_group % h_in_group) == 0 &&
-	       (v_out_group % v_in_group) == 0) {
-      /* Generic integral-factors upsampling method */
-      upsample->methods[ci] = int_upsample;
-      upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group);
-      upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group);
-    } else
-      ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
-    if (need_buffer) {
-      upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 (JDIMENSION) jround_up((long) cinfo->output_width,
-				(long) cinfo->max_h_samp_factor),
-	 (JDIMENSION) cinfo->max_v_samp_factor);
-    }
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jdtrans.c b/modules/juce_graphics/image_formats/jpglib/jdtrans.c
deleted file mode 100644
index 12c193c..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jdtrans.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * jdtrans.c
- *
- * Copyright (C) 1995-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains library routines for transcoding decompression,
- * that is, reading raw DCT coefficient arrays from an input JPEG file.
- * The routines in jdapimin.c will also be needed by a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Forward declarations */
-LOCAL(void) transdecode_master_selection JPP((j_decompress_ptr cinfo));
-
-
-/*
- * Read the coefficient arrays from a JPEG file.
- * jpeg_read_header must be completed before calling this.
- *
- * The entire image is read into a set of virtual coefficient-block arrays,
- * one per component.  The return value is a pointer to the array of
- * virtual-array descriptors.  These can be manipulated directly via the
- * JPEG memory manager, or handed off to jpeg_write_coefficients().
- * To release the memory occupied by the virtual arrays, call
- * jpeg_finish_decompress() when done with the data.
- *
- * An alternative usage is to simply obtain access to the coefficient arrays
- * during a buffered-image-mode decompression operation.  This is allowed
- * after any jpeg_finish_output() call.  The arrays can be accessed until
- * jpeg_finish_decompress() is called.  (Note that any call to the library
- * may reposition the arrays, so don't rely on access_virt_barray() results
- * to stay valid across library calls.)
- *
- * Returns NULL if suspended.  This case need be checked only if
- * a suspending data source is used.
- */
-
-GLOBAL(jvirt_barray_ptr *)
-jpeg_read_coefficients (j_decompress_ptr cinfo)
-{
-  if (cinfo->global_state == DSTATE_READY) {
-    /* First call: initialize active modules */
-    transdecode_master_selection(cinfo);
-    cinfo->global_state = DSTATE_RDCOEFS;
-  }
-  if (cinfo->global_state == DSTATE_RDCOEFS) {
-    /* Absorb whole file into the coef buffer */
-    for (;;) {
-      int retcode;
-      /* Call progress monitor hook if present */
-      if (cinfo->progress != NULL)
-	(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-      /* Absorb some more input */
-      retcode = (*cinfo->inputctl->consume_input) (cinfo);
-      if (retcode == JPEG_SUSPENDED)
-	return NULL;
-      if (retcode == JPEG_REACHED_EOI)
-	break;
-      /* Advance progress counter if appropriate */
-      if (cinfo->progress != NULL &&
-	  (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
-	if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
-	  /* startup underestimated number of scans; ratchet up one scan */
-	  cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
-	}
-      }
-    }
-    /* Set state so that jpeg_finish_decompress does the right thing */
-    cinfo->global_state = DSTATE_STOPPING;
-  }
-  /* At this point we should be in state DSTATE_STOPPING if being used
-   * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access
-   * to the coefficients during a full buffered-image-mode decompression.
-   */
-  if ((cinfo->global_state == DSTATE_STOPPING ||
-       cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) {
-    return cinfo->coef->coef_arrays;
-  }
-  /* Oops, improper usage */
-  ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  return NULL;			/* keep compiler happy */
-}
-
-
-/*
- * Master selection of decompression modules for transcoding.
- * This substitutes for jdmaster.c's initialization of the full decompressor.
- */
-
-LOCAL(void)
-transdecode_master_selection (j_decompress_ptr cinfo)
-{
-  /* This is effectively a buffered-image operation. */
-  cinfo->buffered_image = TRUE;
-
-  /* Entropy decoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code) {
-    ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
-  } else {
-    if (cinfo->progressive_mode) {
-#ifdef D_PROGRESSIVE_SUPPORTED
-      jinit_phuff_decoder(cinfo);
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    } else
-      jinit_huff_decoder(cinfo);
-  }
-
-  /* Always get a full-image coefficient buffer. */
-  jinit_d_coef_controller(cinfo, TRUE);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Initialize input side of decompressor to consume first scan. */
-  (*cinfo->inputctl->start_input_pass) (cinfo);
-
-  /* Initialize progress monitoring. */
-  if (cinfo->progress != NULL) {
-    int nscans;
-    /* Estimate number of scans to set pass_limit. */
-    if (cinfo->progressive_mode) {
-      /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
-      nscans = 2 + 3 * cinfo->num_components;
-    } else if (cinfo->inputctl->has_multiple_scans) {
-      /* For a nonprogressive multiscan file, estimate 1 scan per component. */
-      nscans = cinfo->num_components;
-    } else {
-      nscans = 1;
-    }
-    cinfo->progress->pass_counter = 0L;
-    cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
-    cinfo->progress->completed_passes = 0;
-    cinfo->progress->total_passes = 1;
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jerror.c b/modules/juce_graphics/image_formats/jpglib/jerror.c
deleted file mode 100644
index c98aed7..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jerror.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * jerror.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains simple error-reporting and trace-message routines.
- * These are suitable for Unix-like systems and others where writing to
- * stderr is the right thing to do.  Many applications will want to replace
- * some or all of these routines.
- *
- * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile,
- * you get a Windows-specific hack to display error messages in a dialog box.
- * It ain't much, but it beats dropping error messages into the bit bucket,
- * which is what happens to output to stderr under most Windows C compilers.
- *
- * These routines are used by both the compression and decompression code.
- */
-
-/* this is not a core library module, so it doesn't define JPEG_INTERNALS */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jversion.h"
-#include "jerror.h"
-
-#ifdef USE_WINDOWS_MESSAGEBOX
-#include <windows.h>
-#endif
-
-#ifndef EXIT_FAILURE		/* define exit() codes if not provided */
-#define EXIT_FAILURE  1
-#endif
-
-
-/*
- * Create the message string table.
- * We do this from the master message list in jerror.h by re-reading
- * jerror.h with a suitable definition for macro JMESSAGE.
- * The message table is made an external symbol just in case any applications
- * want to refer to it directly.
- */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_std_message_table	jMsgTable
-#endif
-
-#define JMESSAGE(code,string)	string ,
-
-const char * const jpeg_std_message_table[] = {
-#include "jerror.h"
-  NULL
-};
-
-
-/*
- * Error exit handler: must not return to caller.
- *
- * Applications may override this if they want to get control back after
- * an error.  Typically one would longjmp somewhere instead of exiting.
- * The setjmp buffer can be made a private field within an expanded error
- * handler object.  Note that the info needed to generate an error message
- * is stored in the error object, so you can generate the message now or
- * later, at your convenience.
- * You should make sure that the JPEG object is cleaned up (with jpeg_abort
- * or jpeg_destroy) at some point.
- */
-
-METHODDEF(void)
-error_exit (j_common_ptr cinfo)
-{
-  /* Always display the message */
-  (*cinfo->err->output_message) (cinfo);
-
-  /* Let the memory manager delete any temp files before we die */
-  jpeg_destroy(cinfo);
-
-  exit(EXIT_FAILURE);
-}
-
-
-/*
- * Actual output of an error or trace message.
- * Applications may override this method to send JPEG messages somewhere
- * other than stderr.
- *
- * On Windows, printing to stderr is generally completely useless,
- * so we provide optional code to produce an error-dialog popup.
- * Most Windows applications will still prefer to override this routine,
- * but if they don't, it'll do something at least marginally useful.
- *
- * NOTE: to use the library in an environment that doesn't support the
- * C stdio library, you may have to delete the call to fprintf() entirely,
- * not just not use this routine.
- */
-
-METHODDEF(void)
-output_message (j_common_ptr cinfo)
-{
-  char buffer[JMSG_LENGTH_MAX];
-
-  /* Create the message */
-  (*cinfo->err->format_message) (cinfo, buffer);
-
-#ifdef USE_WINDOWS_MESSAGEBOX
-  /* Display it in a message dialog box */
-  MessageBox(GetActiveWindow(), buffer, "JPEG Library Error",
-	     MB_OK | MB_ICONERROR);
-#else
-  /* Send it to stderr, adding a newline */
-  fprintf(stderr, "%s\n", buffer);
-#endif
-}
-
-
-/*
- * Decide whether to emit a trace or warning message.
- * msg_level is one of:
- *   -1: recoverable corrupt-data warning, may want to abort.
- *    0: important advisory messages (always display to user).
- *    1: first level of tracing detail.
- *    2,3,...: successively more detailed tracing messages.
- * An application might override this method if it wanted to abort on warnings
- * or change the policy about which messages to display.
- */
-
-METHODDEF(void)
-emit_message (j_common_ptr cinfo, int msg_level)
-{
-  struct jpeg_error_mgr * err = cinfo->err;
-
-  if (msg_level < 0) {
-    /* It's a warning message.  Since corrupt files may generate many warnings,
-     * the policy implemented here is to show only the first warning,
-     * unless trace_level >= 3.
-     */
-    if (err->num_warnings == 0 || err->trace_level >= 3)
-      (*err->output_message) (cinfo);
-    /* Always count warnings in num_warnings. */
-    err->num_warnings++;
-  } else {
-    /* It's a trace message.  Show it if trace_level >= msg_level. */
-    if (err->trace_level >= msg_level)
-      (*err->output_message) (cinfo);
-  }
-}
-
-
-/*
- * Format a message string for the most recent JPEG error or message.
- * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX
- * characters.  Note that no '\n' character is added to the string.
- * Few applications should need to override this method.
- */
-
-METHODDEF(void)
-format_message (j_common_ptr cinfo, char * buffer)
-{
-  struct jpeg_error_mgr * err = cinfo->err;
-  int msg_code = err->msg_code;
-  const char * msgtext = NULL;
-  const char * msgptr;
-  char ch;
-  boolean isstring;
-
-  /* Look up message string in proper table */
-  if (msg_code > 0 && msg_code <= err->last_jpeg_message) {
-    msgtext = err->jpeg_message_table[msg_code];
-  } else if (err->addon_message_table != NULL &&
-	     msg_code >= err->first_addon_message &&
-	     msg_code <= err->last_addon_message) {
-    msgtext = err->addon_message_table[msg_code - err->first_addon_message];
-  }
-
-  /* Defend against bogus message number */
-  if (msgtext == NULL) {
-    err->msg_parm.i[0] = msg_code;
-    msgtext = err->jpeg_message_table[0];
-  }
-
-  /* Check for string parameter, as indicated by %s in the message text */
-  isstring = FALSE;
-  msgptr = msgtext;
-  while ((ch = *msgptr++) != '\0') {
-    if (ch == '%') {
-      if (*msgptr == 's') isstring = TRUE;
-      break;
-    }
-  }
-
-  /* Format the message into the passed buffer */
-  if (isstring)
-    sprintf(buffer, msgtext, err->msg_parm.s);
-  else
-    sprintf(buffer, msgtext,
-	    err->msg_parm.i[0], err->msg_parm.i[1],
-	    err->msg_parm.i[2], err->msg_parm.i[3],
-	    err->msg_parm.i[4], err->msg_parm.i[5],
-	    err->msg_parm.i[6], err->msg_parm.i[7]);
-}
-
-
-/*
- * Reset error state variables at start of a new image.
- * This is called during compression startup to reset trace/error
- * processing to default state, without losing any application-specific
- * method pointers.  An application might possibly want to override
- * this method if it has additional error processing state.
- */
-
-METHODDEF(void)
-reset_error_mgr (j_common_ptr cinfo)
-{
-  cinfo->err->num_warnings = 0;
-  /* trace_level is not reset since it is an application-supplied parameter */
-  cinfo->err->msg_code = 0;	/* may be useful as a flag for "no error" */
-}
-
-
-/*
- * Fill in the standard error-handling methods in a jpeg_error_mgr object.
- * Typical call is:
- *	struct jpeg_compress_struct cinfo;
- *	struct jpeg_error_mgr err;
- *
- *	cinfo.err = jpeg_std_error(&err);
- * after which the application may override some of the methods.
- */
-
-GLOBAL(struct jpeg_error_mgr *)
-jpeg_std_error (struct jpeg_error_mgr * err)
-{
-  err->error_exit = error_exit;
-  err->emit_message = emit_message;
-  err->output_message = output_message;
-  err->format_message = format_message;
-  err->reset_error_mgr = reset_error_mgr;
-
-  err->trace_level = 0;		/* default = no tracing */
-  err->num_warnings = 0;	/* no warnings emitted yet */
-  err->msg_code = 0;		/* may be useful as a flag for "no error" */
-
-  /* Initialize message table pointers */
-  err->jpeg_message_table = jpeg_std_message_table;
-  err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1;
-
-  err->addon_message_table = NULL;
-  err->first_addon_message = 0;	/* for safety */
-  err->last_addon_message = 0;
-
-  return err;
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jerror.h b/modules/juce_graphics/image_formats/jpglib/jerror.h
deleted file mode 100644
index 79084f2..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jerror.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * jerror.h
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the error and message codes for the JPEG library.
- * Edit this file to add new codes, or to translate the message strings to
- * some other language.
- * A set of error-reporting macros are defined too.  Some applications using
- * the JPEG library may wish to include this file to get the error codes
- * and/or the macros.
- */
-
-/*
- * To define the enum list of message codes, include this file without
- * defining macro JMESSAGE.  To create a message string table, include it
- * again with a suitable JMESSAGE definition (see jerror.c for an example).
- */
-#ifndef JMESSAGE
-#ifndef JERROR_H
-/* First time through, define the enum list */
-#define JMAKE_ENUM_LIST
-#else
-/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
-#define JMESSAGE(code,string)
-#endif /* JERROR_H */
-#endif /* JMESSAGE */
-
-#ifdef JMAKE_ENUM_LIST
-
-typedef enum {
-
-#define JMESSAGE(code,string)	code ,
-
-#endif /* JMAKE_ENUM_LIST */
-
-JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */
-
-/* For maintenance convenience, list is alphabetical by message code name */
-JMESSAGE(JERR_ARITH_NOTIMPL,
-	 "Sorry, there are legal restrictions on arithmetic coding")
-JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")
-JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
-JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
-JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
-JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")
-JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported")
-JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
-JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
-JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
-JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")
-JMESSAGE(JERR_BAD_LIB_VERSION,
-	 "Wrong JPEG library version: library is %d, caller expects %d")
-JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")
-JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")
-JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")
-JMESSAGE(JERR_BAD_PROGRESSION,
-	 "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d")
-JMESSAGE(JERR_BAD_PROG_SCRIPT,
-	 "Invalid progressive parameters at scan script entry %d")
-JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")
-JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")
-JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")
-JMESSAGE(JERR_BAD_STRUCT_SIZE,
-	 "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")
-JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")
-JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")
-JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")
-JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")
-JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")
-JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")
-JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
-JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
-JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
-JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
-JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
-JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
-JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")
-JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")
-JMESSAGE(JERR_FILE_READ, "Input file read error")
-JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")
-JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")
-JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow")
-JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")
-JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")
-JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")
-JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")
-JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,
-	 "Cannot transcode due to multiple use of quantization table %d")
-JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")
-JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")
-JMESSAGE(JERR_NOTIMPL, "Not implemented yet")
-JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")
-JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported")
-JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
-JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")
-JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
-JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")
-JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")
-JMESSAGE(JERR_QUANT_COMPONENTS,
-	 "Cannot quantize more than %d color components")
-JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")
-JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")
-JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")
-JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")
-JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")
-JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")
-JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF")
-JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")
-JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")
-JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")
-JMESSAGE(JERR_TFILE_WRITE,
-	 "Write failed on temporary file --- out of disk space?")
-JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")
-JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")
-JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")
-JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")
-JMESSAGE(JERR_XMS_READ, "Read from XMS failed")
-JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")
-JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT)
-JMESSAGE(JMSG_VERSION, JVERSION)
-JMESSAGE(JTRC_16BIT_TABLES,
-	 "Caution: quantization tables are too coarse for baseline JPEG")
-JMESSAGE(JTRC_ADOBE,
-	 "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")
-JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")
-JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")
-JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")
-JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")
-JMESSAGE(JTRC_DQT, "Define Quantization Table %d  precision %d")
-JMESSAGE(JTRC_DRI, "Define Restart Interval %u")
-JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")
-JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")
-JMESSAGE(JTRC_EOI, "End Of Image")
-JMESSAGE(JTRC_HUFFBITS, "        %3d %3d %3d %3d %3d %3d %3d %3d")
-JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d  %d")
-JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,
-	 "Warning: thumbnail image size does not match data length %u")
-JMESSAGE(JTRC_JFIF_EXTENSION,
-	 "JFIF extension marker: type 0x%02x, length %u")
-JMESSAGE(JTRC_JFIF_THUMBNAIL, "    with %d x %d thumbnail image")
-JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")
-JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")
-JMESSAGE(JTRC_QUANTVALS, "        %4u %4u %4u %4u %4u %4u %4u %4u")
-JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")
-JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")
-JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")
-JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")
-JMESSAGE(JTRC_RST, "RST%d")
-JMESSAGE(JTRC_SMOOTH_NOTIMPL,
-	 "Smoothing not supported with nonstandard sampling ratios")
-JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")
-JMESSAGE(JTRC_SOF_COMPONENT, "    Component %d: %dhx%dv q=%d")
-JMESSAGE(JTRC_SOI, "Start of Image")
-JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")
-JMESSAGE(JTRC_SOS_COMPONENT, "    Component %d: dc=%d ac=%d")
-JMESSAGE(JTRC_SOS_PARAMS, "  Ss=%d, Se=%d, Ah=%d, Al=%d")
-JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")
-JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")
-JMESSAGE(JTRC_THUMB_JPEG,
-	 "JFIF extension marker: JPEG-compressed thumbnail image, length %u")
-JMESSAGE(JTRC_THUMB_PALETTE,
-	 "JFIF extension marker: palette thumbnail image, length %u")
-JMESSAGE(JTRC_THUMB_RGB,
-	 "JFIF extension marker: RGB thumbnail image, length %u")
-JMESSAGE(JTRC_UNKNOWN_IDS,
-	 "Unrecognized component IDs %d %d %d, assuming YCbCr")
-JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")
-JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")
-JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")
-JMESSAGE(JWRN_BOGUS_PROGRESSION,
-	 "Inconsistent progression sequence for component %d coefficient %d")
-JMESSAGE(JWRN_EXTRANEOUS_DATA,
-	 "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")
-JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")
-JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")
-JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")
-JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")
-JMESSAGE(JWRN_MUST_RESYNC,
-	 "Corrupt JPEG data: found marker 0x%02x instead of RST%d")
-JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")
-JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")
-
-#ifdef JMAKE_ENUM_LIST
-
-  JMSG_LASTMSGCODE
-} J_MESSAGE_CODE;
-
-#undef JMAKE_ENUM_LIST
-#endif /* JMAKE_ENUM_LIST */
-
-/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
-#undef JMESSAGE
-
-
-#ifndef JERROR_H
-#define JERROR_H
-
-/* Macros to simplify using the error and trace message stuff */
-/* The first parameter is either type of cinfo pointer */
-
-/* Fatal errors (print message and exit) */
-#define ERREXIT(cinfo,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT1(cinfo,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT2(cinfo,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT3(cinfo,code,p1,p2,p3)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT4(cinfo,code,p1,p2,p3,p4)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (cinfo)->err->msg_parm.i[3] = (p4), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXITS(cinfo,code,str)  \
-  ((cinfo)->err->msg_code = (code), \
-   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-
-#define MAKESTMT(stuff)		do { stuff } while (0)
-
-/* Nonfatal errors (we can keep going, but the data is probably corrupt) */
-#define WARNMS(cinfo,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-#define WARNMS1(cinfo,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-#define WARNMS2(cinfo,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-
-/* Informational/debugging messages */
-#define TRACEMS(cinfo,lvl,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS1(cinfo,lvl,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS2(cinfo,lvl,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS3(cinfo,lvl,code,p1,p2,p3)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   _mp[4] = (p5); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMSS(cinfo,lvl,code,str)  \
-  ((cinfo)->err->msg_code = (code), \
-   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-
-#endif /* JERROR_H */
diff --git a/modules/juce_graphics/image_formats/jpglib/jfdctflt.c b/modules/juce_graphics/image_formats/jpglib/jfdctflt.c
deleted file mode 100644
index 102f7d5..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jfdctflt.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * jfdctflt.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a floating-point implementation of the
- * forward DCT (Discrete Cosine Transform).
- *
- * This implementation should be more accurate than either of the integer
- * DCT implementations.  However, it may not give the same results on all
- * machines because of differences in roundoff behavior.  Speed will depend
- * on the hardware's floating point capacity.
- *
- * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
- * on each column.  Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with a fixed-point
- * implementation, accuracy is lost due to imprecise representation of the
- * scaled quantization values.  However, that problem does not arise if
- * we use floating point arithmetic.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_FLOAT_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-
-GLOBAL(void)
-jpeg_fdct_float (FAST_FLOAT * data)
-{
-  FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
-  FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
-  FAST_FLOAT *dataptr;
-  int ctr;
-
-  /* Pass 1: process rows. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[0] + dataptr[7];
-    tmp7 = dataptr[0] - dataptr[7];
-    tmp1 = dataptr[1] + dataptr[6];
-    tmp6 = dataptr[1] - dataptr[6];
-    tmp2 = dataptr[2] + dataptr[5];
-    tmp5 = dataptr[2] - dataptr[5];
-    tmp3 = dataptr[3] + dataptr[4];
-    tmp4 = dataptr[3] - dataptr[4];
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[0] = tmp10 + tmp11; /* phase 3 */
-    dataptr[4] = tmp10 - tmp11;
-
-    z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
-    dataptr[2] = tmp13 + z1;	/* phase 5 */
-    dataptr[6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */
-    z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
-    z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
-    z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[5] = z13 + z2;	/* phase 6 */
-    dataptr[3] = z13 - z2;
-    dataptr[1] = z11 + z4;
-    dataptr[7] = z11 - z4;
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
-    dataptr[DCTSIZE*4] = tmp10 - tmp11;
-
-    z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
-    dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
-    dataptr[DCTSIZE*6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */
-    z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
-    z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
-    z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
-    dataptr[DCTSIZE*3] = z13 - z2;
-    dataptr[DCTSIZE*1] = z11 + z4;
-    dataptr[DCTSIZE*7] = z11 - z4;
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-#endif /* DCT_FLOAT_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jfdctfst.c b/modules/juce_graphics/image_formats/jpglib/jfdctfst.c
deleted file mode 100644
index f26221d..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jfdctfst.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * jfdctfst.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a fast, not so accurate integer implementation of the
- * forward DCT (Discrete Cosine Transform).
- *
- * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
- * on each column.  Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with fixed-point math,
- * accuracy is lost due to imprecise representation of the scaled
- * quantization values.  The smaller the quantization table entry, the less
- * precise the scaled value, so this implementation does worse with high-
- * quality-setting files than with low-quality ones.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_IFAST_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Scaling decisions are generally the same as in the LL&M algorithm;
- * see jfdctint.c for more details.  However, we choose to descale
- * (right shift) multiplication products as soon as they are formed,
- * rather than carrying additional fractional bits into subsequent additions.
- * This compromises accuracy slightly, but it lets us save a few shifts.
- * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples)
- * everywhere except in the multiplications proper; this saves a good deal
- * of work on 16-bit-int machines.
- *
- * Again to save a few shifts, the intermediate results between pass 1 and
- * pass 2 are not upscaled, but are represented only to integral precision.
- *
- * A final compromise is to represent the multiplicative constants to only
- * 8 fractional bits, rather than 13.  This saves some shifting work on some
- * machines, and may also reduce the cost of multiplication (since there
- * are fewer one-bits in the constants).
- */
-
-#define CONST_BITS  8
-
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 8
-#define FIX_0_382683433  ((INT32)   98)		/* FIX(0.382683433) */
-#define FIX_0_541196100  ((INT32)  139)		/* FIX(0.541196100) */
-#define FIX_0_707106781  ((INT32)  181)		/* FIX(0.707106781) */
-#define FIX_1_306562965  ((INT32)  334)		/* FIX(1.306562965) */
-#else
-#define FIX_0_382683433  FIX(0.382683433)
-#define FIX_0_541196100  FIX(0.541196100)
-#define FIX_0_707106781  FIX(0.707106781)
-#define FIX_1_306562965  FIX(1.306562965)
-#endif
-
-
-/* We can gain a little more speed, with a further compromise in accuracy,
- * by omitting the addition in a descaling shift.  This yields an incorrectly
- * rounded result half the time...
- */
-
-#ifndef USE_ACCURATE_ROUNDING
-#undef DESCALE
-#define DESCALE(x,n)  RIGHT_SHIFT(x, n)
-#endif
-
-
-/* Multiply a DCTELEM variable by an INT32 constant, and immediately
- * descale to yield a DCTELEM result.
- */
-
-#define MULTIPLY(var,const)  ((DCTELEM) DESCALE((var) * (const), CONST_BITS))
-
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-
-GLOBAL(void)
-jpeg_fdct_ifast (DCTELEM * data)
-{
-  DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  DCTELEM tmp10, tmp11, tmp12, tmp13;
-  DCTELEM z1, z2, z3, z4, z5, z11, z13;
-  DCTELEM *dataptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[0] + dataptr[7];
-    tmp7 = dataptr[0] - dataptr[7];
-    tmp1 = dataptr[1] + dataptr[6];
-    tmp6 = dataptr[1] - dataptr[6];
-    tmp2 = dataptr[2] + dataptr[5];
-    tmp5 = dataptr[2] - dataptr[5];
-    tmp3 = dataptr[3] + dataptr[4];
-    tmp4 = dataptr[3] - dataptr[4];
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[0] = tmp10 + tmp11; /* phase 3 */
-    dataptr[4] = tmp10 - tmp11;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */
-    dataptr[2] = tmp13 + z1;	/* phase 5 */
-    dataptr[6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */
-    z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */
-    z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */
-    z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[5] = z13 + z2;	/* phase 6 */
-    dataptr[3] = z13 - z2;
-    dataptr[1] = z11 + z4;
-    dataptr[7] = z11 - z4;
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
-    dataptr[DCTSIZE*4] = tmp10 - tmp11;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */
-    dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
-    dataptr[DCTSIZE*6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */
-    z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */
-    z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */
-    z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
-    dataptr[DCTSIZE*3] = z13 - z2;
-    dataptr[DCTSIZE*1] = z11 + z4;
-    dataptr[DCTSIZE*7] = z11 - z4;
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-#endif /* DCT_IFAST_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jfdctint.c b/modules/juce_graphics/image_formats/jpglib/jfdctint.c
deleted file mode 100644
index a905849..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jfdctint.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * jfdctint.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a slow-but-accurate integer implementation of the
- * forward DCT (Discrete Cosine Transform).
- *
- * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
- * on each column.  Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on an algorithm described in
- *   C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
- *   Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
- *   Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
- * The primary algorithm described there uses 11 multiplies and 29 adds.
- * We use their alternate method with 12 multiplies and 32 adds.
- * The advantage of this method is that no data path contains more than one
- * multiplication; this allows a very simple and accurate implementation in
- * scaled fixed-point arithmetic, with a minimal number of shifts.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_ISLOW_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/*
- * The poop on this scaling stuff is as follows:
- *
- * Each 1-D DCT step produces outputs which are a factor of sqrt(N)
- * larger than the true DCT outputs.  The final outputs are therefore
- * a factor of N larger than desired; since N=8 this can be cured by
- * a simple right shift at the end of the algorithm.  The advantage of
- * this arrangement is that we save two multiplications per 1-D DCT,
- * because the y0 and y4 outputs need not be divided by sqrt(N).
- * In the IJG code, this factor of 8 is removed by the quantization step
- * (in jcdctmgr.c), NOT in this module.
- *
- * We have to do addition and subtraction of the integer inputs, which
- * is no problem, and multiplication by fractional constants, which is
- * a problem to do in integer arithmetic.  We multiply all the constants
- * by CONST_SCALE and convert them to integer constants (thus retaining
- * CONST_BITS bits of precision in the constants).  After doing a
- * multiplication we have to divide the product by CONST_SCALE, with proper
- * rounding, to produce the correct output.  This division can be done
- * cheaply as a right shift of CONST_BITS bits.  We postpone shifting
- * as long as possible so that partial sums can be added together with
- * full fractional precision.
- *
- * The outputs of the first pass are scaled up by PASS1_BITS bits so that
- * they are represented to better-than-integral precision.  These outputs
- * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
- * with the recommended scaling.  (For 12-bit sample data, the intermediate
- * array is INT32 anyway.)
- *
- * To avoid overflow of the 32-bit intermediate results in pass 2, we must
- * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
- * shows that the values given below are the most effective.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  13
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  13
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 13
-#define FIX_0_298631336  ((INT32)  2446)	/* FIX(0.298631336) */
-#define FIX_0_390180644  ((INT32)  3196)	/* FIX(0.390180644) */
-#define FIX_0_541196100  ((INT32)  4433)	/* FIX(0.541196100) */
-#define FIX_0_765366865  ((INT32)  6270)	/* FIX(0.765366865) */
-#define FIX_0_899976223  ((INT32)  7373)	/* FIX(0.899976223) */
-#define FIX_1_175875602  ((INT32)  9633)	/* FIX(1.175875602) */
-#define FIX_1_501321110  ((INT32)  12299)	/* FIX(1.501321110) */
-#define FIX_1_847759065  ((INT32)  15137)	/* FIX(1.847759065) */
-#define FIX_1_961570560  ((INT32)  16069)	/* FIX(1.961570560) */
-#define FIX_2_053119869  ((INT32)  16819)	/* FIX(2.053119869) */
-#define FIX_2_562915447  ((INT32)  20995)	/* FIX(2.562915447) */
-#define FIX_3_072711026  ((INT32)  25172)	/* FIX(3.072711026) */
-#else
-#define FIX_0_298631336  FIX(0.298631336)
-#define FIX_0_390180644  FIX(0.390180644)
-#define FIX_0_541196100  FIX(0.541196100)
-#define FIX_0_765366865  FIX(0.765366865)
-#define FIX_0_899976223  FIX(0.899976223)
-#define FIX_1_175875602  FIX(1.175875602)
-#define FIX_1_501321110  FIX(1.501321110)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_1_961570560  FIX(1.961570560)
-#define FIX_2_053119869  FIX(2.053119869)
-#define FIX_2_562915447  FIX(2.562915447)
-#define FIX_3_072711026  FIX(3.072711026)
-#endif
-
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * For 8-bit samples with the recommended scaling, all the variable
- * and constant values involved are no more than 16 bits wide, so a
- * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
- * For 12-bit samples, a full 32-bit multiplication will be needed.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
-#else
-#define MULTIPLY(var,const)  ((var) * (const))
-#endif
-
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-
-GLOBAL(void)
-jpeg_fdct_islow (DCTELEM * data)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3, z4, z5;
-  DCTELEM *dataptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows. */
-  /* Note results are scaled up by sqrt(8) compared to a true DCT; */
-  /* furthermore, we scale the results by 2**PASS1_BITS. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[0] + dataptr[7];
-    tmp7 = dataptr[0] - dataptr[7];
-    tmp1 = dataptr[1] + dataptr[6];
-    tmp6 = dataptr[1] - dataptr[6];
-    tmp2 = dataptr[2] + dataptr[5];
-    tmp5 = dataptr[2] - dataptr[5];
-    tmp3 = dataptr[3] + dataptr[4];
-    tmp4 = dataptr[3] - dataptr[4];
-
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
-     */
-
-    tmp10 = tmp0 + tmp3;
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS);
-    dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
-    dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
-				   CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
-				   CONST_BITS-PASS1_BITS);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * cK represents cos(K*pi/16).
-     * i0..i3 in the paper are tmp4..tmp7 here.
-     */
-
-    z1 = tmp4 + tmp7;
-    z2 = tmp5 + tmp6;
-    z3 = tmp4 + tmp6;
-    z4 = tmp5 + tmp7;
-    z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
-
-    tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
-    tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
-    tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
-    tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
-    z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
-    z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
-    z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
-    z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
-
-    z3 += z5;
-    z4 += z5;
-
-    dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS);
-    dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
-     */
-
-    tmp10 = tmp0 + tmp3;
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
-    dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
-					   CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
-					   CONST_BITS+PASS1_BITS);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * cK represents cos(K*pi/16).
-     * i0..i3 in the paper are tmp4..tmp7 here.
-     */
-
-    z1 = tmp4 + tmp7;
-    z2 = tmp5 + tmp6;
-    z3 = tmp4 + tmp6;
-    z4 = tmp5 + tmp7;
-    z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
-
-    tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
-    tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
-    tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
-    tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
-    z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
-    z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
-    z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
-    z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
-
-    z3 += z5;
-    z4 += z5;
-
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3,
-					   CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4,
-					   CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3,
-					   CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4,
-					   CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-#endif /* DCT_ISLOW_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jidctflt.c b/modules/juce_graphics/image_formats/jpglib/jidctflt.c
deleted file mode 100644
index 4a89578..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jidctflt.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * jidctflt.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a floating-point implementation of the
- * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
- * must also perform dequantization of the input coefficients.
- *
- * This implementation should be more accurate than either of the integer
- * IDCT implementations.  However, it may not give the same results on all
- * machines because of differences in roundoff behavior.  Speed will depend
- * on the hardware's floating point capacity.
- *
- * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
- * on each row (or vice versa, but it's more convenient to emit a row at
- * a time).  Direct algorithms are also available, but they are much more
- * complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with a fixed-point
- * implementation, accuracy is lost due to imprecise representation of the
- * scaled quantization values.  However, that problem does not arise if
- * we use floating point arithmetic.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_FLOAT_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce a float result.
- */
-
-#define DEQUANTIZE(coef,quantval)  (((FAST_FLOAT) (coef)) * (quantval))
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients.
- */
-
-GLOBAL(void)
-jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
-  FAST_FLOAT z5, z10, z11, z12, z13;
-  JCOEFPTR inptr;
-  FLOAT_MULT_TYPE * quantptr;
-  FAST_FLOAT * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = tmp0 + tmp2;	/* phase 3 */
-    tmp11 = tmp0 - tmp2;
-
-    tmp13 = tmp1 + tmp3;	/* phases 5-3 */
-    tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */
-
-    tmp0 = tmp10 + tmp13;	/* phase 2 */
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    z13 = tmp6 + tmp5;		/* phase 6 */
-    z10 = tmp6 - tmp5;
-    z11 = tmp4 + tmp7;
-    z12 = tmp4 - tmp7;
-
-    tmp7 = z11 + z13;		/* phase 5 */
-    tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */
-
-    z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */
-    tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */
-    tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;	/* phase 2 */
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    wsptr[DCTSIZE*0] = tmp0 + tmp7;
-    wsptr[DCTSIZE*7] = tmp0 - tmp7;
-    wsptr[DCTSIZE*1] = tmp1 + tmp6;
-    wsptr[DCTSIZE*6] = tmp1 - tmp6;
-    wsptr[DCTSIZE*2] = tmp2 + tmp5;
-    wsptr[DCTSIZE*5] = tmp2 - tmp5;
-    wsptr[DCTSIZE*4] = tmp3 + tmp4;
-    wsptr[DCTSIZE*3] = tmp3 - tmp4;
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-
-  /* Pass 2: process rows from work array, store into output array. */
-  /* Note that we must descale the results by a factor of 8 == 2**3. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* Rows of zeroes can be exploited in the same way as we did with columns.
-     * However, the column calculation has created many nonzero AC terms, so
-     * the simplification applies less often (typically 5% to 10% of the time).
-     * And testing floats for zero is relatively expensive, so we don't bother.
-     */
-
-    /* Even part */
-
-    tmp10 = wsptr[0] + wsptr[4];
-    tmp11 = wsptr[0] - wsptr[4];
-
-    tmp13 = wsptr[2] + wsptr[6];
-    tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13;
-
-    tmp0 = tmp10 + tmp13;
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z13 = wsptr[5] + wsptr[3];
-    z10 = wsptr[5] - wsptr[3];
-    z11 = wsptr[1] + wsptr[7];
-    z12 = wsptr[1] - wsptr[7];
-
-    tmp7 = z11 + z13;
-    tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562);
-
-    z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */
-    tmp10 = ((FAST_FLOAT) 1.082392200) * z12 - z5; /* 2*(c2-c6) */
-    tmp12 = ((FAST_FLOAT) -2.613125930) * z10 + z5; /* -2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    /* Final output stage: scale down by a factor of 8 and range-limit */
-
-    outptr[0] = range_limit[(int) DESCALE((INT32) (tmp0 + tmp7), 3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) DESCALE((INT32) (tmp0 - tmp7), 3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) DESCALE((INT32) (tmp1 + tmp6), 3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) DESCALE((INT32) (tmp1 - tmp6), 3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) DESCALE((INT32) (tmp2 + tmp5), 3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) DESCALE((INT32) (tmp2 - tmp5), 3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) DESCALE((INT32) (tmp3 + tmp4), 3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) DESCALE((INT32) (tmp3 - tmp4), 3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-#endif /* DCT_FLOAT_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jidctfst.c b/modules/juce_graphics/image_formats/jpglib/jidctfst.c
deleted file mode 100644
index 41790ea..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jidctfst.c
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * jidctfst.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a fast, not so accurate integer implementation of the
- * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
- * must also perform dequantization of the input coefficients.
- *
- * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
- * on each row (or vice versa, but it's more convenient to emit a row at
- * a time).  Direct algorithms are also available, but they are much more
- * complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with fixed-point math,
- * accuracy is lost due to imprecise representation of the scaled
- * quantization values.  The smaller the quantization table entry, the less
- * precise the scaled value, so this implementation does worse with high-
- * quality-setting files than with low-quality ones.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_IFAST_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Scaling decisions are generally the same as in the LL&M algorithm;
- * see jidctint.c for more details.  However, we choose to descale
- * (right shift) multiplication products as soon as they are formed,
- * rather than carrying additional fractional bits into subsequent additions.
- * This compromises accuracy slightly, but it lets us save a few shifts.
- * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples)
- * everywhere except in the multiplications proper; this saves a good deal
- * of work on 16-bit-int machines.
- *
- * The dequantized coefficients are not integers because the AA&N scaling
- * factors have been incorporated.  We represent them scaled up by PASS1_BITS,
- * so that the first and second IDCT rounds have the same input scaling.
- * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to
- * avoid a descaling shift; this compromises accuracy rather drastically
- * for small quantization table entries, but it saves a lot of shifts.
- * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway,
- * so we use a much larger scaling factor to preserve accuracy.
- *
- * A final compromise is to represent the multiplicative constants to only
- * 8 fractional bits, rather than 13.  This saves some shifting work on some
- * machines, and may also reduce the cost of multiplication (since there
- * are fewer one-bits in the constants).
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  8
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  8
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 8
-#define FIX_1_082392200  ((INT32)  277)		/* FIX(1.082392200) */
-#define FIX_1_414213562  ((INT32)  362)		/* FIX(1.414213562) */
-#define FIX_1_847759065  ((INT32)  473)		/* FIX(1.847759065) */
-#define FIX_2_613125930  ((INT32)  669)		/* FIX(2.613125930) */
-#else
-#define FIX_1_082392200  FIX(1.082392200)
-#define FIX_1_414213562  FIX(1.414213562)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_2_613125930  FIX(2.613125930)
-#endif
-
-
-/* We can gain a little more speed, with a further compromise in accuracy,
- * by omitting the addition in a descaling shift.  This yields an incorrectly
- * rounded result half the time...
- */
-
-#ifndef USE_ACCURATE_ROUNDING
-#undef DESCALE
-#define DESCALE(x,n)  RIGHT_SHIFT(x, n)
-#endif
-
-
-/* Multiply a DCTELEM variable by an INT32 constant, and immediately
- * descale to yield a DCTELEM result.
- */
-
-#define MULTIPLY(var,const)  ((DCTELEM) DESCALE((var) * (const), CONST_BITS))
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce a DCTELEM result.  For 8-bit data a 16x16->16
- * multiplication will do.  For 12-bit data, the multiplier table is
- * declared INT32, so a 32-bit multiply will be used.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define DEQUANTIZE(coef,quantval)  (((IFAST_MULT_TYPE) (coef)) * (quantval))
-#else
-#define DEQUANTIZE(coef,quantval)  \
-	DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS)
-#endif
-
-
-/* Like DESCALE, but applies to a DCTELEM and produces an int.
- * We assume that int right shift is unsigned if INT32 right shift is.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define ISHIFT_TEMPS	DCTELEM ishift_temp;
-#if BITS_IN_JSAMPLE == 8
-#define DCTELEMBITS  16		/* DCTELEM may be 16 or 32 bits */
-#else
-#define DCTELEMBITS  32		/* DCTELEM must be 32 bits */
-#endif
-#define IRIGHT_SHIFT(x,shft)  \
-    ((ishift_temp = (x)) < 0 ? \
-     (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \
-     (ishift_temp >> (shft)))
-#else
-#define ISHIFT_TEMPS
-#define IRIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-#ifdef USE_ACCURATE_ROUNDING
-#define IDESCALE(x,n)  ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n))
-#else
-#define IDESCALE(x,n)  ((int) IRIGHT_SHIFT(x, n))
-#endif
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients.
- */
-
-GLOBAL(void)
-jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  DCTELEM tmp10, tmp11, tmp12, tmp13;
-  DCTELEM z5, z10, z11, z12, z13;
-  JCOEFPTR inptr;
-  IFAST_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[DCTSIZE2];	/* buffers data between passes */
-  SHIFT_TEMPS			/* for DESCALE */
-  ISHIFT_TEMPS			/* for IDESCALE */
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (IFAST_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = tmp0 + tmp2;	/* phase 3 */
-    tmp11 = tmp0 - tmp2;
-
-    tmp13 = tmp1 + tmp3;	/* phases 5-3 */
-    tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */
-
-    tmp0 = tmp10 + tmp13;	/* phase 2 */
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    z13 = tmp6 + tmp5;		/* phase 6 */
-    z10 = tmp6 - tmp5;
-    z11 = tmp4 + tmp7;
-    z12 = tmp4 - tmp7;
-
-    tmp7 = z11 + z13;		/* phase 5 */
-    tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
-
-    z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
-    tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
-    tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;	/* phase 2 */
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7);
-    wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7);
-    wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6);
-    wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6);
-    wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5);
-    wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5);
-    wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4);
-    wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4);
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-
-  /* Pass 2: process rows from work array, store into output array. */
-  /* Note that we must descale the results by a factor of 8 == 2**3, */
-  /* and also undo the PASS1_BITS scaling. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* Rows of zeroes can be exploited in the same way as we did with columns.
-     * However, the column calculation has created many nonzero AC terms, so
-     * the simplification applies less often (typically 5% to 10% of the time).
-     * On machines with very fast multiplication, it's possible that the
-     * test takes more time than it's worth.  In that case this section
-     * may be commented out.
-     */
-
-#ifndef NO_ZERO_ROW_TEST
-    if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
-	wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
-      /* AC terms all zero */
-      JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3)
-				  & RANGE_MASK];
-
-      outptr[0] = dcval;
-      outptr[1] = dcval;
-      outptr[2] = dcval;
-      outptr[3] = dcval;
-      outptr[4] = dcval;
-      outptr[5] = dcval;
-      outptr[6] = dcval;
-      outptr[7] = dcval;
-
-      wsptr += DCTSIZE;		/* advance pointer to next row */
-      continue;
-    }
-#endif
-
-    /* Even part */
-
-    tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]);
-    tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]);
-
-    tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]);
-    tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562)
-	    - tmp13;
-
-    tmp0 = tmp10 + tmp13;
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3];
-    z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3];
-    z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7];
-    z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7];
-
-    tmp7 = z11 + z13;		/* phase 5 */
-    tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
-
-    z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
-    tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
-    tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;	/* phase 2 */
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    /* Final output stage: scale down by a factor of 8 and range-limit */
-
-    outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-#endif /* DCT_IFAST_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jidctint.c b/modules/juce_graphics/image_formats/jpglib/jidctint.c
deleted file mode 100644
index 63ad6d3..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jidctint.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * jidctint.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a slow-but-accurate integer implementation of the
- * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
- * must also perform dequantization of the input coefficients.
- *
- * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
- * on each row (or vice versa, but it's more convenient to emit a row at
- * a time).  Direct algorithms are also available, but they are much more
- * complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on an algorithm described in
- *   C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
- *   Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
- *   Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
- * The primary algorithm described there uses 11 multiplies and 29 adds.
- * We use their alternate method with 12 multiplies and 32 adds.
- * The advantage of this method is that no data path contains more than one
- * multiplication; this allows a very simple and accurate implementation in
- * scaled fixed-point arithmetic, with a minimal number of shifts.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_ISLOW_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/*
- * The poop on this scaling stuff is as follows:
- *
- * Each 1-D IDCT step produces outputs which are a factor of sqrt(N)
- * larger than the true IDCT outputs.  The final outputs are therefore
- * a factor of N larger than desired; since N=8 this can be cured by
- * a simple right shift at the end of the algorithm.  The advantage of
- * this arrangement is that we save two multiplications per 1-D IDCT,
- * because the y0 and y4 inputs need not be divided by sqrt(N).
- *
- * We have to do addition and subtraction of the integer inputs, which
- * is no problem, and multiplication by fractional constants, which is
- * a problem to do in integer arithmetic.  We multiply all the constants
- * by CONST_SCALE and convert them to integer constants (thus retaining
- * CONST_BITS bits of precision in the constants).  After doing a
- * multiplication we have to divide the product by CONST_SCALE, with proper
- * rounding, to produce the correct output.  This division can be done
- * cheaply as a right shift of CONST_BITS bits.  We postpone shifting
- * as long as possible so that partial sums can be added together with
- * full fractional precision.
- *
- * The outputs of the first pass are scaled up by PASS1_BITS bits so that
- * they are represented to better-than-integral precision.  These outputs
- * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
- * with the recommended scaling.  (To scale up 12-bit sample data further, an
- * intermediate INT32 array would be needed.)
- *
- * To avoid overflow of the 32-bit intermediate results in pass 2, we must
- * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
- * shows that the values given below are the most effective.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  13
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  13
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 13
-#define FIX_0_298631336  ((INT32)  2446)	/* FIX(0.298631336) */
-#define FIX_0_390180644  ((INT32)  3196)	/* FIX(0.390180644) */
-#define FIX_0_541196100  ((INT32)  4433)	/* FIX(0.541196100) */
-#define FIX_0_765366865  ((INT32)  6270)	/* FIX(0.765366865) */
-#define FIX_0_899976223  ((INT32)  7373)	/* FIX(0.899976223) */
-#define FIX_1_175875602  ((INT32)  9633)	/* FIX(1.175875602) */
-#define FIX_1_501321110  ((INT32)  12299)	/* FIX(1.501321110) */
-#define FIX_1_847759065  ((INT32)  15137)	/* FIX(1.847759065) */
-#define FIX_1_961570560  ((INT32)  16069)	/* FIX(1.961570560) */
-#define FIX_2_053119869  ((INT32)  16819)	/* FIX(2.053119869) */
-#define FIX_2_562915447  ((INT32)  20995)	/* FIX(2.562915447) */
-#define FIX_3_072711026  ((INT32)  25172)	/* FIX(3.072711026) */
-#else
-#define FIX_0_298631336  FIX(0.298631336)
-#define FIX_0_390180644  FIX(0.390180644)
-#define FIX_0_541196100  FIX(0.541196100)
-#define FIX_0_765366865  FIX(0.765366865)
-#define FIX_0_899976223  FIX(0.899976223)
-#define FIX_1_175875602  FIX(1.175875602)
-#define FIX_1_501321110  FIX(1.501321110)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_1_961570560  FIX(1.961570560)
-#define FIX_2_053119869  FIX(2.053119869)
-#define FIX_2_562915447  FIX(2.562915447)
-#define FIX_3_072711026  FIX(3.072711026)
-#endif
-
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * For 8-bit samples with the recommended scaling, all the variable
- * and constant values involved are no more than 16 bits wide, so a
- * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
- * For 12-bit samples, a full 32-bit multiplication will be needed.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
-#else
-#define MULTIPLY(var,const)  ((var) * (const))
-#endif
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce an int result.  In this module, both inputs and result
- * are 16 bits or less, so either int or short multiply will work.
- */
-
-#define DEQUANTIZE(coef,quantval)  (((ISLOW_MULT_TYPE) (coef)) * (quantval))
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients.
- */
-
-GLOBAL(void)
-jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3, z4, z5;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[DCTSIZE2];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-  /* Note results are scaled up by sqrt(8) compared to a true IDCT; */
-  /* furthermore, we scale the results by 2**PASS1_BITS. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-
-    /* Even part: reverse the even part of the forward DCT. */
-    /* The rotator is sqrt(2)*c(-6). */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);
-    tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065);
-    tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865);
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-
-    tmp0 = (z2 + z3) << CONST_BITS;
-    tmp1 = (z2 - z3) << CONST_BITS;
-
-    tmp10 = tmp0 + tmp3;
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-    z1 = tmp0 + tmp3;
-    z2 = tmp1 + tmp2;
-    z3 = tmp0 + tmp2;
-    z4 = tmp1 + tmp3;
-    z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
-
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
-    z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
-    z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
-    z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
-    z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
-
-    z3 += z5;
-    z4 += z5;
-
-    tmp0 += z1 + z3;
-    tmp1 += z2 + z4;
-    tmp2 += z2 + z3;
-    tmp3 += z1 + z4;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS);
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-
-  /* Pass 2: process rows from work array, store into output array. */
-  /* Note that we must descale the results by a factor of 8 == 2**3, */
-  /* and also undo the PASS1_BITS scaling. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* Rows of zeroes can be exploited in the same way as we did with columns.
-     * However, the column calculation has created many nonzero AC terms, so
-     * the simplification applies less often (typically 5% to 10% of the time).
-     * On machines with very fast multiplication, it's possible that the
-     * test takes more time than it's worth.  In that case this section
-     * may be commented out.
-     */
-
-#ifndef NO_ZERO_ROW_TEST
-    if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
-	wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
-      /* AC terms all zero */
-      JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3)
-				  & RANGE_MASK];
-
-      outptr[0] = dcval;
-      outptr[1] = dcval;
-      outptr[2] = dcval;
-      outptr[3] = dcval;
-      outptr[4] = dcval;
-      outptr[5] = dcval;
-      outptr[6] = dcval;
-      outptr[7] = dcval;
-
-      wsptr += DCTSIZE;		/* advance pointer to next row */
-      continue;
-    }
-#endif
-
-    /* Even part: reverse the even part of the forward DCT. */
-    /* The rotator is sqrt(2)*c(-6). */
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[6];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);
-    tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065);
-    tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865);
-
-    tmp0 = ((INT32) wsptr[0] + (INT32) wsptr[4]) << CONST_BITS;
-    tmp1 = ((INT32) wsptr[0] - (INT32) wsptr[4]) << CONST_BITS;
-
-    tmp10 = tmp0 + tmp3;
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = (INT32) wsptr[7];
-    tmp1 = (INT32) wsptr[5];
-    tmp2 = (INT32) wsptr[3];
-    tmp3 = (INT32) wsptr[1];
-
-    z1 = tmp0 + tmp3;
-    z2 = tmp1 + tmp2;
-    z3 = tmp0 + tmp2;
-    z4 = tmp1 + tmp3;
-    z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
-
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
-    z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
-    z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
-    z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
-    z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
-
-    z3 += z5;
-    z4 += z5;
-
-    tmp0 += z1 + z3;
-    tmp1 += z2 + z4;
-    tmp2 += z2 + z3;
-    tmp3 += z1 + z4;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp3,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) DESCALE(tmp10 - tmp3,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) DESCALE(tmp11 + tmp2,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) DESCALE(tmp11 - tmp2,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) DESCALE(tmp12 + tmp1,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) DESCALE(tmp12 - tmp1,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) DESCALE(tmp13 + tmp0,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) DESCALE(tmp13 - tmp0,
-					  CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-#endif /* DCT_ISLOW_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jidctred.c b/modules/juce_graphics/image_formats/jpglib/jidctred.c
deleted file mode 100644
index 6a923f4..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jidctred.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * jidctred.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains inverse-DCT routines that produce reduced-size output:
- * either 4x4, 2x2, or 1x1 pixels from an 8x8 DCT block.
- *
- * The implementation is based on the Loeffler, Ligtenberg and Moschytz (LL&M)
- * algorithm used in jidctint.c.  We simply replace each 8-to-8 1-D IDCT step
- * with an 8-to-4 step that produces the four averages of two adjacent outputs
- * (or an 8-to-2 step producing two averages of four outputs, for 2x2 output).
- * These steps were derived by computing the corresponding values at the end
- * of the normal LL&M code, then simplifying as much as possible.
- *
- * 1x1 is trivial: just take the DC coefficient divided by 8.
- *
- * See jidctint.c for additional comments.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef IDCT_SCALING_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Scaling is the same as in jidctint.c. */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  13
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  13
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 13
-#define FIX_0_211164243  ((INT32)  1730)	/* FIX(0.211164243) */
-#define FIX_0_509795579  ((INT32)  4176)	/* FIX(0.509795579) */
-#define FIX_0_601344887  ((INT32)  4926)	/* FIX(0.601344887) */
-#define FIX_0_720959822  ((INT32)  5906)	/* FIX(0.720959822) */
-#define FIX_0_765366865  ((INT32)  6270)	/* FIX(0.765366865) */
-#define FIX_0_850430095  ((INT32)  6967)	/* FIX(0.850430095) */
-#define FIX_0_899976223  ((INT32)  7373)	/* FIX(0.899976223) */
-#define FIX_1_061594337  ((INT32)  8697)	/* FIX(1.061594337) */
-#define FIX_1_272758580  ((INT32)  10426)	/* FIX(1.272758580) */
-#define FIX_1_451774981  ((INT32)  11893)	/* FIX(1.451774981) */
-#define FIX_1_847759065  ((INT32)  15137)	/* FIX(1.847759065) */
-#define FIX_2_172734803  ((INT32)  17799)	/* FIX(2.172734803) */
-#define FIX_2_562915447  ((INT32)  20995)	/* FIX(2.562915447) */
-#define FIX_3_624509785  ((INT32)  29692)	/* FIX(3.624509785) */
-#else
-#define FIX_0_211164243  FIX(0.211164243)
-#define FIX_0_509795579  FIX(0.509795579)
-#define FIX_0_601344887  FIX(0.601344887)
-#define FIX_0_720959822  FIX(0.720959822)
-#define FIX_0_765366865  FIX(0.765366865)
-#define FIX_0_850430095  FIX(0.850430095)
-#define FIX_0_899976223  FIX(0.899976223)
-#define FIX_1_061594337  FIX(1.061594337)
-#define FIX_1_272758580  FIX(1.272758580)
-#define FIX_1_451774981  FIX(1.451774981)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_2_172734803  FIX(2.172734803)
-#define FIX_2_562915447  FIX(2.562915447)
-#define FIX_3_624509785  FIX(3.624509785)
-#endif
-
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * For 8-bit samples with the recommended scaling, all the variable
- * and constant values involved are no more than 16 bits wide, so a
- * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
- * For 12-bit samples, a full 32-bit multiplication will be needed.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
-#else
-#define MULTIPLY(var,const)  ((var) * (const))
-#endif
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce an int result.  In this module, both inputs and result
- * are 16 bits or less, so either int or short multiply will work.
- */
-
-#define DEQUANTIZE(coef,quantval)  (((ISLOW_MULT_TYPE) (coef)) * (quantval))
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 4x4 output block.
- */
-
-GLOBAL(void)
-jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp2, tmp10, tmp12;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[DCTSIZE*4];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) {
-    /* Don't bother to process column 4, because second pass won't use it */
-    if (ctr == DCTSIZE-4)
-      continue;
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*5] == 0 &&
-	inptr[DCTSIZE*6] == 0 && inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero; we need not examine term 4 for 4x4 output */
-      int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-
-      continue;
-    }
-
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= (CONST_BITS+1);
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp2 = MULTIPLY(z2, FIX_1_847759065) + MULTIPLY(z3, - FIX_0_765366865);
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-    tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */
-	 + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */
-	 + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */
-	 + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */
-
-    tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */
-	 + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */
-	 + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */
-	 + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */
-
-    /* Final output stage */
-
-    wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp2, CONST_BITS-PASS1_BITS+1);
-    wsptr[DCTSIZE*3] = (int) DESCALE(tmp10 - tmp2, CONST_BITS-PASS1_BITS+1);
-    wsptr[DCTSIZE*1] = (int) DESCALE(tmp12 + tmp0, CONST_BITS-PASS1_BITS+1);
-    wsptr[DCTSIZE*2] = (int) DESCALE(tmp12 - tmp0, CONST_BITS-PASS1_BITS+1);
-  }
-
-  /* Pass 2: process 4 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 4; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* It's not clear whether a zero row test is worthwhile here ... */
-
-#ifndef NO_ZERO_ROW_TEST
-    if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 &&
-	wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
-      /* AC terms all zero */
-      JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3)
-				  & RANGE_MASK];
-
-      outptr[0] = dcval;
-      outptr[1] = dcval;
-      outptr[2] = dcval;
-      outptr[3] = dcval;
-
-      wsptr += DCTSIZE;		/* advance pointer to next row */
-      continue;
-    }
-#endif
-
-    /* Even part */
-
-    tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1);
-
-    tmp2 = MULTIPLY((INT32) wsptr[2], FIX_1_847759065)
-	 + MULTIPLY((INT32) wsptr[6], - FIX_0_765366865);
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[7];
-    z2 = (INT32) wsptr[5];
-    z3 = (INT32) wsptr[3];
-    z4 = (INT32) wsptr[1];
-
-    tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */
-	 + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */
-	 + MULTIPLY(z3, - FIX_2_172734803) /* sqrt(2) * (-c1-c5) */
-	 + MULTIPLY(z4, FIX_1_061594337); /* sqrt(2) * (c5+c7) */
-
-    tmp2 = MULTIPLY(z1, - FIX_0_509795579) /* sqrt(2) * (c7-c5) */
-	 + MULTIPLY(z2, - FIX_0_601344887) /* sqrt(2) * (c5-c1) */
-	 + MULTIPLY(z3, FIX_0_899976223) /* sqrt(2) * (c3-c7) */
-	 + MULTIPLY(z4, FIX_2_562915447); /* sqrt(2) * (c1+c3) */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp2,
-					  CONST_BITS+PASS1_BITS+3+1)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) DESCALE(tmp10 - tmp2,
-					  CONST_BITS+PASS1_BITS+3+1)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) DESCALE(tmp12 + tmp0,
-					  CONST_BITS+PASS1_BITS+3+1)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) DESCALE(tmp12 - tmp0,
-					  CONST_BITS+PASS1_BITS+3+1)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 2x2 output block.
- */
-
-GLOBAL(void)
-jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp10, z1;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[DCTSIZE*2];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; inptr++, quantptr++, wsptr++, ctr--) {
-    /* Don't bother to process columns 2,4,6 */
-    if (ctr == DCTSIZE-2 || ctr == DCTSIZE-4 || ctr == DCTSIZE-6)
-      continue;
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*3] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero; we need not examine terms 2,4,6 for 2x2 output */
-      int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-
-      continue;
-    }
-
-    /* Even part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp10 = z1 << (CONST_BITS+2);
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp0 = MULTIPLY(z1, - FIX_0_720959822); /* sqrt(2) * (c7-c5+c3-c1) */
-    z1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp0 += MULTIPLY(z1, FIX_0_850430095); /* sqrt(2) * (-c1+c3+c5+c7) */
-    z1 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp0 += MULTIPLY(z1, - FIX_1_272758580); /* sqrt(2) * (-c1+c3-c5-c7) */
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp0 += MULTIPLY(z1, FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */
-
-    /* Final output stage */
-
-    wsptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp0, CONST_BITS-PASS1_BITS+2);
-    wsptr[DCTSIZE*1] = (int) DESCALE(tmp10 - tmp0, CONST_BITS-PASS1_BITS+2);
-  }
-
-  /* Pass 2: process 2 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 2; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* It's not clear whether a zero row test is worthwhile here ... */
-
-#ifndef NO_ZERO_ROW_TEST
-    if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) {
-      /* AC terms all zero */
-      JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3)
-				  & RANGE_MASK];
-
-      outptr[0] = dcval;
-      outptr[1] = dcval;
-
-      wsptr += DCTSIZE;		/* advance pointer to next row */
-      continue;
-    }
-#endif
-
-    /* Even part */
-
-    tmp10 = ((INT32) wsptr[0]) << (CONST_BITS+2);
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY((INT32) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */
-	 + MULTIPLY((INT32) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */
-	 + MULTIPLY((INT32) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */
-	 + MULTIPLY((INT32) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp0,
-					  CONST_BITS+PASS1_BITS+3+2)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) DESCALE(tmp10 - tmp0,
-					  CONST_BITS+PASS1_BITS+3+2)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 1x1 output block.
- */
-
-GLOBAL(void)
-jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  int dcval;
-  ISLOW_MULT_TYPE * quantptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  SHIFT_TEMPS
-
-  /* We hardly need an inverse DCT routine for this: just take the
-   * average pixel value, which is one-eighth of the DC coefficient.
-   */
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  dcval = DEQUANTIZE(coef_block[0], quantptr[0]);
-  dcval = (int) DESCALE((INT32) dcval, 3);
-
-  output_buf[0][output_col] = range_limit[dcval & RANGE_MASK];
-}
-
-#endif /* IDCT_SCALING_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jinclude.h b/modules/juce_graphics/image_formats/jpglib/jinclude.h
deleted file mode 100644
index bccfd54..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jinclude.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * jinclude.h
- *
- * Copyright (C) 1991-1994, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file exists to provide a single place to fix any problems with
- * including the wrong system include files.  (Common problems are taken
- * care of by the standard jconfig symbols, but on really weird systems
- * you may have to edit this file.)
- *
- * NOTE: this file is NOT intended to be included by applications using the
- * JPEG library.  Most applications need only include jpeglib.h.
- */
-
-
-/* Include auto-config file to find out which system include files we need. */
-
-#ifndef __jinclude_h__
-#define __jinclude_h__
-
-#include "jconfig.h"		/* auto configuration options */
-#define JCONFIG_INCLUDED	/* so that jpeglib.h doesn't do it again */
-
-/*
- * We need the NULL macro and size_t typedef.
- * On an ANSI-conforming system it is sufficient to include <stddef.h>.
- * Otherwise, we get them from <stdlib.h> or <stdio.h>; we may have to
- * pull in <sys/types.h> as well.
- * Note that the core JPEG library does not require <stdio.h>;
- * only the default error handler and data source/destination modules do.
- * But we must pull it in because of the references to FILE in jpeglib.h.
- * You can remove those references if you want to compile without <stdio.h>.
- */
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef NEED_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include <stdio.h>
-
-/*
- * We need memory copying and zeroing functions, plus strncpy().
- * ANSI and System V implementations declare these in <string.h>.
- * BSD doesn't have the mem() functions, but it does have bcopy()/bzero().
- * Some systems may declare memset and memcpy in <memory.h>.
- *
- * NOTE: we assume the size parameters to these functions are of type size_t.
- * Change the casts in these macros if not!
- */
-
-#ifdef NEED_BSD_STRINGS
-
-#include <strings.h>
-#define MEMZERO(target,size)	bzero((void *)(target), (size_t)(size))
-#define MEMCOPY(dest,src,size)	bcopy((const void *)(src), (void *)(dest), (size_t)(size))
-
-#else /* not BSD, assume ANSI/SysV string lib */
-
-#include <string.h>
-#define MEMZERO(target,size)	memset((void *)(target), 0, (size_t)(size))
-#define MEMCOPY(dest,src,size)	memcpy((void *)(dest), (const void *)(src), (size_t)(size))
-
-#endif
-
-/*
- * In ANSI C, and indeed any rational implementation, size_t is also the
- * type returned by sizeof().  However, it seems there are some irrational
- * implementations out there, in which sizeof() returns an int even though
- * size_t is defined as long or unsigned long.  To ensure consistent results
- * we always use this SIZEOF() macro in place of using sizeof() directly.
- */
-
-#define SIZEOF(object)	((size_t) sizeof(object))
-
-/*
- * The modules that use fread() and fwrite() always invoke them through
- * these macros.  On some systems you may need to twiddle the argument casts.
- * CAUTION: argument order is different from underlying functions!
- */
-
-#define JFREAD(file,buf,sizeofbuf)  \
-  ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
-#define JFWRITE(file,buf,sizeofbuf)  \
-  ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
-
-
-
-typedef enum {			/* JPEG marker codes */
-  M_SOF0  = 0xc0,
-  M_SOF1  = 0xc1,
-  M_SOF2  = 0xc2,
-  M_SOF3  = 0xc3,
-
-  M_SOF5  = 0xc5,
-  M_SOF6  = 0xc6,
-  M_SOF7  = 0xc7,
-
-  M_JPG   = 0xc8,
-  M_SOF9  = 0xc9,
-  M_SOF10 = 0xca,
-  M_SOF11 = 0xcb,
-
-  M_SOF13 = 0xcd,
-  M_SOF14 = 0xce,
-  M_SOF15 = 0xcf,
-
-  M_DHT   = 0xc4,
-
-  M_DAC   = 0xcc,
-
-  M_RST0  = 0xd0,
-  M_RST1  = 0xd1,
-  M_RST2  = 0xd2,
-  M_RST3  = 0xd3,
-  M_RST4  = 0xd4,
-  M_RST5  = 0xd5,
-  M_RST6  = 0xd6,
-  M_RST7  = 0xd7,
-
-  M_SOI   = 0xd8,
-  M_EOI   = 0xd9,
-  M_SOS   = 0xda,
-  M_DQT   = 0xdb,
-  M_DNL   = 0xdc,
-  M_DRI   = 0xdd,
-  M_DHP   = 0xde,
-  M_EXP   = 0xdf,
-
-  M_APP0  = 0xe0,
-  M_APP1  = 0xe1,
-  M_APP2  = 0xe2,
-  M_APP3  = 0xe3,
-  M_APP4  = 0xe4,
-  M_APP5  = 0xe5,
-  M_APP6  = 0xe6,
-  M_APP7  = 0xe7,
-  M_APP8  = 0xe8,
-  M_APP9  = 0xe9,
-  M_APP10 = 0xea,
-  M_APP11 = 0xeb,
-  M_APP12 = 0xec,
-  M_APP13 = 0xed,
-  M_APP14 = 0xee,
-  M_APP15 = 0xef,
-
-  M_JPG0  = 0xf0,
-  M_JPG13 = 0xfd,
-  M_COM   = 0xfe,
-
-  M_TEM   = 0x01,
-
-  M_ERROR = 0x100
-} JPEG_MARKER;
-
-
-/*
- * Figure F.12: extend sign bit.
- * On some machines, a shift and add will be faster than a table lookup.
- */
-
-#ifdef AVOID_TABLES
-
-#define HUFF_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x))
-
-#else
-
-#define HUFF_EXTEND(x,s)  ((x) < extend_test[s] ? (x) + extend_offset[s] : (x))
-
-static const int extend_test[16] =   /* entry n is 2**(n-1) */
-  { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
-    0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 };
-
-#define SHIFTED_BITS_PLUS_ONE(n) (int) (((unsigned int) -1) << n) + 1
-
-static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */
-  { 0,
-    SHIFTED_BITS_PLUS_ONE (1), SHIFTED_BITS_PLUS_ONE (2), SHIFTED_BITS_PLUS_ONE (3), SHIFTED_BITS_PLUS_ONE (4),
-    SHIFTED_BITS_PLUS_ONE (5), SHIFTED_BITS_PLUS_ONE (6), SHIFTED_BITS_PLUS_ONE (7), SHIFTED_BITS_PLUS_ONE (8),
-    SHIFTED_BITS_PLUS_ONE (9), SHIFTED_BITS_PLUS_ONE (10), SHIFTED_BITS_PLUS_ONE (11), SHIFTED_BITS_PLUS_ONE (12),
-    SHIFTED_BITS_PLUS_ONE (13), SHIFTED_BITS_PLUS_ONE (14), SHIFTED_BITS_PLUS_ONE (15) };
-
-#undef SHIFTED_BITS_PLUS_ONE
-
-#endif /* AVOID_TABLES */
-
-
-#endif
diff --git a/modules/juce_graphics/image_formats/jpglib/jmemmgr.c b/modules/juce_graphics/image_formats/jpglib/jmemmgr.c
deleted file mode 100644
index c11609b..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jmemmgr.c
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*
- * jmemmgr.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the JPEG system-independent memory management
- * routines.  This code is usable across a wide variety of machines; most
- * of the system dependencies have been isolated in a separate file.
- * The major functions provided here are:
- *   * pool-based allocation and freeing of memory;
- *   * policy decisions about how to divide available memory among the
- *     virtual arrays;
- *   * control logic for swapping virtual arrays between main memory and
- *     backing storage.
- * The separate system-dependent file provides the actual backing-storage
- * access code, and it contains the policy decision about how much total
- * main memory to use.
- * This file is system-dependent in the sense that some of its functions
- * are unnecessary in some systems.  For example, if there is enough virtual
- * memory so that backing storage will never be used, much of the virtual
- * array control logic could be removed.  (Of course, if you have that much
- * memory then you shouldn't care about a little bit of unused code...)
- */
-
-#define JPEG_INTERNALS
-#define AM_MEMORY_MANAGER	/* we define jvirt_Xarray_control structs */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jmemsys.h"		/* import the system-dependent declarations */
-
-#ifndef NO_GETENV
-#ifndef HAVE_STDLIB_H		/* <stdlib.h> should declare getenv() */
-extern char * getenv JPP((const char * name));
-#endif
-#endif
-
-
-/*
- * Some important notes:
- *   The allocation routines provided here must never return NULL.
- *   They should exit to error_exit if unsuccessful.
- *
- *   It's not a good idea to try to merge the sarray and barray routines,
- *   even though they are textually almost the same, because samples are
- *   usually stored as bytes while coefficients are shorts or ints.  Thus,
- *   in machines where byte pointers have a different representation from
- *   word pointers, the resulting machine code could not be the same.
- */
-
-
-/*
- * Many machines require storage alignment: longs must start on 4-byte
- * boundaries, doubles on 8-byte boundaries, etc.  On such machines, malloc()
- * always returns pointers that are multiples of the worst-case alignment
- * requirement, and we had better do so too.
- * There isn't any really portable way to determine the worst-case alignment
- * requirement.  This module assumes that the alignment requirement is
- * multiples of sizeof(ALIGN_TYPE).
- * By default, we define ALIGN_TYPE as double.  This is necessary on some
- * workstations (where doubles really do need 8-byte alignment) and will work
- * fine on nearly everything.  If your machine has lesser alignment needs,
- * you can save a few bytes by making ALIGN_TYPE smaller.
- * The only place I know of where this will NOT work is certain Macintosh
- * 680x0 compilers that define double as a 10-byte IEEE extended float.
- * Doing 10-byte alignment is counterproductive because longwords won't be
- * aligned well.  Put "#define ALIGN_TYPE long" in jconfig.h if you have
- * such a compiler.
- */
-
-#ifndef ALIGN_TYPE		/* so can override from jconfig.h */
-#define ALIGN_TYPE  double
-#endif
-
-
-/*
- * We allocate objects from "pools", where each pool is gotten with a single
- * request to jpeg_get_small() or jpeg_get_large().  There is no per-object
- * overhead within a pool, except for alignment padding.  Each pool has a
- * header with a link to the next pool of the same class.
- * Small and large pool headers are identical except that the latter's
- * link pointer must be FAR on 80x86 machines.
- * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE
- * field.  This forces the compiler to make SIZEOF(small_pool_hdr) a multiple
- * of the alignment requirement of ALIGN_TYPE.
- */
-
-typedef union small_pool_struct * small_pool_ptr;
-
-typedef union small_pool_struct {
-  struct {
-    small_pool_ptr next;	/* next in list of pools */
-    size_t bytes_used;		/* how many bytes already used within pool */
-    size_t bytes_left;		/* bytes still available in this pool */
-  } hdr;
-  ALIGN_TYPE dummy;		/* included in union to ensure alignment */
-} small_pool_hdr;
-
-typedef union large_pool_struct FAR * large_pool_ptr;
-
-typedef union large_pool_struct {
-  struct {
-    large_pool_ptr next;	/* next in list of pools */
-    size_t bytes_used;		/* how many bytes already used within pool */
-    size_t bytes_left;		/* bytes still available in this pool */
-  } hdr;
-  ALIGN_TYPE dummy;		/* included in union to ensure alignment */
-} large_pool_hdr;
-
-
-/*
- * Here is the full definition of a memory manager object.
- */
-
-typedef struct {
-  struct jpeg_memory_mgr pub;	/* public fields */
-
-  /* Each pool identifier (lifetime class) names a linked list of pools. */
-  small_pool_ptr small_list[JPOOL_NUMPOOLS];
-  large_pool_ptr large_list[JPOOL_NUMPOOLS];
-
-  /* Since we only have one lifetime class of virtual arrays, only one
-   * linked list is necessary (for each datatype).  Note that the virtual
-   * array control blocks being linked together are actually stored somewhere
-   * in the small-pool list.
-   */
-  jvirt_sarray_ptr virt_sarray_list;
-  jvirt_barray_ptr virt_barray_list;
-
-  /* This counts total space obtained from jpeg_get_small/large */
-  long total_space_allocated;
-
-  /* alloc_sarray and alloc_barray set this value for use by virtual
-   * array routines.
-   */
-  JDIMENSION last_rowsperchunk;	/* from most recent alloc_sarray/barray */
-} my_memory_mgr;
-
-typedef my_memory_mgr * my_mem_ptr;
-
-
-/*
- * The control blocks for virtual arrays.
- * Note that these blocks are allocated in the "small" pool area.
- * System-dependent info for the associated backing store (if any) is hidden
- * inside the backing_store_info struct.
- */
-
-struct jvirt_sarray_control {
-  JSAMPARRAY mem_buffer;	/* => the in-memory buffer */
-  JDIMENSION rows_in_array;	/* total virtual array height */
-  JDIMENSION samplesperrow;	/* width of array (and of memory buffer) */
-  JDIMENSION maxaccess;		/* max rows accessed by access_virt_sarray */
-  JDIMENSION rows_in_mem;	/* height of memory buffer */
-  JDIMENSION rowsperchunk;	/* allocation chunk size in mem_buffer */
-  JDIMENSION cur_start_row;	/* first logical row # in the buffer */
-  JDIMENSION first_undef_row;	/* row # of first uninitialized row */
-  boolean pre_zero;		/* pre-zero mode requested? */
-  boolean dirty;		/* do current buffer contents need written? */
-  boolean b_s_open;		/* is backing-store data valid? */
-  jvirt_sarray_ptr next;	/* link to next virtual sarray control block */
-  backing_store_info b_s_info;	/* System-dependent control info */
-};
-
-struct jvirt_barray_control {
-  JBLOCKARRAY mem_buffer;	/* => the in-memory buffer */
-  JDIMENSION rows_in_array;	/* total virtual array height */
-  JDIMENSION blocksperrow;	/* width of array (and of memory buffer) */
-  JDIMENSION maxaccess;		/* max rows accessed by access_virt_barray */
-  JDIMENSION rows_in_mem;	/* height of memory buffer */
-  JDIMENSION rowsperchunk;	/* allocation chunk size in mem_buffer */
-  JDIMENSION cur_start_row;	/* first logical row # in the buffer */
-  JDIMENSION first_undef_row;	/* row # of first uninitialized row */
-  boolean pre_zero;		/* pre-zero mode requested? */
-  boolean dirty;		/* do current buffer contents need written? */
-  boolean b_s_open;		/* is backing-store data valid? */
-  jvirt_barray_ptr next;	/* link to next virtual barray control block */
-  backing_store_info b_s_info;	/* System-dependent control info */
-};
-
-
-#ifdef MEM_STATS		/* optional extra stuff for statistics */
-
-LOCAL(void)
-print_mem_stats (j_common_ptr cinfo, int pool_id)
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  small_pool_ptr shdr_ptr;
-  large_pool_ptr lhdr_ptr;
-
-  /* Since this is only a debugging stub, we can cheat a little by using
-   * fprintf directly rather than going through the trace message code.
-   * This is helpful because message parm array can't handle longs.
-   */
-  fprintf(stderr, "Freeing pool %d, total space = %ld\n",
-	  pool_id, mem->total_space_allocated);
-
-  for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL;
-       lhdr_ptr = lhdr_ptr->hdr.next) {
-    fprintf(stderr, "  Large chunk used %ld\n",
-	    (long) lhdr_ptr->hdr.bytes_used);
-  }
-
-  for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL;
-       shdr_ptr = shdr_ptr->hdr.next) {
-    fprintf(stderr, "  Small chunk used %ld free %ld\n",
-	    (long) shdr_ptr->hdr.bytes_used,
-	    (long) shdr_ptr->hdr.bytes_left);
-  }
-}
-
-#endif /* MEM_STATS */
-
-
-LOCAL(void)
-out_of_memory (j_common_ptr cinfo, int which)
-/* Report an out-of-memory error and stop execution */
-/* If we compiled MEM_STATS support, report alloc requests before dying */
-{
-#ifdef MEM_STATS
-  cinfo->err->trace_level = 2;	/* force self_destruct to report stats */
-#endif
-  ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which);
-}
-
-
-/*
- * Allocation of "small" objects.
- *
- * For these, we use pooled storage.  When a new pool must be created,
- * we try to get enough space for the current request plus a "slop" factor,
- * where the slop will be the amount of leftover space in the new pool.
- * The speed vs. space tradeoff is largely determined by the slop values.
- * A different slop value is provided for each pool class (lifetime),
- * and we also distinguish the first pool of a class from later ones.
- * NOTE: the values given work fairly well on both 16- and 32-bit-int
- * machines, but may be too small if longs are 64 bits or more.
- */
-
-static const size_t first_pool_slop[JPOOL_NUMPOOLS] =
-{
-	1600,			/* first PERMANENT pool */
-	16000			/* first IMAGE pool */
-};
-
-static const size_t extra_pool_slop[JPOOL_NUMPOOLS] =
-{
-	0,			/* additional PERMANENT pools */
-	5000			/* additional IMAGE pools */
-};
-
-#define MIN_SLOP  50		/* greater than 0 to avoid futile looping */
-
-
-METHODDEF(void *)
-alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject)
-/* Allocate a "small" object */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  small_pool_ptr hdr_ptr, prev_hdr_ptr;
-  char * data_ptr;
-  size_t odd_bytes, min_request, slop;
-
-  /* Check for unsatisfiable request (do now to ensure no overflow below) */
-  if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr)))
-    out_of_memory(cinfo, 1);	/* request exceeds malloc's ability */
-
-  /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */
-  odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE);
-  if (odd_bytes > 0)
-    sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes;
-
-  /* See if space is available in any existing pool */
-  if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-  prev_hdr_ptr = NULL;
-  hdr_ptr = mem->small_list[pool_id];
-  while (hdr_ptr != NULL) {
-    if (hdr_ptr->hdr.bytes_left >= sizeofobject)
-      break;			/* found pool with enough space */
-    prev_hdr_ptr = hdr_ptr;
-    hdr_ptr = hdr_ptr->hdr.next;
-  }
-
-  /* Time to make a new pool? */
-  if (hdr_ptr == NULL) {
-    /* min_request is what we need now, slop is what will be leftover */
-    min_request = sizeofobject + SIZEOF(small_pool_hdr);
-    if (prev_hdr_ptr == NULL)	/* first pool in class? */
-      slop = first_pool_slop[pool_id];
-    else
-      slop = extra_pool_slop[pool_id];
-    /* Don't ask for more than MAX_ALLOC_CHUNK */
-    if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request))
-      slop = (size_t) (MAX_ALLOC_CHUNK-min_request);
-    /* Try to get space, if fail reduce slop and try again */
-    for (;;) {
-      hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop);
-      if (hdr_ptr != NULL)
-	break;
-      slop /= 2;
-      if (slop < MIN_SLOP)	/* give up when it gets real small */
-	out_of_memory(cinfo, 2); /* jpeg_get_small failed */
-    }
-    mem->total_space_allocated += min_request + slop;
-    /* Success, initialize the new pool header and add to end of list */
-    hdr_ptr->hdr.next = NULL;
-    hdr_ptr->hdr.bytes_used = 0;
-    hdr_ptr->hdr.bytes_left = sizeofobject + slop;
-    if (prev_hdr_ptr == NULL)	/* first pool in class? */
-      mem->small_list[pool_id] = hdr_ptr;
-    else
-      prev_hdr_ptr->hdr.next = hdr_ptr;
-  }
-
-  /* OK, allocate the object from the current pool */
-  data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */
-  data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */
-  hdr_ptr->hdr.bytes_used += sizeofobject;
-  hdr_ptr->hdr.bytes_left -= sizeofobject;
-
-  return (void *) data_ptr;
-}
-
-
-/*
- * Allocation of "large" objects.
- *
- * The external semantics of these are the same as "small" objects,
- * except that FAR pointers are used on 80x86.  However the pool
- * management heuristics are quite different.  We assume that each
- * request is large enough that it may as well be passed directly to
- * jpeg_get_large; the pool management just links everything together
- * so that we can free it all on demand.
- * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY
- * structures.  The routines that create these structures (see below)
- * deliberately bunch rows together to ensure a large request size.
- */
-
-METHODDEF(void FAR *)
-alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject)
-/* Allocate a "large" object */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  large_pool_ptr hdr_ptr;
-  size_t odd_bytes;
-
-  /* Check for unsatisfiable request (do now to ensure no overflow below) */
-  if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)))
-    out_of_memory(cinfo, 3);	/* request exceeds malloc's ability */
-
-  /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */
-  odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE);
-  if (odd_bytes > 0)
-    sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes;
-
-  /* Always make a new pool */
-  if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-  hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject +
-					    SIZEOF(large_pool_hdr));
-  if (hdr_ptr == NULL)
-    out_of_memory(cinfo, 4);	/* jpeg_get_large failed */
-  mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr);
-
-  /* Success, initialize the new pool header and add to list */
-  hdr_ptr->hdr.next = mem->large_list[pool_id];
-  /* We maintain space counts in each pool header for statistical purposes,
-   * even though they are not needed for allocation.
-   */
-  hdr_ptr->hdr.bytes_used = sizeofobject;
-  hdr_ptr->hdr.bytes_left = 0;
-  mem->large_list[pool_id] = hdr_ptr;
-
-  return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */
-}
-
-
-/*
- * Creation of 2-D sample arrays.
- * The pointers are in near heap, the samples themselves in FAR heap.
- *
- * To minimize allocation overhead and to allow I/O of large contiguous
- * blocks, we allocate the sample rows in groups of as many rows as possible
- * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request.
- * NB: the virtual array control routines, later in this file, know about
- * this chunking of rows.  The rowsperchunk value is left in the mem manager
- * object so that it can be saved away if this sarray is the workspace for
- * a virtual array.
- */
-
-METHODDEF(JSAMPARRAY)
-alloc_sarray (j_common_ptr cinfo, int pool_id,
-	      JDIMENSION samplesperrow, JDIMENSION numrows)
-/* Allocate a 2-D sample array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  JSAMPARRAY result;
-  JSAMPROW workspace;
-  JDIMENSION rowsperchunk, currow, i;
-  long ltemp;
-
-  /* Calculate max # of rows allowed in one allocation chunk */
-  ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) /
-	  ((long) samplesperrow * SIZEOF(JSAMPLE));
-  if (ltemp <= 0)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-  if (ltemp < (long) numrows)
-    rowsperchunk = (JDIMENSION) ltemp;
-  else
-    rowsperchunk = numrows;
-  mem->last_rowsperchunk = rowsperchunk;
-
-  /* Get space for row pointers (small object) */
-  result = (JSAMPARRAY) alloc_small(cinfo, pool_id,
-				    (size_t) (numrows * SIZEOF(JSAMPROW)));
-
-  /* Get the rows themselves (large objects) */
-  currow = 0;
-  while (currow < numrows) {
-    rowsperchunk = MIN(rowsperchunk, numrows - currow);
-    workspace = (JSAMPROW) alloc_large(cinfo, pool_id,
-	(size_t) ((size_t) rowsperchunk * (size_t) samplesperrow
-		  * SIZEOF(JSAMPLE)));
-    for (i = rowsperchunk; i > 0; i--) {
-      result[currow++] = workspace;
-      workspace += samplesperrow;
-    }
-  }
-
-  return result;
-}
-
-
-/*
- * Creation of 2-D coefficient-block arrays.
- * This is essentially the same as the code for sample arrays, above.
- */
-
-METHODDEF(JBLOCKARRAY)
-alloc_barray (j_common_ptr cinfo, int pool_id,
-	      JDIMENSION blocksperrow, JDIMENSION numrows)
-/* Allocate a 2-D coefficient-block array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  JBLOCKARRAY result;
-  JBLOCKROW workspace;
-  JDIMENSION rowsperchunk, currow, i;
-  long ltemp;
-
-  /* Calculate max # of rows allowed in one allocation chunk */
-  ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) /
-	  ((long) blocksperrow * SIZEOF(JBLOCK));
-  if (ltemp <= 0)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-  if (ltemp < (long) numrows)
-    rowsperchunk = (JDIMENSION) ltemp;
-  else
-    rowsperchunk = numrows;
-  mem->last_rowsperchunk = rowsperchunk;
-
-  /* Get space for row pointers (small object) */
-  result = (JBLOCKARRAY) alloc_small(cinfo, pool_id,
-				     (size_t) (numrows * SIZEOF(JBLOCKROW)));
-
-  /* Get the rows themselves (large objects) */
-  currow = 0;
-  while (currow < numrows) {
-    rowsperchunk = MIN(rowsperchunk, numrows - currow);
-    workspace = (JBLOCKROW) alloc_large(cinfo, pool_id,
-	(size_t) ((size_t) rowsperchunk * (size_t) blocksperrow
-		  * SIZEOF(JBLOCK)));
-    for (i = rowsperchunk; i > 0; i--) {
-      result[currow++] = workspace;
-      workspace += blocksperrow;
-    }
-  }
-
-  return result;
-}
-
-
-/*
- * About virtual array management:
- *
- * The above "normal" array routines are only used to allocate strip buffers
- * (as wide as the image, but just a few rows high).  Full-image-sized buffers
- * are handled as "virtual" arrays.  The array is still accessed a strip at a
- * time, but the memory manager must save the whole array for repeated
- * accesses.  The intended implementation is that there is a strip buffer in
- * memory (as high as is possible given the desired memory limit), plus a
- * backing file that holds the rest of the array.
- *
- * The request_virt_array routines are told the total size of the image and
- * the maximum number of rows that will be accessed at once.  The in-memory
- * buffer must be at least as large as the maxaccess value.
- *
- * The request routines create control blocks but not the in-memory buffers.
- * That is postponed until realize_virt_arrays is called.  At that time the
- * total amount of space needed is known (approximately, anyway), so free
- * memory can be divided up fairly.
- *
- * The access_virt_array routines are responsible for making a specific strip
- * area accessible (after reading or writing the backing file, if necessary).
- * Note that the access routines are told whether the caller intends to modify
- * the accessed strip; during a read-only pass this saves having to rewrite
- * data to disk.  The access routines are also responsible for pre-zeroing
- * any newly accessed rows, if pre-zeroing was requested.
- *
- * In current usage, the access requests are usually for nonoverlapping
- * strips; that is, successive access start_row numbers differ by exactly
- * num_rows = maxaccess.  This means we can get good performance with simple
- * buffer dump/reload logic, by making the in-memory buffer be a multiple
- * of the access height; then there will never be accesses across bufferload
- * boundaries.  The code will still work with overlapping access requests,
- * but it doesn't handle bufferload overlaps very efficiently.
- */
-
-
-METHODDEF(jvirt_sarray_ptr)
-request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero,
-		     JDIMENSION samplesperrow, JDIMENSION numrows,
-		     JDIMENSION maxaccess)
-/* Request a virtual 2-D sample array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  jvirt_sarray_ptr result;
-
-  /* Only IMAGE-lifetime virtual arrays are currently supported */
-  if (pool_id != JPOOL_IMAGE)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-  /* get control block */
-  result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id,
-					  SIZEOF(struct jvirt_sarray_control));
-
-  result->mem_buffer = NULL;	/* marks array not yet realized */
-  result->rows_in_array = numrows;
-  result->samplesperrow = samplesperrow;
-  result->maxaccess = maxaccess;
-  result->pre_zero = pre_zero;
-  result->b_s_open = FALSE;	/* no associated backing-store object */
-  result->next = mem->virt_sarray_list; /* add to list of virtual arrays */
-  mem->virt_sarray_list = result;
-
-  return result;
-}
-
-
-METHODDEF(jvirt_barray_ptr)
-request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero,
-		     JDIMENSION blocksperrow, JDIMENSION numrows,
-		     JDIMENSION maxaccess)
-/* Request a virtual 2-D coefficient-block array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  jvirt_barray_ptr result;
-
-  /* Only IMAGE-lifetime virtual arrays are currently supported */
-  if (pool_id != JPOOL_IMAGE)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-  /* get control block */
-  result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id,
-					  SIZEOF(struct jvirt_barray_control));
-
-  result->mem_buffer = NULL;	/* marks array not yet realized */
-  result->rows_in_array = numrows;
-  result->blocksperrow = blocksperrow;
-  result->maxaccess = maxaccess;
-  result->pre_zero = pre_zero;
-  result->b_s_open = FALSE;	/* no associated backing-store object */
-  result->next = mem->virt_barray_list; /* add to list of virtual arrays */
-  mem->virt_barray_list = result;
-
-  return result;
-}
-
-
-METHODDEF(void)
-realize_virt_arrays (j_common_ptr cinfo)
-/* Allocate the in-memory buffers for any unrealized virtual arrays */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  long space_per_minheight, maximum_space, avail_mem;
-  long minheights, max_minheights;
-  jvirt_sarray_ptr sptr;
-  jvirt_barray_ptr bptr;
-
-  /* Compute the minimum space needed (maxaccess rows in each buffer)
-   * and the maximum space needed (full image height in each buffer).
-   * These may be of use to the system-dependent jpeg_mem_available routine.
-   */
-  space_per_minheight = 0;
-  maximum_space = 0;
-  for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) {
-    if (sptr->mem_buffer == NULL) { /* if not realized yet */
-      space_per_minheight += (long) sptr->maxaccess *
-			     (long) sptr->samplesperrow * SIZEOF(JSAMPLE);
-      maximum_space += (long) sptr->rows_in_array *
-		       (long) sptr->samplesperrow * SIZEOF(JSAMPLE);
-    }
-  }
-  for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) {
-    if (bptr->mem_buffer == NULL) { /* if not realized yet */
-      space_per_minheight += (long) bptr->maxaccess *
-			     (long) bptr->blocksperrow * SIZEOF(JBLOCK);
-      maximum_space += (long) bptr->rows_in_array *
-		       (long) bptr->blocksperrow * SIZEOF(JBLOCK);
-    }
-  }
-
-  if (space_per_minheight <= 0)
-    return;			/* no unrealized arrays, no work */
-
-  /* Determine amount of memory to actually use; this is system-dependent. */
-  avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space,
-				 mem->total_space_allocated);
-
-  /* If the maximum space needed is available, make all the buffers full
-   * height; otherwise parcel it out with the same number of minheights
-   * in each buffer.
-   */
-  if (avail_mem >= maximum_space)
-    max_minheights = 1000000000L;
-  else {
-    max_minheights = avail_mem / space_per_minheight;
-    /* If there doesn't seem to be enough space, try to get the minimum
-     * anyway.  This allows a "stub" implementation of jpeg_mem_available().
-     */
-    if (max_minheights <= 0)
-      max_minheights = 1;
-  }
-
-  /* Allocate the in-memory buffers and initialize backing store as needed. */
-
-  for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) {
-    if (sptr->mem_buffer == NULL) { /* if not realized yet */
-      minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L;
-      if (minheights <= max_minheights) {
-	/* This buffer fits in memory */
-	sptr->rows_in_mem = sptr->rows_in_array;
-      } else {
-	/* It doesn't fit in memory, create backing store. */
-	sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess);
-	jpeg_open_backing_store(cinfo, & sptr->b_s_info,
-				(long) sptr->rows_in_array *
-				(long) sptr->samplesperrow *
-				(long) SIZEOF(JSAMPLE));
-	sptr->b_s_open = TRUE;
-      }
-      sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE,
-				      sptr->samplesperrow, sptr->rows_in_mem);
-      sptr->rowsperchunk = mem->last_rowsperchunk;
-      sptr->cur_start_row = 0;
-      sptr->first_undef_row = 0;
-      sptr->dirty = FALSE;
-    }
-  }
-
-  for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) {
-    if (bptr->mem_buffer == NULL) { /* if not realized yet */
-      minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L;
-      if (minheights <= max_minheights) {
-	/* This buffer fits in memory */
-	bptr->rows_in_mem = bptr->rows_in_array;
-      } else {
-	/* It doesn't fit in memory, create backing store. */
-	bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess);
-	jpeg_open_backing_store(cinfo, & bptr->b_s_info,
-				(long) bptr->rows_in_array *
-				(long) bptr->blocksperrow *
-				(long) SIZEOF(JBLOCK));
-	bptr->b_s_open = TRUE;
-      }
-      bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE,
-				      bptr->blocksperrow, bptr->rows_in_mem);
-      bptr->rowsperchunk = mem->last_rowsperchunk;
-      bptr->cur_start_row = 0;
-      bptr->first_undef_row = 0;
-      bptr->dirty = FALSE;
-    }
-  }
-}
-
-
-LOCAL(void)
-do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing)
-/* Do backing store read or write of a virtual sample array */
-{
-  long bytesperrow, file_offset, byte_count, rows, thisrow, i;
-
-  bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE);
-  file_offset = ptr->cur_start_row * bytesperrow;
-  /* Loop to read or write each allocation chunk in mem_buffer */
-  for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) {
-    /* One chunk, but check for short chunk at end of buffer */
-    rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i);
-    /* Transfer no more than is currently defined */
-    thisrow = (long) ptr->cur_start_row + i;
-    rows = MIN(rows, (long) ptr->first_undef_row - thisrow);
-    /* Transfer no more than fits in file */
-    rows = MIN(rows, (long) ptr->rows_in_array - thisrow);
-    if (rows <= 0)		/* this chunk might be past end of file! */
-      break;
-    byte_count = rows * bytesperrow;
-    if (writing)
-      (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info,
-					    (void FAR *) ptr->mem_buffer[i],
-					    file_offset, byte_count);
-    else
-      (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info,
-					   (void FAR *) ptr->mem_buffer[i],
-					   file_offset, byte_count);
-    file_offset += byte_count;
-  }
-}
-
-
-LOCAL(void)
-do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing)
-/* Do backing store read or write of a virtual coefficient-block array */
-{
-  long bytesperrow, file_offset, byte_count, rows, thisrow, i;
-
-  bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK);
-  file_offset = ptr->cur_start_row * bytesperrow;
-  /* Loop to read or write each allocation chunk in mem_buffer */
-  for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) {
-    /* One chunk, but check for short chunk at end of buffer */
-    rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i);
-    /* Transfer no more than is currently defined */
-    thisrow = (long) ptr->cur_start_row + i;
-    rows = MIN(rows, (long) ptr->first_undef_row - thisrow);
-    /* Transfer no more than fits in file */
-    rows = MIN(rows, (long) ptr->rows_in_array - thisrow);
-    if (rows <= 0)		/* this chunk might be past end of file! */
-      break;
-    byte_count = rows * bytesperrow;
-    if (writing)
-      (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info,
-					    (void FAR *) ptr->mem_buffer[i],
-					    file_offset, byte_count);
-    else
-      (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info,
-					   (void FAR *) ptr->mem_buffer[i],
-					   file_offset, byte_count);
-    file_offset += byte_count;
-  }
-}
-
-
-METHODDEF(JSAMPARRAY)
-access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr,
-		    JDIMENSION start_row, JDIMENSION num_rows,
-		    boolean writable)
-/* Access the part of a virtual sample array starting at start_row */
-/* and extending for num_rows rows.  writable is true if  */
-/* caller intends to modify the accessed area. */
-{
-  JDIMENSION end_row = start_row + num_rows;
-  JDIMENSION undef_row;
-
-  /* debugging check */
-  if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess ||
-      ptr->mem_buffer == NULL)
-    ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-
-  /* Make the desired part of the virtual array accessible */
-  if (start_row < ptr->cur_start_row ||
-      end_row > ptr->cur_start_row+ptr->rows_in_mem) {
-    if (! ptr->b_s_open)
-      ERREXIT(cinfo, JERR_VIRTUAL_BUG);
-    /* Flush old buffer contents if necessary */
-    if (ptr->dirty) {
-      do_sarray_io(cinfo, ptr, TRUE);
-      ptr->dirty = FALSE;
-    }
-    /* Decide what part of virtual array to access.
-     * Algorithm: if target address > current window, assume forward scan,
-     * load starting at target address.  If target address < current window,
-     * assume backward scan, load so that target area is top of window.
-     * Note that when switching from forward write to forward read, will have
-     * start_row = 0, so the limiting case applies and we load from 0 anyway.
-     */
-    if (start_row > ptr->cur_start_row) {
-      ptr->cur_start_row = start_row;
-    } else {
-      /* use long arithmetic here to avoid overflow & unsigned problems */
-      long ltemp;
-
-      ltemp = (long) end_row - (long) ptr->rows_in_mem;
-      if (ltemp < 0)
-	ltemp = 0;		/* don't fall off front end of file */
-      ptr->cur_start_row = (JDIMENSION) ltemp;
-    }
-    /* Read in the selected part of the array.
-     * During the initial write pass, we will do no actual read
-     * because the selected part is all undefined.
-     */
-    do_sarray_io(cinfo, ptr, FALSE);
-  }
-  /* Ensure the accessed part of the array is defined; prezero if needed.
-   * To improve locality of access, we only prezero the part of the array
-   * that the caller is about to access, not the entire in-memory array.
-   */
-  if (ptr->first_undef_row < end_row) {
-    if (ptr->first_undef_row < start_row) {
-      if (writable)		/* writer skipped over a section of array */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-      undef_row = start_row;	/* but reader is allowed to read ahead */
-    } else {
-      undef_row = ptr->first_undef_row;
-    }
-    if (writable)
-      ptr->first_undef_row = end_row;
-    if (ptr->pre_zero) {
-      size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE);
-      undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */
-      end_row -= ptr->cur_start_row;
-      while (undef_row < end_row) {
-	jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow);
-	undef_row++;
-      }
-    } else {
-      if (! writable)		/* reader looking at undefined data */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-    }
-  }
-  /* Flag the buffer dirty if caller will write in it */
-  if (writable)
-    ptr->dirty = TRUE;
-  /* Return address of proper part of the buffer */
-  return ptr->mem_buffer + (start_row - ptr->cur_start_row);
-}
-
-
-METHODDEF(JBLOCKARRAY)
-access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr,
-		    JDIMENSION start_row, JDIMENSION num_rows,
-		    boolean writable)
-/* Access the part of a virtual block array starting at start_row */
-/* and extending for num_rows rows.  writable is true if  */
-/* caller intends to modify the accessed area. */
-{
-  JDIMENSION end_row = start_row + num_rows;
-  JDIMENSION undef_row;
-
-  /* debugging check */
-  if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess ||
-      ptr->mem_buffer == NULL)
-    ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-
-  /* Make the desired part of the virtual array accessible */
-  if (start_row < ptr->cur_start_row ||
-      end_row > ptr->cur_start_row+ptr->rows_in_mem) {
-    if (! ptr->b_s_open)
-      ERREXIT(cinfo, JERR_VIRTUAL_BUG);
-    /* Flush old buffer contents if necessary */
-    if (ptr->dirty) {
-      do_barray_io(cinfo, ptr, TRUE);
-      ptr->dirty = FALSE;
-    }
-    /* Decide what part of virtual array to access.
-     * Algorithm: if target address > current window, assume forward scan,
-     * load starting at target address.  If target address < current window,
-     * assume backward scan, load so that target area is top of window.
-     * Note that when switching from forward write to forward read, will have
-     * start_row = 0, so the limiting case applies and we load from 0 anyway.
-     */
-    if (start_row > ptr->cur_start_row) {
-      ptr->cur_start_row = start_row;
-    } else {
-      /* use long arithmetic here to avoid overflow & unsigned problems */
-      long ltemp;
-
-      ltemp = (long) end_row - (long) ptr->rows_in_mem;
-      if (ltemp < 0)
-	ltemp = 0;		/* don't fall off front end of file */
-      ptr->cur_start_row = (JDIMENSION) ltemp;
-    }
-    /* Read in the selected part of the array.
-     * During the initial write pass, we will do no actual read
-     * because the selected part is all undefined.
-     */
-    do_barray_io(cinfo, ptr, FALSE);
-  }
-  /* Ensure the accessed part of the array is defined; prezero if needed.
-   * To improve locality of access, we only prezero the part of the array
-   * that the caller is about to access, not the entire in-memory array.
-   */
-  if (ptr->first_undef_row < end_row) {
-    if (ptr->first_undef_row < start_row) {
-      if (writable)		/* writer skipped over a section of array */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-      undef_row = start_row;	/* but reader is allowed to read ahead */
-    } else {
-      undef_row = ptr->first_undef_row;
-    }
-    if (writable)
-      ptr->first_undef_row = end_row;
-    if (ptr->pre_zero) {
-      size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK);
-      undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */
-      end_row -= ptr->cur_start_row;
-      while (undef_row < end_row) {
-	jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow);
-	undef_row++;
-      }
-    } else {
-      if (! writable)		/* reader looking at undefined data */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-    }
-  }
-  /* Flag the buffer dirty if caller will write in it */
-  if (writable)
-    ptr->dirty = TRUE;
-  /* Return address of proper part of the buffer */
-  return ptr->mem_buffer + (start_row - ptr->cur_start_row);
-}
-
-
-/*
- * Release all objects belonging to a specified pool.
- */
-
-METHODDEF(void)
-free_pool (j_common_ptr cinfo, int pool_id)
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  small_pool_ptr shdr_ptr;
-  large_pool_ptr lhdr_ptr;
-  size_t space_freed;
-
-  if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-#ifdef MEM_STATS
-  if (cinfo->err->trace_level > 1)
-    print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */
-#endif
-
-  /* If freeing IMAGE pool, close any virtual arrays first */
-  if (pool_id == JPOOL_IMAGE) {
-    jvirt_sarray_ptr sptr;
-    jvirt_barray_ptr bptr;
-
-    for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) {
-      if (sptr->b_s_open) {	/* there may be no backing store */
-	sptr->b_s_open = FALSE;	/* prevent recursive close if error */
-	(*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info);
-      }
-    }
-    mem->virt_sarray_list = NULL;
-    for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) {
-      if (bptr->b_s_open) {	/* there may be no backing store */
-	bptr->b_s_open = FALSE;	/* prevent recursive close if error */
-	(*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info);
-      }
-    }
-    mem->virt_barray_list = NULL;
-  }
-
-  /* Release large objects */
-  lhdr_ptr = mem->large_list[pool_id];
-  mem->large_list[pool_id] = NULL;
-
-  while (lhdr_ptr != NULL) {
-    large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next;
-    space_freed = lhdr_ptr->hdr.bytes_used +
-		  lhdr_ptr->hdr.bytes_left +
-		  SIZEOF(large_pool_hdr);
-    jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed);
-    mem->total_space_allocated -= space_freed;
-    lhdr_ptr = next_lhdr_ptr;
-  }
-
-  /* Release small objects */
-  shdr_ptr = mem->small_list[pool_id];
-  mem->small_list[pool_id] = NULL;
-
-  while (shdr_ptr != NULL) {
-    small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next;
-    space_freed = shdr_ptr->hdr.bytes_used +
-		  shdr_ptr->hdr.bytes_left +
-		  SIZEOF(small_pool_hdr);
-    jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed);
-    mem->total_space_allocated -= space_freed;
-    shdr_ptr = next_shdr_ptr;
-  }
-}
-
-
-/*
- * Close up shop entirely.
- * Note that this cannot be called unless cinfo->mem is non-NULL.
- */
-
-METHODDEF(void)
-self_destruct (j_common_ptr cinfo)
-{
-  int pool;
-
-  /* Close all backing store, release all memory.
-   * Releasing pools in reverse order might help avoid fragmentation
-   * with some (brain-damaged) malloc libraries.
-   */
-  for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) {
-    free_pool(cinfo, pool);
-  }
-
-  /* Release the memory manager control block too. */
-  jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr));
-  cinfo->mem = NULL;		/* ensures I will be called only once */
-
-  jpeg_mem_term(cinfo);		/* system-dependent cleanup */
-}
-
-
-/*
- * Memory manager initialization.
- * When this is called, only the error manager pointer is valid in cinfo!
- */
-
-GLOBAL(void)
-jinit_memory_mgr (j_common_ptr cinfo)
-{
-  my_mem_ptr mem;
-  long max_to_use;
-  int pool;
-  size_t test_mac;
-
-  cinfo->mem = NULL;		/* for safety if init fails */
-
-  /* Check for configuration errors.
-   * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably
-   * doesn't reflect any real hardware alignment requirement.
-   * The test is a little tricky: for X>0, X and X-1 have no one-bits
-   * in common if and only if X is a power of 2, ie has only one one-bit.
-   * Some compilers may give an "unreachable code" warning here; ignore it.
-   */
-  if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0)
-    ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE);
-  /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be
-   * a multiple of SIZEOF(ALIGN_TYPE).
-   * Again, an "unreachable code" warning may be ignored here.
-   * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK.
-   */
-  test_mac = (size_t) MAX_ALLOC_CHUNK;
-  if ((long) test_mac != MAX_ALLOC_CHUNK ||
-      (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0)
-    ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK);
-
-  max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */
-
-  /* Attempt to allocate memory manager's control block */
-  mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr));
-
-  if (mem == NULL) {
-    jpeg_mem_term(cinfo);	/* system-dependent cleanup */
-    ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0);
-  }
-
-  /* OK, fill in the method pointers */
-  mem->pub.alloc_small = alloc_small;
-  mem->pub.alloc_large = alloc_large;
-  mem->pub.alloc_sarray = alloc_sarray;
-  mem->pub.alloc_barray = alloc_barray;
-  mem->pub.request_virt_sarray = request_virt_sarray;
-  mem->pub.request_virt_barray = request_virt_barray;
-  mem->pub.realize_virt_arrays = realize_virt_arrays;
-  mem->pub.access_virt_sarray = access_virt_sarray;
-  mem->pub.access_virt_barray = access_virt_barray;
-  mem->pub.free_pool = free_pool;
-  mem->pub.self_destruct = self_destruct;
-
-  /* Make MAX_ALLOC_CHUNK accessible to other modules */
-  mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK;
-
-  /* Initialize working state */
-  mem->pub.max_memory_to_use = max_to_use;
-
-  for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) {
-    mem->small_list[pool] = NULL;
-    mem->large_list[pool] = NULL;
-  }
-  mem->virt_sarray_list = NULL;
-  mem->virt_barray_list = NULL;
-
-  mem->total_space_allocated = SIZEOF(my_memory_mgr);
-
-  /* Declare ourselves open for business */
-  cinfo->mem = & mem->pub;
-
-  /* Check for an environment variable JPEGMEM; if found, override the
-   * default max_memory setting from jpeg_mem_init.  Note that the
-   * surrounding application may again override this value.
-   * If your system doesn't support getenv(), define NO_GETENV to disable
-   * this feature.
-   */
-#ifndef NO_GETENV
-  { char * memenv;
-
-    if ((memenv = getenv("JPEGMEM")) != NULL) {
-      char ch = 'x';
-
-      if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) {
-	if (ch == 'm' || ch == 'M')
-	  max_to_use *= 1000L;
-	mem->pub.max_memory_to_use = max_to_use * 1000L;
-      }
-    }
-  }
-#endif
-
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jmemnobs.c b/modules/juce_graphics/image_formats/jpglib/jmemnobs.c
deleted file mode 100644
index e74edbc..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jmemnobs.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * jmemnobs.c
- *
- * Copyright (C) 1992-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file provides a really simple implementation of the system-
- * dependent portion of the JPEG memory manager.  This implementation
- * assumes that no backing-store files are needed: all required space
- * can be obtained from malloc().
- * This is very portable in the sense that it'll compile on almost anything,
- * but you'd better have lots of main memory (or virtual memory) if you want
- * to process big images.
- * Note that the max_memory_to_use option is ignored by this implementation.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jmemsys.h"		/* import the system-dependent declarations */
-
-#ifndef HAVE_STDLIB_H		/* <stdlib.h> should declare malloc(),free() */
-extern void * malloc JPP((size_t size));
-extern void free JPP((void *ptr));
-#endif
-
-
-/*
- * Memory allocation and freeing are controlled by the regular library
- * routines malloc() and free().
- */
-
-GLOBAL(void *)
-jpeg_get_small (j_common_ptr , size_t sizeofobject)
-{
-  return (void *) malloc(sizeofobject);
-}
-
-GLOBAL(void)
-jpeg_free_small (j_common_ptr , void * object, size_t)
-{
-  free(object);
-}
-
-
-/*
- * "Large" objects are treated the same as "small" ones.
- * NB: although we include FAR keywords in the routine declarations,
- * this file won't actually work in 80x86 small/medium model; at least,
- * you probably won't be able to process useful-size images in only 64KB.
- */
-
-GLOBAL(void FAR *)
-jpeg_get_large (j_common_ptr, size_t sizeofobject)
-{
-  return (void FAR *) malloc(sizeofobject);
-}
-
-GLOBAL(void)
-jpeg_free_large (j_common_ptr, void FAR * object, size_t)
-{
-  free(object);
-}
-
-
-/*
- * This routine computes the total memory space available for allocation.
- * Here we always say, "we got all you want bud!"
- */
-
-GLOBAL(long)
-jpeg_mem_available (j_common_ptr, long,
-		    long max_bytes_needed, long)
-{
-  return max_bytes_needed;
-}
-
-
-/*
- * Backing store (temporary file) management.
- * Since jpeg_mem_available always promised the moon,
- * this should never be called and we can just error out.
- */
-
-GLOBAL(void)
-jpeg_open_backing_store (j_common_ptr cinfo, struct backing_store_struct *,
-			 long )
-{
-  ERREXIT(cinfo, JERR_NO_BACKING_STORE);
-}
-
-
-/*
- * These routines take care of any system-dependent initialization and
- * cleanup required.  Here, there isn't any.
- */
-
-GLOBAL(long)
-jpeg_mem_init (j_common_ptr)
-{
-  return 0;			/* just set max_memory_to_use to 0 */
-}
-
-GLOBAL(void)
-jpeg_mem_term (j_common_ptr)
-{
-  /* no work */
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jmemsys.h b/modules/juce_graphics/image_formats/jpglib/jmemsys.h
deleted file mode 100644
index d834ea4..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jmemsys.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * jmemsys.h
- *
- * Copyright (C) 1992-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This include file defines the interface between the system-independent
- * and system-dependent portions of the JPEG memory manager.  No other
- * modules need include it.  (The system-independent portion is jmemmgr.c;
- * there are several different versions of the system-dependent portion.)
- *
- * This file works as-is for the system-dependent memory managers supplied
- * in the IJG distribution.  You may need to modify it if you write a
- * custom memory manager.  If system-dependent changes are needed in
- * this file, the best method is to #ifdef them based on a configuration
- * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR
- * and USE_MAC_MEMMGR.
- */
-
-#ifndef __jmemsys_h__
-#define __jmemsys_h__
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_get_small		jGetSmall
-#define jpeg_free_small		jFreeSmall
-#define jpeg_get_large		jGetLarge
-#define jpeg_free_large		jFreeLarge
-#define jpeg_mem_available	jMemAvail
-#define jpeg_open_backing_store	jOpenBackStore
-#define jpeg_mem_init		jMemInit
-#define jpeg_mem_term		jMemTerm
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/*
- * These two functions are used to allocate and release small chunks of
- * memory.  (Typically the total amount requested through jpeg_get_small is
- * no more than 20K or so; this will be requested in chunks of a few K each.)
- * Behavior should be the same as for the standard library functions malloc
- * and free; in particular, jpeg_get_small must return NULL on failure.
- * On most systems, these ARE malloc and free.  jpeg_free_small is passed the
- * size of the object being freed, just in case it's needed.
- * On an 80x86 machine using small-data memory model, these manage near heap.
- */
-
-EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject));
-EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object,
-				  size_t sizeofobject));
-
-/*
- * These two functions are used to allocate and release large chunks of
- * memory (up to the total free space designated by jpeg_mem_available).
- * The interface is the same as above, except that on an 80x86 machine,
- * far pointers are used.  On most other machines these are identical to
- * the jpeg_get/free_small routines; but we keep them separate anyway,
- * in case a different allocation strategy is desirable for large chunks.
- */
-
-EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo,
-				       size_t sizeofobject));
-EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object,
-				  size_t sizeofobject));
-
-/*
- * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may
- * be requested in a single call to jpeg_get_large (and jpeg_get_small for that
- * matter, but that case should never come into play).  This macro is needed
- * to model the 64Kb-segment-size limit of far addressing on 80x86 machines.
- * On those machines, we expect that jconfig.h will provide a proper value.
- * On machines with 32-bit flat address spaces, any large constant may be used.
- *
- * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type
- * size_t and will be a multiple of sizeof(align_type).
- */
-
-#ifndef MAX_ALLOC_CHUNK		/* may be overridden in jconfig.h */
-#define MAX_ALLOC_CHUNK  1000000000L
-#endif
-
-/*
- * This routine computes the total space still available for allocation by
- * jpeg_get_large.  If more space than this is needed, backing store will be
- * used.  NOTE: any memory already allocated must not be counted.
- *
- * There is a minimum space requirement, corresponding to the minimum
- * feasible buffer sizes; jmemmgr.c will request that much space even if
- * jpeg_mem_available returns zero.  The maximum space needed, enough to hold
- * all working storage in memory, is also passed in case it is useful.
- * Finally, the total space already allocated is passed.  If no better
- * method is available, cinfo->mem->max_memory_to_use - already_allocated
- * is often a suitable calculation.
- *
- * It is OK for jpeg_mem_available to underestimate the space available
- * (that'll just lead to more backing-store access than is really necessary).
- * However, an overestimate will lead to failure.  Hence it's wise to subtract
- * a slop factor from the true available space.  5% should be enough.
- *
- * On machines with lots of virtual memory, any large constant may be returned.
- * Conversely, zero may be returned to always use the minimum amount of memory.
- */
-
-EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo,
-				     long min_bytes_needed,
-				     long max_bytes_needed,
-				     long already_allocated));
-
-
-/*
- * This structure holds whatever state is needed to access a single
- * backing-store object.  The read/write/close method pointers are called
- * by jmemmgr.c to manipulate the backing-store object; all other fields
- * are private to the system-dependent backing store routines.
- */
-
-#define TEMP_NAME_LENGTH   64	/* max length of a temporary file's name */
-
-
-#ifdef USE_MSDOS_MEMMGR		/* DOS-specific junk */
-
-typedef unsigned short XMSH;	/* type of extended-memory handles */
-typedef unsigned short EMSH;	/* type of expanded-memory handles */
-
-typedef union {
-  short file_handle;		/* DOS file handle if it's a temp file */
-  XMSH xms_handle;		/* handle if it's a chunk of XMS */
-  EMSH ems_handle;		/* handle if it's a chunk of EMS */
-} handle_union;
-
-#endif /* USE_MSDOS_MEMMGR */
-
-#ifdef USE_MAC_MEMMGR		/* Mac-specific junk */
-#include <Files.h>
-#endif /* USE_MAC_MEMMGR */
-
-
-//typedef struct backing_store_struct * backing_store_ptr;
-
-typedef struct backing_store_struct {
-  /* Methods for reading/writing/closing this backing-store object */
-  JMETHOD(void, read_backing_store, (j_common_ptr cinfo,
-				     struct backing_store_struct *info,
-				     void FAR * buffer_address,
-				     long file_offset, long byte_count));
-  JMETHOD(void, write_backing_store, (j_common_ptr cinfo,
-				      struct backing_store_struct *info,
-				      void FAR * buffer_address,
-				      long file_offset, long byte_count));
-  JMETHOD(void, close_backing_store, (j_common_ptr cinfo,
-				      struct backing_store_struct *info));
-
-  /* Private fields for system-dependent backing-store management */
-#ifdef USE_MSDOS_MEMMGR
-  /* For the MS-DOS manager (jmemdos.c), we need: */
-  handle_union handle;		/* reference to backing-store storage object */
-  char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
-#else
-#ifdef USE_MAC_MEMMGR
-  /* For the Mac manager (jmemmac.c), we need: */
-  short temp_file;		/* file reference number to temp file */
-  FSSpec tempSpec;		/* the FSSpec for the temp file */
-  char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
-#else
-  /* For a typical implementation with temp files, we need: */
-  FILE * temp_file;		/* stdio reference to temp file */
-  char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */
-#endif
-#endif
-} backing_store_info;
-
-
-/*
- * Initial opening of a backing-store object.  This must fill in the
- * read/write/close pointers in the object.  The read/write routines
- * may take an error exit if the specified maximum file size is exceeded.
- * (If jpeg_mem_available always returns a large value, this routine can
- * just take an error exit.)
- */
-
-EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo,
-					  struct backing_store_struct *info,
-					  long total_bytes_needed));
-
-
-/*
- * These routines take care of any system-dependent initialization and
- * cleanup required.  jpeg_mem_init will be called before anything is
- * allocated (and, therefore, nothing in cinfo is of use except the error
- * manager pointer).  It should return a suitable default value for
- * max_memory_to_use; this may subsequently be overridden by the surrounding
- * application.  (Note that max_memory_to_use is only important if
- * jpeg_mem_available chooses to consult it ... no one else will.)
- * jpeg_mem_term may assume that all requested memory has been freed and that
- * all opened backing-store objects have been closed.
- */
-
-EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo));
-EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo));
-
-
-#endif
diff --git a/modules/juce_graphics/image_formats/jpglib/jmorecfg.h b/modules/juce_graphics/image_formats/jpglib/jmorecfg.h
deleted file mode 100644
index c856e22..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jmorecfg.h
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * jmorecfg.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains additional configuration options that customize the
- * JPEG software for special applications or support machine-dependent
- * optimizations.  Most users will not need to touch this file.
- */
-
-
-/*
- * Define BITS_IN_JSAMPLE as either
- *   8   for 8-bit sample values (the usual setting)
- *   12  for 12-bit sample values
- * Only 8 and 12 are legal data precisions for lossy JPEG according to the
- * JPEG standard, and the IJG code does not support anything else!
- * We do not support run-time selection of data precision, sorry.
- */
-
-#define BITS_IN_JSAMPLE  8	/* use 8 or 12 */
-
-
-/*
- * Maximum number of components (color channels) allowed in JPEG image.
- * To meet the letter of the JPEG spec, set this to 255.  However, darn
- * few applications need more than 4 channels (maybe 5 for CMYK + alpha
- * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
- * really short on memory.  (Each allowed component costs a hundred or so
- * bytes of storage, whether actually used in an image or not.)
- */
-
-#define MAX_COMPONENTS  10	/* maximum number of image components */
-
-
-/*
- * Basic data types.
- * You may need to change these if you have a machine with unusual data
- * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
- * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
- * but it had better be at least 16.
- */
-
-/* Representation of a single sample (pixel element value).
- * We frequently allocate large arrays of these, so it's important to keep
- * them small.  But if you have memory to burn and access to char or short
- * arrays is very slow on your hardware, you might want to change these.
- */
-
-#if BITS_IN_JSAMPLE == 8
-/* JSAMPLE should be the smallest type that will hold the values 0..255.
- * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
- */
-
-#ifdef HAVE_UNSIGNED_CHAR
-
-typedef unsigned char JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JSAMPLE;
-#ifdef CHAR_IS_UNSIGNED
-#define GETJSAMPLE(value)  ((int) (value))
-#else
-#define GETJSAMPLE(value)  ((int) (value) & 0xFF)
-#endif /* CHAR_IS_UNSIGNED */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
-#define MAXJSAMPLE	255
-#define CENTERJSAMPLE	128
-
-#endif /* BITS_IN_JSAMPLE == 8 */
-
-
-#if BITS_IN_JSAMPLE == 12
-/* JSAMPLE should be the smallest type that will hold the values 0..4095.
- * On nearly all machines "short" will do nicely.
- */
-
-typedef short JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#define MAXJSAMPLE	4095
-#define CENTERJSAMPLE	2048
-
-#endif /* BITS_IN_JSAMPLE == 12 */
-
-
-/* Representation of a DCT frequency coefficient.
- * This should be a signed value of at least 16 bits; "short" is usually OK.
- * Again, we allocate large arrays of these, but you can change to int
- * if you have memory to burn and "short" is really slow.
- */
-
-typedef short JCOEF;
-
-
-/* Compressed datastreams are represented as arrays of JOCTET.
- * These must be EXACTLY 8 bits wide, at least once they are written to
- * external storage.  Note that when using the stdio data source/destination
- * managers, this is also the data type passed to fread/fwrite.
- */
-
-#ifdef HAVE_UNSIGNED_CHAR
-
-typedef unsigned char JOCTET;
-#define GETJOCTET(value)  (value)
-
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JOCTET;
-#ifdef CHAR_IS_UNSIGNED
-#define GETJOCTET(value)  (value)
-#else
-#define GETJOCTET(value)  ((value) & 0xFF)
-#endif /* CHAR_IS_UNSIGNED */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
-
-/* These typedefs are used for various table entries and so forth.
- * They must be at least as wide as specified; but making them too big
- * won't cost a huge amount of memory, so we don't provide special
- * extraction code like we did for JSAMPLE.  (In other words, these
- * typedefs live at a different point on the speed/space tradeoff curve.)
- */
-
-/* UINT8 must hold at least the values 0..255. */
-
-#ifdef HAVE_UNSIGNED_CHAR
-typedef unsigned char UINT8;
-#else /* not HAVE_UNSIGNED_CHAR */
-#ifdef CHAR_IS_UNSIGNED
-typedef char UINT8;
-#else /* not CHAR_IS_UNSIGNED */
-typedef short UINT8;
-#endif /* CHAR_IS_UNSIGNED */
-#endif /* HAVE_UNSIGNED_CHAR */
-
-/* UINT16 must hold at least the values 0..65535. */
-
-#ifdef HAVE_UNSIGNED_SHORT
-typedef unsigned short UINT16;
-#else /* not HAVE_UNSIGNED_SHORT */
-typedef unsigned int UINT16;
-#endif /* HAVE_UNSIGNED_SHORT */
-
-/* INT16 must hold at least the values -32768..32767. */
-
-#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
-typedef short INT16;
-#endif
-
-/* INT32 must hold at least signed 32-bit values. */
-
-#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
-typedef long INT32;
-#endif
-
-/* Datatype used for image dimensions.  The JPEG standard only supports
- * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
- * "unsigned int" is sufficient on all machines.  However, if you need to
- * handle larger images and you don't mind deviating from the spec, you
- * can change this datatype.
- */
-
-typedef unsigned int JDIMENSION;
-
-#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
-
-
-/* These macros are used in all function definitions and extern declarations.
- * You could modify them if you need to change function linkage conventions;
- * in particular, you'll need to do that to make the library a Windows DLL.
- * Another application is to make all functions global for use with debuggers
- * or code profilers that require it.
- */
-
-/* a function called through method pointers: */
-#define METHODDEF(type)		static type
-/* a function used only in its module: */
-#define LOCAL(type)		static type
-/* a function referenced thru EXTERNs: */
-#define GLOBAL(type)		type
-/* a reference to a GLOBAL function: */
-#define EXTERN(type)		extern type
-
-
-/* This macro is used to declare a "method", that is, a function pointer.
- * We want to supply prototype parameters if the compiler can cope.
- * Note that the arglist parameter must be parenthesized!
- * Again, you can customize this if you need special linkage keywords.
- */
-
-#ifdef HAVE_PROTOTYPES
-#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
-#else
-#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
-#endif
-
-
-/* Here is the pseudo-keyword for declaring pointers that must be "far"
- * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
- * by just saying "FAR *" where such a pointer is needed.  In a few places
- * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
- */
-
-#ifdef NEED_FAR_POINTERS
-#define FAR  far
-#else
-#define FAR
-#endif
-
-
-/*
- * On a few systems, type boolean and/or its values FALSE, TRUE may appear
- * in standard header files.  Or you may have conflicts with application-
- * specific header files that you want to include together with these files.
- * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
- */
-
-#ifndef HAVE_BOOLEAN
-typedef int boolean;
-#endif
-#ifndef FALSE			/* in case these macros already exist */
-#define FALSE	0		/* values of boolean */
-#endif
-#ifndef TRUE
-#define TRUE	1
-#endif
-
-
-/*
- * The remaining options affect code selection within the JPEG library,
- * but they don't need to be visible to most applications using the library.
- * To minimize application namespace pollution, the symbols won't be
- * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
- */
-
-#ifdef JPEG_INTERNALS
-#define JPEG_INTERNAL_OPTIONS
-#endif
-
-#ifdef JPEG_INTERNAL_OPTIONS
-
-
-/*
- * These defines indicate whether to include various optional functions.
- * Undefining some of these symbols will produce a smaller but less capable
- * library.  Note that you can leave certain source files out of the
- * compilation/linking process if you've #undef'd the corresponding symbols.
- * (You may HAVE to do that if your compiler doesn't like null source files.)
- */
-
-/* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
-
-/* Capability options common to encoder and decoder: */
-
-#define DCT_ISLOW_SUPPORTED	/* slow but accurate integer algorithm */
-#define DCT_IFAST_SUPPORTED	/* faster, less accurate integer method */
-#define DCT_FLOAT_SUPPORTED	/* floating-point: accurate, fast on fast HW */
-
-/* Encoder capability options: */
-
-#undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
-#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
-#define C_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
-#define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */
-/* Note: if you selected 12-bit data precision, it is dangerous to turn off
- * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
- * precision, so jchuff.c normally uses entropy optimization to compute
- * usable tables for higher precision.  If you don't want to do optimization,
- * you'll have to supply different default Huffman tables.
- * The exact same statements apply for progressive JPEG: the default tables
- * don't work for progressive mode.  (This may get fixed, however.)
- */
-#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
-
-/* Decoder capability options: */
-
-#undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
-#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
-#define D_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
-#define SAVE_MARKERS_SUPPORTED	    /* jpeg_save_markers() needed? */
-#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
-#define IDCT_SCALING_SUPPORTED	    /* Output rescaling via IDCT? */
-#undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
-#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
-#define QUANT_1PASS_SUPPORTED	    /* 1-pass color quantization? */
-#define QUANT_2PASS_SUPPORTED	    /* 2-pass color quantization? */
-
-/* more capability options later, no doubt */
-
-
-/*
- * Ordering of RGB data in scanlines passed to or from the application.
- * If your application wants to deal with data in the order B,G,R, just
- * change these macros.  You can also deal with formats such as R,G,B,X
- * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
- * the offsets will also change the order in which colormap data is organized.
- * RESTRICTIONS:
- * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
- * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
- *    useful if you are using JPEG color spaces other than YCbCr or grayscale.
- * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
- *    is not 3 (they don't understand about dummy color components!).  So you
- *    can't use color quantization if you change that value.
- */
-
-#define RGB_RED		0	/* Offset of Red in an RGB scanline element */
-#define RGB_GREEN	1	/* Offset of Green */
-#define RGB_BLUE	2	/* Offset of Blue */
-#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */
-
-
-/* Definitions for speed-related optimizations. */
-
-
-/* If your compiler supports inline functions, define INLINE
- * as the inline keyword; otherwise define it as empty.
- */
-
-#ifndef INLINE
-#ifdef __GNUC__			/* for instance, GNU C knows about inline */
-#define INLINE __inline__
-#endif
-#ifndef INLINE
-#define INLINE			/* default is to define it as empty */
-#endif
-#endif
-
-
-/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
- * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
- * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
- */
-
-#ifndef MULTIPLIER
-#define MULTIPLIER  int		/* type for fastest integer multiply */
-#endif
-
-
-/* FAST_FLOAT should be either float or double, whichever is done faster
- * by your compiler.  (Note that this type is only used in the floating point
- * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
- * Typically, float is faster in ANSI C compilers, while double is faster in
- * pre-ANSI compilers (because they insist on converting to double anyway).
- * The code below therefore chooses float if we have ANSI-style prototypes.
- */
-
-#ifndef FAST_FLOAT
-#ifdef HAVE_PROTOTYPES
-#define FAST_FLOAT  float
-#else
-#define FAST_FLOAT  double
-#endif
-#endif
-
-#endif /* JPEG_INTERNAL_OPTIONS */
diff --git a/modules/juce_graphics/image_formats/jpglib/jpegint.h b/modules/juce_graphics/image_formats/jpglib/jpegint.h
deleted file mode 100644
index 685a361..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jpegint.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * jpegint.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file provides common declarations for the various JPEG modules.
- * These declarations are considered internal to the JPEG library; most
- * applications using the library shouldn't need to include this file.
- */
-
-
-/* Declarations for both compression & decompression */
-
-typedef enum {			/* Operating modes for buffer controllers */
-	JBUF_PASS_THRU,		/* Plain stripwise operation */
-	/* Remaining modes require a full-image buffer to have been created */
-	JBUF_SAVE_SOURCE,	/* Run source subobject only, save output */
-	JBUF_CRANK_DEST,	/* Run dest subobject only, using saved data */
-	JBUF_SAVE_AND_PASS	/* Run both subobjects, save output */
-} J_BUF_MODE;
-
-/* Values of global_state field (jdapi.c has some dependencies on ordering!) */
-#define CSTATE_START	100	/* after create_compress */
-#define CSTATE_SCANNING	101	/* start_compress done, write_scanlines OK */
-#define CSTATE_RAW_OK	102	/* start_compress done, write_raw_data OK */
-#define CSTATE_WRCOEFS	103	/* jpeg_write_coefficients done */
-#define DSTATE_START	200	/* after create_decompress */
-#define DSTATE_INHEADER	201	/* reading header markers, no SOS yet */
-#define DSTATE_READY	202	/* found SOS, ready for start_decompress */
-#define DSTATE_PRELOAD	203	/* reading multiscan file in start_decompress*/
-#define DSTATE_PRESCAN	204	/* performing dummy pass for 2-pass quant */
-#define DSTATE_SCANNING	205	/* start_decompress done, read_scanlines OK */
-#define DSTATE_RAW_OK	206	/* start_decompress done, read_raw_data OK */
-#define DSTATE_BUFIMAGE	207	/* expecting jpeg_start_output */
-#define DSTATE_BUFPOST	208	/* looking for SOS/EOI in jpeg_finish_output */
-#define DSTATE_RDCOEFS	209	/* reading file in jpeg_read_coefficients */
-#define DSTATE_STOPPING	210	/* looking for EOI in jpeg_finish_decompress */
-
-
-/* Declarations for compression modules */
-
-/* Master control module */
-struct jpeg_comp_master {
-  JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, pass_startup, (j_compress_ptr cinfo));
-  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean call_pass_startup;	/* True if pass_startup must be called */
-  boolean is_last_pass;		/* True during last pass */
-};
-
-/* Main buffer control (downsampled-data buffer) */
-struct jpeg_c_main_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, process_data, (j_compress_ptr cinfo,
-			       JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			       JDIMENSION in_rows_avail));
-};
-
-/* Compression preprocessing (downsampling input buffer control) */
-struct jpeg_c_prep_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,
-				   JSAMPARRAY input_buf,
-				   JDIMENSION *in_row_ctr,
-				   JDIMENSION in_rows_avail,
-				   JSAMPIMAGE output_buf,
-				   JDIMENSION *out_row_group_ctr,
-				   JDIMENSION out_row_groups_avail));
-};
-
-/* Coefficient buffer control */
-struct jpeg_c_coef_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,
-				   JSAMPIMAGE input_buf));
-};
-
-/* Colorspace conversion */
-struct jpeg_color_converter {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, color_convert, (j_compress_ptr cinfo,
-				JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-				JDIMENSION output_row, int num_rows));
-};
-
-/* Downsampling */
-struct jpeg_downsampler {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, downsample, (j_compress_ptr cinfo,
-			     JSAMPIMAGE input_buf, JDIMENSION in_row_index,
-			     JSAMPIMAGE output_buf,
-			     JDIMENSION out_row_group_index));
-
-  boolean need_context_rows;	/* TRUE if need rows above & below */
-};
-
-/* Forward DCT (also controls coefficient quantization) */
-struct jpeg_forward_dct {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  /* perhaps this should be an array??? */
-  JMETHOD(void, forward_DCT, (j_compress_ptr cinfo,
-			      jpeg_component_info * compptr,
-			      JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-			      JDIMENSION start_row, JDIMENSION start_col,
-			      JDIMENSION num_blocks));
-};
-
-/* Entropy encoding */
-struct jpeg_entropy_encoder {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));
-  JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));
-  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
-};
-
-/* Marker writing */
-struct jpeg_marker_writer {
-  JMETHOD(void, write_file_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));
-  JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));
-  /* These routines are exported to allow insertion of extra markers */
-  /* Probably only COM and APPn markers should be written this way */
-  JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker,
-				      unsigned int datalen));
-  JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val));
-};
-
-
-/* Declarations for decompression modules */
-
-/* Master control module */
-struct jpeg_decomp_master {
-  JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean is_dummy_pass;	/* True during 1st pass for 2-pass quant */
-};
-
-/* Input control module */
-struct jpeg_input_controller {
-  JMETHOD(int, consume_input, (j_decompress_ptr cinfo));
-  JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));
-  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean has_multiple_scans;	/* True if file has multiple scans */
-  boolean eoi_reached;		/* True when EOI has been consumed */
-};
-
-/* Main buffer control (downsampled-data buffer) */
-struct jpeg_d_main_controller {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, process_data, (j_decompress_ptr cinfo,
-			       JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			       JDIMENSION out_rows_avail));
-};
-
-/* Coefficient buffer control */
-struct jpeg_d_coef_controller {
-  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
-  JMETHOD(int, consume_data, (j_decompress_ptr cinfo));
-  JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));
-  JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,
-				 JSAMPIMAGE output_buf));
-  /* Pointer to array of coefficient virtual arrays, or NULL if none */
-  jvirt_barray_ptr *coef_arrays;
-};
-
-/* Decompression postprocessing (color quantization buffer control) */
-struct jpeg_d_post_controller {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,
-				    JSAMPIMAGE input_buf,
-				    JDIMENSION *in_row_group_ctr,
-				    JDIMENSION in_row_groups_avail,
-				    JSAMPARRAY output_buf,
-				    JDIMENSION *out_row_ctr,
-				    JDIMENSION out_rows_avail));
-};
-
-/* Marker reading & parsing */
-struct jpeg_marker_reader {
-  JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
-  /* Read markers until SOS or EOI.
-   * Returns same codes as are defined for jpeg_consume_input:
-   * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
-   */
-  JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
-  /* Read a restart marker --- exported for use by entropy decoder only */
-  jpeg_marker_parser_method read_restart_marker;
-
-  /* State of marker reader --- nominally internal, but applications
-   * supplying COM or APPn handlers might like to know the state.
-   */
-  boolean saw_SOI;		/* found SOI? */
-  boolean saw_SOF;		/* found SOF? */
-  int next_restart_num;		/* next restart number expected (0-7) */
-  unsigned int discarded_bytes;	/* # of bytes skipped looking for a marker */
-};
-
-/* Entropy decoding */
-struct jpeg_entropy_decoder {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo,
-				JBLOCKROW *MCU_data));
-
-  /* This is here to share code between baseline and progressive decoders; */
-  /* other modules probably should not use it */
-  boolean insufficient_data;	/* set TRUE after emitting warning */
-};
-
-/* Inverse DCT (also performs dequantization) */
-typedef JMETHOD(void, inverse_DCT_method_ptr,
-		(j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col));
-
-struct jpeg_inverse_dct {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  /* It is useful to allow each component to have a separate IDCT method. */
-  inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
-};
-
-/* Upsampling (note that upsampler must also call color converter) */
-struct jpeg_upsampler {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, upsample, (j_decompress_ptr cinfo,
-			   JSAMPIMAGE input_buf,
-			   JDIMENSION *in_row_group_ctr,
-			   JDIMENSION in_row_groups_avail,
-			   JSAMPARRAY output_buf,
-			   JDIMENSION *out_row_ctr,
-			   JDIMENSION out_rows_avail));
-
-  boolean need_context_rows;	/* TRUE if need rows above & below */
-};
-
-/* Colorspace conversion */
-struct jpeg_color_deconverter {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
-				JSAMPIMAGE input_buf, JDIMENSION input_row,
-				JSAMPARRAY output_buf, int num_rows));
-};
-
-/* Color quantization or color precision reduction */
-struct jpeg_color_quantizer {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
-  JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
-				 JSAMPARRAY input_buf, JSAMPARRAY output_buf,
-				 int num_rows));
-  JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
-};
-
-
-/* Miscellaneous useful macros */
-
-#undef MAX
-#define MAX(a,b)	((a) > (b) ? (a) : (b))
-#undef MIN
-#define MIN(a,b)	((a) < (b) ? (a) : (b))
-
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity.  This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit.  But some
- * C compilers implement >> with an unsigned shift.  For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts.  SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS	INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft)  \
-	((shift_temp = (x)) < 0 ? \
-	 (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
-	 (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jinit_compress_master	jICompress
-#define jinit_c_master_control	jICMaster
-#define jinit_c_main_controller	jICMainC
-#define jinit_c_prep_controller	jICPrepC
-#define jinit_c_coef_controller	jICCoefC
-#define jinit_color_converter	jICColor
-#define jinit_downsampler	jIDownsampler
-#define jinit_forward_dct	jIFDCT
-#define jinit_huff_encoder	jIHEncoder
-#define jinit_phuff_encoder	jIPHEncoder
-#define jinit_marker_writer	jIMWriter
-#define jinit_master_decompress	jIDMaster
-#define jinit_d_main_controller	jIDMainC
-#define jinit_d_coef_controller	jIDCoefC
-#define jinit_d_post_controller	jIDPostC
-#define jinit_input_controller	jIInCtlr
-#define jinit_marker_reader	jIMReader
-#define jinit_huff_decoder	jIHDecoder
-#define jinit_phuff_decoder	jIPHDecoder
-#define jinit_inverse_dct	jIIDCT
-#define jinit_upsampler		jIUpsampler
-#define jinit_color_deconverter	jIDColor
-#define jinit_1pass_quantizer	jI1Quant
-#define jinit_2pass_quantizer	jI2Quant
-#define jinit_merged_upsampler	jIMUpsampler
-#define jinit_memory_mgr	jIMemMgr
-#define jdiv_round_up		jDivRound
-#define jround_up		jRound
-#define jcopy_sample_rows	jCopySamples
-#define jcopy_block_row		jCopyBlocks
-#define jzero_far		jZeroFar
-#define jpeg_zigzag_order	jZIGTable
-#define jpeg_natural_order	jZAGTable
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Compression module initialization routines */
-EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,
-					 boolean transcode_only));
-EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_phuff_encoder JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));
-/* Decompression module initialization routines */
-EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_phuff_decoder JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo));
-/* Memory manager initialization */
-EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));
-
-/* Utility routines in jutils.c */
-EXTERN(long) jdiv_round_up JPP((long a, long b));
-EXTERN(long) jround_up JPP((long a, long b));
-EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,
-				    JSAMPARRAY output_array, int dest_row,
-				    int num_rows, JDIMENSION num_cols));
-EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
-				  JDIMENSION num_blocks));
-EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
-/* Constant tables in jutils.c */
-#if 0				/* This table is not actually needed in v6a */
-extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
-#endif
-extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
-
-/* Suppress undefined-structure complaints if necessary. */
-
-#ifdef INCOMPLETE_TYPES_BROKEN
-#ifndef AM_MEMORY_MANAGER	/* only jmemmgr.c defines these */
-struct jvirt_sarray_control { long dummy; };
-struct jvirt_barray_control { long dummy; };
-#endif
-#endif /* INCOMPLETE_TYPES_BROKEN */
diff --git a/modules/juce_graphics/image_formats/jpglib/jpeglib.h b/modules/juce_graphics/image_formats/jpglib/jpeglib.h
deleted file mode 100644
index bf6ce08..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jpeglib.h
+++ /dev/null
@@ -1,1096 +0,0 @@
-/*
- * jpeglib.h
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the application interface for the JPEG library.
- * Most applications using the library need only include this file,
- * and perhaps jerror.h if they want to know the exact error codes.
- */
-
-#ifndef JPEGLIB_H
-#define JPEGLIB_H
-
-/*
- * First we include the configuration files that record how this
- * installation of the JPEG library is set up.  jconfig.h can be
- * generated automatically for many systems.  jmorecfg.h contains
- * manual configuration options that most people need not worry about.
- */
-
-#ifndef JCONFIG_INCLUDED	/* in case jinclude.h already did */
-#include "jconfig.h"		/* widely used configuration options */
-#endif
-#include "jmorecfg.h"		/* seldom changed options */
-
-
-/* Version ID for the JPEG library.
- * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
- */
-
-#define JPEG_LIB_VERSION  62	/* Version 6b */
-
-
-/* Various constants determining the sizes of things.
- * All of these are specified by the JPEG standard, so don't change them
- * if you want to be compatible.
- */
-
-#define DCTSIZE		    8	/* The basic DCT block is 8x8 samples */
-#define DCTSIZE2	    64	/* DCTSIZE squared; # of elements in a block */
-#define NUM_QUANT_TBLS      4	/* Quantization tables are numbered 0..3 */
-#define NUM_HUFF_TBLS       4	/* Huffman tables are numbered 0..3 */
-#define NUM_ARITH_TBLS      16	/* Arith-coding tables are numbered 0..15 */
-#define MAX_COMPS_IN_SCAN   4	/* JPEG limit on # of components in one scan */
-#define MAX_SAMP_FACTOR     4	/* JPEG limit on sampling factors */
-/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
- * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
- * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
- * to handle it.  We even let you do this from the jconfig.h file.  However,
- * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
- * sometimes emits noncompliant files doesn't mean you should too.
- */
-#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
-#ifndef D_MAX_BLOCKS_IN_MCU
-#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
-#endif
-
-
-/* Data structures for images (arrays of samples and of DCT coefficients).
- * On 80x86 machines, the image arrays are too big for near pointers,
- * but the pointer arrays can fit in near memory.
- */
-
-typedef JSAMPLE FAR *JSAMPROW;	/* ptr to one image row of pixel samples. */
-typedef JSAMPROW *JSAMPARRAY;	/* ptr to some rows (a 2-D sample array) */
-typedef JSAMPARRAY *JSAMPIMAGE;	/* a 3-D sample array: top index is color */
-
-typedef JCOEF JBLOCK[DCTSIZE2];	/* one block of coefficients */
-typedef JBLOCK FAR *JBLOCKROW;	/* pointer to one row of coefficient blocks */
-typedef JBLOCKROW *JBLOCKARRAY;		/* a 2-D array of coefficient blocks */
-typedef JBLOCKARRAY *JBLOCKIMAGE;	/* a 3-D array of coefficient blocks */
-
-typedef JCOEF FAR *JCOEFPTR;	/* useful in a couple of places */
-
-
-/* Types for JPEG compression parameters and working tables. */
-
-
-/* DCT coefficient quantization tables. */
-
-typedef struct {
-  /* This array gives the coefficient quantizers in natural array order
-   * (not the zigzag order in which they are stored in a JPEG DQT marker).
-   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
-   */
-  UINT16 quantval[DCTSIZE2];	/* quantization step for each coefficient */
-  /* This field is used only during compression.  It's initialized FALSE when
-   * the table is created, and set TRUE when it's been output to the file.
-   * You could suppress output of a table by setting this to TRUE.
-   * (See jpeg_suppress_tables for an example.)
-   */
-  boolean sent_table;		/* TRUE when table has been output */
-} JQUANT_TBL;
-
-
-/* Huffman coding tables. */
-
-typedef struct {
-  /* These two fields directly represent the contents of a JPEG DHT marker */
-  UINT8 bits[17];		/* bits[k] = # of symbols with codes of */
-				/* length k bits; bits[0] is unused */
-  UINT8 huffval[256];		/* The symbols, in order of incr code length */
-  /* This field is used only during compression.  It's initialized FALSE when
-   * the table is created, and set TRUE when it's been output to the file.
-   * You could suppress output of a table by setting this to TRUE.
-   * (See jpeg_suppress_tables for an example.)
-   */
-  boolean sent_table;		/* TRUE when table has been output */
-} JHUFF_TBL;
-
-
-/* Basic info about one component (color channel). */
-
-typedef struct {
-  /* These values are fixed over the whole image. */
-  /* For compression, they must be supplied by parameter setup; */
-  /* for decompression, they are read from the SOF marker. */
-  int component_id;		/* identifier for this component (0..255) */
-  int component_index;		/* its index in SOF or cinfo->comp_info[] */
-  int h_samp_factor;		/* horizontal sampling factor (1..4) */
-  int v_samp_factor;		/* vertical sampling factor (1..4) */
-  int quant_tbl_no;		/* quantization table selector (0..3) */
-  /* These values may vary between scans. */
-  /* For compression, they must be supplied by parameter setup; */
-  /* for decompression, they are read from the SOS marker. */
-  /* The decompressor output side may not use these variables. */
-  int dc_tbl_no;		/* DC entropy table selector (0..3) */
-  int ac_tbl_no;		/* AC entropy table selector (0..3) */
-
-  /* Remaining fields should be treated as private by applications. */
-
-  /* These values are computed during compression or decompression startup: */
-  /* Component's size in DCT blocks.
-   * Any dummy blocks added to complete an MCU are not counted; therefore
-   * these values do not depend on whether a scan is interleaved or not.
-   */
-  JDIMENSION width_in_blocks;
-  JDIMENSION height_in_blocks;
-  /* Size of a DCT block in samples.  Always DCTSIZE for compression.
-   * For decompression this is the size of the output from one DCT block,
-   * reflecting any scaling we choose to apply during the IDCT step.
-   * Values of 1,2,4,8 are likely to be supported.  Note that different
-   * components may receive different IDCT scalings.
-   */
-  int DCT_scaled_size;
-  /* The downsampled dimensions are the component's actual, unpadded number
-   * of samples at the main buffer (preprocessing/compression interface), thus
-   * downsampled_width = ceil(image_width * Hi/Hmax)
-   * and similarly for height.  For decompression, IDCT scaling is included, so
-   * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
-   */
-  JDIMENSION downsampled_width;	 /* actual width in samples */
-  JDIMENSION downsampled_height; /* actual height in samples */
-  /* This flag is used only for decompression.  In cases where some of the
-   * components will be ignored (eg grayscale output from YCbCr image),
-   * we can skip most computations for the unused components.
-   */
-  boolean component_needed;	/* do we need the value of this component? */
-
-  /* These values are computed before starting a scan of the component. */
-  /* The decompressor output side may not use these variables. */
-  int MCU_width;		/* number of blocks per MCU, horizontally */
-  int MCU_height;		/* number of blocks per MCU, vertically */
-  int MCU_blocks;		/* MCU_width * MCU_height */
-  int MCU_sample_width;		/* MCU width in samples, MCU_width*DCT_scaled_size */
-  int last_col_width;		/* # of non-dummy blocks across in last MCU */
-  int last_row_height;		/* # of non-dummy blocks down in last MCU */
-
-  /* Saved quantization table for component; NULL if none yet saved.
-   * See jdinput.c comments about the need for this information.
-   * This field is currently used only for decompression.
-   */
-  JQUANT_TBL * quant_table;
-
-  /* Private per-component storage for DCT or IDCT subsystem. */
-  void * dct_table;
-} jpeg_component_info;
-
-
-/* The script for encoding a multiple-scan file is an array of these: */
-
-typedef struct {
-  int comps_in_scan;		/* number of components encoded in this scan */
-  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
-  int Ss, Se;			/* progressive JPEG spectral selection parms */
-  int Ah, Al;			/* progressive JPEG successive approx. parms */
-} jpeg_scan_info;
-
-/* The decompressor can save APPn and COM markers in a list of these: */
-
-typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
-
-struct jpeg_marker_struct {
-  jpeg_saved_marker_ptr next;	/* next in list, or NULL */
-  UINT8 marker;			/* marker code: JPEG_COM, or JPEG_APP0+n */
-  unsigned int original_length;	/* # bytes of data in the file */
-  unsigned int data_length;	/* # bytes of data saved at data[] */
-  JOCTET FAR * data;		/* the data contained in the marker */
-  /* the marker length word is not counted in data_length or original_length */
-};
-
-/* Known color spaces. */
-
-typedef enum {
-	JCS_UNKNOWN,		/* error/unspecified */
-	JCS_GRAYSCALE,		/* monochrome */
-	JCS_RGB,		/* red/green/blue */
-	JCS_YCbCr,		/* Y/Cb/Cr (also known as YUV) */
-	JCS_CMYK,		/* C/M/Y/K */
-	JCS_YCCK		/* Y/Cb/Cr/K */
-} J_COLOR_SPACE;
-
-/* DCT/IDCT algorithm options. */
-
-typedef enum {
-	JDCT_ISLOW,		/* slow but accurate integer algorithm */
-	JDCT_IFAST,		/* faster, less accurate integer method */
-	JDCT_FLOAT		/* floating-point: accurate, fast on fast HW */
-} J_DCT_METHOD;
-
-#ifndef JDCT_DEFAULT		/* may be overridden in jconfig.h */
-#define JDCT_DEFAULT  JDCT_ISLOW
-#endif
-#ifndef JDCT_FASTEST		/* may be overridden in jconfig.h */
-#define JDCT_FASTEST  JDCT_IFAST
-#endif
-
-/* Dithering options for decompression. */
-
-typedef enum {
-	JDITHER_NONE,		/* no dithering */
-	JDITHER_ORDERED,	/* simple ordered dither */
-	JDITHER_FS		/* Floyd-Steinberg error diffusion dither */
-} J_DITHER_MODE;
-
-
-/* Common fields between JPEG compression and decompression master structs. */
-
-#define jpeg_common_fields \
-  struct jpeg_error_mgr * err;	/* Error handler module */\
-  struct jpeg_memory_mgr * mem;	/* Memory manager module */\
-  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
-  void * client_data;		/* Available for use by application */\
-  boolean is_decompressor;	/* So common code can tell which is which */\
-  int global_state		/* For checking call sequence validity */
-
-/* Routines that are to be used by both halves of the library are declared
- * to receive a pointer to this structure.  There are no actual instances of
- * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
- */
-struct jpeg_common_struct {
-  jpeg_common_fields;		/* Fields common to both master struct types */
-  /* Additional fields follow in an actual jpeg_compress_struct or
-   * jpeg_decompress_struct.  All three structs must agree on these
-   * initial fields!  (This would be a lot cleaner in C++.)
-   */
-};
-
-typedef struct jpeg_common_struct * j_common_ptr;
-typedef struct jpeg_compress_struct * j_compress_ptr;
-typedef struct jpeg_decompress_struct * j_decompress_ptr;
-
-
-/* Master record for a compression instance */
-
-struct jpeg_compress_struct {
-  jpeg_common_fields;		/* Fields shared with jpeg_decompress_struct */
-
-  /* Destination for compressed data */
-  struct jpeg_destination_mgr * dest;
-
-  /* Description of source image --- these fields must be filled in by
-   * outer application before starting compression.  in_color_space must
-   * be correct before you can even call jpeg_set_defaults().
-   */
-
-  JDIMENSION image_width;	/* input image width */
-  JDIMENSION image_height;	/* input image height */
-  int input_components;		/* # of color components in input image */
-  J_COLOR_SPACE in_color_space;	/* colorspace of input image */
-
-  double input_gamma;		/* image gamma of input image */
-
-  /* Compression parameters --- these fields must be set before calling
-   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
-   * initialize everything to reasonable defaults, then changing anything
-   * the application specifically wants to change.  That way you won't get
-   * burnt when new parameters are added.  Also note that there are several
-   * helper routines to simplify changing parameters.
-   */
-
-  int data_precision;		/* bits of precision in image data */
-
-  int num_components;		/* # of color components in JPEG image */
-  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
-
-  jpeg_component_info * comp_info;
-  /* comp_info[i] describes component that appears i'th in SOF */
-
-  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
-  /* ptrs to coefficient quantization tables, or NULL if not defined */
-
-  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  /* ptrs to Huffman coding tables, or NULL if not defined */
-
-  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
-  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
-  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
-
-  int num_scans;		/* # of entries in scan_info array */
-  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
-  /* The default value of scan_info is NULL, which causes a single-scan
-   * sequential JPEG file to be emitted.  To create a multi-scan file,
-   * set num_scans and scan_info to point to an array of scan definitions.
-   */
-
-  boolean raw_data_in;		/* TRUE=caller supplies downsampled data */
-  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
-  boolean optimize_coding;	/* TRUE=optimize entropy encoding parms */
-  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
-  int smoothing_factor;		/* 1..100, or 0 for no input smoothing */
-  J_DCT_METHOD dct_method;	/* DCT algorithm selector */
-
-  /* The restart interval can be specified in absolute MCUs by setting
-   * restart_interval, or in MCU rows by setting restart_in_rows
-   * (in which case the correct restart_interval will be figured
-   * for each scan).
-   */
-  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
-  int restart_in_rows;		/* if > 0, MCU rows per restart interval */
-
-  /* Parameters controlling emission of special markers. */
-
-  boolean write_JFIF_header;	/* should a JFIF marker be written? */
-  UINT8 JFIF_major_version;	/* What to write for the JFIF version number */
-  UINT8 JFIF_minor_version;
-  /* These three values are not used by the JPEG code, merely copied */
-  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
-  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
-  /* ratio is defined by X_density/Y_density even when density_unit=0. */
-  UINT8 density_unit;		/* JFIF code for pixel size units */
-  UINT16 X_density;		/* Horizontal pixel density */
-  UINT16 Y_density;		/* Vertical pixel density */
-  boolean write_Adobe_marker;	/* should an Adobe marker be written? */
-
-  /* State variable: index of next scanline to be written to
-   * jpeg_write_scanlines().  Application may use this to control its
-   * processing loop, e.g., "while (next_scanline < image_height)".
-   */
-
-  JDIMENSION next_scanline;	/* 0 .. image_height-1  */
-
-  /* Remaining fields are known throughout compressor, but generally
-   * should not be touched by a surrounding application.
-   */
-
-  /*
-   * These fields are computed during compression startup
-   */
-  boolean progressive_mode;	/* TRUE if scan script uses progressive mode */
-  int max_h_samp_factor;	/* largest h_samp_factor */
-  int max_v_samp_factor;	/* largest v_samp_factor */
-
-  JDIMENSION total_iMCU_rows;	/* # of iMCU rows to be input to coef ctlr */
-  /* The coefficient controller receives data in units of MCU rows as defined
-   * for fully interleaved scans (whether the JPEG file is interleaved or not).
-   * There are v_samp_factor * DCTSIZE sample rows of each component in an
-   * "iMCU" (interleaved MCU) row.
-   */
-
-  /*
-   * These fields are valid during any one scan.
-   * They describe the components and MCUs actually appearing in the scan.
-   */
-  int comps_in_scan;		/* # of JPEG components in this scan */
-  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
-  /* *cur_comp_info[i] describes component that appears i'th in SOS */
-
-  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
-  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
-
-  int blocks_in_MCU;		/* # of DCT blocks per MCU */
-  int MCU_membership[C_MAX_BLOCKS_IN_MCU];
-  /* MCU_membership[i] is index in cur_comp_info of component owning */
-  /* i'th block in an MCU */
-
-  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
-
-  /*
-   * Links to compression subobjects (methods and private variables of modules)
-   */
-  struct jpeg_comp_master * master;
-  struct jpeg_c_main_controller * main;
-  struct jpeg_c_prep_controller * prep;
-  struct jpeg_c_coef_controller * coef;
-  struct jpeg_marker_writer * marker;
-  struct jpeg_color_converter * cconvert;
-  struct jpeg_downsampler * downsample;
-  struct jpeg_forward_dct * fdct;
-  struct jpeg_entropy_encoder * entropy;
-  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
-  int script_space_size;
-};
-
-
-/* Master record for a decompression instance */
-
-struct jpeg_decompress_struct {
-  jpeg_common_fields;		/* Fields shared with jpeg_compress_struct */
-
-  /* Source of compressed data */
-  struct jpeg_source_mgr * src;
-
-  /* Basic description of image --- filled in by jpeg_read_header(). */
-  /* Application may inspect these values to decide how to process image. */
-
-  JDIMENSION image_width;	/* nominal image width (from SOF marker) */
-  JDIMENSION image_height;	/* nominal image height */
-  int num_components;		/* # of color components in JPEG image */
-  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
-
-  /* Decompression processing parameters --- these fields must be set before
-   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
-   * them to default values.
-   */
-
-  J_COLOR_SPACE out_color_space; /* colorspace for output */
-
-  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
-
-  double output_gamma;		/* image gamma wanted in output */
-
-  boolean buffered_image;	/* TRUE=multiple output passes */
-  boolean raw_data_out;		/* TRUE=downsampled data wanted */
-
-  J_DCT_METHOD dct_method;	/* IDCT algorithm selector */
-  boolean do_fancy_upsampling;	/* TRUE=apply fancy upsampling */
-  boolean do_block_smoothing;	/* TRUE=apply interblock smoothing */
-
-  boolean quantize_colors;	/* TRUE=colormapped output wanted */
-  /* the following are ignored if not quantize_colors: */
-  J_DITHER_MODE dither_mode;	/* type of color dithering to use */
-  boolean two_pass_quantize;	/* TRUE=use two-pass color quantization */
-  int desired_number_of_colors;	/* max # colors to use in created colormap */
-  /* these are significant only in buffered-image mode: */
-  boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */
-  boolean enable_external_quant;/* enable future use of external colormap */
-  boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */
-
-  /* Description of actual output image that will be returned to application.
-   * These fields are computed by jpeg_start_decompress().
-   * You can also use jpeg_calc_output_dimensions() to determine these values
-   * in advance of calling jpeg_start_decompress().
-   */
-
-  JDIMENSION output_width;	/* scaled image width */
-  JDIMENSION output_height;	/* scaled image height */
-  int out_color_components;	/* # of color components in out_color_space */
-  int output_components;	/* # of color components returned */
-  /* output_components is 1 (a colormap index) when quantizing colors;
-   * otherwise it equals out_color_components.
-   */
-  int rec_outbuf_height;	/* min recommended height of scanline buffer */
-  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
-   * high, space and time will be wasted due to unnecessary data copying.
-   * Usually rec_outbuf_height will be 1 or 2, at most 4.
-   */
-
-  /* When quantizing colors, the output colormap is described by these fields.
-   * The application can supply a colormap by setting colormap non-NULL before
-   * calling jpeg_start_decompress; otherwise a colormap is created during
-   * jpeg_start_decompress or jpeg_start_output.
-   * The map has out_color_components rows and actual_number_of_colors columns.
-   */
-  int actual_number_of_colors;	/* number of entries in use */
-  JSAMPARRAY colormap;		/* The color map as a 2-D pixel array */
-
-  /* State variables: these variables indicate the progress of decompression.
-   * The application may examine these but must not modify them.
-   */
-
-  /* Row index of next scanline to be read from jpeg_read_scanlines().
-   * Application may use this to control its processing loop, e.g.,
-   * "while (output_scanline < output_height)".
-   */
-  JDIMENSION output_scanline;	/* 0 .. output_height-1  */
-
-  /* Current input scan number and number of iMCU rows completed in scan.
-   * These indicate the progress of the decompressor input side.
-   */
-  int input_scan_number;	/* Number of SOS markers seen so far */
-  JDIMENSION input_iMCU_row;	/* Number of iMCU rows completed */
-
-  /* The "output scan number" is the notional scan being displayed by the
-   * output side.  The decompressor will not allow output scan/row number
-   * to get ahead of input scan/row, but it can fall arbitrarily far behind.
-   */
-  int output_scan_number;	/* Nominal scan number being displayed */
-  JDIMENSION output_iMCU_row;	/* Number of iMCU rows read */
-
-  /* Current progression status.  coef_bits[c][i] indicates the precision
-   * with which component c's DCT coefficient i (in zigzag order) is known.
-   * It is -1 when no data has yet been received, otherwise it is the point
-   * transform (shift) value for the most recent scan of the coefficient
-   * (thus, 0 at completion of the progression).
-   * This pointer is NULL when reading a non-progressive file.
-   */
-  int (*coef_bits)[DCTSIZE2];	/* -1 or current Al value for each coef */
-
-  /* Internal JPEG parameters --- the application usually need not look at
-   * these fields.  Note that the decompressor output side may not use
-   * any parameters that can change between scans.
-   */
-
-  /* Quantization and Huffman tables are carried forward across input
-   * datastreams when processing abbreviated JPEG datastreams.
-   */
-
-  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
-  /* ptrs to coefficient quantization tables, or NULL if not defined */
-
-  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  /* ptrs to Huffman coding tables, or NULL if not defined */
-
-  /* These parameters are never carried across datastreams, since they
-   * are given in SOF/SOS markers or defined to be reset by SOI.
-   */
-
-  int data_precision;		/* bits of precision in image data */
-
-  jpeg_component_info * comp_info;
-  /* comp_info[i] describes component that appears i'th in SOF */
-
-  boolean progressive_mode;	/* TRUE if SOFn specifies progressive mode */
-  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
-
-  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
-  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
-  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
-
-  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
-
-  /* These fields record data obtained from optional markers recognized by
-   * the JPEG library.
-   */
-  boolean saw_JFIF_marker;	/* TRUE iff a JFIF APP0 marker was found */
-  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
-  UINT8 JFIF_major_version;	/* JFIF version number */
-  UINT8 JFIF_minor_version;
-  UINT8 density_unit;		/* JFIF code for pixel size units */
-  UINT16 X_density;		/* Horizontal pixel density */
-  UINT16 Y_density;		/* Vertical pixel density */
-  boolean saw_Adobe_marker;	/* TRUE iff an Adobe APP14 marker was found */
-  UINT8 Adobe_transform;	/* Color transform code from Adobe marker */
-
-  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
-
-  /* Aside from the specific data retained from APPn markers known to the
-   * library, the uninterpreted contents of any or all APPn and COM markers
-   * can be saved in a list for examination by the application.
-   */
-  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
-
-  /* Remaining fields are known throughout decompressor, but generally
-   * should not be touched by a surrounding application.
-   */
-
-  /*
-   * These fields are computed during decompression startup
-   */
-  int max_h_samp_factor;	/* largest h_samp_factor */
-  int max_v_samp_factor;	/* largest v_samp_factor */
-
-  int min_DCT_scaled_size;	/* smallest DCT_scaled_size of any component */
-
-  JDIMENSION total_iMCU_rows;	/* # of iMCU rows in image */
-  /* The coefficient controller's input and output progress is measured in
-   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
-   * in fully interleaved JPEG scans, but are used whether the scan is
-   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
-   * rows of each component.  Therefore, the IDCT output contains
-   * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
-   */
-
-  JSAMPLE * sample_range_limit; /* table for fast range-limiting */
-
-  /*
-   * These fields are valid during any one scan.
-   * They describe the components and MCUs actually appearing in the scan.
-   * Note that the decompressor output side must not use these fields.
-   */
-  int comps_in_scan;		/* # of JPEG components in this scan */
-  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
-  /* *cur_comp_info[i] describes component that appears i'th in SOS */
-
-  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
-  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
-
-  int blocks_in_MCU;		/* # of DCT blocks per MCU */
-  int MCU_membership[D_MAX_BLOCKS_IN_MCU];
-  /* MCU_membership[i] is index in cur_comp_info of component owning */
-  /* i'th block in an MCU */
-
-  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
-
-  /* This field is shared between entropy decoder and marker parser.
-   * It is either zero or the code of a JPEG marker that has been
-   * read from the data source, but has not yet been processed.
-   */
-  int unread_marker;
-
-  /*
-   * Links to decompression subobjects (methods, private variables of modules)
-   */
-  struct jpeg_decomp_master * master;
-  struct jpeg_d_main_controller * main;
-  struct jpeg_d_coef_controller * coef;
-  struct jpeg_d_post_controller * post;
-  struct jpeg_input_controller * inputctl;
-  struct jpeg_marker_reader * marker;
-  struct jpeg_entropy_decoder * entropy;
-  struct jpeg_inverse_dct * idct;
-  struct jpeg_upsampler * upsample;
-  struct jpeg_color_deconverter * cconvert;
-  struct jpeg_color_quantizer * cquantize;
-};
-
-
-/* "Object" declarations for JPEG modules that may be supplied or called
- * directly by the surrounding application.
- * As with all objects in the JPEG library, these structs only define the
- * publicly visible methods and state variables of a module.  Additional
- * private fields may exist after the public ones.
- */
-
-
-/* Error handler object */
-
-struct jpeg_error_mgr {
-  /* Error exit handler: does not return to caller */
-  JMETHOD(void, error_exit, (j_common_ptr cinfo));
-  /* Conditionally emit a trace or warning message */
-  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
-  /* Routine that actually outputs a trace or error message */
-  JMETHOD(void, output_message, (j_common_ptr cinfo));
-  /* Format a message string for the most recent JPEG error or message */
-  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
-#define JMSG_LENGTH_MAX  200	/* recommended size of format_message buffer */
-  /* Reset error state variables at start of a new image */
-  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
-
-  /* The message ID code and any parameters are saved here.
-   * A message can have one string parameter or up to 8 int parameters.
-   */
-  int msg_code;
-#define JMSG_STR_PARM_MAX  80
-  union {
-    int i[8];
-    char s[JMSG_STR_PARM_MAX];
-  } msg_parm;
-
-  /* Standard state variables for error facility */
-
-  int trace_level;		/* max msg_level that will be displayed */
-
-  /* For recoverable corrupt-data errors, we emit a warning message,
-   * but keep going unless emit_message chooses to abort.  emit_message
-   * should count warnings in num_warnings.  The surrounding application
-   * can check for bad data by seeing if num_warnings is nonzero at the
-   * end of processing.
-   */
-  long num_warnings;		/* number of corrupt-data warnings */
-
-  /* These fields point to the table(s) of error message strings.
-   * An application can change the table pointer to switch to a different
-   * message list (typically, to change the language in which errors are
-   * reported).  Some applications may wish to add additional error codes
-   * that will be handled by the JPEG library error mechanism; the second
-   * table pointer is used for this purpose.
-   *
-   * First table includes all errors generated by JPEG library itself.
-   * Error code 0 is reserved for a "no such error string" message.
-   */
-  const char * const * jpeg_message_table; /* Library errors */
-  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
-  /* Second table can be added by application (see cjpeg/djpeg for example).
-   * It contains strings numbered first_addon_message..last_addon_message.
-   */
-  const char * const * addon_message_table; /* Non-library errors */
-  int first_addon_message;	/* code for first string in addon table */
-  int last_addon_message;	/* code for last string in addon table */
-};
-
-
-/* Progress monitor object */
-
-struct jpeg_progress_mgr {
-  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
-
-  long pass_counter;		/* work units completed in this pass */
-  long pass_limit;		/* total number of work units in this pass */
-  int completed_passes;		/* passes completed so far */
-  int total_passes;		/* total number of passes expected */
-};
-
-
-/* Data destination object for compression */
-
-struct jpeg_destination_mgr {
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-
-  JMETHOD(void, init_destination, (j_compress_ptr cinfo));
-  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
-  JMETHOD(void, term_destination, (j_compress_ptr cinfo));
-};
-
-
-/* Data source object for decompression */
-
-struct jpeg_source_mgr {
-  const JOCTET * next_input_byte; /* => next byte to read from buffer */
-  size_t bytes_in_buffer;	/* # of bytes remaining in buffer */
-
-  JMETHOD(void, init_source, (j_decompress_ptr cinfo));
-  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
-  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
-  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
-  JMETHOD(void, term_source, (j_decompress_ptr cinfo));
-};
-
-
-/* Memory manager object.
- * Allocates "small" objects (a few K total), "large" objects (tens of K),
- * and "really big" objects (virtual arrays with backing store if needed).
- * The memory manager does not allow individual objects to be freed; rather,
- * each created object is assigned to a pool, and whole pools can be freed
- * at once.  This is faster and more convenient than remembering exactly what
- * to free, especially where malloc()/free() are not too speedy.
- * NB: alloc routines never return NULL.  They exit to error_exit if not
- * successful.
- */
-
-#define JPOOL_PERMANENT	0	/* lasts until master record is destroyed */
-#define JPOOL_IMAGE	1	/* lasts until done with image/datastream */
-#define JPOOL_NUMPOOLS	2
-
-typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
-typedef struct jvirt_barray_control * jvirt_barray_ptr;
-
-
-struct jpeg_memory_mgr {
-  /* Method pointers */
-  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
-				size_t sizeofobject));
-  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
-				     size_t sizeofobject));
-  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
-				     JDIMENSION samplesperrow,
-				     JDIMENSION numrows));
-  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
-				      JDIMENSION blocksperrow,
-				      JDIMENSION numrows));
-  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
-						  int pool_id,
-						  boolean pre_zero,
-						  JDIMENSION samplesperrow,
-						  JDIMENSION numrows,
-						  JDIMENSION maxaccess));
-  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
-						  int pool_id,
-						  boolean pre_zero,
-						  JDIMENSION blocksperrow,
-						  JDIMENSION numrows,
-						  JDIMENSION maxaccess));
-  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
-  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
-					   jvirt_sarray_ptr ptr,
-					   JDIMENSION start_row,
-					   JDIMENSION num_rows,
-					   boolean writable));
-  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
-					    jvirt_barray_ptr ptr,
-					    JDIMENSION start_row,
-					    JDIMENSION num_rows,
-					    boolean writable));
-  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
-  JMETHOD(void, self_destruct, (j_common_ptr cinfo));
-
-  /* Limit on memory allocation for this JPEG object.  (Note that this is
-   * merely advisory, not a guaranteed maximum; it only affects the space
-   * used for virtual-array buffers.)  May be changed by outer application
-   * after creating the JPEG object.
-   */
-  long max_memory_to_use;
-
-  /* Maximum allocation request accepted by alloc_large. */
-  long max_alloc_chunk;
-};
-
-
-/* Routine signature for application-supplied marker processing methods.
- * Need not pass marker code since it is stored in cinfo->unread_marker.
- */
-typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
-
-
-/* Declarations for routines called by application.
- * The JPP macro hides prototype parameters from compilers that can't cope.
- * Note JPP requires double parentheses.
- */
-
-#ifdef HAVE_PROTOTYPES
-#define JPP(arglist)	arglist
-#else
-#define JPP(arglist)	()
-#endif
-
-
-/* Short forms of external names for systems with brain-damaged linkers.
- * We shorten external names to be unique in the first six letters, which
- * is good enough for all known systems.
- * (If your compiler itself needs names to be unique in less than 15
- * characters, you are out of luck.  Get a better compiler.)
- */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_std_error		jStdError
-#define jpeg_CreateCompress	jCreaCompress
-#define jpeg_CreateDecompress	jCreaDecompress
-#define jpeg_destroy_compress	jDestCompress
-#define jpeg_destroy_decompress	jDestDecompress
-#define jpeg_stdio_dest		jStdDest
-#define jpeg_stdio_src		jStdSrc
-#define jpeg_set_defaults	jSetDefaults
-#define jpeg_set_colorspace	jSetColorspace
-#define jpeg_default_colorspace	jDefColorspace
-#define jpeg_set_quality	jSetQuality
-#define jpeg_set_linear_quality	jSetLQuality
-#define jpeg_add_quant_table	jAddQuantTable
-#define jpeg_quality_scaling	jQualityScaling
-#define jpeg_simple_progression	jSimProgress
-#define jpeg_suppress_tables	jSuppressTables
-#define jpeg_alloc_quant_table	jAlcQTable
-#define jpeg_alloc_huff_table	jAlcHTable
-#define jpeg_start_compress	jStrtCompress
-#define jpeg_write_scanlines	jWrtScanlines
-#define jpeg_finish_compress	jFinCompress
-#define jpeg_write_raw_data	jWrtRawData
-#define jpeg_write_marker	jWrtMarker
-#define jpeg_write_m_header	jWrtMHeader
-#define jpeg_write_m_byte	jWrtMByte
-#define jpeg_write_tables	jWrtTables
-#define jpeg_read_header	jReadHeader
-#define jpeg_start_decompress	jStrtDecompress
-#define jpeg_read_scanlines	jReadScanlines
-#define jpeg_finish_decompress	jFinDecompress
-#define jpeg_read_raw_data	jReadRawData
-#define jpeg_has_multiple_scans	jHasMultScn
-#define jpeg_start_output	jStrtOutput
-#define jpeg_finish_output	jFinOutput
-#define jpeg_input_complete	jInComplete
-#define jpeg_new_colormap	jNewCMap
-#define jpeg_consume_input	jConsumeInput
-#define jpeg_calc_output_dimensions	jCalcDimensions
-#define jpeg_save_markers	jSaveMarkers
-#define jpeg_set_marker_processor	jSetMarker
-#define jpeg_read_coefficients	jReadCoefs
-#define jpeg_write_coefficients	jWrtCoefs
-#define jpeg_copy_critical_parameters	jCopyCrit
-#define jpeg_abort_compress	jAbrtCompress
-#define jpeg_abort_decompress	jAbrtDecompress
-#define jpeg_abort		jAbort
-#define jpeg_destroy		jDestroy
-#define jpeg_resync_to_restart	jResyncRestart
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Default error-management setup */
-EXTERN(struct jpeg_error_mgr *) jpeg_std_error
-	JPP((struct jpeg_error_mgr * err));
-
-/* Initialization of JPEG compression objects.
- * jpeg_create_compress() and jpeg_create_decompress() are the exported
- * names that applications should call.  These expand to calls on
- * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
- * passed for version mismatch checking.
- * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
- */
-#define jpeg_create_compress(cinfo) \
-    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
-			(size_t) sizeof(struct jpeg_compress_struct))
-#define jpeg_create_decompress(cinfo) \
-    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
-			  (size_t) sizeof(struct jpeg_decompress_struct))
-EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
-				      int version, size_t structsize));
-EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
-					int version, size_t structsize));
-/* Destruction of JPEG compression objects */
-EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
-
-/* Standard data source and destination managers: stdio streams. */
-/* Caller is responsible for opening the file before and closing after. */
-EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
-EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
-
-/* Default parameter setup for compression */
-EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
-/* Compression parameter setup aids */
-EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
-				      J_COLOR_SPACE colorspace));
-EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
-				   boolean force_baseline));
-EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
-					  int scale_factor,
-					  boolean force_baseline));
-EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
-				       const unsigned int *basic_table,
-				       int scale_factor,
-				       boolean force_baseline));
-EXTERN(int) jpeg_quality_scaling JPP((int quality));
-EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
-				       boolean suppress));
-EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
-EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
-
-/* Main entry points for compression */
-EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
-				      boolean write_all_tables));
-EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
-					     JSAMPARRAY scanlines,
-					     JDIMENSION num_lines));
-EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
-
-/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
-EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
-					    JSAMPIMAGE data,
-					    JDIMENSION num_lines));
-
-/* Write a special marker.  See libjpeg.doc concerning safe usage. */
-EXTERN(void) jpeg_write_marker
-	JPP((j_compress_ptr cinfo, int marker,
-	     const JOCTET * dataptr, unsigned int datalen));
-/* Same, but piecemeal. */
-EXTERN(void) jpeg_write_m_header
-	JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
-EXTERN(void) jpeg_write_m_byte
-	JPP((j_compress_ptr cinfo, int val));
-
-/* Alternate compression function: just write an abbreviated table file */
-EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
-
-/* Decompression startup: read start of JPEG datastream to see what's there */
-EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
-				  boolean require_image));
-/* Return value is one of: */
-#define JPEG_SUSPENDED		0 /* Suspended due to lack of input data */
-#define JPEG_HEADER_OK		1 /* Found valid image datastream */
-#define JPEG_HEADER_TABLES_ONLY	2 /* Found valid table-specs-only datastream */
-/* If you pass require_image = TRUE (normal case), you need not check for
- * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
- * JPEG_SUSPENDED is only possible if you use a data source module that can
- * give a suspension return (the stdio source module doesn't).
- */
-
-/* Main entry points for decompression */
-EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
-EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
-					    JSAMPARRAY scanlines,
-					    JDIMENSION max_lines));
-EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
-
-/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
-EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
-					   JSAMPIMAGE data,
-					   JDIMENSION max_lines));
-
-/* Additional entry points for buffered-image mode. */
-EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
-EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
-				       int scan_number));
-EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
-EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
-EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
-/* Return value is one of: */
-/* #define JPEG_SUSPENDED	0    Suspended due to lack of input data */
-#define JPEG_REACHED_SOS	1 /* Reached start of new scan */
-#define JPEG_REACHED_EOI	2 /* Reached end of image */
-#define JPEG_ROW_COMPLETED	3 /* Completed one iMCU row */
-#define JPEG_SCAN_COMPLETED	4 /* Completed last iMCU row of a scan */
-
-/* Precalculate output dimensions for current decompression parameters. */
-EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
-
-/* Control saving of COM and APPn markers into marker_list. */
-EXTERN(void) jpeg_save_markers
-	JPP((j_decompress_ptr cinfo, int marker_code,
-	     unsigned int length_limit));
-
-/* Install a special processing method for COM or APPn markers. */
-EXTERN(void) jpeg_set_marker_processor
-	JPP((j_decompress_ptr cinfo, int marker_code,
-	     jpeg_marker_parser_method routine));
-
-/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
-EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
-					  jvirt_barray_ptr * coef_arrays));
-EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
-						j_compress_ptr dstinfo));
-
-/* If you choose to abort compression or decompression before completing
- * jpeg_finish_(de)compress, then you need to clean up to release memory,
- * temporary files, etc.  You can just call jpeg_destroy_(de)compress
- * if you're done with the JPEG object, but if you want to clean it up and
- * reuse it, call this:
- */
-EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
-
-/* Generic versions of jpeg_abort and jpeg_destroy that work on either
- * flavor of JPEG object.  These may be more convenient in some places.
- */
-EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
-EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
-
-/* Default restart-marker-resync procedure for use by data source modules */
-EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
-					    int desired));
-
-
-/* These marker codes are exported since applications and data source modules
- * are likely to want to use them.
- */
-
-#define JPEG_RST0	0xD0	/* RST0 marker code */
-#define JPEG_EOI	0xD9	/* EOI marker code */
-#define JPEG_APP0	0xE0	/* APP0 marker code */
-#define JPEG_COM	0xFE	/* COM marker code */
-
-
-/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
- * for structure definitions that are never filled in, keep it quiet by
- * supplying dummy definitions for the various substructures.
- */
-
-#ifdef INCOMPLETE_TYPES_BROKEN
-#ifndef JPEG_INTERNALS		/* will be defined in jpegint.h */
-struct jvirt_sarray_control { long dummy; };
-struct jvirt_barray_control { long dummy; };
-struct jpeg_comp_master { long dummy; };
-struct jpeg_c_main_controller { long dummy; };
-struct jpeg_c_prep_controller { long dummy; };
-struct jpeg_c_coef_controller { long dummy; };
-struct jpeg_marker_writer { long dummy; };
-struct jpeg_color_converter { long dummy; };
-struct jpeg_downsampler { long dummy; };
-struct jpeg_forward_dct { long dummy; };
-struct jpeg_entropy_encoder { long dummy; };
-struct jpeg_decomp_master { long dummy; };
-struct jpeg_d_main_controller { long dummy; };
-struct jpeg_d_coef_controller { long dummy; };
-struct jpeg_d_post_controller { long dummy; };
-struct jpeg_input_controller { long dummy; };
-struct jpeg_marker_reader { long dummy; };
-struct jpeg_entropy_decoder { long dummy; };
-struct jpeg_inverse_dct { long dummy; };
-struct jpeg_upsampler { long dummy; };
-struct jpeg_color_deconverter { long dummy; };
-struct jpeg_color_quantizer { long dummy; };
-#endif /* JPEG_INTERNALS */
-#endif /* INCOMPLETE_TYPES_BROKEN */
-
-
-/*
- * The JPEG library modules define JPEG_INTERNALS before including this file.
- * The internal structure declarations are read only when that is true.
- * Applications using the library should not include jpegint.h, but may wish
- * to include jerror.h.
- */
-
-#ifdef JPEG_INTERNALS
-#include "jpegint.h"		/* fetch private declarations */
-#include "jerror.h"		/* fetch error codes too */
-#endif
-
-#endif /* JPEGLIB_H */
diff --git a/modules/juce_graphics/image_formats/jpglib/jquant1.c b/modules/juce_graphics/image_formats/jpglib/jquant1.c
deleted file mode 100644
index 7153f46..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jquant1.c
+++ /dev/null
@@ -1,856 +0,0 @@
-/*
- * jquant1.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains 1-pass color quantization (color mapping) routines.
- * These routines provide mapping to a fixed color map using equally spaced
- * color values.  Optional Floyd-Steinberg or ordered dithering is available.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#ifdef QUANT_1PASS_SUPPORTED
-
-
-/*
- * The main purpose of 1-pass quantization is to provide a fast, if not very
- * high quality, colormapped output capability.  A 2-pass quantizer usually
- * gives better visual quality; however, for quantized grayscale output this
- * quantizer is perfectly adequate.  Dithering is highly recommended with this
- * quantizer, though you can turn it off if you really want to.
- *
- * In 1-pass quantization the colormap must be chosen in advance of seeing the
- * image.  We use a map consisting of all combinations of Ncolors[i] color
- * values for the i'th component.  The Ncolors[] values are chosen so that
- * their product, the total number of colors, is no more than that requested.
- * (In most cases, the product will be somewhat less.)
- *
- * Since the colormap is orthogonal, the representative value for each color
- * component can be determined without considering the other components;
- * then these indexes can be combined into a colormap index by a standard
- * N-dimensional-array-subscript calculation.  Most of the arithmetic involved
- * can be precalculated and stored in the lookup table colorindex[].
- * colorindex[i][j] maps pixel value j in component i to the nearest
- * representative value (grid plane) for that component; this index is
- * multiplied by the array stride for component i, so that the
- * index of the colormap entry closest to a given pixel value is just
- *    sum( colorindex[component-number][pixel-component-value] )
- * Aside from being fast, this scheme allows for variable spacing between
- * representative values with no additional lookup cost.
- *
- * If gamma correction has been applied in color conversion, it might be wise
- * to adjust the color grid spacing so that the representative colors are
- * equidistant in linear space.  At this writing, gamma correction is not
- * implemented by jdcolor, so nothing is done here.
- */
-
-
-/* Declarations for ordered dithering.
- *
- * We use a standard 16x16 ordered dither array.  The basic concept of ordered
- * dithering is described in many references, for instance Dale Schumacher's
- * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991).
- * In place of Schumacher's comparisons against a "threshold" value, we add a
- * "dither" value to the input pixel and then round the result to the nearest
- * output value.  The dither value is equivalent to (0.5 - threshold) times
- * the distance between output values.  For ordered dithering, we assume that
- * the output colors are equally spaced; if not, results will probably be
- * worse, since the dither may be too much or too little at a given point.
- *
- * The normal calculation would be to form pixel value + dither, range-limit
- * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual.
- * We can skip the separate range-limiting step by extending the colorindex
- * table in both directions.
- */
-
-#define ODITHER_SIZE  16	/* dimension of dither matrix */
-/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */
-#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE)	/* # cells in matrix */
-#define ODITHER_MASK  (ODITHER_SIZE-1) /* mask for wrapping around counters */
-
-typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE];
-typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE];
-
-static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = {
-  /* Bayer's order-4 dither array.  Generated by the code given in
-   * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I.
-   * The values in this array must range from 0 to ODITHER_CELLS-1.
-   */
-  {   0,192, 48,240, 12,204, 60,252,  3,195, 51,243, 15,207, 63,255 },
-  { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 },
-  {  32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 },
-  { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 },
-  {   8,200, 56,248,  4,196, 52,244, 11,203, 59,251,  7,199, 55,247 },
-  { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 },
-  {  40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 },
-  { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 },
-  {   2,194, 50,242, 14,206, 62,254,  1,193, 49,241, 13,205, 61,253 },
-  { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 },
-  {  34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 },
-  { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 },
-  {  10,202, 58,250,  6,198, 54,246,  9,201, 57,249,  5,197, 53,245 },
-  { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 },
-  {  42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 },
-  { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 }
-};
-
-
-/* Declarations for Floyd-Steinberg dithering.
- *
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count.  The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- *		...	(here)	7/16
- *		3/16	5/16	1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed.  We
- * need only a few extra variables to hold the errors immediately around the
- * current column.  (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array is indexed [component#][position].
- * We provide (#columns + 2) entries per component; the extra entry at each
- * end saves us from special-casing the first and last pixels.
- *
- * Note: on a wide image, we might not have enough room in a PC's near data
- * segment to hold the error array; so it is allocated with alloc_large.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR;		/* 16 bits should be enough */
-typedef int LOCFSERROR;		/* use 'int' for calculation temps */
-#else
-typedef INT32 FSERROR;		/* may need more than 16 bits */
-typedef INT32 LOCFSERROR;	/* be sure calculation temps are big enough */
-#endif
-
-typedef FSERROR FAR *FSERRPTR;	/* pointer to error array (in FAR storage!) */
-
-
-/* Private subobject */
-
-#define MAX_Q_COMPS 4		/* max components I can handle */
-
-typedef struct {
-  struct jpeg_color_quantizer pub; /* public fields */
-
-  /* Initially allocated colormap is saved here */
-  JSAMPARRAY sv_colormap;	/* The color map as a 2-D pixel array */
-  int sv_actual;		/* number of entries in use */
-
-  JSAMPARRAY colorindex;	/* Precomputed mapping for speed */
-  /* colorindex[i][j] = index of color closest to pixel value j in component i,
-   * premultiplied as described above.  Since colormap indexes must fit into
-   * JSAMPLEs, the entries of this array will too.
-   */
-  boolean is_padded;		/* is the colorindex padded for odither? */
-
-  int Ncolors[MAX_Q_COMPS];	/* # of values alloced to each component */
-
-  /* Variables for ordered dithering */
-  int row_index;		/* cur row's vertical index in dither matrix */
-  ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */
-
-  /* Variables for Floyd-Steinberg dithering */
-  FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */
-  boolean on_odd_row;		/* flag to remember which row we are on */
-} my_cquantizer;
-
-typedef my_cquantizer * my_cquantize_ptr;
-
-
-/*
- * Policy-making subroutines for create_colormap and create_colorindex.
- * These routines determine the colormap to be used.  The rest of the module
- * only assumes that the colormap is orthogonal.
- *
- *  * select_ncolors decides how to divvy up the available colors
- *    among the components.
- *  * output_value defines the set of representative values for a component.
- *  * largest_input_value defines the mapping from input values to
- *    representative values for a component.
- * Note that the latter two routines may impose different policies for
- * different components, though this is not currently done.
- */
-
-
-LOCAL(int)
-select_ncolors (j_decompress_ptr cinfo, int Ncolors[])
-/* Determine allocation of desired colors to components, */
-/* and fill in Ncolors[] array to indicate choice. */
-/* Return value is total number of colors (product of Ncolors[] values). */
-{
-  int nc = cinfo->out_color_components; /* number of color components */
-  int max_colors = cinfo->desired_number_of_colors;
-  int total_colors, iroot, i, j;
-  boolean changed;
-  long temp;
-  static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE };
-
-  /* We can allocate at least the nc'th root of max_colors per component. */
-  /* Compute floor(nc'th root of max_colors). */
-  iroot = 1;
-  do {
-    iroot++;
-    temp = iroot;		/* set temp = iroot ** nc */
-    for (i = 1; i < nc; i++)
-      temp *= iroot;
-  } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */
-  iroot--;			/* now iroot = floor(root) */
-
-  /* Must have at least 2 color values per component */
-  if (iroot < 2)
-    ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp);
-
-  /* Initialize to iroot color values for each component */
-  total_colors = 1;
-  for (i = 0; i < nc; i++) {
-    Ncolors[i] = iroot;
-    total_colors *= iroot;
-  }
-  /* We may be able to increment the count for one or more components without
-   * exceeding max_colors, though we know not all can be incremented.
-   * Sometimes, the first component can be incremented more than once!
-   * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.)
-   * In RGB colorspace, try to increment G first, then R, then B.
-   */
-  do {
-    changed = FALSE;
-    for (i = 0; i < nc; i++) {
-      j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i);
-      /* calculate new total_colors if Ncolors[j] is incremented */
-      temp = total_colors / Ncolors[j];
-      temp *= Ncolors[j]+1;	/* done in long arith to avoid oflo */
-      if (temp > (long) max_colors)
-	break;			/* won't fit, done with this pass */
-      Ncolors[j]++;		/* OK, apply the increment */
-      total_colors = (int) temp;
-      changed = TRUE;
-    }
-  } while (changed);
-
-  return total_colors;
-}
-
-
-LOCAL(int)
-output_value (j_decompress_ptr, int, int j, int maxj)
-/* Return j'th output value, where j will range from 0 to maxj */
-/* The output values must fall in 0..MAXJSAMPLE in increasing order */
-{
-  /* We always provide values 0 and MAXJSAMPLE for each component;
-   * any additional values are equally spaced between these limits.
-   * (Forcing the upper and lower values to the limits ensures that
-   * dithering can't produce a color outside the selected gamut.)
-   */
-  return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj);
-}
-
-
-LOCAL(int)
-largest_input_value (j_decompress_ptr, int, int j, int maxj)
-/* Return largest input value that should map to j'th output value */
-/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */
-{
-  /* Breakpoints are halfway between values returned by output_value */
-  return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj));
-}
-
-
-/*
- * Create the colormap.
- */
-
-LOCAL(void)
-create_colormap (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPARRAY colormap;		/* Created colormap */
-  int total_colors;		/* Number of distinct output colors */
-  int i,j,k, nci, blksize, blkdist, ptr, val;
-
-  /* Select number of colors for each component */
-  total_colors = select_ncolors(cinfo, cquantize->Ncolors);
-
-  /* Report selected color counts */
-  if (cinfo->out_color_components == 3)
-    TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS,
-	     total_colors, cquantize->Ncolors[0],
-	     cquantize->Ncolors[1], cquantize->Ncolors[2]);
-  else
-    TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors);
-
-  /* Allocate and fill in the colormap. */
-  /* The colors are ordered in the map in standard row-major order, */
-  /* i.e. rightmost (highest-indexed) color changes most rapidly. */
-
-  colormap = (*cinfo->mem->alloc_sarray)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE,
-     (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components);
-
-  /* blksize is number of adjacent repeated entries for a component */
-  /* blkdist is distance between groups of identical entries for a component */
-  blkdist = total_colors;
-
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    /* fill in colormap entries for i'th color component */
-    nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    blksize = blkdist / nci;
-    for (j = 0; j < nci; j++) {
-      /* Compute j'th output value (out of nci) for component */
-      val = output_value(cinfo, i, j, nci-1);
-      /* Fill in all colormap entries that have this value of this component */
-      for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) {
-	/* fill in blksize entries beginning at ptr */
-	for (k = 0; k < blksize; k++)
-	  colormap[i][ptr+k] = (JSAMPLE) val;
-      }
-    }
-    blkdist = blksize;		/* blksize of this color is blkdist of next */
-  }
-
-  /* Save the colormap in private storage,
-   * where it will survive color quantization mode changes.
-   */
-  cquantize->sv_colormap = colormap;
-  cquantize->sv_actual = total_colors;
-}
-
-
-/*
- * Create the color index table.
- */
-
-LOCAL(void)
-create_colorindex (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPROW indexptr;
-  int i,j,k, nci, blksize, val, pad;
-
-  /* For ordered dither, we pad the color index tables by MAXJSAMPLE in
-   * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE).
-   * This is not necessary in the other dithering modes.  However, we
-   * flag whether it was done in case user changes dithering mode.
-   */
-  if (cinfo->dither_mode == JDITHER_ORDERED) {
-    pad = MAXJSAMPLE*2;
-    cquantize->is_padded = TRUE;
-  } else {
-    pad = 0;
-    cquantize->is_padded = FALSE;
-  }
-
-  cquantize->colorindex = (*cinfo->mem->alloc_sarray)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE,
-     (JDIMENSION) (MAXJSAMPLE+1 + pad),
-     (JDIMENSION) cinfo->out_color_components);
-
-  /* blksize is number of adjacent repeated entries for a component */
-  blksize = cquantize->sv_actual;
-
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    /* fill in colorindex entries for i'th color component */
-    nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    blksize = blksize / nci;
-
-    /* adjust colorindex pointers to provide padding at negative indexes. */
-    if (pad)
-      cquantize->colorindex[i] += MAXJSAMPLE;
-
-    /* in loop, val = index of current output value, */
-    /* and k = largest j that maps to current val */
-    indexptr = cquantize->colorindex[i];
-    val = 0;
-    k = largest_input_value(cinfo, i, 0, nci-1);
-    for (j = 0; j <= MAXJSAMPLE; j++) {
-      while (j > k)		/* advance val if past boundary */
-	k = largest_input_value(cinfo, i, ++val, nci-1);
-      /* premultiply so that no multiplication needed in main processing */
-      indexptr[j] = (JSAMPLE) (val * blksize);
-    }
-    /* Pad at both ends if necessary */
-    if (pad)
-      for (j = 1; j <= MAXJSAMPLE; j++) {
-	indexptr[-j] = indexptr[0];
-	indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE];
-      }
-  }
-}
-
-
-/*
- * Create an ordered-dither array for a component having ncolors
- * distinct output values.
- */
-
-LOCAL(ODITHER_MATRIX_PTR)
-make_odither_array (j_decompress_ptr cinfo, int ncolors)
-{
-  ODITHER_MATRIX_PTR odither;
-  int j,k;
-  INT32 num,den;
-
-  odither = (ODITHER_MATRIX_PTR)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(ODITHER_MATRIX));
-  /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1).
-   * Hence the dither value for the matrix cell with fill order f
-   * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1).
-   * On 16-bit-int machine, be careful to avoid overflow.
-   */
-  den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1));
-  for (j = 0; j < ODITHER_SIZE; j++) {
-    for (k = 0; k < ODITHER_SIZE; k++) {
-      num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k])))
-	    * MAXJSAMPLE;
-      /* Ensure round towards zero despite C's lack of consistency
-       * about rounding negative values in integer division...
-       */
-      odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den);
-    }
-  }
-  return odither;
-}
-
-
-/*
- * Create the ordered-dither tables.
- * Components having the same number of representative colors may
- * share a dither table.
- */
-
-LOCAL(void)
-create_odither_tables (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  ODITHER_MATRIX_PTR odither;
-  int i, j, nci;
-
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    odither = NULL;		/* search for matching prior component */
-    for (j = 0; j < i; j++) {
-      if (nci == cquantize->Ncolors[j]) {
-	odither = cquantize->odither[j];
-	break;
-      }
-    }
-    if (odither == NULL)	/* need a new table? */
-      odither = make_odither_array(cinfo, nci);
-    cquantize->odither[i] = odither;
-  }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-METHODDEF(void)
-color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		JSAMPARRAY output_buf, int num_rows)
-/* General case, no dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPARRAY colorindex = cquantize->colorindex;
-  register int pixcode, ci;
-  register JSAMPROW ptrin, ptrout;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-  register int nc = cinfo->out_color_components;
-
-  for (row = 0; row < num_rows; row++) {
-    ptrin = input_buf[row];
-    ptrout = output_buf[row];
-    for (col = width; col > 0; col--) {
-      pixcode = 0;
-      for (ci = 0; ci < nc; ci++) {
-	pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]);
-      }
-      *ptrout++ = (JSAMPLE) pixcode;
-    }
-  }
-}
-
-
-METHODDEF(void)
-color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		 JSAMPARRAY output_buf, int num_rows)
-/* Fast path for out_color_components==3, no dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register int pixcode;
-  register JSAMPROW ptrin, ptrout;
-  JSAMPROW colorindex0 = cquantize->colorindex[0];
-  JSAMPROW colorindex1 = cquantize->colorindex[1];
-  JSAMPROW colorindex2 = cquantize->colorindex[2];
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    ptrin = input_buf[row];
-    ptrout = output_buf[row];
-    for (col = width; col > 0; col--) {
-      pixcode  = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]);
-      pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]);
-      pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]);
-      *ptrout++ = (JSAMPLE) pixcode;
-    }
-  }
-}
-
-
-METHODDEF(void)
-quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		     JSAMPARRAY output_buf, int num_rows)
-/* General case, with ordered dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register JSAMPROW input_ptr;
-  register JSAMPROW output_ptr;
-  JSAMPROW colorindex_ci;
-  int * dither;			/* points to active row of dither matrix */
-  int row_index, col_index;	/* current indexes into dither matrix */
-  int nc = cinfo->out_color_components;
-  int ci;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    /* Initialize output values to 0 so can process components separately */
-    jzero_far((void FAR *) output_buf[row],
-	      (size_t) (width * SIZEOF(JSAMPLE)));
-    row_index = cquantize->row_index;
-    for (ci = 0; ci < nc; ci++) {
-      input_ptr = input_buf[row] + ci;
-      output_ptr = output_buf[row];
-      colorindex_ci = cquantize->colorindex[ci];
-      dither = cquantize->odither[ci][row_index];
-      col_index = 0;
-
-      for (col = width; col > 0; col--) {
-	/* Form pixel value + dither, range-limit to 0..MAXJSAMPLE,
-	 * select output value, accumulate into output code for this pixel.
-	 * Range-limiting need not be done explicitly, as we have extended
-	 * the colorindex table to produce the right answers for out-of-range
-	 * inputs.  The maximum dither is +- MAXJSAMPLE; this sets the
-	 * required amount of padding.
-	 */
-	*output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]];
-	input_ptr += nc;
-	output_ptr++;
-	col_index = (col_index + 1) & ODITHER_MASK;
-      }
-    }
-    /* Advance row index for next row */
-    row_index = (row_index + 1) & ODITHER_MASK;
-    cquantize->row_index = row_index;
-  }
-}
-
-
-METHODDEF(void)
-quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		      JSAMPARRAY output_buf, int num_rows)
-/* Fast path for out_color_components==3, with ordered dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register int pixcode;
-  register JSAMPROW input_ptr;
-  register JSAMPROW output_ptr;
-  JSAMPROW colorindex0 = cquantize->colorindex[0];
-  JSAMPROW colorindex1 = cquantize->colorindex[1];
-  JSAMPROW colorindex2 = cquantize->colorindex[2];
-  int * dither0;		/* points to active row of dither matrix */
-  int * dither1;
-  int * dither2;
-  int row_index, col_index;	/* current indexes into dither matrix */
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    row_index = cquantize->row_index;
-    input_ptr = input_buf[row];
-    output_ptr = output_buf[row];
-    dither0 = cquantize->odither[0][row_index];
-    dither1 = cquantize->odither[1][row_index];
-    dither2 = cquantize->odither[2][row_index];
-    col_index = 0;
-
-    for (col = width; col > 0; col--) {
-      pixcode  = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) +
-					dither0[col_index]]);
-      pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) +
-					dither1[col_index]]);
-      pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) +
-					dither2[col_index]]);
-      *output_ptr++ = (JSAMPLE) pixcode;
-      col_index = (col_index + 1) & ODITHER_MASK;
-    }
-    row_index = (row_index + 1) & ODITHER_MASK;
-    cquantize->row_index = row_index;
-  }
-}
-
-
-METHODDEF(void)
-quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		    JSAMPARRAY output_buf, int num_rows)
-/* General case, with Floyd-Steinberg dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register LOCFSERROR cur;	/* current error or pixel value */
-  LOCFSERROR belowerr;		/* error for pixel below cur */
-  LOCFSERROR bpreverr;		/* error for below/prev col */
-  LOCFSERROR bnexterr;		/* error for below/next col */
-  LOCFSERROR delta;
-  register FSERRPTR errorptr;	/* => fserrors[] at column before current */
-  register JSAMPROW input_ptr;
-  register JSAMPROW output_ptr;
-  JSAMPROW colorindex_ci;
-  JSAMPROW colormap_ci;
-  int pixcode;
-  int nc = cinfo->out_color_components;
-  int dir;			/* 1 for left-to-right, -1 for right-to-left */
-  int dirnc;			/* dir * nc */
-  int ci;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-  JSAMPLE *range_limit = cinfo->sample_range_limit;
-  SHIFT_TEMPS
-
-  for (row = 0; row < num_rows; row++) {
-    /* Initialize output values to 0 so can process components separately */
-    jzero_far((void FAR *) output_buf[row],
-	      (size_t) (width * SIZEOF(JSAMPLE)));
-    for (ci = 0; ci < nc; ci++) {
-      input_ptr = input_buf[row] + ci;
-      output_ptr = output_buf[row];
-      if (cquantize->on_odd_row) {
-	/* work right to left in this row */
-	input_ptr += (width-1) * nc; /* so point to rightmost pixel */
-	output_ptr += width-1;
-	dir = -1;
-	dirnc = -nc;
-	errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */
-      } else {
-	/* work left to right in this row */
-	dir = 1;
-	dirnc = nc;
-	errorptr = cquantize->fserrors[ci]; /* => entry before first column */
-      }
-      colorindex_ci = cquantize->colorindex[ci];
-      colormap_ci = cquantize->sv_colormap[ci];
-      /* Preset error values: no error propagated to first pixel from left */
-      cur = 0;
-      /* and no error propagated to row below yet */
-      belowerr = bpreverr = 0;
-
-      for (col = width; col > 0; col--) {
-	/* cur holds the error propagated from the previous pixel on the
-	 * current line.  Add the error propagated from the previous line
-	 * to form the complete error correction term for this pixel, and
-	 * round the error term (which is expressed * 16) to an integer.
-	 * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
-	 * for either sign of the error value.
-	 * Note: errorptr points to *previous* column's array entry.
-	 */
-	cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4);
-	/* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
-	 * The maximum error is +- MAXJSAMPLE; this sets the required size
-	 * of the range_limit array.
-	 */
-	cur += GETJSAMPLE(*input_ptr);
-	cur = GETJSAMPLE(range_limit[cur]);
-	/* Select output value, accumulate into output code for this pixel */
-	pixcode = GETJSAMPLE(colorindex_ci[cur]);
-	*output_ptr += (JSAMPLE) pixcode;
-	/* Compute actual representation error at this pixel */
-	/* Note: we can do this even though we don't have the final */
-	/* pixel code, because the colormap is orthogonal. */
-	cur -= GETJSAMPLE(colormap_ci[pixcode]);
-	/* Compute error fractions to be propagated to adjacent pixels.
-	 * Add these into the running sums, and simultaneously shift the
-	 * next-line error sums left by 1 column.
-	 */
-	bnexterr = cur;
-	delta = cur * 2;
-	cur += delta;		/* form error * 3 */
-	errorptr[0] = (FSERROR) (bpreverr + cur);
-	cur += delta;		/* form error * 5 */
-	bpreverr = belowerr + cur;
-	belowerr = bnexterr;
-	cur += delta;		/* form error * 7 */
-	/* At this point cur contains the 7/16 error value to be propagated
-	 * to the next pixel on the current line, and all the errors for the
-	 * next line have been shifted over. We are therefore ready to move on.
-	 */
-	input_ptr += dirnc;	/* advance input ptr to next column */
-	output_ptr += dir;	/* advance output ptr to next column */
-	errorptr += dir;	/* advance errorptr to current column */
-      }
-      /* Post-loop cleanup: we must unload the final error value into the
-       * final fserrors[] entry.  Note we need not unload belowerr because
-       * it is for the dummy column before or after the actual array.
-       */
-      errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */
-    }
-    cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE);
-  }
-}
-
-
-/*
- * Allocate workspace for Floyd-Steinberg errors.
- */
-
-LOCAL(void)
-alloc_fs_workspace (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  size_t arraysize;
-  int i;
-
-  arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR));
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    cquantize->fserrors[i] = (FSERRPTR)
-      (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize);
-  }
-}
-
-
-/*
- * Initialize for one-pass color quantization.
- */
-
-METHODDEF(void)
-start_pass_1_quant (j_decompress_ptr cinfo, boolean)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  size_t arraysize;
-  int i;
-
-  /* Install my colormap. */
-  cinfo->colormap = cquantize->sv_colormap;
-  cinfo->actual_number_of_colors = cquantize->sv_actual;
-
-  /* Initialize for desired dithering mode. */
-  switch (cinfo->dither_mode) {
-  case JDITHER_NONE:
-    if (cinfo->out_color_components == 3)
-      cquantize->pub.color_quantize = color_quantize3;
-    else
-      cquantize->pub.color_quantize = color_quantize;
-    break;
-  case JDITHER_ORDERED:
-    if (cinfo->out_color_components == 3)
-      cquantize->pub.color_quantize = quantize3_ord_dither;
-    else
-      cquantize->pub.color_quantize = quantize_ord_dither;
-    cquantize->row_index = 0;	/* initialize state for ordered dither */
-    /* If user changed to ordered dither from another mode,
-     * we must recreate the color index table with padding.
-     * This will cost extra space, but probably isn't very likely.
-     */
-    if (! cquantize->is_padded)
-      create_colorindex(cinfo);
-    /* Create ordered-dither tables if we didn't already. */
-    if (cquantize->odither[0] == NULL)
-      create_odither_tables(cinfo);
-    break;
-  case JDITHER_FS:
-    cquantize->pub.color_quantize = quantize_fs_dither;
-    cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */
-    /* Allocate Floyd-Steinberg workspace if didn't already. */
-    if (cquantize->fserrors[0] == NULL)
-      alloc_fs_workspace(cinfo);
-    /* Initialize the propagated errors to zero. */
-    arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR));
-    for (i = 0; i < cinfo->out_color_components; i++)
-      jzero_far((void FAR *) cquantize->fserrors[i], arraysize);
-    break;
-  default:
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-    break;
-  }
-}
-
-
-/*
- * Finish up at the end of the pass.
- */
-
-METHODDEF(void)
-finish_pass_1_quant (j_decompress_ptr)
-{
-  /* no work in 1-pass case */
-}
-
-
-/*
- * Switch to a new external colormap between output passes.
- * Shouldn't get to this module!
- */
-
-METHODDEF(void)
-new_color_map_1_quant (j_decompress_ptr cinfo)
-{
-  ERREXIT(cinfo, JERR_MODE_CHANGE);
-}
-
-
-/*
- * Module initialization routine for 1-pass color quantization.
- */
-
-GLOBAL(void)
-jinit_1pass_quantizer (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize;
-
-  cquantize = (my_cquantize_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_cquantizer));
-  cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize;
-  cquantize->pub.start_pass = start_pass_1_quant;
-  cquantize->pub.finish_pass = finish_pass_1_quant;
-  cquantize->pub.new_color_map = new_color_map_1_quant;
-  cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */
-  cquantize->odither[0] = NULL;	/* Also flag odither arrays not allocated */
-
-  /* Make sure my internal arrays won't overflow */
-  if (cinfo->out_color_components > MAX_Q_COMPS)
-    ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS);
-  /* Make sure colormap indexes can be represented by JSAMPLEs */
-  if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1))
-    ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1);
-
-  /* Create the colormap and color index table. */
-  create_colormap(cinfo);
-  create_colorindex(cinfo);
-
-  /* Allocate Floyd-Steinberg workspace now if requested.
-   * We do this now since it is FAR storage and may affect the memory
-   * manager's space calculations.  If the user changes to FS dither
-   * mode in a later pass, we will allocate the space then, and will
-   * possibly overrun the max_memory_to_use setting.
-   */
-  if (cinfo->dither_mode == JDITHER_FS)
-    alloc_fs_workspace(cinfo);
-}
-
-#endif /* QUANT_1PASS_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jquant2.c b/modules/juce_graphics/image_formats/jpglib/jquant2.c
deleted file mode 100644
index 6c2524e..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jquant2.c
+++ /dev/null
@@ -1,1310 +0,0 @@
-/*
- * jquant2.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains 2-pass color quantization (color mapping) routines.
- * These routines provide selection of a custom color map for an image,
- * followed by mapping of the image to that color map, with optional
- * Floyd-Steinberg dithering.
- * It is also possible to use just the second pass to map to an arbitrary
- * externally-given color map.
- *
- * Note: ordered dithering is not supported, since there isn't any fast
- * way to compute intercolor distances; it's unclear that ordered dither's
- * fundamental assumptions even hold with an irregularly spaced color map.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-
-/*
- * This module implements the well-known Heckbert paradigm for color
- * quantization.  Most of the ideas used here can be traced back to
- * Heckbert's seminal paper
- *   Heckbert, Paul.  "Color Image Quantization for Frame Buffer Display",
- *   Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304.
- *
- * In the first pass over the image, we accumulate a histogram showing the
- * usage count of each possible color.  To keep the histogram to a reasonable
- * size, we reduce the precision of the input; typical practice is to retain
- * 5 or 6 bits per color, so that 8 or 4 different input values are counted
- * in the same histogram cell.
- *
- * Next, the color-selection step begins with a box representing the whole
- * color space, and repeatedly splits the "largest" remaining box until we
- * have as many boxes as desired colors.  Then the mean color in each
- * remaining box becomes one of the possible output colors.
- *
- * The second pass over the image maps each input pixel to the closest output
- * color (optionally after applying a Floyd-Steinberg dithering correction).
- * This mapping is logically trivial, but making it go fast enough requires
- * considerable care.
- *
- * Heckbert-style quantizers vary a good deal in their policies for choosing
- * the "largest" box and deciding where to cut it.  The particular policies
- * used here have proved out well in experimental comparisons, but better ones
- * may yet be found.
- *
- * In earlier versions of the IJG code, this module quantized in YCbCr color
- * space, processing the raw upsampled data without a color conversion step.
- * This allowed the color conversion math to be done only once per colormap
- * entry, not once per pixel.  However, that optimization precluded other
- * useful optimizations (such as merging color conversion with upsampling)
- * and it also interfered with desired capabilities such as quantizing to an
- * externally-supplied colormap.  We have therefore abandoned that approach.
- * The present code works in the post-conversion color space, typically RGB.
- *
- * To improve the visual quality of the results, we actually work in scaled
- * RGB space, giving G distances more weight than R, and R in turn more than
- * B.  To do everything in integer math, we must use integer scale factors.
- * The 2/3/1 scale factors used here correspond loosely to the relative
- * weights of the colors in the NTSC grayscale equation.
- * If you want to use this code to quantize a non-RGB color space, you'll
- * probably need to change these scale factors.
- */
-
-#define R_SCALE 2		/* scale R distances by this much */
-#define G_SCALE 3		/* scale G distances by this much */
-#define B_SCALE 1		/* and B by this much */
-
-/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined
- * in jmorecfg.h.  As the code stands, it will do the right thing for R,G,B
- * and B,G,R orders.  If you define some other weird order in jmorecfg.h,
- * you'll get compile errors until you extend this logic.  In that case
- * you'll probably want to tweak the histogram sizes too.
- */
-
-#if RGB_RED == 0
-#define C0_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 0
-#define C0_SCALE B_SCALE
-#endif
-#if RGB_GREEN == 1
-#define C1_SCALE G_SCALE
-#endif
-#if RGB_RED == 2
-#define C2_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 2
-#define C2_SCALE B_SCALE
-#endif
-
-
-/*
- * First we have the histogram data structure and routines for creating it.
- *
- * The number of bits of precision can be adjusted by changing these symbols.
- * We recommend keeping 6 bits for G and 5 each for R and B.
- * If you have plenty of memory and cycles, 6 bits all around gives marginally
- * better results; if you are short of memory, 5 bits all around will save
- * some space but degrade the results.
- * To maintain a fully accurate histogram, we'd need to allocate a "long"
- * (preferably unsigned long) for each cell.  In practice this is overkill;
- * we can get by with 16 bits per cell.  Few of the cell counts will overflow,
- * and clamping those that do overflow to the maximum value will give close-
- * enough results.  This reduces the recommended histogram size from 256Kb
- * to 128Kb, which is a useful savings on PC-class machines.
- * (In the second pass the histogram space is re-used for pixel mapping data;
- * in that capacity, each cell must be able to store zero to the number of
- * desired colors.  16 bits/cell is plenty for that too.)
- * Since the JPEG code is intended to run in small memory model on 80x86
- * machines, we can't just allocate the histogram in one chunk.  Instead
- * of a true 3-D array, we use a row of pointers to 2-D arrays.  Each
- * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and
- * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries.  Note that
- * on 80x86 machines, the pointer row is in near memory but the actual
- * arrays are in far memory (same arrangement as we use for image arrays).
- */
-
-#define MAXNUMCOLORS  (MAXJSAMPLE+1) /* maximum size of colormap */
-
-/* These will do the right thing for either R,G,B or B,G,R color order,
- * but you may not like the results for other color orders.
- */
-#define HIST_C0_BITS  5		/* bits of precision in R/B histogram */
-#define HIST_C1_BITS  6		/* bits of precision in G histogram */
-#define HIST_C2_BITS  5		/* bits of precision in B/R histogram */
-
-/* Number of elements along histogram axes. */
-#define HIST_C0_ELEMS  (1<<HIST_C0_BITS)
-#define HIST_C1_ELEMS  (1<<HIST_C1_BITS)
-#define HIST_C2_ELEMS  (1<<HIST_C2_BITS)
-
-/* These are the amounts to shift an input value to get a histogram index. */
-#define C0_SHIFT  (BITS_IN_JSAMPLE-HIST_C0_BITS)
-#define C1_SHIFT  (BITS_IN_JSAMPLE-HIST_C1_BITS)
-#define C2_SHIFT  (BITS_IN_JSAMPLE-HIST_C2_BITS)
-
-
-typedef UINT16 histcell;	/* histogram cell; prefer an unsigned type */
-
-typedef histcell FAR * histptr;	/* for pointers to histogram cells */
-
-typedef histcell hist1d[HIST_C2_ELEMS]; /* typedefs for the array */
-typedef hist1d FAR * hist2d;	/* type for the 2nd-level pointers */
-typedef hist2d * hist3d;	/* type for top-level pointer */
-
-
-/* Declarations for Floyd-Steinberg dithering.
- *
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count.  The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- *		...	(here)	7/16
- *		3/16	5/16	1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed.  We
- * need only a few extra variables to hold the errors immediately around the
- * current column.  (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array has (#columns + 2) entries; the extra entry at
- * each end saves us from special-casing the first and last pixels.
- * Each entry is three values long, one value for each color component.
- *
- * Note: on a wide image, we might not have enough room in a PC's near data
- * segment to hold the error array; so it is allocated with alloc_large.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR;		/* 16 bits should be enough */
-typedef int LOCFSERROR;		/* use 'int' for calculation temps */
-#else
-typedef INT32 FSERROR;		/* may need more than 16 bits */
-typedef INT32 LOCFSERROR;	/* be sure calculation temps are big enough */
-#endif
-
-typedef FSERROR FAR *FSERRPTR;	/* pointer to error array (in FAR storage!) */
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_color_quantizer pub; /* public fields */
-
-  /* Space for the eventually created colormap is stashed here */
-  JSAMPARRAY sv_colormap;	/* colormap allocated at init time */
-  int desired;			/* desired # of colors = size of colormap */
-
-  /* Variables for accumulating image statistics */
-  hist3d histogram;		/* pointer to the histogram */
-
-  boolean needs_zeroed;		/* TRUE if next pass must zero histogram */
-
-  /* Variables for Floyd-Steinberg dithering */
-  FSERRPTR fserrors;		/* accumulated errors */
-  boolean on_odd_row;		/* flag to remember which row we are on */
-  int * error_limiter;		/* table for clamping the applied error */
-} my_cquantizer2;
-
-typedef my_cquantizer2 * my_cquantize_ptr2;
-
-
-/*
- * Prescan some rows of pixels.
- * In this module the prescan simply updates the histogram, which has been
- * initialized to zeroes by start_pass.
- * An output_buf parameter is required by the method signature, but no data
- * is actually output (in fact the buffer controller is probably passing a
- * NULL pointer).
- */
-
-METHODDEF(void)
-prescan_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		  JSAMPARRAY, int num_rows)
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  register JSAMPROW ptr;
-  register histptr histp;
-  register hist3d histogram = cquantize->histogram;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    ptr = input_buf[row];
-    for (col = width; col > 0; col--) {
-      /* get pixel value and index into the histogram */
-      histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT]
-			 [GETJSAMPLE(ptr[1]) >> C1_SHIFT]
-			 [GETJSAMPLE(ptr[2]) >> C2_SHIFT];
-      /* increment, check for overflow and undo increment if so. */
-      if (++(*histp) <= 0)
-	(*histp)--;
-      ptr += 3;
-    }
-  }
-}
-
-
-/*
- * Next we have the really interesting routines: selection of a colormap
- * given the completed histogram.
- * These routines work with a list of "boxes", each representing a rectangular
- * subset of the input color space (to histogram precision).
- */
-
-typedef struct {
-  /* The bounds of the box (inclusive); expressed as histogram indexes */
-  int c0min, c0max;
-  int c1min, c1max;
-  int c2min, c2max;
-  /* The volume (actually 2-norm) of the box */
-  INT32 volume;
-  /* The number of nonzero histogram cells within this box */
-  long colorcount;
-} box;
-
-typedef box * boxptr;
-
-
-LOCAL(boxptr)
-find_biggest_color_pop (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest color population */
-/* Returns NULL if no splittable boxes remain */
-{
-  register boxptr boxp;
-  register int i;
-  register long maxc = 0;
-  boxptr which = NULL;
-
-  for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
-    if (boxp->colorcount > maxc && boxp->volume > 0) {
-      which = boxp;
-      maxc = boxp->colorcount;
-    }
-  }
-  return which;
-}
-
-
-LOCAL(boxptr)
-find_biggest_volume (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest (scaled) volume */
-/* Returns NULL if no splittable boxes remain */
-{
-  register boxptr boxp;
-  register int i;
-  register INT32 maxv = 0;
-  boxptr which = NULL;
-
-  for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
-    if (boxp->volume > maxv) {
-      which = boxp;
-      maxv = boxp->volume;
-    }
-  }
-  return which;
-}
-
-
-LOCAL(void)
-update_box (j_decompress_ptr cinfo, boxptr boxp)
-/* Shrink the min/max bounds of a box to enclose only nonzero elements, */
-/* and recompute its volume and population */
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  histptr histp;
-  int c0,c1,c2;
-  int c0min,c0max,c1min,c1max,c2min,c2max;
-  INT32 dist0,dist1,dist2;
-  long ccount;
-
-  c0min = boxp->c0min;  c0max = boxp->c0max;
-  c1min = boxp->c1min;  c1max = boxp->c1max;
-  c2min = boxp->c2min;  c2max = boxp->c2max;
-
-  if (c0max > c0min)
-    for (c0 = c0min; c0 <= c0max; c0++)
-      for (c1 = c1min; c1 <= c1max; c1++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c0min = c0min = c0;
-	    goto have_c0min;
-	  }
-      }
- have_c0min:
-  if (c0max > c0min)
-    for (c0 = c0max; c0 >= c0min; c0--)
-      for (c1 = c1min; c1 <= c1max; c1++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c0max = c0max = c0;
-	    goto have_c0max;
-	  }
-      }
- have_c0max:
-  if (c1max > c1min)
-    for (c1 = c1min; c1 <= c1max; c1++)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c1min = c1min = c1;
-	    goto have_c1min;
-	  }
-      }
- have_c1min:
-  if (c1max > c1min)
-    for (c1 = c1max; c1 >= c1min; c1--)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c1max = c1max = c1;
-	    goto have_c1max;
-	  }
-      }
- have_c1max:
-  if (c2max > c2min)
-    for (c2 = c2min; c2 <= c2max; c2++)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1min][c2];
-	for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
-	  if (*histp != 0) {
-	    boxp->c2min = c2min = c2;
-	    goto have_c2min;
-	  }
-      }
- have_c2min:
-  if (c2max > c2min)
-    for (c2 = c2max; c2 >= c2min; c2--)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1min][c2];
-	for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
-	  if (*histp != 0) {
-	    boxp->c2max = c2max = c2;
-	    goto have_c2max;
-	  }
-      }
- have_c2max:
-
-  /* Update box volume.
-   * We use 2-norm rather than real volume here; this biases the method
-   * against making long narrow boxes, and it has the side benefit that
-   * a box is splittable iff norm > 0.
-   * Since the differences are expressed in histogram-cell units,
-   * we have to shift back to JSAMPLE units to get consistent distances;
-   * after which, we scale according to the selected distance scale factors.
-   */
-  dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE;
-  dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE;
-  dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE;
-  boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2;
-
-  /* Now scan remaining volume of box and compute population */
-  ccount = 0;
-  for (c0 = c0min; c0 <= c0max; c0++)
-    for (c1 = c1min; c1 <= c1max; c1++) {
-      histp = & histogram[c0][c1][c2min];
-      for (c2 = c2min; c2 <= c2max; c2++, histp++)
-	if (*histp != 0) {
-	  ccount++;
-	}
-    }
-  boxp->colorcount = ccount;
-}
-
-
-LOCAL(int)
-median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes,
-	    int desired_colors)
-/* Repeatedly select and split the largest box until we have enough boxes */
-{
-  int n,lb;
-  int c0,c1,c2,cmax;
-  register boxptr b1,b2;
-
-  while (numboxes < desired_colors) {
-    /* Select box to split.
-     * Current algorithm: by population for first half, then by volume.
-     */
-    if (numboxes*2 <= desired_colors) {
-      b1 = find_biggest_color_pop(boxlist, numboxes);
-    } else {
-      b1 = find_biggest_volume(boxlist, numboxes);
-    }
-    if (b1 == NULL)		/* no splittable boxes left! */
-      break;
-    b2 = &boxlist[numboxes];	/* where new box will go */
-    /* Copy the color bounds to the new box. */
-    b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max;
-    b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min;
-    /* Choose which axis to split the box on.
-     * Current algorithm: longest scaled axis.
-     * See notes in update_box about scaling distances.
-     */
-    c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE;
-    c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE;
-    c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE;
-    /* We want to break any ties in favor of green, then red, blue last.
-     * This code does the right thing for R,G,B or B,G,R color orders only.
-     */
-#if RGB_RED == 0
-    cmax = c1; n = 1;
-    if (c0 > cmax) { cmax = c0; n = 0; }
-    if (c2 > cmax) { n = 2; }
-#else
-    cmax = c1; n = 1;
-    if (c2 > cmax) { cmax = c2; n = 2; }
-    if (c0 > cmax) { n = 0; }
-#endif
-    /* Choose split point along selected axis, and update box bounds.
-     * Current algorithm: split at halfway point.
-     * (Since the box has been shrunk to minimum volume,
-     * any split will produce two nonempty subboxes.)
-     * Note that lb value is max for lower box, so must be < old max.
-     */
-    switch (n) {
-    case 0:
-      lb = (b1->c0max + b1->c0min) / 2;
-      b1->c0max = lb;
-      b2->c0min = lb+1;
-      break;
-    case 1:
-      lb = (b1->c1max + b1->c1min) / 2;
-      b1->c1max = lb;
-      b2->c1min = lb+1;
-      break;
-    case 2:
-      lb = (b1->c2max + b1->c2min) / 2;
-      b1->c2max = lb;
-      b2->c2min = lb+1;
-      break;
-    }
-    /* Update stats for boxes */
-    update_box(cinfo, b1);
-    update_box(cinfo, b2);
-    numboxes++;
-  }
-  return numboxes;
-}
-
-
-LOCAL(void)
-compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor)
-/* Compute representative color for a box, put it in colormap[icolor] */
-{
-  /* Current algorithm: mean weighted by pixels (not colors) */
-  /* Note it is important to get the rounding correct! */
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  histptr histp;
-  int c0,c1,c2;
-  int c0min,c0max,c1min,c1max,c2min,c2max;
-  long count;
-  long total = 0;
-  long c0total = 0;
-  long c1total = 0;
-  long c2total = 0;
-
-  c0min = boxp->c0min;  c0max = boxp->c0max;
-  c1min = boxp->c1min;  c1max = boxp->c1max;
-  c2min = boxp->c2min;  c2max = boxp->c2max;
-
-  for (c0 = c0min; c0 <= c0max; c0++)
-    for (c1 = c1min; c1 <= c1max; c1++) {
-      histp = & histogram[c0][c1][c2min];
-      for (c2 = c2min; c2 <= c2max; c2++) {
-	if ((count = *histp++) != 0) {
-	  total += count;
-	  c0total += ((c0 << C0_SHIFT) + ((1<<C0_SHIFT)>>1)) * count;
-	  c1total += ((c1 << C1_SHIFT) + ((1<<C1_SHIFT)>>1)) * count;
-	  c2total += ((c2 << C2_SHIFT) + ((1<<C2_SHIFT)>>1)) * count;
-	}
-      }
-    }
-
-  cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total);
-  cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total);
-  cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total);
-}
-
-
-LOCAL(void)
-select_colors (j_decompress_ptr cinfo, int desired_colors)
-/* Master routine for color selection */
-{
-  boxptr boxlist;
-  int numboxes;
-  int i;
-
-  /* Allocate workspace for box list */
-  boxlist = (boxptr) (*cinfo->mem->alloc_small)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box));
-  /* Initialize one box containing whole space */
-  numboxes = 1;
-  boxlist[0].c0min = 0;
-  boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT;
-  boxlist[0].c1min = 0;
-  boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT;
-  boxlist[0].c2min = 0;
-  boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT;
-  /* Shrink it to actually-used volume and set its statistics */
-  update_box(cinfo, & boxlist[0]);
-  /* Perform median-cut to produce final box list */
-  numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors);
-  /* Compute the representative color for each box, fill colormap */
-  for (i = 0; i < numboxes; i++)
-    compute_color(cinfo, & boxlist[i], i);
-  cinfo->actual_number_of_colors = numboxes;
-  TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes);
-}
-
-
-/*
- * These routines are concerned with the time-critical task of mapping input
- * colors to the nearest color in the selected colormap.
- *
- * We re-use the histogram space as an "inverse color map", essentially a
- * cache for the results of nearest-color searches.  All colors within a
- * histogram cell will be mapped to the same colormap entry, namely the one
- * closest to the cell's center.  This may not be quite the closest entry to
- * the actual input color, but it's almost as good.  A zero in the cache
- * indicates we haven't found the nearest color for that cell yet; the array
- * is cleared to zeroes before starting the mapping pass.  When we find the
- * nearest color for a cell, its colormap index plus one is recorded in the
- * cache for future use.  The pass2 scanning routines call fill_inverse_cmap
- * when they need to use an unfilled entry in the cache.
- *
- * Our method of efficiently finding nearest colors is based on the "locally
- * sorted search" idea described by Heckbert and on the incremental distance
- * calculation described by Spencer W. Thomas in chapter III.1 of Graphics
- * Gems II (James Arvo, ed.  Academic Press, 1991).  Thomas points out that
- * the distances from a given colormap entry to each cell of the histogram can
- * be computed quickly using an incremental method: the differences between
- * distances to adjacent cells themselves differ by a constant.  This allows a
- * fairly fast implementation of the "brute force" approach of computing the
- * distance from every colormap entry to every histogram cell.  Unfortunately,
- * it needs a work array to hold the best-distance-so-far for each histogram
- * cell (because the inner loop has to be over cells, not colormap entries).
- * The work array elements have to be INT32s, so the work array would need
- * 256Kb at our recommended precision.  This is not feasible in DOS machines.
- *
- * To get around these problems, we apply Thomas' method to compute the
- * nearest colors for only the cells within a small subbox of the histogram.
- * The work array need be only as big as the subbox, so the memory usage
- * problem is solved.  Furthermore, we need not fill subboxes that are never
- * referenced in pass2; many images use only part of the color gamut, so a
- * fair amount of work is saved.  An additional advantage of this
- * approach is that we can apply Heckbert's locality criterion to quickly
- * eliminate colormap entries that are far away from the subbox; typically
- * three-fourths of the colormap entries are rejected by Heckbert's criterion,
- * and we need not compute their distances to individual cells in the subbox.
- * The speed of this approach is heavily influenced by the subbox size: too
- * small means too much overhead, too big loses because Heckbert's criterion
- * can't eliminate as many colormap entries.  Empirically the best subbox
- * size seems to be about 1/512th of the histogram (1/8th in each direction).
- *
- * Thomas' article also describes a refined method which is asymptotically
- * faster than the brute-force method, but it is also far more complex and
- * cannot efficiently be applied to small subboxes.  It is therefore not
- * useful for programs intended to be portable to DOS machines.  On machines
- * with plenty of memory, filling the whole histogram in one shot with Thomas'
- * refined method might be faster than the present code --- but then again,
- * it might not be any faster, and it's certainly more complicated.
- */
-
-
-/* log2(histogram cells in update box) for each axis; this can be adjusted */
-#define BOX_C0_LOG  (HIST_C0_BITS-3)
-#define BOX_C1_LOG  (HIST_C1_BITS-3)
-#define BOX_C2_LOG  (HIST_C2_BITS-3)
-
-#define BOX_C0_ELEMS  (1<<BOX_C0_LOG) /* # of hist cells in update box */
-#define BOX_C1_ELEMS  (1<<BOX_C1_LOG)
-#define BOX_C2_ELEMS  (1<<BOX_C2_LOG)
-
-#define BOX_C0_SHIFT  (C0_SHIFT + BOX_C0_LOG)
-#define BOX_C1_SHIFT  (C1_SHIFT + BOX_C1_LOG)
-#define BOX_C2_SHIFT  (C2_SHIFT + BOX_C2_LOG)
-
-
-/*
- * The next three routines implement inverse colormap filling.  They could
- * all be folded into one big routine, but splitting them up this way saves
- * some stack space (the mindist[] and bestdist[] arrays need not coexist)
- * and may allow some compilers to produce better code by registerizing more
- * inner-loop variables.
- */
-
-LOCAL(int)
-find_nearby_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
-		    JSAMPLE colorlist[])
-/* Locate the colormap entries close enough to an update box to be candidates
- * for the nearest entry to some cell(s) in the update box.  The update box
- * is specified by the center coordinates of its first cell.  The number of
- * candidate colormap entries is returned, and their colormap indexes are
- * placed in colorlist[].
- * This routine uses Heckbert's "locally sorted search" criterion to select
- * the colors that need further consideration.
- */
-{
-  int numcolors = cinfo->actual_number_of_colors;
-  int maxc0, maxc1, maxc2;
-  int centerc0, centerc1, centerc2;
-  int i, x, ncolors;
-  INT32 minmaxdist, min_dist, max_dist, tdist;
-  INT32 mindist[MAXNUMCOLORS];	/* min distance to colormap entry i */
-
-  /* Compute true coordinates of update box's upper corner and center.
-   * Actually we compute the coordinates of the center of the upper-corner
-   * histogram cell, which are the upper bounds of the volume we care about.
-   * Note that since ">>" rounds down, the "center" values may be closer to
-   * min than to max; hence comparisons to them must be "<=", not "<".
-   */
-  maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT));
-  centerc0 = (minc0 + maxc0) >> 1;
-  maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT));
-  centerc1 = (minc1 + maxc1) >> 1;
-  maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT));
-  centerc2 = (minc2 + maxc2) >> 1;
-
-  /* For each color in colormap, find:
-   *  1. its minimum squared-distance to any point in the update box
-   *     (zero if color is within update box);
-   *  2. its maximum squared-distance to any point in the update box.
-   * Both of these can be found by considering only the corners of the box.
-   * We save the minimum distance for each color in mindist[];
-   * only the smallest maximum distance is of interest.
-   */
-  minmaxdist = 0x7FFFFFFFL;
-
-  for (i = 0; i < numcolors; i++) {
-    /* We compute the squared-c0-distance term, then add in the other two. */
-    x = GETJSAMPLE(cinfo->colormap[0][i]);
-    if (x < minc0) {
-      tdist = (x - minc0) * C0_SCALE;
-      min_dist = tdist*tdist;
-      tdist = (x - maxc0) * C0_SCALE;
-      max_dist = tdist*tdist;
-    } else if (x > maxc0) {
-      tdist = (x - maxc0) * C0_SCALE;
-      min_dist = tdist*tdist;
-      tdist = (x - minc0) * C0_SCALE;
-      max_dist = tdist*tdist;
-    } else {
-      /* within cell range so no contribution to min_dist */
-      min_dist = 0;
-      if (x <= centerc0) {
-	tdist = (x - maxc0) * C0_SCALE;
-	max_dist = tdist*tdist;
-      } else {
-	tdist = (x - minc0) * C0_SCALE;
-	max_dist = tdist*tdist;
-      }
-    }
-
-    x = GETJSAMPLE(cinfo->colormap[1][i]);
-    if (x < minc1) {
-      tdist = (x - minc1) * C1_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - maxc1) * C1_SCALE;
-      max_dist += tdist*tdist;
-    } else if (x > maxc1) {
-      tdist = (x - maxc1) * C1_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - minc1) * C1_SCALE;
-      max_dist += tdist*tdist;
-    } else {
-      /* within cell range so no contribution to min_dist */
-      if (x <= centerc1) {
-	tdist = (x - maxc1) * C1_SCALE;
-	max_dist += tdist*tdist;
-      } else {
-	tdist = (x - minc1) * C1_SCALE;
-	max_dist += tdist*tdist;
-      }
-    }
-
-    x = GETJSAMPLE(cinfo->colormap[2][i]);
-    if (x < minc2) {
-      tdist = (x - minc2) * C2_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - maxc2) * C2_SCALE;
-      max_dist += tdist*tdist;
-    } else if (x > maxc2) {
-      tdist = (x - maxc2) * C2_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - minc2) * C2_SCALE;
-      max_dist += tdist*tdist;
-    } else {
-      /* within cell range so no contribution to min_dist */
-      if (x <= centerc2) {
-	tdist = (x - maxc2) * C2_SCALE;
-	max_dist += tdist*tdist;
-      } else {
-	tdist = (x - minc2) * C2_SCALE;
-	max_dist += tdist*tdist;
-      }
-    }
-
-    mindist[i] = min_dist;	/* save away the results */
-    if (max_dist < minmaxdist)
-      minmaxdist = max_dist;
-  }
-
-  /* Now we know that no cell in the update box is more than minmaxdist
-   * away from some colormap entry.  Therefore, only colors that are
-   * within minmaxdist of some part of the box need be considered.
-   */
-  ncolors = 0;
-  for (i = 0; i < numcolors; i++) {
-    if (mindist[i] <= minmaxdist)
-      colorlist[ncolors++] = (JSAMPLE) i;
-  }
-  return ncolors;
-}
-
-
-LOCAL(void)
-find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
-		  int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[])
-/* Find the closest colormap entry for each cell in the update box,
- * given the list of candidate colors prepared by find_nearby_colors.
- * Return the indexes of the closest entries in the bestcolor[] array.
- * This routine uses Thomas' incremental distance calculation method to
- * find the distance from a colormap entry to successive cells in the box.
- */
-{
-  int ic0, ic1, ic2;
-  int i, icolor;
-  register INT32 * bptr;	/* pointer into bestdist[] array */
-  JSAMPLE * cptr;		/* pointer into bestcolor[] array */
-  INT32 dist0, dist1;		/* initial distance values */
-  register INT32 dist2;		/* current distance in inner loop */
-  INT32 xx0, xx1;		/* distance increments */
-  register INT32 xx2;
-  INT32 inc0, inc1, inc2;	/* initial values for increments */
-  /* This array holds the distance to the nearest-so-far color for each cell */
-  INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
-  /* Initialize best-distance for each cell of the update box */
-  bptr = bestdist;
-  for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--)
-    *bptr++ = 0x7FFFFFFFL;
-
-  /* For each color selected by find_nearby_colors,
-   * compute its distance to the center of each cell in the box.
-   * If that's less than best-so-far, update best distance and color number.
-   */
-
-  /* Nominal steps between cell centers ("x" in Thomas article) */
-#define STEP_C0  ((1 << C0_SHIFT) * C0_SCALE)
-#define STEP_C1  ((1 << C1_SHIFT) * C1_SCALE)
-#define STEP_C2  ((1 << C2_SHIFT) * C2_SCALE)
-
-  for (i = 0; i < numcolors; i++) {
-    icolor = GETJSAMPLE(colorlist[i]);
-    /* Compute (square of) distance from minc0/c1/c2 to this color */
-    inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE;
-    dist0 = inc0*inc0;
-    inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE;
-    dist0 += inc1*inc1;
-    inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE;
-    dist0 += inc2*inc2;
-    /* Form the initial difference increments */
-    inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0;
-    inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1;
-    inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2;
-    /* Now loop over all cells in box, updating distance per Thomas method */
-    bptr = bestdist;
-    cptr = bestcolor;
-    xx0 = inc0;
-    for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) {
-      dist1 = dist0;
-      xx1 = inc1;
-      for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) {
-	dist2 = dist1;
-	xx2 = inc2;
-	for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) {
-	  if (dist2 < *bptr) {
-	    *bptr = dist2;
-	    *cptr = (JSAMPLE) icolor;
-	  }
-	  dist2 += xx2;
-	  xx2 += 2 * STEP_C2 * STEP_C2;
-	  bptr++;
-	  cptr++;
-	}
-	dist1 += xx1;
-	xx1 += 2 * STEP_C1 * STEP_C1;
-      }
-      dist0 += xx0;
-      xx0 += 2 * STEP_C0 * STEP_C0;
-    }
-  }
-}
-
-
-LOCAL(void)
-fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2)
-/* Fill the inverse-colormap entries in the update box that contains */
-/* histogram cell c0/c1/c2.  (Only that one cell MUST be filled, but */
-/* we can fill as many others as we wish.) */
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  int minc0, minc1, minc2;	/* lower left corner of update box */
-  int ic0, ic1, ic2;
-  register JSAMPLE * cptr;	/* pointer into bestcolor[] array */
-  register histptr cachep;	/* pointer into main cache array */
-  /* This array lists the candidate colormap indexes. */
-  JSAMPLE colorlist[MAXNUMCOLORS];
-  int numcolors;		/* number of candidate colors */
-  /* This array holds the actually closest colormap index for each cell. */
-  JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
-  /* Convert cell coordinates to update box ID */
-  c0 >>= BOX_C0_LOG;
-  c1 >>= BOX_C1_LOG;
-  c2 >>= BOX_C2_LOG;
-
-  /* Compute true coordinates of update box's origin corner.
-   * Actually we compute the coordinates of the center of the corner
-   * histogram cell, which are the lower bounds of the volume we care about.
-   */
-  minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1);
-  minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1);
-  minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1);
-
-  /* Determine which colormap entries are close enough to be candidates
-   * for the nearest entry to some cell in the update box.
-   */
-  numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist);
-
-  /* Determine the actually nearest colors. */
-  find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist,
-		   bestcolor);
-
-  /* Save the best color numbers (plus 1) in the main cache array */
-  c0 <<= BOX_C0_LOG;		/* convert ID back to base cell indexes */
-  c1 <<= BOX_C1_LOG;
-  c2 <<= BOX_C2_LOG;
-  cptr = bestcolor;
-  for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) {
-    for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) {
-      cachep = & histogram[c0+ic0][c1+ic1][c2];
-      for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) {
-	*cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1);
-      }
-    }
-  }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-METHODDEF(void)
-pass2_no_dither (j_decompress_ptr cinfo,
-		 JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)
-/* This version performs no dithering */
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  register JSAMPROW inptr, outptr;
-  register histptr cachep;
-  register int c0, c1, c2;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    inptr = input_buf[row];
-    outptr = output_buf[row];
-    for (col = width; col > 0; col--) {
-      /* get pixel value and index into the cache */
-      c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT;
-      c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT;
-      c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT;
-      cachep = & histogram[c0][c1][c2];
-      /* If we have not seen this color before, find nearest colormap entry */
-      /* and update the cache */
-      if (*cachep == 0)
-	fill_inverse_cmap(cinfo, c0,c1,c2);
-      /* Now emit the colormap index for this cell */
-      *outptr++ = (JSAMPLE) (*cachep - 1);
-    }
-  }
-}
-
-
-METHODDEF(void)
-pass2_fs_dither (j_decompress_ptr cinfo,
-		 JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)
-/* This version performs Floyd-Steinberg dithering */
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  register LOCFSERROR cur0, cur1, cur2;	/* current error or pixel value */
-  LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */
-  LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */
-  register FSERRPTR errorptr;	/* => fserrors[] at column before current */
-  JSAMPROW inptr;		/* => current input pixel */
-  JSAMPROW outptr;		/* => current output pixel */
-  histptr cachep;
-  int dir;			/* +1 or -1 depending on direction */
-  int dir3;			/* 3*dir, for advancing inptr & errorptr */
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-  JSAMPLE *range_limit = cinfo->sample_range_limit;
-  int *error_limit = cquantize->error_limiter;
-  JSAMPROW colormap0 = cinfo->colormap[0];
-  JSAMPROW colormap1 = cinfo->colormap[1];
-  JSAMPROW colormap2 = cinfo->colormap[2];
-  SHIFT_TEMPS
-
-  for (row = 0; row < num_rows; row++) {
-    inptr = input_buf[row];
-    outptr = output_buf[row];
-    if (cquantize->on_odd_row) {
-      /* work right to left in this row */
-      inptr += (width-1) * 3;	/* so point to rightmost pixel */
-      outptr += width-1;
-      dir = -1;
-      dir3 = -3;
-      errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */
-      cquantize->on_odd_row = FALSE; /* flip for next time */
-    } else {
-      /* work left to right in this row */
-      dir = 1;
-      dir3 = 3;
-      errorptr = cquantize->fserrors; /* => entry before first real column */
-      cquantize->on_odd_row = TRUE; /* flip for next time */
-    }
-    /* Preset error values: no error propagated to first pixel from left */
-    cur0 = cur1 = cur2 = 0;
-    /* and no error propagated to row below yet */
-    belowerr0 = belowerr1 = belowerr2 = 0;
-    bpreverr0 = bpreverr1 = bpreverr2 = 0;
-
-    for (col = width; col > 0; col--) {
-      /* curN holds the error propagated from the previous pixel on the
-       * current line.  Add the error propagated from the previous line
-       * to form the complete error correction term for this pixel, and
-       * round the error term (which is expressed * 16) to an integer.
-       * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
-       * for either sign of the error value.
-       * Note: errorptr points to *previous* column's array entry.
-       */
-      cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4);
-      cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4);
-      cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4);
-      /* Limit the error using transfer function set by init_error_limit.
-       * See comments with init_error_limit for rationale.
-       */
-      cur0 = error_limit[cur0];
-      cur1 = error_limit[cur1];
-      cur2 = error_limit[cur2];
-      /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
-       * The maximum error is +- MAXJSAMPLE (or less with error limiting);
-       * this sets the required size of the range_limit array.
-       */
-      cur0 += GETJSAMPLE(inptr[0]);
-      cur1 += GETJSAMPLE(inptr[1]);
-      cur2 += GETJSAMPLE(inptr[2]);
-      cur0 = GETJSAMPLE(range_limit[cur0]);
-      cur1 = GETJSAMPLE(range_limit[cur1]);
-      cur2 = GETJSAMPLE(range_limit[cur2]);
-      /* Index into the cache with adjusted pixel value */
-      cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT];
-      /* If we have not seen this color before, find nearest colormap */
-      /* entry and update the cache */
-      if (*cachep == 0)
-	fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT);
-      /* Now emit the colormap index for this cell */
-      { register int pixcode = *cachep - 1;
-	*outptr = (JSAMPLE) pixcode;
-	/* Compute representation error for this pixel */
-	cur0 -= GETJSAMPLE(colormap0[pixcode]);
-	cur1 -= GETJSAMPLE(colormap1[pixcode]);
-	cur2 -= GETJSAMPLE(colormap2[pixcode]);
-      }
-      /* Compute error fractions to be propagated to adjacent pixels.
-       * Add these into the running sums, and simultaneously shift the
-       * next-line error sums left by 1 column.
-       */
-      { register LOCFSERROR bnexterr, delta;
-
-	bnexterr = cur0;	/* Process component 0 */
-	delta = cur0 * 2;
-	cur0 += delta;		/* form error * 3 */
-	errorptr[0] = (FSERROR) (bpreverr0 + cur0);
-	cur0 += delta;		/* form error * 5 */
-	bpreverr0 = belowerr0 + cur0;
-	belowerr0 = bnexterr;
-	cur0 += delta;		/* form error * 7 */
-	bnexterr = cur1;	/* Process component 1 */
-	delta = cur1 * 2;
-	cur1 += delta;		/* form error * 3 */
-	errorptr[1] = (FSERROR) (bpreverr1 + cur1);
-	cur1 += delta;		/* form error * 5 */
-	bpreverr1 = belowerr1 + cur1;
-	belowerr1 = bnexterr;
-	cur1 += delta;		/* form error * 7 */
-	bnexterr = cur2;	/* Process component 2 */
-	delta = cur2 * 2;
-	cur2 += delta;		/* form error * 3 */
-	errorptr[2] = (FSERROR) (bpreverr2 + cur2);
-	cur2 += delta;		/* form error * 5 */
-	bpreverr2 = belowerr2 + cur2;
-	belowerr2 = bnexterr;
-	cur2 += delta;		/* form error * 7 */
-      }
-      /* At this point curN contains the 7/16 error value to be propagated
-       * to the next pixel on the current line, and all the errors for the
-       * next line have been shifted over.  We are therefore ready to move on.
-       */
-      inptr += dir3;		/* Advance pixel pointers to next column */
-      outptr += dir;
-      errorptr += dir3;		/* advance errorptr to current column */
-    }
-    /* Post-loop cleanup: we must unload the final error values into the
-     * final fserrors[] entry.  Note we need not unload belowerrN because
-     * it is for the dummy column before or after the actual array.
-     */
-    errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */
-    errorptr[1] = (FSERROR) bpreverr1;
-    errorptr[2] = (FSERROR) bpreverr2;
-  }
-}
-
-
-/*
- * Initialize the error-limiting transfer function (lookup table).
- * The raw F-S error computation can potentially compute error values of up to
- * +- MAXJSAMPLE.  But we want the maximum correction applied to a pixel to be
- * much less, otherwise obviously wrong pixels will be created.  (Typical
- * effects include weird fringes at color-area boundaries, isolated bright
- * pixels in a dark area, etc.)  The standard advice for avoiding this problem
- * is to ensure that the "corners" of the color cube are allocated as output
- * colors; then repeated errors in the same direction cannot cause cascading
- * error buildup.  However, that only prevents the error from getting
- * completely out of hand; Aaron Giles reports that error limiting improves
- * the results even with corner colors allocated.
- * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty
- * well, but the smoother transfer function used below is even better.  Thanks
- * to Aaron Giles for this idea.
- */
-
-LOCAL(void)
-init_error_limit (j_decompress_ptr cinfo)
-/* Allocate and fill in the error_limiter table */
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  int * table;
-  int in, out;
-
-  table = (int *) (*cinfo->mem->alloc_small)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int));
-  table += MAXJSAMPLE;		/* so can index -MAXJSAMPLE .. +MAXJSAMPLE */
-  cquantize->error_limiter = table;
-
-#define STEPSIZE ((MAXJSAMPLE+1)/16)
-  /* Map errors 1:1 up to +- MAXJSAMPLE/16 */
-  out = 0;
-  for (in = 0; in < STEPSIZE; in++, out++) {
-    table[in] = out; table[-in] = -out;
-  }
-  /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */
-  for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) {
-    table[in] = out; table[-in] = -out;
-  }
-  /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */
-  for (; in <= MAXJSAMPLE; in++) {
-    table[in] = out; table[-in] = -out;
-  }
-#undef STEPSIZE
-}
-
-
-/*
- * Finish up at the end of each pass.
- */
-
-METHODDEF(void)
-finish_pass1 (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-
-  /* Select the representative colors and fill in cinfo->colormap */
-  cinfo->colormap = cquantize->sv_colormap;
-  select_colors(cinfo, cquantize->desired);
-  /* Force next pass to zero the color index table */
-  cquantize->needs_zeroed = TRUE;
-}
-
-
-METHODDEF(void)
-finish_pass2 (j_decompress_ptr)
-{
-  /* no work */
-}
-
-
-/*
- * Initialize for each processing pass.
- */
-
-METHODDEF(void)
-start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  int i;
-
-  /* Only F-S dithering or no dithering is supported. */
-  /* If user asks for ordered dither, give him F-S. */
-  if (cinfo->dither_mode != JDITHER_NONE)
-    cinfo->dither_mode = JDITHER_FS;
-
-  if (is_pre_scan) {
-    /* Set up method pointers */
-    cquantize->pub.color_quantize = prescan_quantize;
-    cquantize->pub.finish_pass = finish_pass1;
-    cquantize->needs_zeroed = TRUE; /* Always zero histogram */
-  } else {
-    /* Set up method pointers */
-    if (cinfo->dither_mode == JDITHER_FS)
-      cquantize->pub.color_quantize = pass2_fs_dither;
-    else
-      cquantize->pub.color_quantize = pass2_no_dither;
-    cquantize->pub.finish_pass = finish_pass2;
-
-    /* Make sure color count is acceptable */
-    i = cinfo->actual_number_of_colors;
-    if (i < 1)
-      ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1);
-    if (i > MAXNUMCOLORS)
-      ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS);
-
-    if (cinfo->dither_mode == JDITHER_FS) {
-      size_t arraysize = (size_t) ((cinfo->output_width + 2) *
-				   (3 * SIZEOF(FSERROR)));
-      /* Allocate Floyd-Steinberg workspace if we didn't already. */
-      if (cquantize->fserrors == NULL)
-	cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large)
-	  ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize);
-      /* Initialize the propagated errors to zero. */
-      jzero_far((void FAR *) cquantize->fserrors, arraysize);
-      /* Make the error-limit table if we didn't already. */
-      if (cquantize->error_limiter == NULL)
-	init_error_limit(cinfo);
-      cquantize->on_odd_row = FALSE;
-    }
-
-  }
-  /* Zero the histogram or inverse color map, if necessary */
-  if (cquantize->needs_zeroed) {
-    for (i = 0; i < HIST_C0_ELEMS; i++) {
-      jzero_far((void FAR *) histogram[i],
-		HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell));
-    }
-    cquantize->needs_zeroed = FALSE;
-  }
-}
-
-
-/*
- * Switch to a new external colormap between output passes.
- */
-
-METHODDEF(void)
-new_color_map_2_quant (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr2 cquantize = (my_cquantize_ptr2) cinfo->cquantize;
-
-  /* Reset the inverse color map */
-  cquantize->needs_zeroed = TRUE;
-}
-
-
-/*
- * Module initialization routine for 2-pass color quantization.
- */
-
-GLOBAL(void)
-jinit_2pass_quantizer (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr2 cquantize;
-  int i;
-
-  cquantize = (my_cquantize_ptr2)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_cquantizer2));
-  cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize;
-  cquantize->pub.start_pass = start_pass_2_quant;
-  cquantize->pub.new_color_map = new_color_map_2_quant;
-  cquantize->fserrors = NULL;	/* flag optional arrays not allocated */
-  cquantize->error_limiter = NULL;
-
-  /* Make sure jdmaster didn't give me a case I can't handle */
-  if (cinfo->out_color_components != 3)
-    ERREXIT(cinfo, JERR_NOTIMPL);
-
-  /* Allocate the histogram/inverse colormap storage */
-  cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d));
-  for (i = 0; i < HIST_C0_ELEMS; i++) {
-    cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell));
-  }
-  cquantize->needs_zeroed = TRUE; /* histogram is garbage now */
-
-  /* Allocate storage for the completed colormap, if required.
-   * We do this now since it is FAR storage and may affect
-   * the memory manager's space calculations.
-   */
-  if (cinfo->enable_2pass_quant) {
-    /* Make sure color count is acceptable */
-    int desired = cinfo->desired_number_of_colors;
-    /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */
-    if (desired < 8)
-      ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8);
-    /* Make sure colormap indexes can be represented by JSAMPLEs */
-    if (desired > MAXNUMCOLORS)
-      ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS);
-    cquantize->sv_colormap = (*cinfo->mem->alloc_sarray)
-      ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3);
-    cquantize->desired = desired;
-  } else
-    cquantize->sv_colormap = NULL;
-
-  /* Only F-S dithering or no dithering is supported. */
-  /* If user asks for ordered dither, give him F-S. */
-  if (cinfo->dither_mode != JDITHER_NONE)
-    cinfo->dither_mode = JDITHER_FS;
-
-  /* Allocate Floyd-Steinberg workspace if necessary.
-   * This isn't really needed until pass 2, but again it is FAR storage.
-   * Although we will cope with a later change in dither_mode,
-   * we do not promise to honor max_memory_to_use if dither_mode changes.
-   */
-  if (cinfo->dither_mode == JDITHER_FS) {
-    cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR))));
-    /* Might as well create the error-limiting table too. */
-    init_error_limit(cinfo);
-  }
-}
-
-#endif /* QUANT_2PASS_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/jpglib/jutils.c b/modules/juce_graphics/image_formats/jpglib/jutils.c
deleted file mode 100644
index 286cda2..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jutils.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * jutils.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains tables and miscellaneous utility routines needed
- * for both compression and decompression.
- * Note we prefix all global names with "j" to minimize conflicts with
- * a surrounding application.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element
- * of a DCT block read in natural order (left to right, top to bottom).
- */
-
-#if 0				/* This table is not actually needed in v6a */
-
-const int jpeg_zigzag_order[DCTSIZE2] = {
-   0,  1,  5,  6, 14, 15, 27, 28,
-   2,  4,  7, 13, 16, 26, 29, 42,
-   3,  8, 12, 17, 25, 30, 41, 43,
-   9, 11, 18, 24, 31, 40, 44, 53,
-  10, 19, 23, 32, 39, 45, 52, 54,
-  20, 22, 33, 38, 46, 51, 55, 60,
-  21, 34, 37, 47, 50, 56, 59, 61,
-  35, 36, 48, 49, 57, 58, 62, 63
-};
-
-#endif
-
-/*
- * jpeg_natural_order[i] is the natural-order position of the i'th element
- * of zigzag order.
- *
- * When reading corrupted data, the Huffman decoders could attempt
- * to reference an entry beyond the end of this array (if the decoded
- * zero run length reaches past the end of the block).  To prevent
- * wild stores without adding an inner-loop test, we put some extra
- * "63"s after the real entries.  This will cause the extra coefficient
- * to be stored in location 63 of the block, not somewhere random.
- * The worst case would be a run-length of 15, which means we need 16
- * fake entries.
- */
-
-const int jpeg_natural_order[DCTSIZE2+16] = {
-  0,  1,  8, 16,  9,  2,  3, 10,
- 17, 24, 32, 25, 18, 11,  4,  5,
- 12, 19, 26, 33, 40, 48, 41, 34,
- 27, 20, 13,  6,  7, 14, 21, 28,
- 35, 42, 49, 56, 57, 50, 43, 36,
- 29, 22, 15, 23, 30, 37, 44, 51,
- 58, 59, 52, 45, 38, 31, 39, 46,
- 53, 60, 61, 54, 47, 55, 62, 63,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-
-/*
- * Arithmetic utilities
- */
-
-GLOBAL(long)
-jdiv_round_up (long a, long b)
-/* Compute a/b rounded up to next integer, ie, ceil(a/b) */
-/* Assumes a >= 0, b > 0 */
-{
-  return (a + b - 1L) / b;
-}
-
-
-GLOBAL(long)
-jround_up (long a, long b)
-/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */
-/* Assumes a >= 0, b > 0 */
-{
-  a += b - 1L;
-  return a - (a % b);
-}
-
-
-/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays
- * and coefficient-block arrays.  This won't work on 80x86 because the arrays
- * are FAR and we're assuming a small-pointer memory model.  However, some
- * DOS compilers provide far-pointer versions of memcpy() and memset() even
- * in the small-model libraries.  These will be used if USE_FMEM is defined.
- * Otherwise, the routines below do it the hard way.  (The performance cost
- * is not all that great, because these routines aren't very heavily used.)
- */
-
-#ifndef NEED_FAR_POINTERS	/* normal case, same as regular macros */
-#define FMEMCOPY(dest,src,size)	MEMCOPY(dest,src,size)
-#define FMEMZERO(target,size)	MEMZERO(target,size)
-#else				/* 80x86 case, define if we can */
-#ifdef USE_FMEM
-#define FMEMCOPY(dest,src,size)	_fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size))
-#define FMEMZERO(target,size)	_fmemset((void FAR *)(target), 0, (size_t)(size))
-#endif
-#endif
-
-
-GLOBAL(void)
-jcopy_sample_rows (JSAMPARRAY input_array, int source_row,
-		   JSAMPARRAY output_array, int dest_row,
-		   int num_rows, JDIMENSION num_cols)
-/* Copy some rows of samples from one place to another.
- * num_rows rows are copied from input_array[source_row++]
- * to output_array[dest_row++]; these areas may overlap for duplication.
- * The source and destination arrays must be at least as wide as num_cols.
- */
-{
-  register JSAMPROW inptr, outptr;
-#ifdef FMEMCOPY
-  register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE));
-#else
-  register JDIMENSION count;
-#endif
-  register int row;
-
-  input_array += source_row;
-  output_array += dest_row;
-
-  for (row = num_rows; row > 0; row--) {
-    inptr = *input_array++;
-    outptr = *output_array++;
-#ifdef FMEMCOPY
-    FMEMCOPY(outptr, inptr, count);
-#else
-    for (count = num_cols; count > 0; count--)
-      *outptr++ = *inptr++;	/* needn't bother with GETJSAMPLE() here */
-#endif
-  }
-}
-
-
-GLOBAL(void)
-jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row,
-		 JDIMENSION num_blocks)
-/* Copy a row of coefficient blocks from one place to another. */
-{
-#ifdef FMEMCOPY
-  FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF)));
-#else
-  register JCOEFPTR inptr, outptr;
-  register long count;
-
-  inptr = (JCOEFPTR) input_row;
-  outptr = (JCOEFPTR) output_row;
-  for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) {
-    *outptr++ = *inptr++;
-  }
-#endif
-}
-
-
-GLOBAL(void)
-jzero_far (void FAR * target, size_t bytestozero)
-/* Zero out a chunk of FAR memory. */
-/* This might be sample-array data, block-array data, or alloc_large data. */
-{
-#ifdef FMEMZERO
-  FMEMZERO(target, bytestozero);
-#else
-  register char FAR * ptr = (char FAR *) target;
-  register size_t count;
-
-  for (count = bytestozero; count > 0; count--) {
-    *ptr++ = 0;
-  }
-#endif
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/jversion.h b/modules/juce_graphics/image_formats/jpglib/jversion.h
deleted file mode 100644
index dadd453..0000000
--- a/modules/juce_graphics/image_formats/jpglib/jversion.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * jversion.h
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains software version identification.
- */
-
-
-#define JVERSION	"6b  27-Mar-1998"
-
-#define JCOPYRIGHT	"Copyright (C) 1998, Thomas G. Lane"
diff --git a/modules/juce_graphics/image_formats/jpglib/transupp.c b/modules/juce_graphics/image_formats/jpglib/transupp.c
deleted file mode 100644
index 35e293e..0000000
--- a/modules/juce_graphics/image_formats/jpglib/transupp.c
+++ /dev/null
@@ -1,928 +0,0 @@
-/*
- * transupp.c
- *
- * Copyright (C) 1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains image transformation routines and other utility code
- * used by the jpegtran sample application.  These are NOT part of the core
- * JPEG library.  But we keep these routines separate from jpegtran.c to
- * ease the task of maintaining jpegtran-like programs that have other user
- * interfaces.
- */
-
-/* Although this file really shouldn't have access to the library internals,
- * it's helpful to let it call jround_up() and jcopy_block_row().
- */
-#define JPEG_INTERNALS
-
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "transupp.h"		/* My own external interface */
-
-
-#if TRANSFORMS_SUPPORTED
-
-/*
- * Lossless image transformation routines.  These routines work on DCT
- * coefficient arrays and thus do not require any lossy decompression
- * or recompression of the image.
- * Thanks to Guido Vollbeding for the initial design and code of this feature.
- *
- * Horizontal flipping is done in-place, using a single top-to-bottom
- * pass through the virtual source array.  It will thus be much the
- * fastest option for images larger than main memory.
- *
- * The other routines require a set of destination virtual arrays, so they
- * need twice as much memory as jpegtran normally does.  The destination
- * arrays are always written in normal scan order (top to bottom) because
- * the virtual array manager expects this.  The source arrays will be scanned
- * in the corresponding order, which means multiple passes through the source
- * arrays for most of the transforms.  That could result in much thrashing
- * if the image is larger than main memory.
- *
- * Some notes about the operating environment of the individual transform
- * routines:
- * 1. Both the source and destination virtual arrays are allocated from the
- *    source JPEG object, and therefore should be manipulated by calling the
- *    source's memory manager.
- * 2. The destination's component count should be used.  It may be smaller
- *    than the source's when forcing to grayscale.
- * 3. Likewise the destination's sampling factors should be used.  When
- *    forcing to grayscale the destination's sampling factors will be all 1,
- *    and we may as well take that as the effective iMCU size.
- * 4. When "trim" is in effect, the destination's dimensions will be the
- *    trimmed values but the source's will be untrimmed.
- * 5. All the routines assume that the source and destination buffers are
- *    padded out to a full iMCU boundary.  This is true, although for the
- *    source buffer it is an undocumented property of jdcoefct.c.
- * Notes 2,3,4 boil down to this: generally we should use the destination's
- * dimensions and ignore the source's.
- */
-
-
-LOCAL(void)
-do_flip_h (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	   jvirt_barray_ptr *src_coef_arrays)
-/* Horizontal flip; done in-place, so no separate dest array is required */
-{
-  JDIMENSION MCU_cols, comp_width, blk_x, blk_y;
-  int ci, k, offset_y;
-  JBLOCKARRAY buffer;
-  JCOEFPTR ptr1, ptr2;
-  JCOEF temp1, temp2;
-  jpeg_component_info *compptr;
-
-  /* Horizontal mirroring of DCT blocks is accomplished by swapping
-   * pairs of blocks in-place.  Within a DCT block, we perform horizontal
-   * mirroring by changing the signs of odd-numbered columns.
-   * Partial iMCUs at the right edge are left untouched.
-   */
-  MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
-
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    comp_width = MCU_cols * compptr->h_samp_factor;
-    for (blk_y = 0; blk_y < compptr->height_in_blocks;
-	 blk_y += compptr->v_samp_factor) {
-      buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, src_coef_arrays[ci], blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	for (blk_x = 0; blk_x * 2 < comp_width; blk_x++) {
-	  ptr1 = buffer[offset_y][blk_x];
-	  ptr2 = buffer[offset_y][comp_width - blk_x - 1];
-	  /* this unrolled loop doesn't need to know which row it's on... */
-	  for (k = 0; k < DCTSIZE2; k += 2) {
-	    temp1 = *ptr1;	/* swap even column */
-	    temp2 = *ptr2;
-	    *ptr1++ = temp2;
-	    *ptr2++ = temp1;
-	    temp1 = *ptr1;	/* swap odd column with sign change */
-	    temp2 = *ptr2;
-	    *ptr1++ = -temp2;
-	    *ptr2++ = -temp1;
-	  }
-	}
-      }
-    }
-  }
-}
-
-
-LOCAL(void)
-do_flip_v (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	   jvirt_barray_ptr *src_coef_arrays,
-	   jvirt_barray_ptr *dst_coef_arrays)
-/* Vertical flip */
-{
-  JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y;
-  int ci, i, j, offset_y;
-  JBLOCKARRAY src_buffer, dst_buffer;
-  JBLOCKROW src_row_ptr, dst_row_ptr;
-  JCOEFPTR src_ptr, dst_ptr;
-  jpeg_component_info *compptr;
-
-  /* We output into a separate array because we can't touch different
-   * rows of the source virtual array simultaneously.  Otherwise, this
-   * is a pretty straightforward analog of horizontal flip.
-   * Within a DCT block, vertical mirroring is done by changing the signs
-   * of odd-numbered rows.
-   * Partial iMCUs at the bottom edge are copied verbatim.
-   */
-  MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
-
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    comp_height = MCU_rows * compptr->v_samp_factor;
-    for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
-	 dst_blk_y += compptr->v_samp_factor) {
-      dst_buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      if (dst_blk_y < comp_height) {
-	/* Row is within the mirrorable area. */
-	src_buffer = (*srcinfo->mem->access_virt_barray)
-	  ((j_common_ptr) srcinfo, src_coef_arrays[ci],
-	   comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor,
-	   (JDIMENSION) compptr->v_samp_factor, FALSE);
-      } else {
-	/* Bottom-edge blocks will be copied verbatim. */
-	src_buffer = (*srcinfo->mem->access_virt_barray)
-	  ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y,
-	   (JDIMENSION) compptr->v_samp_factor, FALSE);
-      }
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	if (dst_blk_y < comp_height) {
-	  /* Row is within the mirrorable area. */
-	  dst_row_ptr = dst_buffer[offset_y];
-	  src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1];
-	  for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
-	       dst_blk_x++) {
-	    dst_ptr = dst_row_ptr[dst_blk_x];
-	    src_ptr = src_row_ptr[dst_blk_x];
-	    for (i = 0; i < DCTSIZE; i += 2) {
-	      /* copy even row */
-	      for (j = 0; j < DCTSIZE; j++)
-		*dst_ptr++ = *src_ptr++;
-	      /* copy odd row with sign change */
-	      for (j = 0; j < DCTSIZE; j++)
-		*dst_ptr++ = - *src_ptr++;
-	    }
-	  }
-	} else {
-	  /* Just copy row verbatim. */
-	  jcopy_block_row(src_buffer[offset_y], dst_buffer[offset_y],
-			  compptr->width_in_blocks);
-	}
-      }
-    }
-  }
-}
-
-
-LOCAL(void)
-do_transpose (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	      jvirt_barray_ptr *src_coef_arrays,
-	      jvirt_barray_ptr *dst_coef_arrays)
-/* Transpose source into destination */
-{
-  JDIMENSION dst_blk_x, dst_blk_y;
-  int ci, i, j, offset_x, offset_y;
-  JBLOCKARRAY src_buffer, dst_buffer;
-  JCOEFPTR src_ptr, dst_ptr;
-  jpeg_component_info *compptr;
-
-  /* Transposing pixels within a block just requires transposing the
-   * DCT coefficients.
-   * Partial iMCUs at the edges require no special treatment; we simply
-   * process all the available DCT blocks for every component.
-   */
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
-	 dst_blk_y += compptr->v_samp_factor) {
-      dst_buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
-	     dst_blk_x += compptr->h_samp_factor) {
-	  src_buffer = (*srcinfo->mem->access_virt_barray)
-	    ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
-	     (JDIMENSION) compptr->h_samp_factor, FALSE);
-	  for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
-	    src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
-	    dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
-	    for (i = 0; i < DCTSIZE; i++)
-	      for (j = 0; j < DCTSIZE; j++)
-		dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-	  }
-	}
-      }
-    }
-  }
-}
-
-
-LOCAL(void)
-do_rot_90 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	   jvirt_barray_ptr *src_coef_arrays,
-	   jvirt_barray_ptr *dst_coef_arrays)
-/* 90 degree rotation is equivalent to
- *   1. Transposing the image;
- *   2. Horizontal mirroring.
- * These two steps are merged into a single processing routine.
- */
-{
-  JDIMENSION MCU_cols, comp_width, dst_blk_x, dst_blk_y;
-  int ci, i, j, offset_x, offset_y;
-  JBLOCKARRAY src_buffer, dst_buffer;
-  JCOEFPTR src_ptr, dst_ptr;
-  jpeg_component_info *compptr;
-
-  /* Because of the horizontal mirror step, we can't process partial iMCUs
-   * at the (output) right edge properly.  They just get transposed and
-   * not mirrored.
-   */
-  MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
-
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    comp_width = MCU_cols * compptr->h_samp_factor;
-    for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
-	 dst_blk_y += compptr->v_samp_factor) {
-      dst_buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
-	     dst_blk_x += compptr->h_samp_factor) {
-	  src_buffer = (*srcinfo->mem->access_virt_barray)
-	    ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
-	     (JDIMENSION) compptr->h_samp_factor, FALSE);
-	  for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
-	    src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
-	    if (dst_blk_x < comp_width) {
-	      /* Block is within the mirrorable area. */
-	      dst_ptr = dst_buffer[offset_y]
-		[comp_width - dst_blk_x - offset_x - 1];
-	      for (i = 0; i < DCTSIZE; i++) {
-		for (j = 0; j < DCTSIZE; j++)
-		  dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-		i++;
-		for (j = 0; j < DCTSIZE; j++)
-		  dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
-	      }
-	    } else {
-	      /* Edge blocks are transposed but not mirrored. */
-	      dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
-	      for (i = 0; i < DCTSIZE; i++)
-		for (j = 0; j < DCTSIZE; j++)
-		  dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-	    }
-	  }
-	}
-      }
-    }
-  }
-}
-
-
-LOCAL(void)
-do_rot_270 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	    jvirt_barray_ptr *src_coef_arrays,
-	    jvirt_barray_ptr *dst_coef_arrays)
-/* 270 degree rotation is equivalent to
- *   1. Horizontal mirroring;
- *   2. Transposing the image.
- * These two steps are merged into a single processing routine.
- */
-{
-  JDIMENSION MCU_rows, comp_height, dst_blk_x, dst_blk_y;
-  int ci, i, j, offset_x, offset_y;
-  JBLOCKARRAY src_buffer, dst_buffer;
-  JCOEFPTR src_ptr, dst_ptr;
-  jpeg_component_info *compptr;
-
-  /* Because of the horizontal mirror step, we can't process partial iMCUs
-   * at the (output) bottom edge properly.  They just get transposed and
-   * not mirrored.
-   */
-  MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
-
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    comp_height = MCU_rows * compptr->v_samp_factor;
-    for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
-	 dst_blk_y += compptr->v_samp_factor) {
-      dst_buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
-	     dst_blk_x += compptr->h_samp_factor) {
-	  src_buffer = (*srcinfo->mem->access_virt_barray)
-	    ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
-	     (JDIMENSION) compptr->h_samp_factor, FALSE);
-	  for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
-	    dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
-	    if (dst_blk_y < comp_height) {
-	      /* Block is within the mirrorable area. */
-	      src_ptr = src_buffer[offset_x]
-		[comp_height - dst_blk_y - offset_y - 1];
-	      for (i = 0; i < DCTSIZE; i++) {
-		for (j = 0; j < DCTSIZE; j++) {
-		  dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-		  j++;
-		  dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
-		}
-	      }
-	    } else {
-	      /* Edge blocks are transposed but not mirrored. */
-	      src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
-	      for (i = 0; i < DCTSIZE; i++)
-		for (j = 0; j < DCTSIZE; j++)
-		  dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-	    }
-	  }
-	}
-      }
-    }
-  }
-}
-
-
-LOCAL(void)
-do_rot_180 (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	    jvirt_barray_ptr *src_coef_arrays,
-	    jvirt_barray_ptr *dst_coef_arrays)
-/* 180 degree rotation is equivalent to
- *   1. Vertical mirroring;
- *   2. Horizontal mirroring.
- * These two steps are merged into a single processing routine.
- */
-{
-  JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y;
-  int ci, i, j, offset_y;
-  JBLOCKARRAY src_buffer, dst_buffer;
-  JBLOCKROW src_row_ptr, dst_row_ptr;
-  JCOEFPTR src_ptr, dst_ptr;
-  jpeg_component_info *compptr;
-
-  MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
-  MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
-
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    comp_width = MCU_cols * compptr->h_samp_factor;
-    comp_height = MCU_rows * compptr->v_samp_factor;
-    for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
-	 dst_blk_y += compptr->v_samp_factor) {
-      dst_buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      if (dst_blk_y < comp_height) {
-	/* Row is within the vertically mirrorable area. */
-	src_buffer = (*srcinfo->mem->access_virt_barray)
-	  ((j_common_ptr) srcinfo, src_coef_arrays[ci],
-	   comp_height - dst_blk_y - (JDIMENSION) compptr->v_samp_factor,
-	   (JDIMENSION) compptr->v_samp_factor, FALSE);
-      } else {
-	/* Bottom-edge rows are only mirrored horizontally. */
-	src_buffer = (*srcinfo->mem->access_virt_barray)
-	  ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_y,
-	   (JDIMENSION) compptr->v_samp_factor, FALSE);
-      }
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	if (dst_blk_y < comp_height) {
-	  /* Row is within the mirrorable area. */
-	  dst_row_ptr = dst_buffer[offset_y];
-	  src_row_ptr = src_buffer[compptr->v_samp_factor - offset_y - 1];
-	  /* Process the blocks that can be mirrored both ways. */
-	  for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) {
-	    dst_ptr = dst_row_ptr[dst_blk_x];
-	    src_ptr = src_row_ptr[comp_width - dst_blk_x - 1];
-	    for (i = 0; i < DCTSIZE; i += 2) {
-	      /* For even row, negate every odd column. */
-	      for (j = 0; j < DCTSIZE; j += 2) {
-		*dst_ptr++ = *src_ptr++;
-		*dst_ptr++ = - *src_ptr++;
-	      }
-	      /* For odd row, negate every even column. */
-	      for (j = 0; j < DCTSIZE; j += 2) {
-		*dst_ptr++ = - *src_ptr++;
-		*dst_ptr++ = *src_ptr++;
-	      }
-	    }
-	  }
-	  /* Any remaining right-edge blocks are only mirrored vertically. */
-	  for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
-	    dst_ptr = dst_row_ptr[dst_blk_x];
-	    src_ptr = src_row_ptr[dst_blk_x];
-	    for (i = 0; i < DCTSIZE; i += 2) {
-	      for (j = 0; j < DCTSIZE; j++)
-		*dst_ptr++ = *src_ptr++;
-	      for (j = 0; j < DCTSIZE; j++)
-		*dst_ptr++ = - *src_ptr++;
-	    }
-	  }
-	} else {
-	  /* Remaining rows are just mirrored horizontally. */
-	  dst_row_ptr = dst_buffer[offset_y];
-	  src_row_ptr = src_buffer[offset_y];
-	  /* Process the blocks that can be mirrored. */
-	  for (dst_blk_x = 0; dst_blk_x < comp_width; dst_blk_x++) {
-	    dst_ptr = dst_row_ptr[dst_blk_x];
-	    src_ptr = src_row_ptr[comp_width - dst_blk_x - 1];
-	    for (i = 0; i < DCTSIZE2; i += 2) {
-	      *dst_ptr++ = *src_ptr++;
-	      *dst_ptr++ = - *src_ptr++;
-	    }
-	  }
-	  /* Any remaining right-edge blocks are only copied. */
-	  for (; dst_blk_x < compptr->width_in_blocks; dst_blk_x++) {
-	    dst_ptr = dst_row_ptr[dst_blk_x];
-	    src_ptr = src_row_ptr[dst_blk_x];
-	    for (i = 0; i < DCTSIZE2; i++)
-	      *dst_ptr++ = *src_ptr++;
-	  }
-	}
-      }
-    }
-  }
-}
-
-
-LOCAL(void)
-do_transverse (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	       jvirt_barray_ptr *src_coef_arrays,
-	       jvirt_barray_ptr *dst_coef_arrays)
-/* Transverse transpose is equivalent to
- *   1. 180 degree rotation;
- *   2. Transposition;
- * or
- *   1. Horizontal mirroring;
- *   2. Transposition;
- *   3. Horizontal mirroring.
- * These steps are merged into a single processing routine.
- */
-{
-  JDIMENSION MCU_cols, MCU_rows, comp_width, comp_height, dst_blk_x, dst_blk_y;
-  int ci, i, j, offset_x, offset_y;
-  JBLOCKARRAY src_buffer, dst_buffer;
-  JCOEFPTR src_ptr, dst_ptr;
-  jpeg_component_info *compptr;
-
-  MCU_cols = dstinfo->image_width / (dstinfo->max_h_samp_factor * DCTSIZE);
-  MCU_rows = dstinfo->image_height / (dstinfo->max_v_samp_factor * DCTSIZE);
-
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    comp_width = MCU_cols * compptr->h_samp_factor;
-    comp_height = MCU_rows * compptr->v_samp_factor;
-    for (dst_blk_y = 0; dst_blk_y < compptr->height_in_blocks;
-	 dst_blk_y += compptr->v_samp_factor) {
-      dst_buffer = (*srcinfo->mem->access_virt_barray)
-	((j_common_ptr) srcinfo, dst_coef_arrays[ci], dst_blk_y,
-	 (JDIMENSION) compptr->v_samp_factor, TRUE);
-      for (offset_y = 0; offset_y < compptr->v_samp_factor; offset_y++) {
-	for (dst_blk_x = 0; dst_blk_x < compptr->width_in_blocks;
-	     dst_blk_x += compptr->h_samp_factor) {
-	  src_buffer = (*srcinfo->mem->access_virt_barray)
-	    ((j_common_ptr) srcinfo, src_coef_arrays[ci], dst_blk_x,
-	     (JDIMENSION) compptr->h_samp_factor, FALSE);
-	  for (offset_x = 0; offset_x < compptr->h_samp_factor; offset_x++) {
-	    if (dst_blk_y < comp_height) {
-	      src_ptr = src_buffer[offset_x]
-		[comp_height - dst_blk_y - offset_y - 1];
-	      if (dst_blk_x < comp_width) {
-		/* Block is within the mirrorable area. */
-		dst_ptr = dst_buffer[offset_y]
-		  [comp_width - dst_blk_x - offset_x - 1];
-		for (i = 0; i < DCTSIZE; i++) {
-		  for (j = 0; j < DCTSIZE; j++) {
-		    dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-		    j++;
-		    dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
-		  }
-		  i++;
-		  for (j = 0; j < DCTSIZE; j++) {
-		    dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
-		    j++;
-		    dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-		  }
-		}
-	      } else {
-		/* Right-edge blocks are mirrored in y only */
-		dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
-		for (i = 0; i < DCTSIZE; i++) {
-		  for (j = 0; j < DCTSIZE; j++) {
-		    dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-		    j++;
-		    dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
-		  }
-		}
-	      }
-	    } else {
-	      src_ptr = src_buffer[offset_x][dst_blk_y + offset_y];
-	      if (dst_blk_x < comp_width) {
-		/* Bottom-edge blocks are mirrored in x only */
-		dst_ptr = dst_buffer[offset_y]
-		  [comp_width - dst_blk_x - offset_x - 1];
-		for (i = 0; i < DCTSIZE; i++) {
-		  for (j = 0; j < DCTSIZE; j++)
-		    dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-		  i++;
-		  for (j = 0; j < DCTSIZE; j++)
-		    dst_ptr[j*DCTSIZE+i] = -src_ptr[i*DCTSIZE+j];
-		}
-	      } else {
-		/* At lower right corner, just transpose, no mirroring */
-		dst_ptr = dst_buffer[offset_y][dst_blk_x + offset_x];
-		for (i = 0; i < DCTSIZE; i++)
-		  for (j = 0; j < DCTSIZE; j++)
-		    dst_ptr[j*DCTSIZE+i] = src_ptr[i*DCTSIZE+j];
-	      }
-	    }
-	  }
-	}
-      }
-    }
-  }
-}
-
-
-/* Request any required workspace.
- *
- * We allocate the workspace virtual arrays from the source decompression
- * object, so that all the arrays (both the original data and the workspace)
- * will be taken into account while making memory management decisions.
- * Hence, this routine must be called after jpeg_read_header (which reads
- * the image dimensions) and before jpeg_read_coefficients (which realizes
- * the source's virtual arrays).
- */
-
-GLOBAL(void)
-jtransform_request_workspace (j_decompress_ptr srcinfo,
-			      jpeg_transform_info *info)
-{
-  jvirt_barray_ptr *coef_arrays = NULL;
-  jpeg_component_info *compptr;
-  int ci;
-
-  if (info->force_grayscale &&
-      srcinfo->jpeg_color_space == JCS_YCbCr &&
-      srcinfo->num_components == 3) {
-    /* We'll only process the first component */
-    info->num_components = 1;
-  } else {
-    /* Process all the components */
-    info->num_components = srcinfo->num_components;
-  }
-
-  switch (info->transform) {
-  case JXFORM_NONE:
-  case JXFORM_FLIP_H:
-    /* Don't need a workspace array */
-    break;
-  case JXFORM_FLIP_V:
-  case JXFORM_ROT_180:
-    /* Need workspace arrays having same dimensions as source image.
-     * Note that we allocate arrays padded out to the next iMCU boundary,
-     * so that transform routines need not worry about missing edge blocks.
-     */
-    coef_arrays = (jvirt_barray_ptr *)
-      (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE,
-	SIZEOF(jvirt_barray_ptr) * info->num_components);
-    for (ci = 0; ci < info->num_components; ci++) {
-      compptr = srcinfo->comp_info + ci;
-      coef_arrays[ci] = (*srcinfo->mem->request_virt_barray)
-	((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE,
-	 (JDIMENSION) jround_up((long) compptr->width_in_blocks,
-				(long) compptr->h_samp_factor),
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor),
-	 (JDIMENSION) compptr->v_samp_factor);
-    }
-    break;
-  case JXFORM_TRANSPOSE:
-  case JXFORM_TRANSVERSE:
-  case JXFORM_ROT_90:
-  case JXFORM_ROT_270:
-    /* Need workspace arrays having transposed dimensions.
-     * Note that we allocate arrays padded out to the next iMCU boundary,
-     * so that transform routines need not worry about missing edge blocks.
-     */
-    coef_arrays = (jvirt_barray_ptr *)
-      (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE,
-	SIZEOF(jvirt_barray_ptr) * info->num_components);
-    for (ci = 0; ci < info->num_components; ci++) {
-      compptr = srcinfo->comp_info + ci;
-      coef_arrays[ci] = (*srcinfo->mem->request_virt_barray)
-	((j_common_ptr) srcinfo, JPOOL_IMAGE, FALSE,
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor),
-	 (JDIMENSION) jround_up((long) compptr->width_in_blocks,
-				(long) compptr->h_samp_factor),
-	 (JDIMENSION) compptr->h_samp_factor);
-    }
-    break;
-  }
-  info->workspace_coef_arrays = coef_arrays;
-}
-
-
-/* Transpose destination image parameters */
-
-LOCAL(void)
-transpose_critical_parameters (j_compress_ptr dstinfo)
-{
-  int tblno, i, j, ci, itemp;
-  jpeg_component_info *compptr;
-  JQUANT_TBL *qtblptr;
-  JDIMENSION dtemp;
-  UINT16 qtemp;
-
-  /* Transpose basic image dimensions */
-  dtemp = dstinfo->image_width;
-  dstinfo->image_width = dstinfo->image_height;
-  dstinfo->image_height = dtemp;
-
-  /* Transpose sampling factors */
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    compptr = dstinfo->comp_info + ci;
-    itemp = compptr->h_samp_factor;
-    compptr->h_samp_factor = compptr->v_samp_factor;
-    compptr->v_samp_factor = itemp;
-  }
-
-  /* Transpose quantization tables */
-  for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) {
-    qtblptr = dstinfo->quant_tbl_ptrs[tblno];
-    if (qtblptr != NULL) {
-      for (i = 0; i < DCTSIZE; i++) {
-	for (j = 0; j < i; j++) {
-	  qtemp = qtblptr->quantval[i*DCTSIZE+j];
-	  qtblptr->quantval[i*DCTSIZE+j] = qtblptr->quantval[j*DCTSIZE+i];
-	  qtblptr->quantval[j*DCTSIZE+i] = qtemp;
-	}
-      }
-    }
-  }
-}
-
-
-/* Trim off any partial iMCUs on the indicated destination edge */
-
-LOCAL(void)
-trim_right_edge (j_compress_ptr dstinfo)
-{
-  int ci, max_h_samp_factor;
-  JDIMENSION MCU_cols;
-
-  /* We have to compute max_h_samp_factor ourselves,
-   * because it hasn't been set yet in the destination
-   * (and we don't want to use the source's value).
-   */
-  max_h_samp_factor = 1;
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    int h_samp_factor = dstinfo->comp_info[ci].h_samp_factor;
-    max_h_samp_factor = MAX(max_h_samp_factor, h_samp_factor);
-  }
-  MCU_cols = dstinfo->image_width / (max_h_samp_factor * DCTSIZE);
-  if (MCU_cols > 0)		/* can't trim to 0 pixels */
-    dstinfo->image_width = MCU_cols * (max_h_samp_factor * DCTSIZE);
-}
-
-LOCAL(void)
-trim_bottom_edge (j_compress_ptr dstinfo)
-{
-  int ci, max_v_samp_factor;
-  JDIMENSION MCU_rows;
-
-  /* We have to compute max_v_samp_factor ourselves,
-   * because it hasn't been set yet in the destination
-   * (and we don't want to use the source's value).
-   */
-  max_v_samp_factor = 1;
-  for (ci = 0; ci < dstinfo->num_components; ci++) {
-    int v_samp_factor = dstinfo->comp_info[ci].v_samp_factor;
-    max_v_samp_factor = MAX(max_v_samp_factor, v_samp_factor);
-  }
-  MCU_rows = dstinfo->image_height / (max_v_samp_factor * DCTSIZE);
-  if (MCU_rows > 0)		/* can't trim to 0 pixels */
-    dstinfo->image_height = MCU_rows * (max_v_samp_factor * DCTSIZE);
-}
-
-
-/* Adjust output image parameters as needed.
- *
- * This must be called after jpeg_copy_critical_parameters()
- * and before jpeg_write_coefficients().
- *
- * The return value is the set of virtual coefficient arrays to be written
- * (either the ones allocated by jtransform_request_workspace, or the
- * original source data arrays).  The caller will need to pass this value
- * to jpeg_write_coefficients().
- */
-
-GLOBAL(jvirt_barray_ptr *)
-jtransform_adjust_parameters (j_decompress_ptr,
-			      j_compress_ptr dstinfo,
-			      jvirt_barray_ptr *src_coef_arrays,
-			      jpeg_transform_info *info)
-{
-  /* If force-to-grayscale is requested, adjust destination parameters */
-  if (info->force_grayscale) {
-    /* We use jpeg_set_colorspace to make sure subsidiary settings get fixed
-     * properly.  Among other things, the target h_samp_factor & v_samp_factor
-     * will get set to 1, which typically won't match the source.
-     * In fact we do this even if the source is already grayscale; that
-     * provides an easy way of coercing a grayscale JPEG with funny sampling
-     * factors to the customary 1,1.  (Some decoders fail on other factors.)
-     */
-    if ((dstinfo->jpeg_color_space == JCS_YCbCr &&
-	 dstinfo->num_components == 3) ||
-	(dstinfo->jpeg_color_space == JCS_GRAYSCALE &&
-	 dstinfo->num_components == 1)) {
-      /* We have to preserve the source's quantization table number. */
-      int sv_quant_tbl_no = dstinfo->comp_info[0].quant_tbl_no;
-      jpeg_set_colorspace(dstinfo, JCS_GRAYSCALE);
-      dstinfo->comp_info[0].quant_tbl_no = sv_quant_tbl_no;
-    } else {
-      /* Sorry, can't do it */
-      ERREXIT(dstinfo, JERR_CONVERSION_NOTIMPL);
-    }
-  }
-
-  /* Correct the destination's image dimensions etc if necessary */
-  switch (info->transform) {
-  case JXFORM_NONE:
-    /* Nothing to do */
-    break;
-  case JXFORM_FLIP_H:
-    if (info->trim)
-      trim_right_edge(dstinfo);
-    break;
-  case JXFORM_FLIP_V:
-    if (info->trim)
-      trim_bottom_edge(dstinfo);
-    break;
-  case JXFORM_TRANSPOSE:
-    transpose_critical_parameters(dstinfo);
-    /* transpose does NOT have to trim anything */
-    break;
-  case JXFORM_TRANSVERSE:
-    transpose_critical_parameters(dstinfo);
-    if (info->trim) {
-      trim_right_edge(dstinfo);
-      trim_bottom_edge(dstinfo);
-    }
-    break;
-  case JXFORM_ROT_90:
-    transpose_critical_parameters(dstinfo);
-    if (info->trim)
-      trim_right_edge(dstinfo);
-    break;
-  case JXFORM_ROT_180:
-    if (info->trim) {
-      trim_right_edge(dstinfo);
-      trim_bottom_edge(dstinfo);
-    }
-    break;
-  case JXFORM_ROT_270:
-    transpose_critical_parameters(dstinfo);
-    if (info->trim)
-      trim_bottom_edge(dstinfo);
-    break;
-  }
-
-  /* Return the appropriate output data set */
-  if (info->workspace_coef_arrays != NULL)
-    return info->workspace_coef_arrays;
-  return src_coef_arrays;
-}
-
-
-/* Execute the actual transformation, if any.
- *
- * This must be called *after* jpeg_write_coefficients, because it depends
- * on jpeg_write_coefficients to have computed subsidiary values such as
- * the per-component width and height fields in the destination object.
- *
- * Note that some transformations will modify the source data arrays!
- */
-
-GLOBAL(void)
-jtransform_execute_transformation (j_decompress_ptr srcinfo,
-				   j_compress_ptr dstinfo,
-				   jvirt_barray_ptr *src_coef_arrays,
-				   jpeg_transform_info *info)
-{
-  jvirt_barray_ptr *dst_coef_arrays = info->workspace_coef_arrays;
-
-  switch (info->transform) {
-  case JXFORM_NONE:
-    break;
-  case JXFORM_FLIP_H:
-    do_flip_h(srcinfo, dstinfo, src_coef_arrays);
-    break;
-  case JXFORM_FLIP_V:
-    do_flip_v(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
-    break;
-  case JXFORM_TRANSPOSE:
-    do_transpose(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
-    break;
-  case JXFORM_TRANSVERSE:
-    do_transverse(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
-    break;
-  case JXFORM_ROT_90:
-    do_rot_90(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
-    break;
-  case JXFORM_ROT_180:
-    do_rot_180(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
-    break;
-  case JXFORM_ROT_270:
-    do_rot_270(srcinfo, dstinfo, src_coef_arrays, dst_coef_arrays);
-    break;
-  }
-}
-
-#endif /* TRANSFORMS_SUPPORTED */
-
-
-/* Setup decompression object to save desired markers in memory.
- * This must be called before jpeg_read_header() to have the desired effect.
- */
-
-GLOBAL(void)
-jcopy_markers_setup (j_decompress_ptr srcinfo, JCOPY_OPTION option)
-{
-#ifdef SAVE_MARKERS_SUPPORTED
-  int m;
-
-  /* Save comments except under NONE option */
-  if (option != JCOPYOPT_NONE) {
-    jpeg_save_markers(srcinfo, JPEG_COM, 0xFFFF);
-  }
-  /* Save all types of APPn markers iff ALL option */
-  if (option == JCOPYOPT_ALL) {
-    for (m = 0; m < 16; m++)
-      jpeg_save_markers(srcinfo, JPEG_APP0 + m, 0xFFFF);
-  }
-#endif /* SAVE_MARKERS_SUPPORTED */
-}
-
-/* Copy markers saved in the given source object to the destination object.
- * This should be called just after jpeg_start_compress() or
- * jpeg_write_coefficients().
- * Note that those routines will have written the SOI, and also the
- * JFIF APP0 or Adobe APP14 markers if selected.
- */
-
-GLOBAL(void)
-jcopy_markers_execute (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-		       JCOPY_OPTION)
-{
-  jpeg_saved_marker_ptr marker;
-
-  /* In the current implementation, we don't actually need to examine the
-   * option flag here; we just copy everything that got saved.
-   * But to avoid confusion, we do not output JFIF and Adobe APP14 markers
-   * if the encoder library already wrote one.
-   */
-  for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) {
-    if (dstinfo->write_JFIF_header &&
-	marker->marker == JPEG_APP0 &&
-	marker->data_length >= 5 &&
-	GETJOCTET(marker->data[0]) == 0x4A &&
-	GETJOCTET(marker->data[1]) == 0x46 &&
-	GETJOCTET(marker->data[2]) == 0x49 &&
-	GETJOCTET(marker->data[3]) == 0x46 &&
-	GETJOCTET(marker->data[4]) == 0)
-      continue;			/* reject duplicate JFIF */
-    if (dstinfo->write_Adobe_marker &&
-	marker->marker == JPEG_APP0+14 &&
-	marker->data_length >= 5 &&
-	GETJOCTET(marker->data[0]) == 0x41 &&
-	GETJOCTET(marker->data[1]) == 0x64 &&
-	GETJOCTET(marker->data[2]) == 0x6F &&
-	GETJOCTET(marker->data[3]) == 0x62 &&
-	GETJOCTET(marker->data[4]) == 0x65)
-      continue;			/* reject duplicate Adobe */
-#ifdef NEED_FAR_POINTERS
-    /* We could use jpeg_write_marker if the data weren't FAR... */
-    {
-      unsigned int i;
-      jpeg_write_m_header(dstinfo, marker->marker, marker->data_length);
-      for (i = 0; i < marker->data_length; i++)
-	jpeg_write_m_byte(dstinfo, marker->data[i]);
-    }
-#else
-    jpeg_write_marker(dstinfo, marker->marker,
-		      marker->data, marker->data_length);
-#endif
-  }
-}
diff --git a/modules/juce_graphics/image_formats/jpglib/transupp.h b/modules/juce_graphics/image_formats/jpglib/transupp.h
deleted file mode 100644
index eb0b055..0000000
--- a/modules/juce_graphics/image_formats/jpglib/transupp.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * transupp.h
- *
- * Copyright (C) 1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains declarations for image transformation routines and
- * other utility code used by the jpegtran sample application.  These are
- * NOT part of the core JPEG library.  But we keep these routines separate
- * from jpegtran.c to ease the task of maintaining jpegtran-like programs
- * that have other user interfaces.
- *
- * NOTE: all the routines declared here have very specific requirements
- * about when they are to be executed during the reading and writing of the
- * source and destination files.  See the comments in transupp.c, or see
- * jpegtran.c for an example of correct usage.
- */
-
-/* If you happen not to want the image transform support, disable it here */
-#ifndef TRANSFORMS_SUPPORTED
-#define TRANSFORMS_SUPPORTED 1		/* 0 disables transform code */
-#endif
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jtransform_request_workspace		jTrRequest
-#define jtransform_adjust_parameters		jTrAdjust
-#define jtransform_execute_transformation	jTrExec
-#define jcopy_markers_setup			jCMrkSetup
-#define jcopy_markers_execute			jCMrkExec
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/*
- * Codes for supported types of image transformations.
- */
-
-typedef enum {
-	JXFORM_NONE,		/* no transformation */
-	JXFORM_FLIP_H,		/* horizontal flip */
-	JXFORM_FLIP_V,		/* vertical flip */
-	JXFORM_TRANSPOSE,	/* transpose across UL-to-LR axis */
-	JXFORM_TRANSVERSE,	/* transpose across UR-to-LL axis */
-	JXFORM_ROT_90,		/* 90-degree clockwise rotation */
-	JXFORM_ROT_180,		/* 180-degree rotation */
-	JXFORM_ROT_270		/* 270-degree clockwise (or 90 ccw) */
-} JXFORM_CODE;
-
-/*
- * Although rotating and flipping data expressed as DCT coefficients is not
- * hard, there is an asymmetry in the JPEG format specification for images
- * whose dimensions aren't multiples of the iMCU size.  The right and bottom
- * image edges are padded out to the next iMCU boundary with junk data; but
- * no padding is possible at the top and left edges.  If we were to flip
- * the whole image including the pad data, then pad garbage would become
- * visible at the top and/or left, and real pixels would disappear into the
- * pad margins --- perhaps permanently, since encoders & decoders may not
- * bother to preserve DCT blocks that appear to be completely outside the
- * nominal image area.  So, we have to exclude any partial iMCUs from the
- * basic transformation.
- *
- * Transpose is the only transformation that can handle partial iMCUs at the
- * right and bottom edges completely cleanly.  flip_h can flip partial iMCUs
- * at the bottom, but leaves any partial iMCUs at the right edge untouched.
- * Similarly flip_v leaves any partial iMCUs at the bottom edge untouched.
- * The other transforms are defined as combinations of these basic transforms
- * and process edge blocks in a way that preserves the equivalence.
- *
- * The "trim" option causes untransformable partial iMCUs to be dropped;
- * this is not strictly lossless, but it usually gives the best-looking
- * result for odd-size images.  Note that when this option is active,
- * the expected mathematical equivalences between the transforms may not hold.
- * (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim
- * followed by -rot 180 -trim trims both edges.)
- *
- * We also offer a "force to grayscale" option, which simply discards the
- * chrominance channels of a YCbCr image.  This is lossless in the sense that
- * the luminance channel is preserved exactly.  It's not the same kind of
- * thing as the rotate/flip transformations, but it's convenient to handle it
- * as part of this package, mainly because the transformation routines have to
- * be aware of the option to know how many components to work on.
- */
-
-typedef struct {
-  /* Options: set by caller */
-  JXFORM_CODE transform;	/* image transform operator */
-  boolean trim;			/* if TRUE, trim partial MCUs as needed */
-  boolean force_grayscale;	/* if TRUE, convert color image to grayscale */
-
-  /* Internal workspace: caller should not touch these */
-  int num_components;		/* # of components in workspace */
-  jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */
-} jpeg_transform_info;
-
-
-#if TRANSFORMS_SUPPORTED
-
-/* Request any required workspace */
-EXTERN(void) jtransform_request_workspace
-	JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info));
-/* Adjust output image parameters */
-EXTERN(jvirt_barray_ptr *) jtransform_adjust_parameters
-	JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	     jvirt_barray_ptr *src_coef_arrays,
-	     jpeg_transform_info *info));
-/* Execute the actual transformation, if any */
-EXTERN(void) jtransform_execute_transformation
-	JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	     jvirt_barray_ptr *src_coef_arrays,
-	     jpeg_transform_info *info));
-
-#endif /* TRANSFORMS_SUPPORTED */
-
-
-/*
- * Support for copying optional markers from source to destination file.
- */
-
-typedef enum {
-	JCOPYOPT_NONE,		/* copy no optional markers */
-	JCOPYOPT_COMMENTS,	/* copy only comment (COM) markers */
-	JCOPYOPT_ALL		/* copy all optional markers */
-} JCOPY_OPTION;
-
-#define JCOPYOPT_DEFAULT  JCOPYOPT_COMMENTS	/* recommended default */
-
-/* Setup decompression object to save desired markers in memory */
-EXTERN(void) jcopy_markers_setup
-	JPP((j_decompress_ptr srcinfo, JCOPY_OPTION option));
-/* Copy markers saved in the given source object to the destination object */
-EXTERN(void) jcopy_markers_execute
-	JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
-	     JCOPY_OPTION option));
diff --git a/modules/juce_graphics/image_formats/pnglib/LICENSE b/modules/juce_graphics/image_formats/pnglib/LICENSE
deleted file mode 100644
index 462c70d..0000000
--- a/modules/juce_graphics/image_formats/pnglib/LICENSE
+++ /dev/null
@@ -1,109 +0,0 @@
-
-This copy of the libpng notices is provided for your convenience.  In case of
-any discrepancy between this copy and the notices in the file png.h that is
-included in the libpng distribution, the latter shall prevail.
-
-COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
-
-If you modify libpng you may insert additional notices immediately following
-this sentence.
-
-libpng versions 1.2.6, August 15, 2004, through 1.2.21, October 4, 2007, are
-Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.2.5
-with the following individual added to the list of Contributing Authors
-
-   Cosmin Truta
-
-libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
-Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.0.6
-with the following individuals added to the list of Contributing Authors
-
-   Simon-Pierre Cadieux
-   Eric S. Raymond
-   Gilles Vollant
-
-and with the following additions to the disclaimer:
-
-   There is no warranty against interference with your enjoyment of the
-   library or against infringement.  There is no warranty that our
-   efforts or the library will fulfill any of your particular purposes
-   or needs.  This library is provided with all faults, and the entire
-   risk of satisfactory quality, performance, accuracy, and effort is with
-   the user.
-
-libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
-Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-0.96,
-with the following individuals added to the list of Contributing Authors:
-
-   Tom Lane
-   Glenn Randers-Pehrson
-   Willem van Schaik
-
-libpng versions 0.89, June 1996, through 0.96, May 1997, are
-Copyright (c) 1996, 1997 Andreas Dilger
-Distributed according to the same disclaimer and license as libpng-0.88,
-with the following individuals added to the list of Contributing Authors:
-
-   John Bowler
-   Kevin Bracey
-   Sam Bushell
-   Magnus Holmgren
-   Greg Roelofs
-   Tom Tanner
-
-libpng versions 0.5, May 1995, through 0.88, January 1996, are
-Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
-
-For the purposes of this copyright and license, "Contributing Authors"
-is defined as the following set of individuals:
-
-   Andreas Dilger
-   Dave Martindale
-   Guy Eric Schalnat
-   Paul Schmidt
-   Tim Wegner
-
-The PNG Reference Library is supplied "AS IS".  The Contributing Authors
-and Group 42, Inc. disclaim all warranties, expressed or implied,
-including, without limitation, the warranties of merchantability and of
-fitness for any purpose.  The Contributing Authors and Group 42, Inc.
-assume no liability for direct, indirect, incidental, special, exemplary,
-or consequential damages, which may result from the use of the PNG
-Reference Library, even if advised of the possibility of such damage.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-source code, or portions hereof, for any purpose, without fee, subject
-to the following restrictions:
-
-1. The origin of this source code must not be misrepresented.
-
-2. Altered versions must be plainly marked as such and must not
-   be misrepresented as being the original source.
-
-3. This Copyright notice may not be removed or altered from any
-   source or altered source distribution.
-
-The Contributing Authors and Group 42, Inc. specifically permit, without
-fee, and encourage the use of this source code as a component to
-supporting the PNG file format in commercial products.  If you use this
-source code in a product, acknowledgment is not required but would be
-appreciated.
-
-
-A "png_get_copyright" function is available, for convenient use in "about"
-boxes and the like:
-
-   printf("%s",png_get_copyright(NULL));
-
-Also, the PNG logo (in PNG format, of course) is supplied in the
-files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
-
-Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
-certification mark of the Open Source Initiative.
-
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-October 4, 2007
diff --git a/modules/juce_graphics/image_formats/pnglib/libpng_readme.txt b/modules/juce_graphics/image_formats/pnglib/libpng_readme.txt
deleted file mode 100644
index 75a4595..0000000
--- a/modules/juce_graphics/image_formats/pnglib/libpng_readme.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-These files are from the libpng library - http://www.libpng.org/
diff --git a/modules/juce_graphics/image_formats/pnglib/png.c b/modules/juce_graphics/image_formats/pnglib/png.c
deleted file mode 100644
index 67e7e2e..0000000
--- a/modules/juce_graphics/image_formats/pnglib/png.c
+++ /dev/null
@@ -1,4295 +0,0 @@
-
-/* png.c - location for general purpose libpng functions
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_1 Your_png_h_is_not_version_1_6_1;
-
-/* Tells libpng that we have already handled the first "num_bytes" bytes
- * of the PNG file signature.  If the PNG data is embedded into another
- * stream we can set num_bytes = 8 so that libpng will not attempt to read
- * or write any of the magic bytes before it starts on the IHDR.
- */
-
-#ifdef PNG_READ_SUPPORTED
-void PNGAPI
-png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
-{
-   png_debug(1, "in png_set_sig_bytes");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (num_bytes > 8)
-      png_error(png_ptr, "Too many bytes for PNG signature");
-
-   png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes);
-}
-
-/* Checks whether the supplied bytes match the PNG signature.  We allow
- * checking less than the full 8-byte signature so that those apps that
- * already read the first few bytes of a file to determine the file type
- * can simply check the remaining bytes for extra assurance.  Returns
- * an integer less than, equal to, or greater than zero if sig is found,
- * respectively, to be less than, to match, or be greater than the correct
- * PNG signature (this is the same behavior as strcmp, memcmp, etc).
- */
-int PNGAPI
-png_sig_cmp(png_const_bytep sig, png_size_t start, png_size_t num_to_check)
-{
-   png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
-
-   if (num_to_check > 8)
-      num_to_check = 8;
-
-   else if (num_to_check < 1)
-      return (-1);
-
-   if (start > 7)
-      return (-1);
-
-   if (start + num_to_check > 8)
-      num_to_check = 8 - start;
-
-   return ((int)(memcmp(&sig[start], &png_signature[start], num_to_check)));
-}
-
-#endif /* PNG_READ_SUPPORTED */
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Function to allocate memory for zlib */
-PNG_FUNCTION(voidpf /* PRIVATE */,
-png_zalloc,(voidpf png_ptr, uInt items, uInt size),PNG_ALLOCATED)
-{
-   png_alloc_size_t num_bytes = size;
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   if (items >= (~(png_alloc_size_t)0)/size)
-   {
-      png_warning (png_voidcast(png_structrp, png_ptr),
-         "Potential overflow in png_zalloc()");
-      return NULL;
-   }
-
-   num_bytes *= items;
-   return png_malloc_warn(png_voidcast(png_structrp, png_ptr), num_bytes);
-}
-
-/* Function to free memory for zlib */
-void /* PRIVATE */
-png_zfree(voidpf png_ptr, voidpf ptr)
-{
-   png_free(png_voidcast(png_const_structrp,png_ptr), ptr);
-}
-
-/* Reset the CRC variable to 32 bits of 1's.  Care must be taken
- * in case CRC is > 32 bits to leave the top bits 0.
- */
-void /* PRIVATE */
-png_reset_crc(png_structrp png_ptr)
-{
-   /* The cast is safe because the crc is a 32 bit value. */
-   png_ptr->crc = (png_uint_32)crc32(0, Z_NULL, 0);
-}
-
-/* Calculate the CRC over a section of data.  We can only pass as
- * much data to this routine as the largest single buffer size.  We
- * also check that this data will actually be used before going to the
- * trouble of calculating it.
- */
-void /* PRIVATE */
-png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, png_size_t length)
-{
-   int need_crc = 1;
-
-   if (PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name))
-   {
-      if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
-          (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
-         need_crc = 0;
-   }
-
-   else /* critical */
-   {
-      if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
-         need_crc = 0;
-   }
-
-   /* 'uLong' is defined in zlib.h as unsigned long; this means that on some
-    * systems it is a 64 bit value.  crc32, however, returns 32 bits so the
-    * following cast is safe.  'uInt' may be no more than 16 bits, so it is
-    * necessary to perform a loop here.
-    */
-   if (need_crc && length > 0)
-   {
-      uLong crc = png_ptr->crc; /* Should never issue a warning */
-
-      do
-      {
-         uInt safe_length = (uInt)length;
-         if (safe_length == 0)
-            safe_length = (uInt)-1; /* evil, but safe */
-
-         crc = crc32(crc, ptr, safe_length);
-
-         /* The following should never issue compiler warnings; if they do the
-          * target system has characteristics that will probably violate other
-          * assumptions within the libpng code.
-          */
-         ptr += safe_length;
-         length -= safe_length;
-      }
-      while (length > 0);
-
-      /* And the following is always safe because the crc is only 32 bits. */
-      png_ptr->crc = (png_uint_32)crc;
-   }
-}
-
-/* Check a user supplied version number, called from both read and write
- * functions that create a png_struct.
- */
-int
-png_user_version_check(png_structrp png_ptr, png_const_charp user_png_ver)
-{
-   if (user_png_ver)
-   {
-      int i = 0;
-
-      do
-      {
-         if (user_png_ver[i] != png_libpng_ver[i])
-            png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-      } while (png_libpng_ver[i++]);
-   }
-
-   else
-      png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-
-   if (png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH)
-   {
-     /* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
-      * we must recompile any applications that use any older library version.
-      * For versions after libpng 1.0, we will be compatible, so we need
-      * only check the first and third digits (note that when we reach version
-      * 1.10 we will need to check the fourth symbol, namely user_png_ver[3]).
-      */
-      if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
-          (user_png_ver[0] == '1' && (user_png_ver[2] != png_libpng_ver[2] ||
-          user_png_ver[3] != png_libpng_ver[3])) ||
-          (user_png_ver[0] == '0' && user_png_ver[2] < '9'))
-      {
-#ifdef PNG_WARNINGS_SUPPORTED
-         size_t pos = 0;
-         char m[128];
-
-         pos = png_safecat(m, (sizeof m), pos,
-             "Application built with libpng-");
-         pos = png_safecat(m, (sizeof m), pos, user_png_ver);
-         pos = png_safecat(m, (sizeof m), pos, " but running with ");
-         png_safecat(m, (sizeof m), pos, png_libpng_ver);
-
-         png_warning(png_ptr, m);
-#endif
-
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-         png_ptr->flags = 0;
-#endif
-
-         return 0;
-      }
-   }
-
-   /* Success return. */
-   return 1;
-}
-
-/* Generic function to create a png_struct for either read or write - this
- * contains the common initialization.
- */
-PNG_FUNCTION(png_structp /* PRIVATE */,
-png_create_png_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp,
-    png_malloc_ptr, png_free_ptr),PNG_ALLOCATED)
-{
-   png_struct create_struct;
-#  ifdef PNG_SETJMP_SUPPORTED
-      jmp_buf create_jmp_buf;
-#  endif
-
-   /* This temporary stack-allocated structure is used to provide a place to
-    * build enough context to allow the user provided memory allocator (if any)
-    * to be called.
-    */
-   memset(&create_struct, 0, (sizeof create_struct));
-
-   /* Added at libpng-1.2.6 */
-#  ifdef PNG_USER_LIMITS_SUPPORTED
-      create_struct.user_width_max = PNG_USER_WIDTH_MAX;
-      create_struct.user_height_max = PNG_USER_HEIGHT_MAX;
-
-#     ifdef PNG_USER_CHUNK_CACHE_MAX
-         /* Added at libpng-1.2.43 and 1.4.0 */
-         create_struct.user_chunk_cache_max = PNG_USER_CHUNK_CACHE_MAX;
-#     endif
-
-#     ifdef PNG_USER_CHUNK_MALLOC_MAX
-         /* Added at libpng-1.2.43 and 1.4.1, required only for read but exists
-          * in png_struct regardless.
-          */
-         create_struct.user_chunk_malloc_max = PNG_USER_CHUNK_MALLOC_MAX;
-#     endif
-#  endif
-
-   /* The following two API calls simply set fields in png_struct, so it is safe
-    * to do them now even though error handling is not yet set up.
-    */
-#  ifdef PNG_USER_MEM_SUPPORTED
-      png_set_mem_fn(&create_struct, mem_ptr, malloc_fn, free_fn);
-#  endif
-
-   /* (*error_fn) can return control to the caller after the error_ptr is set,
-    * this will result in a memory leak unless the error_fn does something
-    * extremely sophisticated.  The design lacks merit but is implicit in the
-    * API.
-    */
-   png_set_error_fn(&create_struct, error_ptr, error_fn, warn_fn);
-
-#  ifdef PNG_SETJMP_SUPPORTED
-      if (!setjmp(create_jmp_buf))
-      {
-         /* Temporarily fake out the longjmp information until we have
-          * successfully completed this function.  This only works if we have
-          * setjmp() support compiled in, but it is safe - this stuff should
-          * never happen.
-          */
-         create_struct.jmp_buf_ptr = &create_jmp_buf;
-         create_struct.jmp_buf_size = 0; /*stack allocation*/
-         create_struct.longjmp_fn = longjmp;
-#  else
-      {
-#  endif
-         /* Call the general version checker (shared with read and write code):
-          */
-         if (png_user_version_check(&create_struct, user_png_ver))
-         {
-            png_structrp png_ptr = png_voidcast(png_structrp,
-               png_malloc_warn(&create_struct, (sizeof *png_ptr)));
-
-            if (png_ptr != NULL)
-            {
-               /* png_ptr->zstream holds a back-pointer to the png_struct, so
-                * this can only be done now:
-                */
-               create_struct.zstream.zalloc = png_zalloc;
-               create_struct.zstream.zfree = png_zfree;
-               create_struct.zstream.opaque = png_ptr;
-
-#              ifdef PNG_SETJMP_SUPPORTED
-                  /* Eliminate the local error handling: */
-                  create_struct.jmp_buf_ptr = NULL;
-                  create_struct.jmp_buf_size = 0;
-                  create_struct.longjmp_fn = 0;
-#              endif
-
-               *png_ptr = create_struct;
-
-               /* This is the successful return point */
-               return png_ptr;
-            }
-         }
-      }
-
-   /* A longjmp because of a bug in the application storage allocator or a
-    * simple failure to allocate the png_struct.
-    */
-   return NULL;
-}
-
-/* Allocate the memory for an info_struct for the application. */
-PNG_FUNCTION(png_infop,PNGAPI
-png_create_info_struct,(png_const_structrp png_ptr),PNG_ALLOCATED)
-{
-   png_inforp info_ptr;
-
-   png_debug(1, "in png_create_info_struct");
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   /* Use the internal API that does not (or at least should not) error out, so
-    * that this call always returns ok.  The application typically sets up the
-    * error handling *after* creating the info_struct because this is the way it
-    * has always been done in 'example.c'.
-    */
-   info_ptr = png_voidcast(png_inforp, png_malloc_base(png_ptr,
-      (sizeof *info_ptr)));
-
-   if (info_ptr != NULL)
-      memset(info_ptr, 0, (sizeof *info_ptr));
-
-   return info_ptr;
-}
-
-/* This function frees the memory associated with a single info struct.
- * Normally, one would use either png_destroy_read_struct() or
- * png_destroy_write_struct() to free an info struct, but this may be
- * useful for some applications.  From libpng 1.6.0 this function is also used
- * internally to implement the png_info release part of the 'struct' destroy
- * APIs.  This ensures that all possible approaches free the same data (all of
- * it).
- */
-void PNGAPI
-png_destroy_info_struct(png_const_structrp png_ptr, png_infopp info_ptr_ptr)
-{
-   png_inforp info_ptr = NULL;
-
-   png_debug(1, "in png_destroy_info_struct");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (info_ptr_ptr != NULL)
-      info_ptr = *info_ptr_ptr;
-
-   if (info_ptr != NULL)
-   {
-      /* Do this first in case of an error below; if the app implements its own
-       * memory management this can lead to png_free calling png_error, which
-       * will abort this routine and return control to the app error handler.
-       * An infinite loop may result if it then tries to free the same info
-       * ptr.
-       */
-      *info_ptr_ptr = NULL;
-
-      png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
-      memset(info_ptr, 0, (sizeof *info_ptr));
-      png_free(png_ptr, info_ptr);
-   }
-}
-
-/* Initialize the info structure.  This is now an internal function (0.89)
- * and applications using it are urged to use png_create_info_struct()
- * instead.  Use deprecated in 1.6.0, internal use removed (used internally it
- * is just a memset).
- *
- * NOTE: it is almost inconceivable that this API is used because it bypasses
- * the user-memory mechanism and the user error handling/warning mechanisms in
- * those cases where it does anything other than a memset.
- */
-PNG_FUNCTION(void,PNGAPI
-png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
-   PNG_DEPRECATED)
-{
-   png_inforp info_ptr = *ptr_ptr;
-
-   png_debug(1, "in png_info_init_3");
-
-   if (info_ptr == NULL)
-      return;
-
-   if ((sizeof (png_info)) > png_info_struct_size)
-   {
-      *ptr_ptr = NULL;
-      /* The following line is why this API should not be used: */
-      free(info_ptr);
-      info_ptr = png_voidcast(png_inforp, png_malloc_base(NULL,
-         (sizeof *info_ptr)));
-      *ptr_ptr = info_ptr;
-   }
-
-   /* Set everything to 0 */
-   memset(info_ptr, 0, (sizeof *info_ptr));
-}
-
-/* The following API is not called internally */
-void PNGAPI
-png_data_freer(png_const_structrp png_ptr, png_inforp info_ptr,
-   int freer, png_uint_32 mask)
-{
-   png_debug(1, "in png_data_freer");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (freer == PNG_DESTROY_WILL_FREE_DATA)
-      info_ptr->free_me |= mask;
-
-   else if (freer == PNG_USER_WILL_FREE_DATA)
-      info_ptr->free_me &= ~mask;
-
-   else
-      png_error(png_ptr, "Unknown freer parameter in png_data_freer");
-}
-
-void PNGAPI
-png_free_data(png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 mask,
-   int num)
-{
-   png_debug(1, "in png_free_data");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-#ifdef PNG_TEXT_SUPPORTED
-   /* Free text item num or (if num == -1) all text items */
-   if ((mask & PNG_FREE_TEXT) & info_ptr->free_me)
-   {
-      if (num != -1)
-      {
-         if (info_ptr->text && info_ptr->text[num].key)
-         {
-            png_free(png_ptr, info_ptr->text[num].key);
-            info_ptr->text[num].key = NULL;
-         }
-      }
-
-      else
-      {
-         int i;
-         for (i = 0; i < info_ptr->num_text; i++)
-             png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i);
-         png_free(png_ptr, info_ptr->text);
-         info_ptr->text = NULL;
-         info_ptr->num_text=0;
-      }
-   }
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-   /* Free any tRNS entry */
-   if ((mask & PNG_FREE_TRNS) & info_ptr->free_me)
-   {
-      png_free(png_ptr, info_ptr->trans_alpha);
-      info_ptr->trans_alpha = NULL;
-      info_ptr->valid &= ~PNG_INFO_tRNS;
-   }
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-   /* Free any sCAL entry */
-   if ((mask & PNG_FREE_SCAL) & info_ptr->free_me)
-   {
-      png_free(png_ptr, info_ptr->scal_s_width);
-      png_free(png_ptr, info_ptr->scal_s_height);
-      info_ptr->scal_s_width = NULL;
-      info_ptr->scal_s_height = NULL;
-      info_ptr->valid &= ~PNG_INFO_sCAL;
-   }
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-   /* Free any pCAL entry */
-   if ((mask & PNG_FREE_PCAL) & info_ptr->free_me)
-   {
-      png_free(png_ptr, info_ptr->pcal_purpose);
-      png_free(png_ptr, info_ptr->pcal_units);
-      info_ptr->pcal_purpose = NULL;
-      info_ptr->pcal_units = NULL;
-      if (info_ptr->pcal_params != NULL)
-         {
-            unsigned int i;
-            for (i = 0; i < info_ptr->pcal_nparams; i++)
-            {
-               png_free(png_ptr, info_ptr->pcal_params[i]);
-               info_ptr->pcal_params[i] = NULL;
-            }
-            png_free(png_ptr, info_ptr->pcal_params);
-            info_ptr->pcal_params = NULL;
-         }
-      info_ptr->valid &= ~PNG_INFO_pCAL;
-   }
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-   /* Free any profile entry */
-   if ((mask & PNG_FREE_ICCP) & info_ptr->free_me)
-   {
-      png_free(png_ptr, info_ptr->iccp_name);
-      png_free(png_ptr, info_ptr->iccp_profile);
-      info_ptr->iccp_name = NULL;
-      info_ptr->iccp_profile = NULL;
-      info_ptr->valid &= ~PNG_INFO_iCCP;
-   }
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-   /* Free a given sPLT entry, or (if num == -1) all sPLT entries */
-   if ((mask & PNG_FREE_SPLT) & info_ptr->free_me)
-   {
-      if (num != -1)
-      {
-         if (info_ptr->splt_palettes)
-         {
-            png_free(png_ptr, info_ptr->splt_palettes[num].name);
-            png_free(png_ptr, info_ptr->splt_palettes[num].entries);
-            info_ptr->splt_palettes[num].name = NULL;
-            info_ptr->splt_palettes[num].entries = NULL;
-         }
-      }
-
-      else
-      {
-         if (info_ptr->splt_palettes_num)
-         {
-            int i;
-            for (i = 0; i < info_ptr->splt_palettes_num; i++)
-               png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, (int)i);
-
-            png_free(png_ptr, info_ptr->splt_palettes);
-            info_ptr->splt_palettes = NULL;
-            info_ptr->splt_palettes_num = 0;
-         }
-         info_ptr->valid &= ~PNG_INFO_sPLT;
-      }
-   }
-#endif
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-   if ((mask & PNG_FREE_UNKN) & info_ptr->free_me)
-   {
-      if (num != -1)
-      {
-          if (info_ptr->unknown_chunks)
-          {
-             png_free(png_ptr, info_ptr->unknown_chunks[num].data);
-             info_ptr->unknown_chunks[num].data = NULL;
-          }
-      }
-
-      else
-      {
-         int i;
-
-         if (info_ptr->unknown_chunks_num)
-         {
-            for (i = 0; i < info_ptr->unknown_chunks_num; i++)
-               png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, (int)i);
-
-            png_free(png_ptr, info_ptr->unknown_chunks);
-            info_ptr->unknown_chunks = NULL;
-            info_ptr->unknown_chunks_num = 0;
-         }
-      }
-   }
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-   /* Free any hIST entry */
-   if ((mask & PNG_FREE_HIST)  & info_ptr->free_me)
-   {
-      png_free(png_ptr, info_ptr->hist);
-      info_ptr->hist = NULL;
-      info_ptr->valid &= ~PNG_INFO_hIST;
-   }
-#endif
-
-   /* Free any PLTE entry that was internally allocated */
-   if ((mask & PNG_FREE_PLTE) & info_ptr->free_me)
-   {
-      png_free(png_ptr, info_ptr->palette);
-      info_ptr->palette = NULL;
-      info_ptr->valid &= ~PNG_INFO_PLTE;
-      info_ptr->num_palette = 0;
-   }
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-   /* Free any image bits attached to the info structure */
-   if ((mask & PNG_FREE_ROWS) & info_ptr->free_me)
-   {
-      if (info_ptr->row_pointers)
-      {
-         png_uint_32 row;
-         for (row = 0; row < info_ptr->height; row++)
-         {
-            png_free(png_ptr, info_ptr->row_pointers[row]);
-            info_ptr->row_pointers[row] = NULL;
-         }
-         png_free(png_ptr, info_ptr->row_pointers);
-         info_ptr->row_pointers = NULL;
-      }
-      info_ptr->valid &= ~PNG_INFO_IDAT;
-   }
-#endif
-
-   if (num != -1)
-      mask &= ~PNG_FREE_MUL;
-
-   info_ptr->free_me &= ~mask;
-}
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
-
-/* This function returns a pointer to the io_ptr associated with the user
- * functions.  The application should free any memory associated with this
- * pointer before png_write_destroy() or png_read_destroy() are called.
- */
-png_voidp PNGAPI
-png_get_io_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return (NULL);
-
-   return (png_ptr->io_ptr);
-}
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-#  ifdef PNG_STDIO_SUPPORTED
-/* Initialize the default input/output functions for the PNG file.  If you
- * use your own read or write routines, you can call either png_set_read_fn()
- * or png_set_write_fn() instead of png_init_io().  If you have defined
- * PNG_NO_STDIO or otherwise disabled PNG_STDIO_SUPPORTED, you must use a
- * function of your own because "FILE *" isn't necessarily available.
- */
-void PNGAPI
-png_init_io(png_structrp png_ptr, png_FILE_p fp)
-{
-   png_debug(1, "in png_init_io");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->io_ptr = (png_voidp)fp;
-}
-#  endif
-
-#ifdef PNG_SAVE_INT_32_SUPPORTED
-/* The png_save_int_32 function assumes integers are stored in two's
- * complement format.  If this isn't the case, then this routine needs to
- * be modified to write data in two's complement format.  Note that,
- * the following works correctly even if png_int_32 has more than 32 bits
- * (compare the more complex code required on read for sign extension.)
- */
-void PNGAPI
-png_save_int_32(png_bytep buf, png_int_32 i)
-{
-   buf[0] = (png_byte)((i >> 24) & 0xff);
-   buf[1] = (png_byte)((i >> 16) & 0xff);
-   buf[2] = (png_byte)((i >> 8) & 0xff);
-   buf[3] = (png_byte)(i & 0xff);
-}
-#endif
-
-#  ifdef PNG_TIME_RFC1123_SUPPORTED
-/* Convert the supplied time into an RFC 1123 string suitable for use in
- * a "Creation Time" or other text-based time string.
- */
-int PNGAPI
-png_convert_to_rfc1123_buffer(char out[29], png_const_timep ptime)
-{
-   static PNG_CONST char short_months[12][4] =
-        {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-
-   if (out == NULL)
-      return 0;
-
-   if (ptime->year > 9999 /* RFC1123 limitation */ ||
-       ptime->month == 0    ||  ptime->month > 12  ||
-       ptime->day   == 0    ||  ptime->day   > 31  ||
-       ptime->hour  > 23    ||  ptime->minute > 59 ||
-       ptime->second > 60)
-      return 0;
-
-   {
-      size_t pos = 0;
-      char number_buf[5]; /* enough for a four-digit year */
-
-#     define APPEND_STRING(string) pos = png_safecat(out, 29, pos, (string))
-#     define APPEND_NUMBER(format, value)\
-         APPEND_STRING(PNG_FORMAT_NUMBER(number_buf, format, (value)))
-#     define APPEND(ch) if (pos < 28) out[pos++] = (ch)
-
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_u, (unsigned)ptime->day);
-      APPEND(' ');
-      APPEND_STRING(short_months[(ptime->month - 1)]);
-      APPEND(' ');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_u, ptime->year);
-      APPEND(' ');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->hour);
-      APPEND(':');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->minute);
-      APPEND(':');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->second);
-      APPEND_STRING(" +0000"); /* This reliably terminates the buffer */
-
-#     undef APPEND
-#     undef APPEND_NUMBER
-#     undef APPEND_STRING
-   }
-
-   return 1;
-}
-
-#     if PNG_LIBPNG_VER < 10700
-/* To do: remove the following from libpng-1.7 */
-/* Original API that uses a private buffer in png_struct.
- * Deprecated because it causes png_struct to carry a spurious temporary
- * buffer (png_struct::time_buffer), better to have the caller pass this in.
- */
-png_const_charp PNGAPI
-png_convert_to_rfc1123(png_structrp png_ptr, png_const_timep ptime)
-{
-   if (png_ptr != NULL)
-   {
-      /* The only failure above if png_ptr != NULL is from an invalid ptime */
-      if (!png_convert_to_rfc1123_buffer(png_ptr->time_buffer, ptime))
-         png_warning(png_ptr, "Ignoring invalid time value");
-
-      else
-         return png_ptr->time_buffer;
-   }
-
-   return NULL;
-}
-#     endif
-#  endif /* PNG_TIME_RFC1123_SUPPORTED */
-
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
-
-png_const_charp PNGAPI
-png_get_copyright(png_const_structrp png_ptr)
-{
-   PNG_UNUSED(png_ptr)  /* Silence compiler warning about unused png_ptr */
-#ifdef PNG_STRING_COPYRIGHT
-   return PNG_STRING_COPYRIGHT
-#else
-#  ifdef __STDC__
-   return PNG_STRING_NEWLINE \
-     "libpng version 1.6.1 - March 28, 2013" PNG_STRING_NEWLINE \
-     "Copyright (c) 1998-2013 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
-     "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
-     "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
-     PNG_STRING_NEWLINE;
-#  else
-      return "libpng version 1.6.1 - March 28, 2013\
-      Copyright (c) 1998-2013 Glenn Randers-Pehrson\
-      Copyright (c) 1996-1997 Andreas Dilger\
-      Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
-#  endif
-#endif
-}
-
-/* The following return the library version as a short string in the
- * format 1.0.0 through 99.99.99zz.  To get the version of *.h files
- * used with your application, print out PNG_LIBPNG_VER_STRING, which
- * is defined in png.h.
- * Note: now there is no difference between png_get_libpng_ver() and
- * png_get_header_ver().  Due to the version_nn_nn_nn typedef guard,
- * it is guaranteed that png.c uses the correct version of png.h.
- */
-png_const_charp PNGAPI
-png_get_libpng_ver(png_const_structrp png_ptr)
-{
-   /* Version of *.c files used when building libpng */
-   return png_get_header_ver(png_ptr);
-}
-
-png_const_charp PNGAPI
-png_get_header_ver(png_const_structrp png_ptr)
-{
-   /* Version of *.h files used when building libpng */
-   PNG_UNUSED(png_ptr)  /* Silence compiler warning about unused png_ptr */
-   return PNG_LIBPNG_VER_STRING;
-}
-
-png_const_charp PNGAPI
-png_get_header_version(png_const_structrp png_ptr)
-{
-   /* Returns longer string containing both version and date */
-   PNG_UNUSED(png_ptr)  /* Silence compiler warning about unused png_ptr */
-#ifdef __STDC__
-   return PNG_HEADER_VERSION_STRING
-#  ifndef PNG_READ_SUPPORTED
-   "     (NO READ SUPPORT)"
-#  endif
-   PNG_STRING_NEWLINE;
-#else
-   return PNG_HEADER_VERSION_STRING;
-#endif
-}
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-int PNGAPI
-png_handle_as_unknown(png_const_structrp png_ptr, png_const_bytep chunk_name)
-{
-   /* Check chunk_name and return "keep" value if it's on the list, else 0 */
-   png_const_bytep p, p_end;
-
-   if (png_ptr == NULL || chunk_name == NULL || png_ptr->num_chunk_list == 0)
-      return PNG_HANDLE_CHUNK_AS_DEFAULT;
-
-   p_end = png_ptr->chunk_list;
-   p = p_end + png_ptr->num_chunk_list*5; /* beyond end */
-
-   /* The code is the fifth byte after each four byte string.  Historically this
-    * code was always searched from the end of the list, this is no longer
-    * necessary because the 'set' routine handles duplicate entries correcty.
-    */
-   do /* num_chunk_list > 0, so at least one */
-   {
-      p -= 5;
-
-      if (!memcmp(chunk_name, p, 4))
-         return p[4];
-   }
-   while (p > p_end);
-
-   /* This means that known chunks should be processed and unknown chunks should
-    * be handled according to the value of png_ptr->unknown_default; this can be
-    * confusing because, as a result, there are two levels of defaulting for
-    * unknown chunks.
-    */
-   return PNG_HANDLE_CHUNK_AS_DEFAULT;
-}
-
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-int /* PRIVATE */
-png_chunk_unknown_handling(png_const_structrp png_ptr, png_uint_32 chunk_name)
-{
-   png_byte chunk_string[5];
-
-   PNG_CSTRING_FROM_CHUNK(chunk_string, chunk_name);
-   return png_handle_as_unknown(png_ptr, chunk_string);
-}
-#endif /* READ_UNKNOWN_CHUNKS */
-#endif /* SET_UNKNOWN_CHUNKS */
-
-#ifdef PNG_READ_SUPPORTED
-/* This function, added to libpng-1.0.6g, is untested. */
-int PNGAPI
-png_reset_zstream(png_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return Z_STREAM_ERROR;
-
-   /* WARNING: this resets the window bits to the maximum! */
-   return (inflateReset(&png_ptr->zstream));
-}
-#endif /* PNG_READ_SUPPORTED */
-
-/* This function was added to libpng-1.0.7 */
-png_uint_32 PNGAPI
-png_access_version_number(void)
-{
-   /* Version of *.c files used when building libpng */
-   return((png_uint_32)PNG_LIBPNG_VER);
-}
-
-
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Ensure that png_ptr->zstream.msg holds some appropriate error message string.
- * If it doesn't 'ret' is used to set it to something appropriate, even in cases
- * like Z_OK or Z_STREAM_END where the error code is apparently a success code.
- */
-void /* PRIVATE */
-png_zstream_error(png_structrp png_ptr, int ret)
-{
-   /* Translate 'ret' into an appropriate error string, priority is given to the
-    * one in zstream if set.  This always returns a string, even in cases like
-    * Z_OK or Z_STREAM_END where the error code is a success code.
-    */
-   if (png_ptr->zstream.msg == NULL) switch (ret)
-   {
-      default:
-      case Z_OK:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unexpected zlib return code");
-         break;
-
-      case Z_STREAM_END:
-         /* Normal exit */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unexpected end of LZ stream");
-         break;
-
-      case Z_NEED_DICT:
-         /* This means the deflate stream did not have a dictionary; this
-          * indicates a bogus PNG.
-          */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("missing LZ dictionary");
-         break;
-
-      case Z_ERRNO:
-         /* gz APIs only: should not happen */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("zlib IO error");
-         break;
-
-      case Z_STREAM_ERROR:
-         /* internal libpng error */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("bad parameters to zlib");
-         break;
-
-      case Z_DATA_ERROR:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("damaged LZ stream");
-         break;
-
-      case Z_MEM_ERROR:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("insufficient memory");
-         break;
-
-      case Z_BUF_ERROR:
-         /* End of input or output; not a problem if the caller is doing
-          * incremental read or write.
-          */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("truncated");
-         break;
-
-      case Z_VERSION_ERROR:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unsupported zlib version");
-         break;
-
-      case PNG_UNEXPECTED_ZLIB_RETURN:
-         /* Compile errors here mean that zlib now uses the value co-opted in
-          * pngpriv.h for PNG_UNEXPECTED_ZLIB_RETURN; update the switch above
-          * and change pngpriv.h.  Note that this message is "... return",
-          * whereas the default/Z_OK one is "... return code".
-          */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unexpected zlib return");
-         break;
-   }
-}
-
-/* png_convert_size: a PNGAPI but no longer in png.h, so deleted
- * at libpng 1.5.5!
- */
-
-/* Added at libpng version 1.2.34 and 1.4.0 (moved from pngset.c) */
-#ifdef PNG_GAMMA_SUPPORTED /* always set if COLORSPACE */
-static int
-png_colorspace_check_gamma(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_fixed_point gAMA, int from)
-   /* This is called to check a new gamma value against an existing one.  The
-    * routine returns false if the new gamma value should not be written.
-    *
-    * 'from' says where the new gamma value comes from:
-    *
-    *    0: the new gamma value is the libpng estimate for an ICC profile
-    *    1: the new gamma value comes from a gAMA chunk
-    *    2: the new gamma value comes from an sRGB chunk
-    */
-{
-   png_fixed_point gtest;
-
-   if ((colorspace->flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
-      (!png_muldiv(&gtest, colorspace->gamma, PNG_FP_1, gAMA) ||
-      png_gamma_significant(gtest)))
-   {
-      /* Either this is an sRGB image, in which case the calculated gamma
-       * approximation should match, or this is an image with a profile and the
-       * value libpng calculates for the gamma of the profile does not match the
-       * value recorded in the file.  The former, sRGB, case is an error, the
-       * latter is just a warning.
-       */
-      if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0 || from == 2)
-      {
-         png_chunk_report(png_ptr, "gamma value does not match sRGB",
-            PNG_CHUNK_ERROR);
-         /* Do not overwrite an sRGB value */
-         return from == 2;
-      }
-
-      else /* sRGB tag not involved */
-      {
-         png_chunk_report(png_ptr, "gamma value does not match libpng estimate",
-            PNG_CHUNK_WARNING);
-         return from == 1;
-      }
-   }
-
-   return 1;
-}
-
-void /* PRIVATE */
-png_colorspace_set_gamma(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_fixed_point gAMA)
-{
-   /* Changed in libpng-1.5.4 to limit the values to ensure overflow can't
-    * occur.  Since the fixed point representation is assymetrical it is
-    * possible for 1/gamma to overflow the limit of 21474 and this means the
-    * gamma value must be at least 5/100000 and hence at most 20000.0.  For
-    * safety the limits here are a little narrower.  The values are 0.00016 to
-    * 6250.0, which are truly ridiculous gamma values (and will produce
-    * displays that are all black or all white.)
-    *
-    * In 1.6.0 this test replaces the ones in pngrutil.c, in the gAMA chunk
-    * handling code, which only required the value to be >0.
-    */
-   png_const_charp errmsg;
-
-   if (gAMA < 16 || gAMA > 625000000)
-      errmsg = "gamma value out of range";
-
-#  ifdef PNG_READ_gAMA_SUPPORTED
-      /* Allow the application to set the gamma value more than once */
-      else if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-         (colorspace->flags & PNG_COLORSPACE_FROM_gAMA) != 0)
-         errmsg = "duplicate";
-#  endif
-
-   /* Do nothing if the colorspace is already invalid */
-   else if (colorspace->flags & PNG_COLORSPACE_INVALID)
-      return;
-
-   else
-   {
-      if (png_colorspace_check_gamma(png_ptr, colorspace, gAMA, 1/*from gAMA*/))
-      {
-         /* Store this gamma value. */
-         colorspace->gamma = gAMA;
-         colorspace->flags |=
-            (PNG_COLORSPACE_HAVE_GAMMA | PNG_COLORSPACE_FROM_gAMA);
-      }
-
-      /* At present if the check_gamma test fails the gamma of the colorspace is
-       * not updated however the colorspace is not invalidated.  This
-       * corresponds to the case where the existing gamma comes from an sRGB
-       * chunk or profile.  An error message has already been output.
-       */
-      return;
-   }
-
-   /* Error exit - errmsg has been set. */
-   colorspace->flags |= PNG_COLORSPACE_INVALID;
-   png_chunk_report(png_ptr, errmsg, PNG_CHUNK_WRITE_ERROR);
-}
-
-void /* PRIVATE */
-png_colorspace_sync_info(png_const_structrp png_ptr, png_inforp info_ptr)
-{
-   if (info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID)
-   {
-      /* Everything is invalid */
-      info_ptr->valid &= ~(PNG_INFO_gAMA|PNG_INFO_cHRM|PNG_INFO_sRGB|
-         PNG_INFO_iCCP);
-
-#     ifdef PNG_COLORSPACE_SUPPORTED
-         /* Clean up the iCCP profile now if it won't be used. */
-         png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, -1/*not used*/);
-#     else
-         PNG_UNUSED(png_ptr)
-#     endif
-   }
-
-   else
-   {
-#     ifdef PNG_COLORSPACE_SUPPORTED
-         /* Leave the INFO_iCCP flag set if the pngset.c code has already set
-          * it; this allows a PNG to contain a profile which matches sRGB and
-          * yet still have that profile retrievable by the application.
-          */
-         if (info_ptr->colorspace.flags & PNG_COLORSPACE_MATCHES_sRGB)
-            info_ptr->valid |= PNG_INFO_sRGB;
-
-         else
-            info_ptr->valid &= ~PNG_INFO_sRGB;
-
-         if (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS)
-            info_ptr->valid |= PNG_INFO_cHRM;
-
-         else
-            info_ptr->valid &= ~PNG_INFO_cHRM;
-#     endif
-
-      if (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA)
-         info_ptr->valid |= PNG_INFO_gAMA;
-
-      else
-         info_ptr->valid &= ~PNG_INFO_gAMA;
-   }
-}
-
-#ifdef PNG_READ_SUPPORTED
-void /* PRIVATE */
-png_colorspace_sync(png_const_structrp png_ptr, png_inforp info_ptr)
-{
-   if (info_ptr == NULL) /* reduce code size; check here not in the caller */
-      return;
-
-   info_ptr->colorspace = png_ptr->colorspace;
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-#endif
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-/* Added at libpng-1.5.5 to support read and write of true CIEXYZ values for
- * cHRM, as opposed to using chromaticities.  These internal APIs return
- * non-zero on a parameter error.  The X, Y and Z values are required to be
- * positive and less than 1.0.
- */
-static int
-png_xy_from_XYZ(png_xy *xy, const png_XYZ *XYZ)
-{
-   png_int_32 d, dwhite, whiteX, whiteY;
-
-   d = XYZ->red_X + XYZ->red_Y + XYZ->red_Z;
-   if (!png_muldiv(&xy->redx, XYZ->red_X, PNG_FP_1, d)) return 1;
-   if (!png_muldiv(&xy->redy, XYZ->red_Y, PNG_FP_1, d)) return 1;
-   dwhite = d;
-   whiteX = XYZ->red_X;
-   whiteY = XYZ->red_Y;
-
-   d = XYZ->green_X + XYZ->green_Y + XYZ->green_Z;
-   if (!png_muldiv(&xy->greenx, XYZ->green_X, PNG_FP_1, d)) return 1;
-   if (!png_muldiv(&xy->greeny, XYZ->green_Y, PNG_FP_1, d)) return 1;
-   dwhite += d;
-   whiteX += XYZ->green_X;
-   whiteY += XYZ->green_Y;
-
-   d = XYZ->blue_X + XYZ->blue_Y + XYZ->blue_Z;
-   if (!png_muldiv(&xy->bluex, XYZ->blue_X, PNG_FP_1, d)) return 1;
-   if (!png_muldiv(&xy->bluey, XYZ->blue_Y, PNG_FP_1, d)) return 1;
-   dwhite += d;
-   whiteX += XYZ->blue_X;
-   whiteY += XYZ->blue_Y;
-
-   /* The reference white is simply the sum of the end-point (X,Y,Z) vectors,
-    * thus:
-    */
-   if (!png_muldiv(&xy->whitex, whiteX, PNG_FP_1, dwhite)) return 1;
-   if (!png_muldiv(&xy->whitey, whiteY, PNG_FP_1, dwhite)) return 1;
-
-   return 0;
-}
-
-static int
-png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
-{
-   png_fixed_point red_inverse, green_inverse, blue_scale;
-   png_fixed_point left, right, denominator;
-
-   /* Check xy and, implicitly, z.  Note that wide gamut color spaces typically
-    * have end points with 0 tristimulus values (these are impossible end
-    * points, but they are used to cover the possible colors.)
-    */
-   if (xy->redx < 0 || xy->redx > PNG_FP_1) return 1;
-   if (xy->redy < 0 || xy->redy > PNG_FP_1-xy->redx) return 1;
-   if (xy->greenx < 0 || xy->greenx > PNG_FP_1) return 1;
-   if (xy->greeny < 0 || xy->greeny > PNG_FP_1-xy->greenx) return 1;
-   if (xy->bluex < 0 || xy->bluex > PNG_FP_1) return 1;
-   if (xy->bluey < 0 || xy->bluey > PNG_FP_1-xy->bluex) return 1;
-   if (xy->whitex < 0 || xy->whitex > PNG_FP_1) return 1;
-   if (xy->whitey < 0 || xy->whitey > PNG_FP_1-xy->whitex) return 1;
-
-   /* The reverse calculation is more difficult because the original tristimulus
-    * value had 9 independent values (red,green,blue)x(X,Y,Z) however only 8
-    * derived values were recorded in the cHRM chunk;
-    * (red,green,blue,white)x(x,y).  This loses one degree of freedom and
-    * therefore an arbitrary ninth value has to be introduced to undo the
-    * original transformations.
-    *
-    * Think of the original end-points as points in (X,Y,Z) space.  The
-    * chromaticity values (c) have the property:
-    *
-    *           C
-    *   c = ---------
-    *       X + Y + Z
-    *
-    * For each c (x,y,z) from the corresponding original C (X,Y,Z).  Thus the
-    * three chromaticity values (x,y,z) for each end-point obey the
-    * relationship:
-    *
-    *   x + y + z = 1
-    *
-    * This describes the plane in (X,Y,Z) space that intersects each axis at the
-    * value 1.0; call this the chromaticity plane.  Thus the chromaticity
-    * calculation has scaled each end-point so that it is on the x+y+z=1 plane
-    * and chromaticity is the intersection of the vector from the origin to the
-    * (X,Y,Z) value with the chromaticity plane.
-    *
-    * To fully invert the chromaticity calculation we would need the three
-    * end-point scale factors, (red-scale, green-scale, blue-scale), but these
-    * were not recorded.  Instead we calculated the reference white (X,Y,Z) and
-    * recorded the chromaticity of this.  The reference white (X,Y,Z) would have
-    * given all three of the scale factors since:
-    *
-    *    color-C = color-c * color-scale
-    *    white-C = red-C + green-C + blue-C
-    *            = red-c*red-scale + green-c*green-scale + blue-c*blue-scale
-    *
-    * But cHRM records only white-x and white-y, so we have lost the white scale
-    * factor:
-    *
-    *    white-C = white-c*white-scale
-    *
-    * To handle this the inverse transformation makes an arbitrary assumption
-    * about white-scale:
-    *
-    *    Assume: white-Y = 1.0
-    *    Hence:  white-scale = 1/white-y
-    *    Or:     red-Y + green-Y + blue-Y = 1.0
-    *
-    * Notice the last statement of the assumption gives an equation in three of
-    * the nine values we want to calculate.  8 more equations come from the
-    * above routine as summarised at the top above (the chromaticity
-    * calculation):
-    *
-    *    Given: color-x = color-X / (color-X + color-Y + color-Z)
-    *    Hence: (color-x - 1)*color-X + color.x*color-Y + color.x*color-Z = 0
-    *
-    * This is 9 simultaneous equations in the 9 variables "color-C" and can be
-    * solved by Cramer's rule.  Cramer's rule requires calculating 10 9x9 matrix
-    * determinants, however this is not as bad as it seems because only 28 of
-    * the total of 90 terms in the various matrices are non-zero.  Nevertheless
-    * Cramer's rule is notoriously numerically unstable because the determinant
-    * calculation involves the difference of large, but similar, numbers.  It is
-    * difficult to be sure that the calculation is stable for real world values
-    * and it is certain that it becomes unstable where the end points are close
-    * together.
-    *
-    * So this code uses the perhaps slightly less optimal but more
-    * understandable and totally obvious approach of calculating color-scale.
-    *
-    * This algorithm depends on the precision in white-scale and that is
-    * (1/white-y), so we can immediately see that as white-y approaches 0 the
-    * accuracy inherent in the cHRM chunk drops off substantially.
-    *
-    * libpng arithmetic: a simple invertion of the above equations
-    * ------------------------------------------------------------
-    *
-    *    white_scale = 1/white-y
-    *    white-X = white-x * white-scale
-    *    white-Y = 1.0
-    *    white-Z = (1 - white-x - white-y) * white_scale
-    *
-    *    white-C = red-C + green-C + blue-C
-    *            = red-c*red-scale + green-c*green-scale + blue-c*blue-scale
-    *
-    * This gives us three equations in (red-scale,green-scale,blue-scale) where
-    * all the coefficients are now known:
-    *
-    *    red-x*red-scale + green-x*green-scale + blue-x*blue-scale
-    *       = white-x/white-y
-    *    red-y*red-scale + green-y*green-scale + blue-y*blue-scale = 1
-    *    red-z*red-scale + green-z*green-scale + blue-z*blue-scale
-    *       = (1 - white-x - white-y)/white-y
-    *
-    * In the last equation color-z is (1 - color-x - color-y) so we can add all
-    * three equations together to get an alternative third:
-    *
-    *    red-scale + green-scale + blue-scale = 1/white-y = white-scale
-    *
-    * So now we have a Cramer's rule solution where the determinants are just
-    * 3x3 - far more tractible.  Unfortunately 3x3 determinants still involve
-    * multiplication of three coefficients so we can't guarantee to avoid
-    * overflow in the libpng fixed point representation.  Using Cramer's rule in
-    * floating point is probably a good choice here, but it's not an option for
-    * fixed point.  Instead proceed to simplify the first two equations by
-    * eliminating what is likely to be the largest value, blue-scale:
-    *
-    *    blue-scale = white-scale - red-scale - green-scale
-    *
-    * Hence:
-    *
-    *    (red-x - blue-x)*red-scale + (green-x - blue-x)*green-scale =
-    *                (white-x - blue-x)*white-scale
-    *
-    *    (red-y - blue-y)*red-scale + (green-y - blue-y)*green-scale =
-    *                1 - blue-y*white-scale
-    *
-    * And now we can trivially solve for (red-scale,green-scale):
-    *
-    *    green-scale =
-    *                (white-x - blue-x)*white-scale - (red-x - blue-x)*red-scale
-    *                -----------------------------------------------------------
-    *                                  green-x - blue-x
-    *
-    *    red-scale =
-    *                1 - blue-y*white-scale - (green-y - blue-y) * green-scale
-    *                ---------------------------------------------------------
-    *                                  red-y - blue-y
-    *
-    * Hence:
-    *
-    *    red-scale =
-    *          ( (green-x - blue-x) * (white-y - blue-y) -
-    *            (green-y - blue-y) * (white-x - blue-x) ) / white-y
-    * -------------------------------------------------------------------------
-    *  (green-x - blue-x)*(red-y - blue-y)-(green-y - blue-y)*(red-x - blue-x)
-    *
-    *    green-scale =
-    *          ( (red-y - blue-y) * (white-x - blue-x) -
-    *            (red-x - blue-x) * (white-y - blue-y) ) / white-y
-    * -------------------------------------------------------------------------
-    *  (green-x - blue-x)*(red-y - blue-y)-(green-y - blue-y)*(red-x - blue-x)
-    *
-    * Accuracy:
-    * The input values have 5 decimal digits of accuracy.  The values are all in
-    * the range 0 < value < 1, so simple products are in the same range but may
-    * need up to 10 decimal digits to preserve the original precision and avoid
-    * underflow.  Because we are using a 32-bit signed representation we cannot
-    * match this; the best is a little over 9 decimal digits, less than 10.
-    *
-    * The approach used here is to preserve the maximum precision within the
-    * signed representation.  Because the red-scale calculation above uses the
-    * difference between two products of values that must be in the range -1..+1
-    * it is sufficient to divide the product by 7; ceil(100,000/32767*2).  The
-    * factor is irrelevant in the calculation because it is applied to both
-    * numerator and denominator.
-    *
-    * Note that the values of the differences of the products of the
-    * chromaticities in the above equations tend to be small, for example for
-    * the sRGB chromaticities they are:
-    *
-    * red numerator:    -0.04751
-    * green numerator:  -0.08788
-    * denominator:      -0.2241 (without white-y multiplication)
-    *
-    *  The resultant Y coefficients from the chromaticities of some widely used
-    *  color space definitions are (to 15 decimal places):
-    *
-    *  sRGB
-    *    0.212639005871510 0.715168678767756 0.072192315360734
-    *  Kodak ProPhoto
-    *    0.288071128229293 0.711843217810102 0.000085653960605
-    *  Adobe RGB
-    *    0.297344975250536 0.627363566255466 0.075291458493998
-    *  Adobe Wide Gamut RGB
-    *    0.258728243040113 0.724682314948566 0.016589442011321
-    */
-   /* By the argument, above overflow should be impossible here. The return
-    * value of 2 indicates an internal error to the caller.
-    */
-   if (!png_muldiv(&left, xy->greenx-xy->bluex, xy->redy - xy->bluey, 7))
-      return 2;
-   if (!png_muldiv(&right, xy->greeny-xy->bluey, xy->redx - xy->bluex, 7))
-      return 2;
-   denominator = left - right;
-
-   /* Now find the red numerator. */
-   if (!png_muldiv(&left, xy->greenx-xy->bluex, xy->whitey-xy->bluey, 7))
-      return 2;
-   if (!png_muldiv(&right, xy->greeny-xy->bluey, xy->whitex-xy->bluex, 7))
-      return 2;
-
-   /* Overflow is possible here and it indicates an extreme set of PNG cHRM
-    * chunk values.  This calculation actually returns the reciprocal of the
-    * scale value because this allows us to delay the multiplication of white-y
-    * into the denominator, which tends to produce a small number.
-    */
-   if (!png_muldiv(&red_inverse, xy->whitey, denominator, left-right) ||
-       red_inverse <= xy->whitey /* r+g+b scales = white scale */)
-      return 1;
-
-   /* Similarly for green_inverse: */
-   if (!png_muldiv(&left, xy->redy-xy->bluey, xy->whitex-xy->bluex, 7))
-      return 2;
-   if (!png_muldiv(&right, xy->redx-xy->bluex, xy->whitey-xy->bluey, 7))
-      return 2;
-   if (!png_muldiv(&green_inverse, xy->whitey, denominator, left-right) ||
-       green_inverse <= xy->whitey)
-      return 1;
-
-   /* And the blue scale, the checks above guarantee this can't overflow but it
-    * can still produce 0 for extreme cHRM values.
-    */
-   blue_scale = png_reciprocal(xy->whitey) - png_reciprocal(red_inverse) -
-      png_reciprocal(green_inverse);
-   if (blue_scale <= 0) return 1;
-
-
-   /* And fill in the png_XYZ: */
-   if (!png_muldiv(&XYZ->red_X, xy->redx, PNG_FP_1, red_inverse)) return 1;
-   if (!png_muldiv(&XYZ->red_Y, xy->redy, PNG_FP_1, red_inverse)) return 1;
-   if (!png_muldiv(&XYZ->red_Z, PNG_FP_1 - xy->redx - xy->redy, PNG_FP_1,
-      red_inverse))
-      return 1;
-
-   if (!png_muldiv(&XYZ->green_X, xy->greenx, PNG_FP_1, green_inverse))
-      return 1;
-   if (!png_muldiv(&XYZ->green_Y, xy->greeny, PNG_FP_1, green_inverse))
-      return 1;
-   if (!png_muldiv(&XYZ->green_Z, PNG_FP_1 - xy->greenx - xy->greeny, PNG_FP_1,
-      green_inverse))
-      return 1;
-
-   if (!png_muldiv(&XYZ->blue_X, xy->bluex, blue_scale, PNG_FP_1)) return 1;
-   if (!png_muldiv(&XYZ->blue_Y, xy->bluey, blue_scale, PNG_FP_1)) return 1;
-   if (!png_muldiv(&XYZ->blue_Z, PNG_FP_1 - xy->bluex - xy->bluey, blue_scale,
-      PNG_FP_1))
-      return 1;
-
-   return 0; /*success*/
-}
-
-static int
-png_XYZ_normalize(png_XYZ *XYZ)
-{
-   png_int_32 Y;
-
-   if (XYZ->red_Y < 0 || XYZ->green_Y < 0 || XYZ->blue_Y < 0 ||
-      XYZ->red_X < 0 || XYZ->green_X < 0 || XYZ->blue_X < 0 ||
-      XYZ->red_Z < 0 || XYZ->green_Z < 0 || XYZ->blue_Z < 0)
-      return 1;
-
-   /* Normalize by scaling so the sum of the end-point Y values is PNG_FP_1.
-    * IMPLEMENTATION NOTE: ANSI requires signed overflow not to occur, therefore
-    * relying on addition of two positive values producing a negative one is not
-    * safe.
-    */
-   Y = XYZ->red_Y;
-   if (0x7fffffff - Y < XYZ->green_X) return 1;
-   Y += XYZ->green_Y;
-   if (0x7fffffff - Y < XYZ->blue_X) return 1;
-   Y += XYZ->blue_Y;
-
-   if (Y != PNG_FP_1)
-   {
-      if (!png_muldiv(&XYZ->red_X, XYZ->red_X, PNG_FP_1, Y)) return 1;
-      if (!png_muldiv(&XYZ->red_Y, XYZ->red_Y, PNG_FP_1, Y)) return 1;
-      if (!png_muldiv(&XYZ->red_Z, XYZ->red_Z, PNG_FP_1, Y)) return 1;
-
-      if (!png_muldiv(&XYZ->green_X, XYZ->green_X, PNG_FP_1, Y)) return 1;
-      if (!png_muldiv(&XYZ->green_Y, XYZ->green_Y, PNG_FP_1, Y)) return 1;
-      if (!png_muldiv(&XYZ->green_Z, XYZ->green_Z, PNG_FP_1, Y)) return 1;
-
-      if (!png_muldiv(&XYZ->blue_X, XYZ->blue_X, PNG_FP_1, Y)) return 1;
-      if (!png_muldiv(&XYZ->blue_Y, XYZ->blue_Y, PNG_FP_1, Y)) return 1;
-      if (!png_muldiv(&XYZ->blue_Z, XYZ->blue_Z, PNG_FP_1, Y)) return 1;
-   }
-
-   return 0;
-}
-
-static int
-png_colorspace_endpoints_match(const png_xy *xy1, const png_xy *xy2, int delta)
-{
-   /* Allow an error of +/-0.01 (absolute value) on each chromaticity */
-   return !(PNG_OUT_OF_RANGE(xy1->whitex, xy2->whitex,delta) ||
-      PNG_OUT_OF_RANGE(xy1->whitey, xy2->whitey,delta) ||
-      PNG_OUT_OF_RANGE(xy1->redx,   xy2->redx,  delta) ||
-      PNG_OUT_OF_RANGE(xy1->redy,   xy2->redy,  delta) ||
-      PNG_OUT_OF_RANGE(xy1->greenx, xy2->greenx,delta) ||
-      PNG_OUT_OF_RANGE(xy1->greeny, xy2->greeny,delta) ||
-      PNG_OUT_OF_RANGE(xy1->bluex,  xy2->bluex, delta) ||
-      PNG_OUT_OF_RANGE(xy1->bluey,  xy2->bluey, delta));
-}
-
-/* Added in libpng-1.6.0, a different check for the validity of a set of cHRM
- * chunk chromaticities.  Earlier checks used to simply look for the overflow
- * condition (where the determinant of the matrix to solve for XYZ ends up zero
- * because the chromaticity values are not all distinct.)  Despite this it is
- * theoretically possible to produce chromaticities that are apparently valid
- * but that rapidly degrade to invalid, potentially crashing, sets because of
- * arithmetic inaccuracies when calculations are performed on them.  The new
- * check is to round-trip xy -> XYZ -> xy and then check that the result is
- * within a small percentage of the original.
- */
-static int
-png_colorspace_check_xy(png_XYZ *XYZ, const png_xy *xy)
-{
-   int result;
-   png_xy xy_test;
-
-   /* As a side-effect this routine also returns the XYZ endpoints. */
-   result = png_XYZ_from_xy(XYZ, xy);
-   if (result) return result;
-
-   result = png_xy_from_XYZ(&xy_test, XYZ);
-   if (result) return result;
-
-   if (png_colorspace_endpoints_match(xy, &xy_test,
-      5/*actually, the math is pretty accurate*/))
-      return 0;
-
-   /* Too much slip */
-   return 1;
-}
-
-/* This is the check going the other way.  The XYZ is modified to normalize it
- * (another side-effect) and the xy chromaticities are returned.
- */
-static int
-png_colorspace_check_XYZ(png_xy *xy, png_XYZ *XYZ)
-{
-   int result;
-   png_XYZ XYZtemp;
-
-   result = png_XYZ_normalize(XYZ);
-   if (result) return result;
-
-   result = png_xy_from_XYZ(xy, XYZ);
-   if (result) return result;
-
-   XYZtemp = *XYZ;
-   return png_colorspace_check_xy(&XYZtemp, xy);
-}
-
-/* Used to check for an endpoint match against sRGB */
-static const png_xy sRGB_xy = /* From ITU-R BT.709-3 */
-{
-   /* color      x       y */
-   /* red   */ 64000, 33000,
-   /* green */ 30000, 60000,
-   /* blue  */ 15000,  6000,
-   /* white */ 31270, 32900
-};
-
-static int
-png_colorspace_set_xy_and_XYZ(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, const png_xy *xy, const png_XYZ *XYZ,
-   int preferred)
-{
-   if (colorspace->flags & PNG_COLORSPACE_INVALID)
-      return 0;
-
-   /* The consistency check is performed on the chromaticities; this factors out
-    * variations because of the normalization (or not) of the end point Y
-    * values.
-    */
-   if (preferred < 2 && (colorspace->flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
-   {
-      /* The end points must be reasonably close to any we already have.  The
-       * following allows an error of up to +/-.001
-       */
-      if (!png_colorspace_endpoints_match(xy, &colorspace->end_points_xy, 100))
-      {
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_benign_error(png_ptr, "inconsistent chromaticities");
-         return 0; /* failed */
-      }
-
-      /* Only overwrite with preferred values */
-      if (!preferred)
-         return 1; /* ok, but no change */
-   }
-
-   colorspace->end_points_xy = *xy;
-   colorspace->end_points_XYZ = *XYZ;
-   colorspace->flags |= PNG_COLORSPACE_HAVE_ENDPOINTS;
-
-   /* The end points are normally quoted to two decimal digits, so allow +/-0.01
-    * on this test.
-    */
-   if (png_colorspace_endpoints_match(xy, &sRGB_xy, 1000))
-      colorspace->flags |= PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB;
-
-   else
-      colorspace->flags &= PNG_COLORSPACE_CANCEL(
-         PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB);
-
-   return 2; /* ok and changed */
-}
-
-int /* PRIVATE */
-png_colorspace_set_chromaticities(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, const png_xy *xy, int preferred)
-{
-   /* We must check the end points to ensure they are reasonable - in the past
-    * color management systems have crashed as a result of getting bogus
-    * colorant values, while this isn't the fault of libpng it is the
-    * responsibility of libpng because PNG carries the bomb and libpng is in a
-    * position to protect against it.
-    */
-   png_XYZ XYZ;
-
-   switch (png_colorspace_check_xy(&XYZ, xy))
-   {
-      case 0: /* success */
-         return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, xy, &XYZ,
-            preferred);
-
-      case 1:
-         /* We can't invert the chromaticities so we can't produce value XYZ
-          * values.  Likely as not a color management system will fail too.
-          */
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_benign_error(png_ptr, "invalid chromaticities");
-         break;
-
-      default:
-         /* libpng is broken; this should be a warning but if it happens we
-          * want error reports so for the moment it is an error.
-          */
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_error(png_ptr, "internal error checking chromaticities");
-         break;
-   }
-
-   return 0; /* failed */
-}
-
-int /* PRIVATE */
-png_colorspace_set_endpoints(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, const png_XYZ *XYZ_in, int preferred)
-{
-   png_XYZ XYZ = *XYZ_in;
-   png_xy xy;
-
-   switch (png_colorspace_check_XYZ(&xy, &XYZ))
-   {
-      case 0:
-         return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, &xy, &XYZ,
-            preferred);
-
-      case 1:
-         /* End points are invalid. */
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_benign_error(png_ptr, "invalid end points");
-         break;
-
-      default:
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_error(png_ptr, "internal error checking chromaticities");
-         break;
-   }
-
-   return 0; /* failed */
-}
-
-#if defined(PNG_sRGB_SUPPORTED) || defined(PNG_iCCP_SUPPORTED)
-/* Error message generation */
-static char
-png_icc_tag_char(png_uint_32 byte)
-{
-   byte &= 0xff;
-   if (byte >= 32 && byte <= 126)
-      return (char)byte;
-   else
-      return '?';
-}
-
-static void
-png_icc_tag_name(char *name, png_uint_32 tag)
-{
-   name[0] = '\'';
-   name[1] = png_icc_tag_char(tag >> 24);
-   name[2] = png_icc_tag_char(tag >> 16);
-   name[3] = png_icc_tag_char(tag >>  8);
-   name[4] = png_icc_tag_char(tag      );
-   name[5] = '\'';
-}
-
-static int
-is_ICC_signature_char(png_alloc_size_t it)
-{
-   return it == 32 || (it >= 48 && it <= 57) || (it >= 65 && it <= 90) ||
-      (it >= 97 && it <= 122);
-}
-
-static int is_ICC_signature(png_alloc_size_t it)
-{
-   return is_ICC_signature_char(it >> 24) /* checks all the top bits */ &&
-      is_ICC_signature_char((it >> 16) & 0xff) &&
-      is_ICC_signature_char((it >> 8) & 0xff) &&
-      is_ICC_signature_char(it & 0xff);
-}
-
-static int
-png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_alloc_size_t value, png_const_charp reason)
-{
-   size_t pos;
-   char message[196]; /* see below for calculation */
-
-   if (colorspace != NULL)
-      colorspace->flags |= PNG_COLORSPACE_INVALID;
-
-   pos = png_safecat(message, (sizeof message), 0, "profile '"); /* 9 chars */
-   pos = png_safecat(message, pos+79, pos, name); /* Truncate to 79 chars */
-   pos = png_safecat(message, (sizeof message), pos, "': "); /* +2 = 90 */
-   if (is_ICC_signature(value))
-   {
-      /* So 'value' is at most 4 bytes and the following cast is safe */
-      png_icc_tag_name(message+pos, (png_uint_32)value);
-      pos += 6; /* total +8; less than the else clause */
-      message[pos++] = ':';
-      message[pos++] = ' ';
-   }
-#  ifdef PNG_WARNINGS_SUPPORTED
-   else
-      {
-         char number[PNG_NUMBER_BUFFER_SIZE]; /* +24 = 114*/
-
-         pos = png_safecat(message, (sizeof message), pos,
-            png_format_number(number, number+(sizeof number),
-               PNG_NUMBER_FORMAT_x, value));
-         pos = png_safecat(message, (sizeof message), pos, "h: "); /*+2 = 116*/
-      }
-#  endif
-   /* The 'reason' is an arbitrary message, allow +79 maximum 195 */
-   png_safecat(message, (sizeof message), pos, reason);
-
-   /* This is recoverable, but make it unconditionally an app_error on write to
-    * avoid writing invalid ICC profiles into PNG files.  (I.e.  we handle them
-    * on read, with a warning, but on write unless the app turns off
-    * application errors the PNG won't be written.)
-    */
-   png_chunk_report(png_ptr, message,
-      (colorspace != NULL) ? PNG_CHUNK_ERROR : PNG_CHUNK_WRITE_ERROR);
-
-   return 0;
-}
-#endif /* sRGB || iCCP */
-
-#ifdef PNG_sRGB_SUPPORTED
-int /* PRIVATE */
-png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   int intent)
-{
-   /* sRGB sets known gamma, end points and (from the chunk) intent. */
-   /* IMPORTANT: these are not necessarily the values found in an ICC profile
-    * because ICC profiles store values adapted to a D50 environment; it is
-    * expected that the ICC profile mediaWhitePointTag will be D50, see the
-    * checks and code elsewhere to understand this better.
-    *
-    * These XYZ values, which are accurate to 5dp, produce rgb to gray
-    * coefficients of (6968,23435,2366), which are reduced (because they add up
-    * to 32769 not 32768) to (6968,23434,2366).  These are the values that
-    * libpng has traditionally used (and are the best values given the 15bit
-    * algorithm used by the rgb to gray code.)
-    */
-   static const png_XYZ sRGB_XYZ = /* D65 XYZ (*not* the D50 adapted values!) */
-   {
-      /* color      X      Y      Z */
-      /* red   */ 41239, 21264,  1933,
-      /* green */ 35758, 71517, 11919,
-      /* blue  */ 18048,  7219, 95053
-   };
-
-   /* Do nothing if the colorspace is already invalidated. */
-   if (colorspace->flags & PNG_COLORSPACE_INVALID)
-      return 0;
-
-   /* Check the intent, then check for existing settings.  It is valid for the
-    * PNG file to have cHRM or gAMA chunks along with sRGB, but the values must
-    * be consistent with the correct values.  If, however, this function is
-    * called below because an iCCP chunk matches sRGB then it is quite
-    * conceivable that an older app recorded incorrect gAMA and cHRM because of
-    * an incorrect calculation based on the values in the profile - this does
-    * *not* invalidate the profile (though it still produces an error, which can
-    * be ignored.)
-    */
-   if (intent < 0 || intent >= PNG_sRGB_INTENT_LAST)
-      return png_icc_profile_error(png_ptr, colorspace, "sRGB",
-         (unsigned)intent, "invalid sRGB rendering intent");
-
-   if ((colorspace->flags & PNG_COLORSPACE_HAVE_INTENT) != 0 &&
-      colorspace->rendering_intent != intent)
-      return png_icc_profile_error(png_ptr, colorspace, "sRGB",
-         (unsigned)intent, "inconsistent rendering intents");
-
-   if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0)
-   {
-      png_benign_error(png_ptr, "duplicate sRGB information ignored");
-      return 0;
-   }
-
-   /* If the standard sRGB cHRM chunk does not match the one from the PNG file
-    * warn but overwrite the value with the correct one.
-    */
-   if ((colorspace->flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0 &&
-      !png_colorspace_endpoints_match(&sRGB_xy, &colorspace->end_points_xy,
-         100))
-      png_chunk_report(png_ptr, "cHRM chunk does not match sRGB",
-         PNG_CHUNK_ERROR);
-
-   /* This check is just done for the error reporting - the routine always
-    * returns true when the 'from' argument corresponds to sRGB (2).
-    */
-   (void)png_colorspace_check_gamma(png_ptr, colorspace, PNG_GAMMA_sRGB_INVERSE,
-      2/*from sRGB*/);
-
-   /* intent: bugs in GCC force 'int' to be used as the parameter type. */
-   colorspace->rendering_intent = (png_uint_16)intent;
-   colorspace->flags |= PNG_COLORSPACE_HAVE_INTENT;
-
-   /* endpoints */
-   colorspace->end_points_xy = sRGB_xy;
-   colorspace->end_points_XYZ = sRGB_XYZ;
-   colorspace->flags |=
-      (PNG_COLORSPACE_HAVE_ENDPOINTS|PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB);
-
-   /* gamma */
-   colorspace->gamma = PNG_GAMMA_sRGB_INVERSE;
-   colorspace->flags |= PNG_COLORSPACE_HAVE_GAMMA;
-
-   /* Finally record that we have an sRGB profile */
-   colorspace->flags |=
-      (PNG_COLORSPACE_MATCHES_sRGB|PNG_COLORSPACE_FROM_sRGB);
-
-   return 1; /* set */
-}
-#endif /* sRGB */
-
-#ifdef PNG_iCCP_SUPPORTED
-/* Encoded value of D50 as an ICC XYZNumber.  From the ICC 2010 spec the value
- * is XYZ(0.9642,1.0,0.8249), which scales to:
- *
- *    (63189.8112, 65536, 54060.6464)
- */
-static const png_byte D50_nCIEXYZ[12] =
-   { 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d };
-
-int /* PRIVATE */
-png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length)
-{
-   if (profile_length < 132)
-      return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
-         "too short");
-
-   if (profile_length & 3)
-      return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
-         "invalid length");
-
-   return 1;
-}
-
-int /* PRIVATE */
-png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length,
-   png_const_bytep profile/* first 132 bytes only */, int color_type)
-{
-   png_uint_32 temp;
-
-   /* Length check; this cannot be ignored in this code because profile_length
-    * is used later to check the tag table, so even if the profile seems over
-    * long profile_length from the caller must be correct.  The caller can fix
-    * this up on read or write by just passing in the profile header length.
-    */
-   temp = png_get_uint_32(profile);
-   if (temp != profile_length)
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "length does not match profile");
-
-   temp = png_get_uint_32(profile+128); /* tag count: 12 bytes/tag */
-   if (temp > 357913930 || /* (2^32-4-132)/12: maxium possible tag count */
-      profile_length < 132+12*temp) /* truncated tag table */
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "tag count too large");
-
-   /* The 'intent' must be valid or we can't store it, ICC limits the intent to
-    * 16 bits.
-    */
-   temp = png_get_uint_32(profile+64);
-   if (temp >= 0xffff) /* The ICC limit */
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "invalid rendering intent");
-
-   /* This is just a warning because the profile may be valid in future
-    * versions.
-    */
-   if (temp >= PNG_sRGB_INTENT_LAST)
-      (void)png_icc_profile_error(png_ptr, NULL, name, temp,
-         "intent outside defined range");
-
-   /* At this point the tag table can't be checked because it hasn't necessarily
-    * been loaded; however, various header fields can be checked.  These checks
-    * are for values permitted by the PNG spec in an ICC profile; the PNG spec
-    * restricts the profiles that can be passed in an iCCP chunk (they must be
-    * appropriate to processing PNG data!)
-    */
-
-   /* Data checks (could be skipped).  These checks must be independent of the
-    * version number; however, the version number doesn't accomodate changes in
-    * the header fields (just the known tags and the interpretation of the
-    * data.)
-    */
-   temp = png_get_uint_32(profile+36); /* signature 'ascp' */
-   if (temp != 0x61637370)
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "invalid signature");
-
-   /* Currently the PCS illuminant/adopted white point (the computational
-    * white point) are required to be D50,
-    * however the profile contains a record of the illuminant so perhaps ICC
-    * expects to be able to change this in the future (despite the rationale in
-    * the introduction for using a fixed PCS adopted white.)  Consequently the
-    * following is just a warning.
-    */
-   if (memcmp(profile+68, D50_nCIEXYZ, 12) != 0)
-      (void)png_icc_profile_error(png_ptr, NULL, name, 0/*no tag value*/,
-         "PCS illuminant is not D50");
-
-   /* The PNG spec requires this:
-    * "If the iCCP chunk is present, the image samples conform to the colour
-    * space represented by the embedded ICC profile as defined by the
-    * International Color Consortium [ICC]. The colour space of the ICC profile
-    * shall be an RGB colour space for colour images (PNG colour types 2, 3, and
-    * 6), or a greyscale colour space for greyscale images (PNG colour types 0
-    * and 4)."
-    *
-    * This checking code ensures the embedded profile (on either read or write)
-    * conforms to the specification requirements.  Notice that an ICC 'gray'
-    * color-space profile contains the information to transform the monochrome
-    * data to XYZ or L*a*b (according to which PCS the profile uses) and this
-    * should be used in preference to the standard libpng K channel replication
-    * into R, G and B channels.
-    *
-    * Previously it was suggested that an RGB profile on grayscale data could be
-    * handled.  However it it is clear that using an RGB profile in this context
-    * must be an error - there is no specification of what it means.  Thus it is
-    * almost certainly more correct to ignore the profile.
-    */
-   temp = png_get_uint_32(profile+16); /* data colour space field */
-   switch (temp)
-   {
-      case 0x52474220: /* 'RGB ' */
-         if (!(color_type & PNG_COLOR_MASK_COLOR))
-            return png_icc_profile_error(png_ptr, colorspace, name, temp,
-               "RGB color space not permitted on grayscale PNG");
-         break;
-
-      case 0x47524159: /* 'GRAY' */
-         if (color_type & PNG_COLOR_MASK_COLOR)
-            return png_icc_profile_error(png_ptr, colorspace, name, temp,
-               "Gray color space not permitted on RGB PNG");
-         break;
-
-      default:
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "invalid ICC profile color space");
-   }
-
-   /* It is up to the application to check that the profile class matches the
-    * application requirements; the spec provides no guidance, but it's pretty
-    * weird if the profile is not scanner ('scnr'), monitor ('mntr'), printer
-    * ('prtr') or 'spac' (for generic color spaces).  Issue a warning in these
-    * cases.  Issue an error for device link or abstract profiles - these don't
-    * contain the records necessary to transform the color-space to anything
-    * other than the target device (and not even that for an abstract profile).
-    * Profiles of these classes may not be embedded in images.
-    */
-   temp = png_get_uint_32(profile+12); /* profile/device class */
-   switch (temp)
-   {
-      case 0x73636E72: /* 'scnr' */
-      case 0x6D6E7472: /* 'mntr' */
-      case 0x70727472: /* 'prtr' */
-      case 0x73706163: /* 'spac' */
-         /* All supported */
-         break;
-
-      case 0x61627374: /* 'abst' */
-         /* May not be embedded in an image */
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "invalid embedded Abstract ICC profile");
-
-      case 0x6C696E6B: /* 'link' */
-         /* DeviceLink profiles cannnot be interpreted in a non-device specific
-          * fashion, if an app uses the AToB0Tag in the profile the results are
-          * undefined unless the result is sent to the intended device,
-          * therefore a DeviceLink profile should not be found embedded in a
-          * PNG.
-          */
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "unexpected DeviceLink ICC profile class");
-
-      case 0x6E6D636C: /* 'nmcl' */
-         /* A NamedColor profile is also device specific, however it doesn't
-          * contain an AToB0 tag that is open to misintrepretation.  Almost
-          * certainly it will fail the tests below.
-          */
-         (void)png_icc_profile_error(png_ptr, NULL, name, temp,
-            "unexpected NamedColor ICC profile class");
-         break;
-
-      default:
-         /* To allow for future enhancements to the profile accept unrecognized
-          * profile classes with a warning, these then hit the test below on the
-          * tag content to ensure they are backward compatible with one of the
-          * understood profiles.
-          */
-         (void)png_icc_profile_error(png_ptr, NULL, name, temp,
-            "unrecognized ICC profile class");
-         break;
-   }
-
-   /* For any profile other than a device link one the PCS must be encoded
-    * either in XYZ or Lab.
-    */
-   temp = png_get_uint_32(profile+20);
-   switch (temp)
-   {
-      case 0x58595A20: /* 'XYZ ' */
-      case 0x4C616220: /* 'Lab ' */
-         break;
-
-      default:
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "unexpected ICC PCS encoding");
-   }
-
-   return 1;
-}
-
-int /* PRIVATE */
-png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length,
-   png_const_bytep profile /* header plus whole tag table */)
-{
-   png_uint_32 tag_count = png_get_uint_32(profile+128);
-   png_uint_32 itag;
-   png_const_bytep tag = profile+132; /* The first tag */
-
-   /* First scan all the tags in the table and add bits to the icc_info value
-    * (temporarily in 'tags').
-    */
-   for (itag=0; itag < tag_count; ++itag, tag += 12)
-   {
-      png_uint_32 tag_id = png_get_uint_32(tag+0);
-      png_uint_32 tag_start = png_get_uint_32(tag+4); /* must be aligned */
-      png_uint_32 tag_length = png_get_uint_32(tag+8);/* not padded */
-
-      /* The ICC specification does not exclude zero length tags, therefore the
-       * start might actually be anywhere if there is no data, but this would be
-       * a clear abuse of the intent of the standard so the start is checked for
-       * being in range.  All defined tag types have an 8 byte header - a 4 byte
-       * type signature then 0.
-       */
-      if ((tag_start & 3) != 0)
-      {
-         /* CNHP730S.icc shipped with Microsoft Windows 64 violates this, it is
-          * only a warning here because libpng does not care about the
-          * alignment.
-          */
-         (void)png_icc_profile_error(png_ptr, NULL, name, tag_id,
-            "ICC profile tag start not a multiple of 4");
-      }
-
-      /* This is a hard error; potentially it can cause read outside the
-       * profile.
-       */
-      if (tag_start > profile_length || tag_length > profile_length - tag_start)
-         return png_icc_profile_error(png_ptr, colorspace, name, tag_id,
-            "ICC profile tag outside profile");
-   }
-
-   return 1; /* success, maybe with warnings */
-}
-
-#ifdef PNG_sRGB_SUPPORTED
-/* Information about the known ICC sRGB profiles */
-static const struct
-{
-   png_uint_32 adler, crc, length;
-   png_uint_32 md5[4];
-   png_byte    have_md5;
-   png_byte    is_broken;
-   png_uint_16 intent;
-
-#  define PNG_MD5(a,b,c,d) { a, b, c, d }, (a!=0)||(b!=0)||(c!=0)||(d!=0)
-#  define PNG_ICC_CHECKSUM(adler, crc, md5, intent, broke, date, length, fname)\
-      { adler, crc, length, md5, broke, intent },
-
-} png_sRGB_checks[] =
-{
-   /* This data comes from contrib/tools/checksum-icc run on downloads of
-    * all four ICC sRGB profiles from www.color.org.
-    */
-   /* adler32, crc32, MD5[4], intent, date, length, file-name */
-   PNG_ICC_CHECKSUM(0x0a3fd9f6, 0x3b8772b9,
-      PNG_MD5(0x29f83dde, 0xaff255ae, 0x7842fae4, 0xca83390d), 0, 0,
-      "2009/03/27 21:36:31", 3048, "sRGB_IEC61966-2-1_black_scaled.icc")
-
-   /* ICC sRGB v2 perceptual no black-compensation: */
-   PNG_ICC_CHECKSUM(0x4909e5e1, 0x427ebb21,
-      PNG_MD5(0xc95bd637, 0xe95d8a3b, 0x0df38f99, 0xc1320389), 1, 0,
-      "2009/03/27 21:37:45", 3052, "sRGB_IEC61966-2-1_no_black_scaling.icc")
-
-   PNG_ICC_CHECKSUM(0xfd2144a1, 0x306fd8ae,
-      PNG_MD5(0xfc663378, 0x37e2886b, 0xfd72e983, 0x8228f1b8), 0, 0,
-      "2009/08/10 17:28:01", 60988, "sRGB_v4_ICC_preference_displayclass.icc")
-
-   /* ICC sRGB v4 perceptual */
-   PNG_ICC_CHECKSUM(0x209c35d2, 0xbbef7812,
-      PNG_MD5(0x34562abf, 0x994ccd06, 0x6d2c5721, 0xd0d68c5d), 0, 0,
-      "2007/07/25 00:05:37", 60960, "sRGB_v4_ICC_preference.icc")
-
-   /* The following profiles have no known MD5 checksum. If there is a match
-    * on the (empty) MD5 the other fields are used to attempt a match and
-    * a warning is produced.  The first two of these profiles have a 'cprt' tag
-    * which suggests that they were also made by Hewlett Packard.
-    */
-   PNG_ICC_CHECKSUM(0xa054d762, 0x5d5129ce,
-      PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 0,
-      "2004/07/21 18:57:42", 3024, "sRGB_IEC61966-2-1_noBPC.icc")
-
-   /* This is a 'mntr' (display) profile with a mediaWhitePointTag that does not
-    * match the D50 PCS illuminant in the header (it is in fact the D65 values,
-    * so the white point is recorded as the un-adapted value.)  The profiles
-    * below only differ in one byte - the intent - and are basically the same as
-    * the previous profile except for the mediaWhitePointTag error and a missing
-    * chromaticAdaptationTag.
-    */
-   PNG_ICC_CHECKSUM(0xf784f3fb, 0x182ea552,
-      PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 0, 1/*broken*/,
-      "1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 perceptual")
-
-   PNG_ICC_CHECKSUM(0x0398f3fc, 0xf29e526d,
-      PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 1/*broken*/,
-      "1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 media-relative")
-};
-
-static int
-png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
-   png_const_bytep profile, uLong adler)
-{
-   /* The quick check is to verify just the MD5 signature and trust the
-    * rest of the data.  Because the profile has already been verified for
-    * correctness this is safe.  png_colorspace_set_sRGB will check the 'intent'
-    * field too, so if the profile has been edited with an intent not defined
-    * by sRGB (but maybe defined by a later ICC specification) the read of
-    * the profile will fail at that point.
-    */
-   png_uint_32 length = 0;
-   png_uint_32 intent = 0x10000; /* invalid */
-#if PNG_sRGB_PROFILE_CHECKS > 1
-   uLong crc = 0; /* the value for 0 length data */
-#endif
-   unsigned int i;
-
-   for (i=0; i < (sizeof png_sRGB_checks) / (sizeof png_sRGB_checks[0]); ++i)
-   {
-      if (png_get_uint_32(profile+84) == png_sRGB_checks[i].md5[0] &&
-         png_get_uint_32(profile+88) == png_sRGB_checks[i].md5[1] &&
-         png_get_uint_32(profile+92) == png_sRGB_checks[i].md5[2] &&
-         png_get_uint_32(profile+96) == png_sRGB_checks[i].md5[3])
-      {
-         /* This may be one of the old HP profiles without an MD5, in that
-          * case we can only use the length and Adler32 (note that these
-          * are not used by default if there is an MD5!)
-          */
-#        if PNG_sRGB_PROFILE_CHECKS == 0
-            if (png_sRGB_checks[i].have_md5)
-               return 1+png_sRGB_checks[i].is_broken;
-#        endif
-
-         /* Profile is unsigned or more checks have been configured in. */
-         if (length == 0)
-         {
-            length = png_get_uint_32(profile);
-            intent = png_get_uint_32(profile+64);
-         }
-
-         /* Length *and* intent must match */
-         if (length == png_sRGB_checks[i].length &&
-            intent == png_sRGB_checks[i].intent)
-         {
-            /* Now calculate the adler32 if not done already. */
-            if (adler == 0)
-            {
-               adler = adler32(0, NULL, 0);
-               adler = adler32(adler, profile, length);
-            }
-
-            if (adler == png_sRGB_checks[i].adler)
-            {
-               /* These basic checks suggest that the data has not been
-                * modified, but if the check level is more than 1 perform
-                * our own crc32 checksum on the data.
-                */
-#              if PNG_sRGB_PROFILE_CHECKS > 1
-                  if (crc == 0)
-                  {
-                     crc = crc32(0, NULL, 0);
-                     crc = crc32(crc, profile, length);
-                  }
-
-                  /* So this check must pass for the 'return' below to happen.
-                   */
-                  if (crc == png_sRGB_checks[i].crc)
-#              endif
-               {
-                  if (png_sRGB_checks[i].is_broken)
-                  {
-                     /* These profiles are known to have bad data that may cause
-                      * problems if they are used, therefore attempt to
-                      * discourage their use, skip the 'have_md5' warning below,
-                      * which is made irrelevant by this error.
-                      */
-                     png_chunk_report(png_ptr, "known incorrect sRGB profile",
-                        PNG_CHUNK_ERROR);
-                  }
-
-                  /* Warn that this being done; this isn't even an error since
-                   * the profile is perfectly valid, but it would be nice if
-                   * people used the up-to-date ones.
-                   */
-                  else if (!png_sRGB_checks[i].have_md5)
-                  {
-                     png_chunk_report(png_ptr,
-                        "out-of-date sRGB profile with no signature",
-                        PNG_CHUNK_WARNING);
-                  }
-
-                  return 1+png_sRGB_checks[i].is_broken;
-               }
-            }
-         }
-
-#        if PNG_sRGB_PROFILE_CHECKS > 0
-            /* The signature matched, but the profile had been changed in some
-             * way.  This is an apparent violation of the ICC terms of use and,
-             * anyway, probably indicates a data error or uninformed hacking.
-             */
-            if (png_sRGB_checks[i].have_md5)
-               png_benign_error(png_ptr,
-                  "copyright violation: edited ICC profile ignored");
-#        endif
-      }
-   }
-
-   return 0; /* no match */
-}
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-void /* PRIVATE */
-png_icc_set_sRGB(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_bytep profile, uLong adler)
-{
-   /* Is this profile one of the known ICC sRGB profiles?  If it is, just set
-    * the sRGB information.
-    */
-   if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler))
-      (void)png_colorspace_set_sRGB(png_ptr, colorspace,
-         (int)/*already checked*/png_get_uint_32(profile+64));
-}
-#endif /* PNG_READ_sRGB_SUPPORTED */
-
-int /* PRIVATE */
-png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length, png_const_bytep profile,
-   int color_type)
-{
-   if (colorspace->flags & PNG_COLORSPACE_INVALID)
-      return 0;
-
-   if (png_icc_check_length(png_ptr, colorspace, name, profile_length) &&
-      png_icc_check_header(png_ptr, colorspace, name, profile_length, profile,
-         color_type) &&
-      png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
-         profile))
-   {
-      png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
-      return 1;
-   }
-
-   /* Failure case */
-   return 0;
-}
-#endif /* iCCP */
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-void /* PRIVATE */
-png_colorspace_set_rgb_coefficients(png_structrp png_ptr)
-{
-   /* Set the rgb_to_gray coefficients from the colorspace. */
-   if (!png_ptr->rgb_to_gray_coefficients_set &&
-      (png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      /* png_set_background has not been called, get the coefficients from the Y
-       * values of the colorspace colorants.
-       */
-      png_fixed_point r = png_ptr->colorspace.end_points_XYZ.red_Y;
-      png_fixed_point g = png_ptr->colorspace.end_points_XYZ.green_Y;
-      png_fixed_point b = png_ptr->colorspace.end_points_XYZ.blue_Y;
-      png_fixed_point total = r+g+b;
-
-      if (total > 0 &&
-         r >= 0 && png_muldiv(&r, r, 32768, total) && r >= 0 && r <= 32768 &&
-         g >= 0 && png_muldiv(&g, g, 32768, total) && g >= 0 && g <= 32768 &&
-         b >= 0 && png_muldiv(&b, b, 32768, total) && b >= 0 && b <= 32768 &&
-         r+g+b <= 32769)
-      {
-         /* We allow 0 coefficients here.  r+g+b may be 32769 if two or
-          * all of the coefficients were rounded up.  Handle this by
-          * reducing the *largest* coefficient by 1; this matches the
-          * approach used for the default coefficients in pngrtran.c
-          */
-         int add = 0;
-
-         if (r+g+b > 32768)
-            add = -1;
-         else if (r+g+b < 32768)
-            add = 1;
-
-         if (add != 0)
-         {
-            if (g >= r && g >= b)
-               g += add;
-            else if (r >= g && r >= b)
-               r += add;
-            else
-               b += add;
-         }
-
-         /* Check for an internal error. */
-         if (r+g+b != 32768)
-            png_error(png_ptr,
-               "internal error handling cHRM coefficients");
-
-         else
-         {
-            png_ptr->rgb_to_gray_red_coeff   = (png_uint_16)r;
-            png_ptr->rgb_to_gray_green_coeff = (png_uint_16)g;
-         }
-      }
-
-      /* This is a png_error at present even though it could be ignored -
-       * it should never happen, but it is important that if it does, the
-       * bug is fixed.
-       */
-      else
-         png_error(png_ptr, "internal error handling cHRM->XYZ");
-   }
-}
-#endif
-
-#endif /* COLORSPACE */
-
-void /* PRIVATE */
-png_check_IHDR(png_const_structrp png_ptr,
-   png_uint_32 width, png_uint_32 height, int bit_depth,
-   int color_type, int interlace_type, int compression_type,
-   int filter_type)
-{
-   int error = 0;
-
-   /* Check for width and height valid values */
-   if (width == 0)
-   {
-      png_warning(png_ptr, "Image width is zero in IHDR");
-      error = 1;
-   }
-
-   if (height == 0)
-   {
-      png_warning(png_ptr, "Image height is zero in IHDR");
-      error = 1;
-   }
-
-#  ifdef PNG_SET_USER_LIMITS_SUPPORTED
-   if (width > png_ptr->user_width_max)
-
-#  else
-   if (width > PNG_USER_WIDTH_MAX)
-#  endif
-   {
-      png_warning(png_ptr, "Image width exceeds user limit in IHDR");
-      error = 1;
-   }
-
-#  ifdef PNG_SET_USER_LIMITS_SUPPORTED
-   if (height > png_ptr->user_height_max)
-#  else
-   if (height > PNG_USER_HEIGHT_MAX)
-#  endif
-   {
-      png_warning(png_ptr, "Image height exceeds user limit in IHDR");
-      error = 1;
-   }
-
-   if (width > PNG_UINT_31_MAX)
-   {
-      png_warning(png_ptr, "Invalid image width in IHDR");
-      error = 1;
-   }
-
-   if (height > PNG_UINT_31_MAX)
-   {
-      png_warning(png_ptr, "Invalid image height in IHDR");
-      error = 1;
-   }
-
-   if (width > (PNG_UINT_32_MAX
-                 >> 3)      /* 8-byte RGBA pixels */
-                 - 48       /* bigrowbuf hack */
-                 - 1        /* filter byte */
-                 - 7*8      /* rounding of width to multiple of 8 pixels */
-                 - 8)       /* extra max_pixel_depth pad */
-      png_warning(png_ptr, "Width is too large for libpng to process pixels");
-
-   /* Check other values */
-   if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
-       bit_depth != 8 && bit_depth != 16)
-   {
-      png_warning(png_ptr, "Invalid bit depth in IHDR");
-      error = 1;
-   }
-
-   if (color_type < 0 || color_type == 1 ||
-       color_type == 5 || color_type > 6)
-   {
-      png_warning(png_ptr, "Invalid color type in IHDR");
-      error = 1;
-   }
-
-   if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
-       ((color_type == PNG_COLOR_TYPE_RGB ||
-         color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
-         color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
-   {
-      png_warning(png_ptr, "Invalid color type/bit depth combination in IHDR");
-      error = 1;
-   }
-
-   if (interlace_type >= PNG_INTERLACE_LAST)
-   {
-      png_warning(png_ptr, "Unknown interlace method in IHDR");
-      error = 1;
-   }
-
-   if (compression_type != PNG_COMPRESSION_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Unknown compression method in IHDR");
-      error = 1;
-   }
-
-#  ifdef PNG_MNG_FEATURES_SUPPORTED
-   /* Accept filter_method 64 (intrapixel differencing) only if
-    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
-    * 2. Libpng did not read a PNG signature (this filter_method is only
-    *    used in PNG datastreams that are embedded in MNG datastreams) and
-    * 3. The application called png_permit_mng_features with a mask that
-    *    included PNG_FLAG_MNG_FILTER_64 and
-    * 4. The filter_method is 64 and
-    * 5. The color_type is RGB or RGBA
-    */
-   if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) &&
-       png_ptr->mng_features_permitted)
-      png_warning(png_ptr, "MNG features are not allowed in a PNG datastream");
-
-   if (filter_type != PNG_FILTER_TYPE_BASE)
-   {
-      if (!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
-          (filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
-          ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) == 0) &&
-          (color_type == PNG_COLOR_TYPE_RGB ||
-          color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
-      {
-         png_warning(png_ptr, "Unknown filter method in IHDR");
-         error = 1;
-      }
-
-      if (png_ptr->mode & PNG_HAVE_PNG_SIGNATURE)
-      {
-         png_warning(png_ptr, "Invalid filter method in IHDR");
-         error = 1;
-      }
-   }
-
-#  else
-   if (filter_type != PNG_FILTER_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Unknown filter method in IHDR");
-      error = 1;
-   }
-#  endif
-
-   if (error == 1)
-      png_error(png_ptr, "Invalid IHDR data");
-}
-
-#if defined(PNG_sCAL_SUPPORTED) || defined(PNG_pCAL_SUPPORTED)
-/* ASCII to fp functions */
-/* Check an ASCII formated floating point value, see the more detailed
- * comments in pngpriv.h
- */
-/* The following is used internally to preserve the sticky flags */
-#define png_fp_add(state, flags) ((state) |= (flags))
-#define png_fp_set(state, value) ((state) = (value) | ((state) & PNG_FP_STICKY))
-
-int /* PRIVATE */
-png_check_fp_number(png_const_charp string, png_size_t size, int *statep,
-   png_size_tp whereami)
-{
-   int state = *statep;
-   png_size_t i = *whereami;
-
-   while (i < size)
-   {
-      int type;
-      /* First find the type of the next character */
-      switch (string[i])
-      {
-      case 43:  type = PNG_FP_SAW_SIGN;                   break;
-      case 45:  type = PNG_FP_SAW_SIGN + PNG_FP_NEGATIVE; break;
-      case 46:  type = PNG_FP_SAW_DOT;                    break;
-      case 48:  type = PNG_FP_SAW_DIGIT;                  break;
-      case 49: case 50: case 51: case 52:
-      case 53: case 54: case 55: case 56:
-      case 57:  type = PNG_FP_SAW_DIGIT + PNG_FP_NONZERO; break;
-      case 69:
-      case 101: type = PNG_FP_SAW_E;                      break;
-      default:  goto PNG_FP_End;
-      }
-
-      /* Now deal with this type according to the current
-       * state, the type is arranged to not overlap the
-       * bits of the PNG_FP_STATE.
-       */
-      switch ((state & PNG_FP_STATE) + (type & PNG_FP_SAW_ANY))
-      {
-      case PNG_FP_INTEGER + PNG_FP_SAW_SIGN:
-         if (state & PNG_FP_SAW_ANY)
-            goto PNG_FP_End; /* not a part of the number */
-
-         png_fp_add(state, type);
-         break;
-
-      case PNG_FP_INTEGER + PNG_FP_SAW_DOT:
-         /* Ok as trailer, ok as lead of fraction. */
-         if (state & PNG_FP_SAW_DOT) /* two dots */
-            goto PNG_FP_End;
-
-         else if (state & PNG_FP_SAW_DIGIT) /* trailing dot? */
-            png_fp_add(state, type);
-
-         else
-            png_fp_set(state, PNG_FP_FRACTION | type);
-
-         break;
-
-      case PNG_FP_INTEGER + PNG_FP_SAW_DIGIT:
-         if (state & PNG_FP_SAW_DOT) /* delayed fraction */
-            png_fp_set(state, PNG_FP_FRACTION | PNG_FP_SAW_DOT);
-
-         png_fp_add(state, type | PNG_FP_WAS_VALID);
-
-         break;
-
-      case PNG_FP_INTEGER + PNG_FP_SAW_E:
-         if ((state & PNG_FP_SAW_DIGIT) == 0)
-            goto PNG_FP_End;
-
-         png_fp_set(state, PNG_FP_EXPONENT);
-
-         break;
-
-   /* case PNG_FP_FRACTION + PNG_FP_SAW_SIGN:
-         goto PNG_FP_End; ** no sign in fraction */
-
-   /* case PNG_FP_FRACTION + PNG_FP_SAW_DOT:
-         goto PNG_FP_End; ** Because SAW_DOT is always set */
-
-      case PNG_FP_FRACTION + PNG_FP_SAW_DIGIT:
-         png_fp_add(state, type | PNG_FP_WAS_VALID);
-         break;
-
-      case PNG_FP_FRACTION + PNG_FP_SAW_E:
-         /* This is correct because the trailing '.' on an
-          * integer is handled above - so we can only get here
-          * with the sequence ".E" (with no preceding digits).
-          */
-         if ((state & PNG_FP_SAW_DIGIT) == 0)
-            goto PNG_FP_End;
-
-         png_fp_set(state, PNG_FP_EXPONENT);
-
-         break;
-
-      case PNG_FP_EXPONENT + PNG_FP_SAW_SIGN:
-         if (state & PNG_FP_SAW_ANY)
-            goto PNG_FP_End; /* not a part of the number */
-
-         png_fp_add(state, PNG_FP_SAW_SIGN);
-
-         break;
-
-   /* case PNG_FP_EXPONENT + PNG_FP_SAW_DOT:
-         goto PNG_FP_End; */
-
-      case PNG_FP_EXPONENT + PNG_FP_SAW_DIGIT:
-         png_fp_add(state, PNG_FP_SAW_DIGIT | PNG_FP_WAS_VALID);
-
-         break;
-
-   /* case PNG_FP_EXPONEXT + PNG_FP_SAW_E:
-         goto PNG_FP_End; */
-
-      default: goto PNG_FP_End; /* I.e. break 2 */
-      }
-
-      /* The character seems ok, continue. */
-      ++i;
-   }
-
-PNG_FP_End:
-   /* Here at the end, update the state and return the correct
-    * return code.
-    */
-   *statep = state;
-   *whereami = i;
-
-   return (state & PNG_FP_SAW_DIGIT) != 0;
-}
-
-
-/* The same but for a complete string. */
-int
-png_check_fp_string(png_const_charp string, png_size_t size)
-{
-   int        state=0;
-   png_size_t char_index=0;
-
-   if (png_check_fp_number(string, size, &state, &char_index) &&
-      (char_index == size || string[char_index] == 0))
-      return state /* must be non-zero - see above */;
-
-   return 0; /* i.e. fail */
-}
-#endif /* pCAL or sCAL */
-
-#ifdef PNG_sCAL_SUPPORTED
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-/* Utility used below - a simple accurate power of ten from an integral
- * exponent.
- */
-static double
-png_pow10(int power)
-{
-   int recip = 0;
-   double d = 1;
-
-   /* Handle negative exponent with a reciprocal at the end because
-    * 10 is exact whereas .1 is inexact in base 2
-    */
-   if (power < 0)
-   {
-      if (power < DBL_MIN_10_EXP) return 0;
-      recip = 1, power = -power;
-   }
-
-   if (power > 0)
-   {
-      /* Decompose power bitwise. */
-      double mult = 10;
-      do
-      {
-         if (power & 1) d *= mult;
-         mult *= mult;
-         power >>= 1;
-      }
-      while (power > 0);
-
-      if (recip) d = 1/d;
-   }
-   /* else power is 0 and d is 1 */
-
-   return d;
-}
-
-/* Function to format a floating point value in ASCII with a given
- * precision.
- */
-void /* PRIVATE */
-png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
-    double fp, unsigned int precision)
-{
-   /* We use standard functions from math.h, but not printf because
-    * that would require stdio.  The caller must supply a buffer of
-    * sufficient size or we will png_error.  The tests on size and
-    * the space in ascii[] consumed are indicated below.
-    */
-   if (precision < 1)
-      precision = DBL_DIG;
-
-   /* Enforce the limit of the implementation precision too. */
-   if (precision > DBL_DIG+1)
-      precision = DBL_DIG+1;
-
-   /* Basic sanity checks */
-   if (size >= precision+5) /* See the requirements below. */
-   {
-      if (fp < 0)
-      {
-         fp = -fp;
-         *ascii++ = 45; /* '-'  PLUS 1 TOTAL 1 */
-         --size;
-      }
-
-      if (fp >= DBL_MIN && fp <= DBL_MAX)
-      {
-         int exp_b10;       /* A base 10 exponent */
-         double base;   /* 10^exp_b10 */
-
-         /* First extract a base 10 exponent of the number,
-          * the calculation below rounds down when converting
-          * from base 2 to base 10 (multiply by log10(2) -
-          * 0.3010, but 77/256 is 0.3008, so exp_b10 needs to
-          * be increased.  Note that the arithmetic shift
-          * performs a floor() unlike C arithmetic - using a
-          * C multiply would break the following for negative
-          * exponents.
-          */
-         (void)frexp(fp, &exp_b10); /* exponent to base 2 */
-
-         exp_b10 = (exp_b10 * 77) >> 8; /* <= exponent to base 10 */
-
-         /* Avoid underflow here. */
-         base = png_pow10(exp_b10); /* May underflow */
-
-         while (base < DBL_MIN || base < fp)
-         {
-            /* And this may overflow. */
-            double test = png_pow10(exp_b10+1);
-
-            if (test <= DBL_MAX)
-               ++exp_b10, base = test;
-
-            else
-               break;
-         }
-
-         /* Normalize fp and correct exp_b10, after this fp is in the
-          * range [.1,1) and exp_b10 is both the exponent and the digit
-          * *before* which the decimal point should be inserted
-          * (starting with 0 for the first digit).  Note that this
-          * works even if 10^exp_b10 is out of range because of the
-          * test on DBL_MAX above.
-          */
-         fp /= base;
-         while (fp >= 1) fp /= 10, ++exp_b10;
-
-         /* Because of the code above fp may, at this point, be
-          * less than .1, this is ok because the code below can
-          * handle the leading zeros this generates, so no attempt
-          * is made to correct that here.
-          */
-
-         {
-            int czero, clead, cdigits;
-            char exponent[10];
-
-            /* Allow up to two leading zeros - this will not lengthen
-             * the number compared to using E-n.
-             */
-            if (exp_b10 < 0 && exp_b10 > -3) /* PLUS 3 TOTAL 4 */
-            {
-               czero = -exp_b10; /* PLUS 2 digits: TOTAL 3 */
-               exp_b10 = 0;      /* Dot added below before first output. */
-            }
-            else
-               czero = 0;    /* No zeros to add */
-
-            /* Generate the digit list, stripping trailing zeros and
-             * inserting a '.' before a digit if the exponent is 0.
-             */
-            clead = czero; /* Count of leading zeros */
-            cdigits = 0;   /* Count of digits in list. */
-
-            do
-            {
-               double d;
-
-               fp *= 10;
-               /* Use modf here, not floor and subtract, so that
-                * the separation is done in one step.  At the end
-                * of the loop don't break the number into parts so
-                * that the final digit is rounded.
-                */
-               if (cdigits+czero-clead+1 < (int)precision)
-                  fp = modf(fp, &d);
-
-               else
-               {
-                  d = floor(fp + .5);
-
-                  if (d > 9)
-                  {
-                     /* Rounding up to 10, handle that here. */
-                     if (czero > 0)
-                     {
-                        --czero, d = 1;
-                        if (cdigits == 0) --clead;
-                     }
-                     else
-                     {
-                        while (cdigits > 0 && d > 9)
-                        {
-                           int ch = *--ascii;
-
-                           if (exp_b10 != (-1))
-                              ++exp_b10;
-
-                           else if (ch == 46)
-                           {
-                              ch = *--ascii, ++size;
-                              /* Advance exp_b10 to '1', so that the
-                               * decimal point happens after the
-                               * previous digit.
-                               */
-                              exp_b10 = 1;
-                           }
-
-                           --cdigits;
-                           d = ch - 47;  /* I.e. 1+(ch-48) */
-                        }
-
-                        /* Did we reach the beginning? If so adjust the
-                         * exponent but take into account the leading
-                         * decimal point.
-                         */
-                        if (d > 9)  /* cdigits == 0 */
-                        {
-                           if (exp_b10 == (-1))
-                           {
-                              /* Leading decimal point (plus zeros?), if
-                               * we lose the decimal point here it must
-                               * be reentered below.
-                               */
-                              int ch = *--ascii;
-
-                              if (ch == 46)
-                                 ++size, exp_b10 = 1;
-
-                              /* Else lost a leading zero, so 'exp_b10' is
-                               * still ok at (-1)
-                               */
-                           }
-                           else
-                              ++exp_b10;
-
-                           /* In all cases we output a '1' */
-                           d = 1;
-                        }
-                     }
-                  }
-                  fp = 0; /* Guarantees termination below. */
-               }
-
-               if (d == 0)
-               {
-                  ++czero;
-                  if (cdigits == 0) ++clead;
-               }
-               else
-               {
-                  /* Included embedded zeros in the digit count. */
-                  cdigits += czero - clead;
-                  clead = 0;
-
-                  while (czero > 0)
-                  {
-                     /* exp_b10 == (-1) means we just output the decimal
-                      * place - after the DP don't adjust 'exp_b10' any
-                      * more!
-                      */
-                     if (exp_b10 != (-1))
-                     {
-                        if (exp_b10 == 0) *ascii++ = 46, --size;
-                        /* PLUS 1: TOTAL 4 */
-                        --exp_b10;
-                     }
-                     *ascii++ = 48, --czero;
-                  }
-
-                  if (exp_b10 != (-1))
-                  {
-                     if (exp_b10 == 0) *ascii++ = 46, --size; /* counted
-                                                                 above */
-                     --exp_b10;
-                  }
-                  *ascii++ = (char)(48 + (int)d), ++cdigits;
-               }
-            }
-            while (cdigits+czero-clead < (int)precision && fp > DBL_MIN);
-
-            /* The total output count (max) is now 4+precision */
-
-            /* Check for an exponent, if we don't need one we are
-             * done and just need to terminate the string.  At
-             * this point exp_b10==(-1) is effectively if flag - it got
-             * to '-1' because of the decrement after outputing
-             * the decimal point above (the exponent required is
-             * *not* -1!)
-             */
-            if (exp_b10 >= (-1) && exp_b10 <= 2)
-            {
-               /* The following only happens if we didn't output the
-                * leading zeros above for negative exponent, so this
-                * doest add to the digit requirement.  Note that the
-                * two zeros here can only be output if the two leading
-                * zeros were *not* output, so this doesn't increase
-                * the output count.
-                */
-               while (--exp_b10 >= 0) *ascii++ = 48;
-
-               *ascii = 0;
-
-               /* Total buffer requirement (including the '\0') is
-                * 5+precision - see check at the start.
-                */
-               return;
-            }
-
-            /* Here if an exponent is required, adjust size for
-             * the digits we output but did not count.  The total
-             * digit output here so far is at most 1+precision - no
-             * decimal point and no leading or trailing zeros have
-             * been output.
-             */
-            size -= cdigits;
-
-            *ascii++ = 69, --size;    /* 'E': PLUS 1 TOTAL 2+precision */
-
-            /* The following use of an unsigned temporary avoids ambiguities in
-             * the signed arithmetic on exp_b10 and permits GCC at least to do
-             * better optimization.
-             */
-            {
-               unsigned int uexp_b10;
-
-               if (exp_b10 < 0)
-               {
-                  *ascii++ = 45, --size; /* '-': PLUS 1 TOTAL 3+precision */
-                  uexp_b10 = -exp_b10;
-               }
-
-               else
-                  uexp_b10 = exp_b10;
-
-               cdigits = 0;
-
-               while (uexp_b10 > 0)
-               {
-                  exponent[cdigits++] = (char)(48 + uexp_b10 % 10);
-                  uexp_b10 /= 10;
-               }
-            }
-
-            /* Need another size check here for the exponent digits, so
-             * this need not be considered above.
-             */
-            if ((int)size > cdigits)
-            {
-               while (cdigits > 0) *ascii++ = exponent[--cdigits];
-
-               *ascii = 0;
-
-               return;
-            }
-         }
-      }
-      else if (!(fp >= DBL_MIN))
-      {
-         *ascii++ = 48; /* '0' */
-         *ascii = 0;
-         return;
-      }
-      else
-      {
-         *ascii++ = 105; /* 'i' */
-         *ascii++ = 110; /* 'n' */
-         *ascii++ = 102; /* 'f' */
-         *ascii = 0;
-         return;
-      }
-   }
-
-   /* Here on buffer too small. */
-   png_error(png_ptr, "ASCII conversion buffer too small");
-}
-
-#  endif /* FLOATING_POINT */
-
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-/* Function to format a fixed point value in ASCII.
- */
-void /* PRIVATE */
-png_ascii_from_fixed(png_const_structrp png_ptr, png_charp ascii,
-    png_size_t size, png_fixed_point fp)
-{
-   /* Require space for 10 decimal digits, a decimal point, a minus sign and a
-    * trailing \0, 13 characters:
-    */
-   if (size > 12)
-   {
-      png_uint_32 num;
-
-      /* Avoid overflow here on the minimum integer. */
-      if (fp < 0)
-         *ascii++ = 45, --size, num = -fp;
-      else
-         num = fp;
-
-      if (num <= 0x80000000) /* else overflowed */
-      {
-         unsigned int ndigits = 0, first = 16 /* flag value */;
-         char digits[10];
-
-         while (num)
-         {
-            /* Split the low digit off num: */
-            unsigned int tmp = num/10;
-            num -= tmp*10;
-            digits[ndigits++] = (char)(48 + num);
-            /* Record the first non-zero digit, note that this is a number
-             * starting at 1, it's not actually the array index.
-             */
-            if (first == 16 && num > 0)
-               first = ndigits;
-            num = tmp;
-         }
-
-         if (ndigits > 0)
-         {
-            while (ndigits > 5) *ascii++ = digits[--ndigits];
-            /* The remaining digits are fractional digits, ndigits is '5' or
-             * smaller at this point.  It is certainly not zero.  Check for a
-             * non-zero fractional digit:
-             */
-            if (first <= 5)
-            {
-               unsigned int i;
-               *ascii++ = 46; /* decimal point */
-               /* ndigits may be <5 for small numbers, output leading zeros
-                * then ndigits digits to first:
-                */
-               i = 5;
-               while (ndigits < i) *ascii++ = 48, --i;
-               while (ndigits >= first) *ascii++ = digits[--ndigits];
-               /* Don't output the trailing zeros! */
-            }
-         }
-         else
-            *ascii++ = 48;
-
-         /* And null terminate the string: */
-         *ascii = 0;
-         return;
-      }
-   }
-
-   /* Here on buffer too small. */
-   png_error(png_ptr, "ASCII conversion buffer too small");
-}
-#   endif /* FIXED_POINT */
-#endif /* READ_SCAL */
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && \
-   !defined(PNG_FIXED_POINT_MACRO_SUPPORTED) && \
-   (defined(PNG_gAMA_SUPPORTED) || defined(PNG_cHRM_SUPPORTED) || \
-   defined(PNG_sCAL_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)) || \
-   (defined(PNG_sCAL_SUPPORTED) && \
-   defined(PNG_FLOATING_ARITHMETIC_SUPPORTED))
-png_fixed_point
-png_fixed(png_const_structrp png_ptr, double fp, png_const_charp)
-{
-   double r = floor(100000 * fp + .5);
-
-   if (r > 2147483647. || r < -2147483648.)
-      png_fixed_error(png_ptr, text);
-
-   return (png_fixed_point)r;
-}
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || \
-    defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG_READ_pHYs_SUPPORTED)
-/* muldiv functions */
-/* This API takes signed arguments and rounds the result to the nearest
- * integer (or, for a fixed point number - the standard argument - to
- * the nearest .00001).  Overflow and divide by zero are signalled in
- * the result, a boolean - true on success, false on overflow.
- */
-int
-png_muldiv(png_fixed_point_p res, png_fixed_point a, png_int_32 times,
-    png_int_32 divisor)
-{
-   /* Return a * times / divisor, rounded. */
-   if (divisor != 0)
-   {
-      if (a == 0 || times == 0)
-      {
-         *res = 0;
-         return 1;
-      }
-      else
-      {
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-         double r = a;
-         r *= times;
-         r /= divisor;
-         r = floor(r+.5);
-
-         /* A png_fixed_point is a 32-bit integer. */
-         if (r <= 2147483647. && r >= -2147483648.)
-         {
-            *res = (png_fixed_point)r;
-            return 1;
-         }
-#else
-         int negative = 0;
-         png_uint_32 A, T, D;
-         png_uint_32 s16, s32, s00;
-
-         if (a < 0)
-            negative = 1, A = -a;
-         else
-            A = a;
-
-         if (times < 0)
-            negative = !negative, T = -times;
-         else
-            T = times;
-
-         if (divisor < 0)
-            negative = !negative, D = -divisor;
-         else
-            D = divisor;
-
-         /* Following can't overflow because the arguments only
-          * have 31 bits each, however the result may be 32 bits.
-          */
-         s16 = (A >> 16) * (T & 0xffff) +
-                           (A & 0xffff) * (T >> 16);
-         /* Can't overflow because the a*times bit is only 30
-          * bits at most.
-          */
-         s32 = (A >> 16) * (T >> 16) + (s16 >> 16);
-         s00 = (A & 0xffff) * (T & 0xffff);
-
-         s16 = (s16 & 0xffff) << 16;
-         s00 += s16;
-
-         if (s00 < s16)
-            ++s32; /* carry */
-
-         if (s32 < D) /* else overflow */
-         {
-            /* s32.s00 is now the 64-bit product, do a standard
-             * division, we know that s32 < D, so the maximum
-             * required shift is 31.
-             */
-            int bitshift = 32;
-            png_fixed_point result = 0; /* NOTE: signed */
-
-            while (--bitshift >= 0)
-            {
-               png_uint_32 d32, d00;
-
-               if (bitshift > 0)
-                  d32 = D >> (32-bitshift), d00 = D << bitshift;
-
-               else
-                  d32 = 0, d00 = D;
-
-               if (s32 > d32)
-               {
-                  if (s00 < d00) --s32; /* carry */
-                  s32 -= d32, s00 -= d00, result += 1<<bitshift;
-               }
-
-               else
-                  if (s32 == d32 && s00 >= d00)
-                     s32 = 0, s00 -= d00, result += 1<<bitshift;
-            }
-
-            /* Handle the rounding. */
-            if (s00 >= (D >> 1))
-               ++result;
-
-            if (negative)
-               result = -result;
-
-            /* Check for overflow. */
-            if ((negative && result <= 0) || (!negative && result >= 0))
-            {
-               *res = result;
-               return 1;
-            }
-         }
-#endif
-      }
-   }
-
-   return 0;
-}
-#endif /* READ_GAMMA || INCH_CONVERSIONS */
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_INCH_CONVERSIONS_SUPPORTED)
-/* The following is for when the caller doesn't much care about the
- * result.
- */
-png_fixed_point
-png_muldiv_warn(png_const_structrp png_ptr, png_fixed_point a, png_int_32 times,
-    png_int_32 divisor)
-{
-   png_fixed_point result;
-
-   if (png_muldiv(&result, a, times, divisor))
-      return result;
-
-   png_warning(png_ptr, "fixed point overflow ignored");
-   return 0;
-}
-#endif
-
-#ifdef PNG_GAMMA_SUPPORTED /* more fixed point functions for gamma */
-/* Calculate a reciprocal, return 0 on div-by-zero or overflow. */
-png_fixed_point
-png_reciprocal(png_fixed_point a)
-{
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   double r = floor(1E10/a+.5);
-
-   if (r <= 2147483647. && r >= -2147483648.)
-      return (png_fixed_point)r;
-#else
-   png_fixed_point res;
-
-   if (png_muldiv(&res, 100000, 100000, a))
-      return res;
-#endif
-
-   return 0; /* error/overflow */
-}
-
-/* This is the shared test on whether a gamma value is 'significant' - whether
- * it is worth doing gamma correction.
- */
-int /* PRIVATE */
-png_gamma_significant(png_fixed_point gamma_val)
-{
-   return gamma_val < PNG_FP_1 - PNG_GAMMA_THRESHOLD_FIXED ||
-       gamma_val > PNG_FP_1 + PNG_GAMMA_THRESHOLD_FIXED;
-}
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* A local convenience routine. */
-static png_fixed_point
-png_product2(png_fixed_point a, png_fixed_point b)
-{
-   /* The required result is 1/a * 1/b; the following preserves accuracy. */
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   double r = a * 1E-5;
-   r *= b;
-   r = floor(r+.5);
-
-   if (r <= 2147483647. && r >= -2147483648.)
-      return (png_fixed_point)r;
-#else
-   png_fixed_point res;
-
-   if (png_muldiv(&res, a, b, 100000))
-      return res;
-#endif
-
-   return 0; /* overflow */
-}
-
-/* The inverse of the above. */
-png_fixed_point
-png_reciprocal2(png_fixed_point a, png_fixed_point b)
-{
-   /* The required result is 1/a * 1/b; the following preserves accuracy. */
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   double r = 1E15/a;
-   r /= b;
-   r = floor(r+.5);
-
-   if (r <= 2147483647. && r >= -2147483648.)
-      return (png_fixed_point)r;
-#else
-   /* This may overflow because the range of png_fixed_point isn't symmetric,
-    * but this API is only used for the product of file and screen gamma so it
-    * doesn't matter that the smallest number it can produce is 1/21474, not
-    * 1/100000
-    */
-   png_fixed_point res = png_product2(a, b);
-
-   if (res != 0)
-      return png_reciprocal(res);
-#endif
-
-   return 0; /* overflow */
-}
-#endif /* READ_GAMMA */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED /* gamma table code */
-#ifndef PNG_FLOATING_ARITHMETIC_SUPPORTED
-/* Fixed point gamma.
- *
- * The code to calculate the tables used below can be found in the shell script
- * contrib/tools/intgamma.sh
- *
- * To calculate gamma this code implements fast log() and exp() calls using only
- * fixed point arithmetic.  This code has sufficient precision for either 8-bit
- * or 16-bit sample values.
- *
- * The tables used here were calculated using simple 'bc' programs, but C double
- * precision floating point arithmetic would work fine.
- *
- * 8-bit log table
- *   This is a table of -log(value/255)/log(2) for 'value' in the range 128 to
- *   255, so it's the base 2 logarithm of a normalized 8-bit floating point
- *   mantissa.  The numbers are 32-bit fractions.
- */
-static const png_uint_32
-png_8bit_l2[128] =
-{
-   4270715492U, 4222494797U, 4174646467U, 4127164793U, 4080044201U, 4033279239U,
-   3986864580U, 3940795015U, 3895065449U, 3849670902U, 3804606499U, 3759867474U,
-   3715449162U, 3671346997U, 3627556511U, 3584073329U, 3540893168U, 3498011834U,
-   3455425220U, 3413129301U, 3371120137U, 3329393864U, 3287946700U, 3246774933U,
-   3205874930U, 3165243125U, 3124876025U, 3084770202U, 3044922296U, 3005329011U,
-   2965987113U, 2926893432U, 2888044853U, 2849438323U, 2811070844U, 2772939474U,
-   2735041326U, 2697373562U, 2659933400U, 2622718104U, 2585724991U, 2548951424U,
-   2512394810U, 2476052606U, 2439922311U, 2404001468U, 2368287663U, 2332778523U,
-   2297471715U, 2262364947U, 2227455964U, 2192742551U, 2158222529U, 2123893754U,
-   2089754119U, 2055801552U, 2022034013U, 1988449497U, 1955046031U, 1921821672U,
-   1888774511U, 1855902668U, 1823204291U, 1790677560U, 1758320682U, 1726131893U,
-   1694109454U, 1662251657U, 1630556815U, 1599023271U, 1567649391U, 1536433567U,
-   1505374214U, 1474469770U, 1443718700U, 1413119487U, 1382670639U, 1352370686U,
-   1322218179U, 1292211689U, 1262349810U, 1232631153U, 1203054352U, 1173618059U,
-   1144320946U, 1115161701U, 1086139034U, 1057251672U, 1028498358U, 999877854U,
-   971388940U, 943030410U, 914801076U, 886699767U, 858725327U, 830876614U,
-   803152505U, 775551890U, 748073672U, 720716771U, 693480120U, 666362667U,
-   639363374U, 612481215U, 585715177U, 559064263U, 532527486U, 506103872U,
-   479792461U, 453592303U, 427502463U, 401522014U, 375650043U, 349885648U,
-   324227938U, 298676034U, 273229066U, 247886176U, 222646516U, 197509248U,
-   172473545U, 147538590U, 122703574U, 97967701U, 73330182U, 48790236U,
-   24347096U, 0U
-
-#if 0
-   /* The following are the values for 16-bit tables - these work fine for the
-    * 8-bit conversions but produce very slightly larger errors in the 16-bit
-    * log (about 1.2 as opposed to 0.7 absolute error in the final value).  To
-    * use these all the shifts below must be adjusted appropriately.
-    */
-   65166, 64430, 63700, 62976, 62257, 61543, 60835, 60132, 59434, 58741, 58054,
-   57371, 56693, 56020, 55352, 54689, 54030, 53375, 52726, 52080, 51439, 50803,
-   50170, 49542, 48918, 48298, 47682, 47070, 46462, 45858, 45257, 44661, 44068,
-   43479, 42894, 42312, 41733, 41159, 40587, 40020, 39455, 38894, 38336, 37782,
-   37230, 36682, 36137, 35595, 35057, 34521, 33988, 33459, 32932, 32408, 31887,
-   31369, 30854, 30341, 29832, 29325, 28820, 28319, 27820, 27324, 26830, 26339,
-   25850, 25364, 24880, 24399, 23920, 23444, 22970, 22499, 22029, 21562, 21098,
-   20636, 20175, 19718, 19262, 18808, 18357, 17908, 17461, 17016, 16573, 16132,
-   15694, 15257, 14822, 14390, 13959, 13530, 13103, 12678, 12255, 11834, 11415,
-   10997, 10582, 10168, 9756, 9346, 8937, 8531, 8126, 7723, 7321, 6921, 6523,
-   6127, 5732, 5339, 4947, 4557, 4169, 3782, 3397, 3014, 2632, 2251, 1872, 1495,
-   1119, 744, 372
-#endif
-};
-
-static png_int_32
-png_log8bit(unsigned int x)
-{
-   unsigned int lg2 = 0;
-   /* Each time 'x' is multiplied by 2, 1 must be subtracted off the final log,
-    * because the log is actually negate that means adding 1.  The final
-    * returned value thus has the range 0 (for 255 input) to 7.994 (for 1
-    * input), return -1 for the overflow (log 0) case, - so the result is
-    * always at most 19 bits.
-    */
-   if ((x &= 0xff) == 0)
-      return -1;
-
-   if ((x & 0xf0) == 0)
-      lg2  = 4, x <<= 4;
-
-   if ((x & 0xc0) == 0)
-      lg2 += 2, x <<= 2;
-
-   if ((x & 0x80) == 0)
-      lg2 += 1, x <<= 1;
-
-   /* result is at most 19 bits, so this cast is safe: */
-   return (png_int_32)((lg2 << 16) + ((png_8bit_l2[x-128]+32768)>>16));
-}
-
-/* The above gives exact (to 16 binary places) log2 values for 8-bit images,
- * for 16-bit images we use the most significant 8 bits of the 16-bit value to
- * get an approximation then multiply the approximation by a correction factor
- * determined by the remaining up to 8 bits.  This requires an additional step
- * in the 16-bit case.
- *
- * We want log2(value/65535), we have log2(v'/255), where:
- *
- *    value = v' * 256 + v''
- *          = v' * f
- *
- * So f is value/v', which is equal to (256+v''/v') since v' is in the range 128
- * to 255 and v'' is in the range 0 to 255 f will be in the range 256 to less
- * than 258.  The final factor also needs to correct for the fact that our 8-bit
- * value is scaled by 255, whereas the 16-bit values must be scaled by 65535.
- *
- * This gives a final formula using a calculated value 'x' which is value/v' and
- * scaling by 65536 to match the above table:
- *
- *   log2(x/257) * 65536
- *
- * Since these numbers are so close to '1' we can use simple linear
- * interpolation between the two end values 256/257 (result -368.61) and 258/257
- * (result 367.179).  The values used below are scaled by a further 64 to give
- * 16-bit precision in the interpolation:
- *
- * Start (256): -23591
- * Zero  (257):      0
- * End   (258):  23499
- */
-static png_int_32
-png_log16bit(png_uint_32 x)
-{
-   unsigned int lg2 = 0;
-
-   /* As above, but now the input has 16 bits. */
-   if ((x &= 0xffff) == 0)
-      return -1;
-
-   if ((x & 0xff00) == 0)
-      lg2  = 8, x <<= 8;
-
-   if ((x & 0xf000) == 0)
-      lg2 += 4, x <<= 4;
-
-   if ((x & 0xc000) == 0)
-      lg2 += 2, x <<= 2;
-
-   if ((x & 0x8000) == 0)
-      lg2 += 1, x <<= 1;
-
-   /* Calculate the base logarithm from the top 8 bits as a 28-bit fractional
-    * value.
-    */
-   lg2 <<= 28;
-   lg2 += (png_8bit_l2[(x>>8)-128]+8) >> 4;
-
-   /* Now we need to interpolate the factor, this requires a division by the top
-    * 8 bits.  Do this with maximum precision.
-    */
-   x = ((x << 16) + (x >> 9)) / (x >> 8);
-
-   /* Since we divided by the top 8 bits of 'x' there will be a '1' at 1<<24,
-    * the value at 1<<16 (ignoring this) will be 0 or 1; this gives us exactly
-    * 16 bits to interpolate to get the low bits of the result.  Round the
-    * answer.  Note that the end point values are scaled by 64 to retain overall
-    * precision and that 'lg2' is current scaled by an extra 12 bits, so adjust
-    * the overall scaling by 6-12.  Round at every step.
-    */
-   x -= 1U << 24;
-
-   if (x <= 65536U) /* <= '257' */
-      lg2 += ((23591U * (65536U-x)) + (1U << (16+6-12-1))) >> (16+6-12);
-
-   else
-      lg2 -= ((23499U * (x-65536U)) + (1U << (16+6-12-1))) >> (16+6-12);
-
-   /* Safe, because the result can't have more than 20 bits: */
-   return (png_int_32)((lg2 + 2048) >> 12);
-}
-
-/* The 'exp()' case must invert the above, taking a 20-bit fixed point
- * logarithmic value and returning a 16 or 8-bit number as appropriate.  In
- * each case only the low 16 bits are relevant - the fraction - since the
- * integer bits (the top 4) simply determine a shift.
- *
- * The worst case is the 16-bit distinction between 65535 and 65534, this
- * requires perhaps spurious accuracty in the decoding of the logarithm to
- * distinguish log2(65535/65534.5) - 10^-5 or 17 bits.  There is little chance
- * of getting this accuracy in practice.
- *
- * To deal with this the following exp() function works out the exponent of the
- * frational part of the logarithm by using an accurate 32-bit value from the
- * top four fractional bits then multiplying in the remaining bits.
- */
-static const png_uint_32
-png_32bit_exp[16] =
-{
-   /* NOTE: the first entry is deliberately set to the maximum 32-bit value. */
-   4294967295U, 4112874773U, 3938502376U, 3771522796U, 3611622603U, 3458501653U,
-   3311872529U, 3171459999U, 3037000500U, 2908241642U, 2784941738U, 2666869345U,
-   2553802834U, 2445529972U, 2341847524U, 2242560872U
-};
-
-/* Adjustment table; provided to explain the numbers in the code below. */
-#if 0
-for (i=11;i>=0;--i){ print i, " ", (1 - e(-(2^i)/65536*l(2))) * 2^(32-i), "\n"}
-   11 44937.64284865548751208448
-   10 45180.98734845585101160448
-    9 45303.31936980687359311872
-    8 45364.65110595323018870784
-    7 45395.35850361789624614912
-    6 45410.72259715102037508096
-    5 45418.40724413220722311168
-    4 45422.25021786898173001728
-    3 45424.17186732298419044352
-    2 45425.13273269940811464704
-    1 45425.61317555035558641664
-    0 45425.85339951654943850496
-#endif
-
-static png_uint_32
-png_exp(png_fixed_point x)
-{
-   if (x > 0 && x <= 0xfffff) /* Else overflow or zero (underflow) */
-   {
-      /* Obtain a 4-bit approximation */
-      png_uint_32 e = png_32bit_exp[(x >> 12) & 0xf];
-
-      /* Incorporate the low 12 bits - these decrease the returned value by
-       * multiplying by a number less than 1 if the bit is set.  The multiplier
-       * is determined by the above table and the shift. Notice that the values
-       * converge on 45426 and this is used to allow linear interpolation of the
-       * low bits.
-       */
-      if (x & 0x800)
-         e -= (((e >> 16) * 44938U) +  16U) >> 5;
-
-      if (x & 0x400)
-         e -= (((e >> 16) * 45181U) +  32U) >> 6;
-
-      if (x & 0x200)
-         e -= (((e >> 16) * 45303U) +  64U) >> 7;
-
-      if (x & 0x100)
-         e -= (((e >> 16) * 45365U) + 128U) >> 8;
-
-      if (x & 0x080)
-         e -= (((e >> 16) * 45395U) + 256U) >> 9;
-
-      if (x & 0x040)
-         e -= (((e >> 16) * 45410U) + 512U) >> 10;
-
-      /* And handle the low 6 bits in a single block. */
-      e -= (((e >> 16) * 355U * (x & 0x3fU)) + 256U) >> 9;
-
-      /* Handle the upper bits of x. */
-      e >>= x >> 16;
-      return e;
-   }
-
-   /* Check for overflow */
-   if (x <= 0)
-      return png_32bit_exp[0];
-
-   /* Else underflow */
-   return 0;
-}
-
-static png_byte
-png_exp8bit(png_fixed_point lg2)
-{
-   /* Get a 32-bit value: */
-   png_uint_32 x = png_exp(lg2);
-
-   /* Convert the 32-bit value to 0..255 by multiplying by 256-1, note that the
-    * second, rounding, step can't overflow because of the first, subtraction,
-    * step.
-    */
-   x -= x >> 8;
-   return (png_byte)((x + 0x7fffffU) >> 24);
-}
-
-static png_uint_16
-png_exp16bit(png_fixed_point lg2)
-{
-   /* Get a 32-bit value: */
-   png_uint_32 x = png_exp(lg2);
-
-   /* Convert the 32-bit value to 0..65535 by multiplying by 65536-1: */
-   x -= x >> 16;
-   return (png_uint_16)((x + 32767U) >> 16);
-}
-#endif /* FLOATING_ARITHMETIC */
-
-png_byte
-png_gamma_8bit_correct(unsigned int value, png_fixed_point gamma_val)
-{
-   if (value > 0 && value < 255)
-   {
-#     ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-         double r = floor(255*pow(value/255.,gamma_val*.00001)+.5);
-         return (png_byte)r;
-#     else
-         png_int_32 lg2 = png_log8bit(value);
-         png_fixed_point res;
-
-         if (png_muldiv(&res, gamma_val, lg2, PNG_FP_1))
-            return png_exp8bit(res);
-
-         /* Overflow. */
-         value = 0;
-#     endif
-   }
-
-   return (png_byte)value;
-}
-
-png_uint_16
-png_gamma_16bit_correct(unsigned int value, png_fixed_point gamma_val)
-{
-   if (value > 0 && value < 65535)
-   {
-#     ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-         double r = floor(65535*pow(value/65535.,gamma_val*.00001)+.5);
-         return (png_uint_16)r;
-#     else
-         png_int_32 lg2 = png_log16bit(value);
-         png_fixed_point res;
-
-         if (png_muldiv(&res, gamma_val, lg2, PNG_FP_1))
-            return png_exp16bit(res);
-
-         /* Overflow. */
-         value = 0;
-#     endif
-   }
-
-   return (png_uint_16)value;
-}
-
-/* This does the right thing based on the bit_depth field of the
- * png_struct, interpreting values as 8-bit or 16-bit.  While the result
- * is nominally a 16-bit value if bit depth is 8 then the result is
- * 8-bit (as are the arguments.)
- */
-png_uint_16 /* PRIVATE */
-png_gamma_correct(png_structrp png_ptr, unsigned int value,
-    png_fixed_point gamma_val)
-{
-   if (png_ptr->bit_depth == 8)
-      return png_gamma_8bit_correct(value, gamma_val);
-
-   else
-      return png_gamma_16bit_correct(value, gamma_val);
-}
-
-/* Internal function to build a single 16-bit table - the table consists of
- * 'num' 256 entry subtables, where 'num' is determined by 'shift' - the amount
- * to shift the input values right (or 16-number_of_signifiant_bits).
- *
- * The caller is responsible for ensuring that the table gets cleaned up on
- * png_error (i.e. if one of the mallocs below fails) - i.e. the *table argument
- * should be somewhere that will be cleaned.
- */
-static void
-png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
-   PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
-{
-   /* Various values derived from 'shift': */
-   PNG_CONST unsigned int num = 1U << (8U - shift);
-   PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
-   PNG_CONST unsigned int max_by_2 = 1U << (15U-shift);
-   unsigned int i;
-
-   png_uint_16pp table = *ptable =
-       (png_uint_16pp)png_calloc(png_ptr, num * (sizeof (png_uint_16p)));
-
-   for (i = 0; i < num; i++)
-   {
-      png_uint_16p sub_table = table[i] =
-          (png_uint_16p)png_malloc(png_ptr, 256 * (sizeof (png_uint_16)));
-
-      /* The 'threshold' test is repeated here because it can arise for one of
-       * the 16-bit tables even if the others don't hit it.
-       */
-      if (png_gamma_significant(gamma_val))
-      {
-         /* The old code would overflow at the end and this would cause the
-          * 'pow' function to return a result >1, resulting in an
-          * arithmetic error.  This code follows the spec exactly; ig is
-          * the recovered input sample, it always has 8-16 bits.
-          *
-          * We want input * 65535/max, rounded, the arithmetic fits in 32
-          * bits (unsigned) so long as max <= 32767.
-          */
-         unsigned int j;
-         for (j = 0; j < 256; j++)
-         {
-            png_uint_32 ig = (j << (8-shift)) + i;
-#           ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-               /* Inline the 'max' scaling operation: */
-               double d = floor(65535*pow(ig/(double)max, gamma_val*.00001)+.5);
-               sub_table[j] = (png_uint_16)d;
-#           else
-               if (shift)
-                  ig = (ig * 65535U + max_by_2)/max;
-
-               sub_table[j] = png_gamma_16bit_correct(ig, gamma_val);
-#           endif
-         }
-      }
-      else
-      {
-         /* We must still build a table, but do it the fast way. */
-         unsigned int j;
-
-         for (j = 0; j < 256; j++)
-         {
-            png_uint_32 ig = (j << (8-shift)) + i;
-
-            if (shift)
-               ig = (ig * 65535U + max_by_2)/max;
-
-            sub_table[j] = (png_uint_16)ig;
-         }
-      }
-   }
-}
-
-/* NOTE: this function expects the *inverse* of the overall gamma transformation
- * required.
- */
-static void
-png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
-   PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
-{
-   PNG_CONST unsigned int num = 1U << (8U - shift);
-   PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
-   unsigned int i;
-   png_uint_32 last;
-
-   png_uint_16pp table = *ptable =
-       (png_uint_16pp)png_calloc(png_ptr, num * (sizeof (png_uint_16p)));
-
-   /* 'num' is the number of tables and also the number of low bits of low
-    * bits of the input 16-bit value used to select a table.  Each table is
-    * itself index by the high 8 bits of the value.
-    */
-   for (i = 0; i < num; i++)
-      table[i] = (png_uint_16p)png_malloc(png_ptr,
-          256 * (sizeof (png_uint_16)));
-
-   /* 'gamma_val' is set to the reciprocal of the value calculated above, so
-    * pow(out,g) is an *input* value.  'last' is the last input value set.
-    *
-    * In the loop 'i' is used to find output values.  Since the output is
-    * 8-bit there are only 256 possible values.  The tables are set up to
-    * select the closest possible output value for each input by finding
-    * the input value at the boundary between each pair of output values
-    * and filling the table up to that boundary with the lower output
-    * value.
-    *
-    * The boundary values are 0.5,1.5..253.5,254.5.  Since these are 9-bit
-    * values the code below uses a 16-bit value in i; the values start at
-    * 128.5 (for 0.5) and step by 257, for a total of 254 values (the last
-    * entries are filled with 255).  Start i at 128 and fill all 'last'
-    * table entries <= 'max'
-    */
-   last = 0;
-   for (i = 0; i < 255; ++i) /* 8-bit output value */
-   {
-      /* Find the corresponding maximum input value */
-      png_uint_16 out = (png_uint_16)(i * 257U); /* 16-bit output value */
-
-      /* Find the boundary value in 16 bits: */
-      png_uint_32 bound = png_gamma_16bit_correct(out+128U, gamma_val);
-
-      /* Adjust (round) to (16-shift) bits: */
-      bound = (bound * max + 32768U)/65535U + 1U;
-
-      while (last < bound)
-      {
-         table[last & (0xffU >> shift)][last >> (8U - shift)] = out;
-         last++;
-      }
-   }
-
-   /* And fill in the final entries. */
-   while (last < (num << 8))
-   {
-      table[last & (0xff >> shift)][last >> (8U - shift)] = 65535U;
-      last++;
-   }
-}
-
-/* Build a single 8-bit table: same as the 16-bit case but much simpler (and
- * typically much faster).  Note that libpng currently does no sBIT processing
- * (apparently contrary to the spec) so a 256 entry table is always generated.
- */
-static void
-png_build_8bit_table(png_structrp png_ptr, png_bytepp ptable,
-   PNG_CONST png_fixed_point gamma_val)
-{
-   unsigned int i;
-   png_bytep table = *ptable = (png_bytep)png_malloc(png_ptr, 256);
-
-   if (png_gamma_significant(gamma_val)) for (i=0; i<256; i++)
-      table[i] = png_gamma_8bit_correct(i, gamma_val);
-
-   else for (i=0; i<256; ++i)
-      table[i] = (png_byte)i;
-}
-
-/* Used from png_read_destroy and below to release the memory used by the gamma
- * tables.
- */
-void /* PRIVATE */
-png_destroy_gamma_table(png_structrp png_ptr)
-{
-   png_free(png_ptr, png_ptr->gamma_table);
-   png_ptr->gamma_table = NULL;
-
-   if (png_ptr->gamma_16_table != NULL)
-   {
-      int i;
-      int istop = (1 << (8 - png_ptr->gamma_shift));
-      for (i = 0; i < istop; i++)
-      {
-         png_free(png_ptr, png_ptr->gamma_16_table[i]);
-      }
-   png_free(png_ptr, png_ptr->gamma_16_table);
-   png_ptr->gamma_16_table = NULL;
-   }
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-   png_free(png_ptr, png_ptr->gamma_from_1);
-   png_ptr->gamma_from_1 = NULL;
-   png_free(png_ptr, png_ptr->gamma_to_1);
-   png_ptr->gamma_to_1 = NULL;
-
-   if (png_ptr->gamma_16_from_1 != NULL)
-   {
-      int i;
-      int istop = (1 << (8 - png_ptr->gamma_shift));
-      for (i = 0; i < istop; i++)
-      {
-         png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
-      }
-   png_free(png_ptr, png_ptr->gamma_16_from_1);
-   png_ptr->gamma_16_from_1 = NULL;
-   }
-   if (png_ptr->gamma_16_to_1 != NULL)
-   {
-      int i;
-      int istop = (1 << (8 - png_ptr->gamma_shift));
-      for (i = 0; i < istop; i++)
-      {
-         png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
-      }
-   png_free(png_ptr, png_ptr->gamma_16_to_1);
-   png_ptr->gamma_16_to_1 = NULL;
-   }
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-}
-
-/* We build the 8- or 16-bit gamma tables here.  Note that for 16-bit
- * tables, we don't make a full table if we are reducing to 8-bit in
- * the future.  Note also how the gamma_16 tables are segmented so that
- * we don't need to allocate > 64K chunks for a full 16-bit table.
- */
-void /* PRIVATE */
-png_build_gamma_table(png_structrp png_ptr, int bit_depth)
-{
-  png_debug(1, "in png_build_gamma_table");
-
-  /* Remove any existing table; this copes with multiple calls to
-   * png_read_update_info.  The warning is because building the gamma tables
-   * multiple times is a performance hit - it's harmless but the ability to call
-   * png_read_update_info() multiple times is new in 1.5.6 so it seems sensible
-   * to warn if the app introduces such a hit.
-   */
-  if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
-  {
-    png_warning(png_ptr, "gamma table being rebuilt");
-    png_destroy_gamma_table(png_ptr);
-  }
-
-  if (bit_depth <= 8)
-  {
-     png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
-         png_ptr->screen_gamma > 0 ?  png_reciprocal2(png_ptr->colorspace.gamma,
-         png_ptr->screen_gamma) : PNG_FP_1);
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-     if (png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY))
-     {
-        png_build_8bit_table(png_ptr, &png_ptr->gamma_to_1,
-            png_reciprocal(png_ptr->colorspace.gamma));
-
-        png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
-            png_ptr->screen_gamma > 0 ?  png_reciprocal(png_ptr->screen_gamma) :
-            png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
-     }
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-  }
-  else
-  {
-     png_byte shift, sig_bit;
-
-     if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
-     {
-        sig_bit = png_ptr->sig_bit.red;
-
-        if (png_ptr->sig_bit.green > sig_bit)
-           sig_bit = png_ptr->sig_bit.green;
-
-        if (png_ptr->sig_bit.blue > sig_bit)
-           sig_bit = png_ptr->sig_bit.blue;
-     }
-     else
-        sig_bit = png_ptr->sig_bit.gray;
-
-     /* 16-bit gamma code uses this equation:
-      *
-      *   ov = table[(iv & 0xff) >> gamma_shift][iv >> 8]
-      *
-      * Where 'iv' is the input color value and 'ov' is the output value -
-      * pow(iv, gamma).
-      *
-      * Thus the gamma table consists of up to 256 256 entry tables.  The table
-      * is selected by the (8-gamma_shift) most significant of the low 8 bits of
-      * the color value then indexed by the upper 8 bits:
-      *
-      *   table[low bits][high 8 bits]
-      *
-      * So the table 'n' corresponds to all those 'iv' of:
-      *
-      *   <all high 8-bit values><n << gamma_shift>..<(n+1 << gamma_shift)-1>
-      *
-      */
-     if (sig_bit > 0 && sig_bit < 16U)
-        shift = (png_byte)(16U - sig_bit); /* shift == insignificant bits */
-
-     else
-        shift = 0; /* keep all 16 bits */
-
-     if (png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8))
-     {
-        /* PNG_MAX_GAMMA_8 is the number of bits to keep - effectively
-         * the significant bits in the *input* when the output will
-         * eventually be 8 bits.  By default it is 11.
-         */
-        if (shift < (16U - PNG_MAX_GAMMA_8))
-           shift = (16U - PNG_MAX_GAMMA_8);
-     }
-
-     if (shift > 8U)
-        shift = 8U; /* Guarantees at least one table! */
-
-     png_ptr->gamma_shift = shift;
-
-#ifdef PNG_16BIT_SUPPORTED
-     /* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
-      * PNG_COMPOSE).  This effectively smashed the background calculation for
-      * 16-bit output because the 8-bit table assumes the result will be reduced
-      * to 8 bits.
-      */
-     if (png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8))
-#endif
-         png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
-         png_ptr->screen_gamma > 0 ? png_product2(png_ptr->colorspace.gamma,
-         png_ptr->screen_gamma) : PNG_FP_1);
-
-#ifdef PNG_16BIT_SUPPORTED
-     else
-         png_build_16bit_table(png_ptr, &png_ptr->gamma_16_table, shift,
-         png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
-         png_ptr->screen_gamma) : PNG_FP_1);
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-     if (png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY))
-     {
-        png_build_16bit_table(png_ptr, &png_ptr->gamma_16_to_1, shift,
-            png_reciprocal(png_ptr->colorspace.gamma));
-
-        /* Notice that the '16 from 1' table should be full precision, however
-         * the lookup on this table still uses gamma_shift, so it can't be.
-         * TODO: fix this.
-         */
-        png_build_16bit_table(png_ptr, &png_ptr->gamma_16_from_1, shift,
-            png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
-            png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
-     }
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-  }
-}
-#endif /* READ_GAMMA */
-
-/* HARDWARE OPTION SUPPORT */
-#ifdef PNG_SET_OPTION_SUPPORTED
-int PNGAPI
-png_set_option(png_structrp png_ptr, int option, int onoff)
-{
-   if (png_ptr != NULL && option >= 0 && option < PNG_OPTION_NEXT &&
-      (option & 1) == 0)
-   {
-      int mask = 3 << option;
-      int setting = (2 + (onoff != 0)) << option;
-      int current = png_ptr->options;
-
-      png_ptr->options = (png_byte)((current & ~mask) | setting);
-
-      return (current & mask) >> option;
-   }
-
-   return PNG_OPTION_INVALID;
-}
-#endif
-
-/* sRGB support */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-/* sRGB conversion tables; these are machine generated with the code in
- * contrib/tools/makesRGB.c.  The actual sRGB transfer curve defined in the
- * specification (see the article at http://en.wikipedia.org/wiki/SRGB)
- * is used, not the gamma=1/2.2 approximation use elsewhere in libpng.
- * The sRGB to linear table is exact (to the nearest 16 bit linear fraction).
- * The inverse (linear to sRGB) table has accuracies as follows:
- *
- * For all possible (255*65535+1) input values:
- *
- *    error: -0.515566 - 0.625971, 79441 (0.475369%) of readings inexact
- *
- * For the input values corresponding to the 65536 16-bit values:
- *
- *    error: -0.513727 - 0.607759, 308 (0.469978%) of readings inexact
- *
- * In all cases the inexact readings are off by one.
- */
-
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-/* The convert-to-sRGB table is only currently required for read. */
-const png_uint_16 png_sRGB_table[256] =
-{
-   0,20,40,60,80,99,119,139,
-   159,179,199,219,241,264,288,313,
-   340,367,396,427,458,491,526,562,
-   599,637,677,718,761,805,851,898,
-   947,997,1048,1101,1156,1212,1270,1330,
-   1391,1453,1517,1583,1651,1720,1790,1863,
-   1937,2013,2090,2170,2250,2333,2418,2504,
-   2592,2681,2773,2866,2961,3058,3157,3258,
-   3360,3464,3570,3678,3788,3900,4014,4129,
-   4247,4366,4488,4611,4736,4864,4993,5124,
-   5257,5392,5530,5669,5810,5953,6099,6246,
-   6395,6547,6700,6856,7014,7174,7335,7500,
-   7666,7834,8004,8177,8352,8528,8708,8889,
-   9072,9258,9445,9635,9828,10022,10219,10417,
-   10619,10822,11028,11235,11446,11658,11873,12090,
-   12309,12530,12754,12980,13209,13440,13673,13909,
-   14146,14387,14629,14874,15122,15371,15623,15878,
-   16135,16394,16656,16920,17187,17456,17727,18001,
-   18277,18556,18837,19121,19407,19696,19987,20281,
-   20577,20876,21177,21481,21787,22096,22407,22721,
-   23038,23357,23678,24002,24329,24658,24990,25325,
-   25662,26001,26344,26688,27036,27386,27739,28094,
-   28452,28813,29176,29542,29911,30282,30656,31033,
-   31412,31794,32179,32567,32957,33350,33745,34143,
-   34544,34948,35355,35764,36176,36591,37008,37429,
-   37852,38278,38706,39138,39572,40009,40449,40891,
-   41337,41785,42236,42690,43147,43606,44069,44534,
-   45002,45473,45947,46423,46903,47385,47871,48359,
-   48850,49344,49841,50341,50844,51349,51858,52369,
-   52884,53401,53921,54445,54971,55500,56032,56567,
-   57105,57646,58190,58737,59287,59840,60396,60955,
-   61517,62082,62650,63221,63795,64372,64952,65535
-};
-
-#endif /* simplified read only */
-
-/* The base/delta tables are required for both read and write (but currently
- * only the simplified versions.)
- */
-const png_uint_16 png_sRGB_base[512] =
-{
-   128,1782,3383,4644,5675,6564,7357,8074,
-   8732,9346,9921,10463,10977,11466,11935,12384,
-   12816,13233,13634,14024,14402,14769,15125,15473,
-   15812,16142,16466,16781,17090,17393,17690,17981,
-   18266,18546,18822,19093,19359,19621,19879,20133,
-   20383,20630,20873,21113,21349,21583,21813,22041,
-   22265,22487,22707,22923,23138,23350,23559,23767,
-   23972,24175,24376,24575,24772,24967,25160,25352,
-   25542,25730,25916,26101,26284,26465,26645,26823,
-   27000,27176,27350,27523,27695,27865,28034,28201,
-   28368,28533,28697,28860,29021,29182,29341,29500,
-   29657,29813,29969,30123,30276,30429,30580,30730,
-   30880,31028,31176,31323,31469,31614,31758,31902,
-   32045,32186,32327,32468,32607,32746,32884,33021,
-   33158,33294,33429,33564,33697,33831,33963,34095,
-   34226,34357,34486,34616,34744,34873,35000,35127,
-   35253,35379,35504,35629,35753,35876,35999,36122,
-   36244,36365,36486,36606,36726,36845,36964,37083,
-   37201,37318,37435,37551,37668,37783,37898,38013,
-   38127,38241,38354,38467,38580,38692,38803,38915,
-   39026,39136,39246,39356,39465,39574,39682,39790,
-   39898,40005,40112,40219,40325,40431,40537,40642,
-   40747,40851,40955,41059,41163,41266,41369,41471,
-   41573,41675,41777,41878,41979,42079,42179,42279,
-   42379,42478,42577,42676,42775,42873,42971,43068,
-   43165,43262,43359,43456,43552,43648,43743,43839,
-   43934,44028,44123,44217,44311,44405,44499,44592,
-   44685,44778,44870,44962,45054,45146,45238,45329,
-   45420,45511,45601,45692,45782,45872,45961,46051,
-   46140,46229,46318,46406,46494,46583,46670,46758,
-   46846,46933,47020,47107,47193,47280,47366,47452,
-   47538,47623,47709,47794,47879,47964,48048,48133,
-   48217,48301,48385,48468,48552,48635,48718,48801,
-   48884,48966,49048,49131,49213,49294,49376,49458,
-   49539,49620,49701,49782,49862,49943,50023,50103,
-   50183,50263,50342,50422,50501,50580,50659,50738,
-   50816,50895,50973,51051,51129,51207,51285,51362,
-   51439,51517,51594,51671,51747,51824,51900,51977,
-   52053,52129,52205,52280,52356,52432,52507,52582,
-   52657,52732,52807,52881,52956,53030,53104,53178,
-   53252,53326,53400,53473,53546,53620,53693,53766,
-   53839,53911,53984,54056,54129,54201,54273,54345,
-   54417,54489,54560,54632,54703,54774,54845,54916,
-   54987,55058,55129,55199,55269,55340,55410,55480,
-   55550,55620,55689,55759,55828,55898,55967,56036,
-   56105,56174,56243,56311,56380,56448,56517,56585,
-   56653,56721,56789,56857,56924,56992,57059,57127,
-   57194,57261,57328,57395,57462,57529,57595,57662,
-   57728,57795,57861,57927,57993,58059,58125,58191,
-   58256,58322,58387,58453,58518,58583,58648,58713,
-   58778,58843,58908,58972,59037,59101,59165,59230,
-   59294,59358,59422,59486,59549,59613,59677,59740,
-   59804,59867,59930,59993,60056,60119,60182,60245,
-   60308,60370,60433,60495,60558,60620,60682,60744,
-   60806,60868,60930,60992,61054,61115,61177,61238,
-   61300,61361,61422,61483,61544,61605,61666,61727,
-   61788,61848,61909,61969,62030,62090,62150,62211,
-   62271,62331,62391,62450,62510,62570,62630,62689,
-   62749,62808,62867,62927,62986,63045,63104,63163,
-   63222,63281,63340,63398,63457,63515,63574,63632,
-   63691,63749,63807,63865,63923,63981,64039,64097,
-   64155,64212,64270,64328,64385,64443,64500,64557,
-   64614,64672,64729,64786,64843,64900,64956,65013,
-   65070,65126,65183,65239,65296,65352,65409,65465
-};
-
-const png_byte png_sRGB_delta[512] =
-{
-   207,201,158,129,113,100,90,82,77,72,68,64,61,59,56,54,
-   52,50,49,47,46,45,43,42,41,40,39,39,38,37,36,36,
-   35,34,34,33,33,32,32,31,31,30,30,30,29,29,28,28,
-   28,27,27,27,27,26,26,26,25,25,25,25,24,24,24,24,
-   23,23,23,23,23,22,22,22,22,22,22,21,21,21,21,21,
-   21,20,20,20,20,20,20,20,20,19,19,19,19,19,19,19,
-   19,18,18,18,18,18,18,18,18,18,18,17,17,17,17,17,
-   17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,16,
-   16,16,16,16,15,15,15,15,15,15,15,15,15,15,15,15,
-   15,15,15,15,14,14,14,14,14,14,14,14,14,14,14,14,
-   14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,13,
-   13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,
-   12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-   12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,
-   11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-   11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-   11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-   10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-   10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-   10,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,
-   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
-};
-#endif /* SIMPLIFIED READ/WRITE sRGB support */
-
-/* SIMPLIFIED READ/WRITE SUPPORT */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-static int
-png_image_free_function(png_voidp argument)
-{
-   png_imagep image = png_voidcast(png_imagep, argument);
-   png_controlp cp = image->opaque;
-   png_control c;
-
-   /* Double check that we have a png_ptr - it should be impossible to get here
-    * without one.
-    */
-   if (cp->png_ptr == NULL)
-      return 0;
-
-   /* First free any data held in the control structure. */
-#  ifdef PNG_STDIO_SUPPORTED
-      if (cp->owned_file)
-      {
-         FILE *fp = png_voidcast(FILE*, cp->png_ptr->io_ptr);
-         cp->owned_file = 0;
-
-         /* Ignore errors here. */
-         if (fp != NULL)
-         {
-            cp->png_ptr->io_ptr = NULL;
-            (void)fclose(fp);
-         }
-      }
-#  endif
-
-   /* Copy the control structure so that the original, allocated, version can be
-    * safely freed.  Notice that a png_error here stops the remainder of the
-    * cleanup, but this is probably fine because that would indicate bad memory
-    * problems anyway.
-    */
-   c = *cp;
-   image->opaque = &c;
-   png_free(c.png_ptr, cp);
-
-   /* Then the structures, calling the correct API. */
-   if (c.for_write)
-   {
-#     ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
-         png_destroy_write_struct(&c.png_ptr, &c.info_ptr);
-#     else
-         png_error(c.png_ptr, "simplified write not supported");
-#     endif
-   }
-   else
-   {
-#     ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-         png_destroy_read_struct(&c.png_ptr, &c.info_ptr, NULL);
-#     else
-         png_error(c.png_ptr, "simplified read not supported");
-#     endif
-   }
-
-   /* Success. */
-   return 1;
-}
-
-void PNGAPI
-png_image_free(png_imagep image)
-{
-   /* Safely call the real function, but only if doing so is safe at this point
-    * (if not inside an error handling context).  Otherwise assume
-    * png_safe_execute will call this API after the return.
-    */
-   if (image != NULL && image->opaque != NULL &&
-      image->opaque->error_buf == NULL)
-   {
-      /* Ignore errors here: */
-      (void)png_safe_execute(image, png_image_free_function, image);
-      image->opaque = NULL;
-   }
-}
-
-int /* PRIVATE */
-png_image_error(png_imagep image, png_const_charp error_message)
-{
-   /* Utility to log an error. */
-   png_safecat(image->message, (sizeof image->message), 0, error_message);
-   image->warning_or_error |= PNG_IMAGE_ERROR;
-   png_image_free(image);
-   return 0;
-}
-
-#endif /* SIMPLIFIED READ/WRITE */
-#endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
diff --git a/modules/juce_graphics/image_formats/pnglib/png.h b/modules/juce_graphics/image_formats/pnglib/png.h
deleted file mode 100644
index d447233..0000000
--- a/modules/juce_graphics/image_formats/pnglib/png.h
+++ /dev/null
@@ -1,3292 +0,0 @@
-
-/* png.h - header file for PNG reference library
- *
- * libpng version 1.6.1 - March 28, 2013
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license (See LICENSE, below)
- *
- * Authors and maintainers:
- *   libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
- *   libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- *   libpng versions 0.97, January 1998, through 1.6.1 - March 28, 2013: Glenn
- *   See also "Contributing Authors", below.
- *
- * Note about libpng version numbers:
- *
- *   Due to various miscommunications, unforeseen code incompatibilities
- *   and occasional factors outside the authors' control, version numbering
- *   on the library has not always been consistent and straightforward.
- *   The following table summarizes matters since version 0.89c, which was
- *   the first widely used release:
- *
- *    source                 png.h  png.h  shared-lib
- *    version                string   int  version
- *    -------                ------ -----  ----------
- *    0.89c "1.0 beta 3"     0.89      89  1.0.89
- *    0.90  "1.0 beta 4"     0.90      90  0.90  [should have been 2.0.90]
- *    0.95  "1.0 beta 5"     0.95      95  0.95  [should have been 2.0.95]
- *    0.96  "1.0 beta 6"     0.96      96  0.96  [should have been 2.0.96]
- *    0.97b "1.00.97 beta 7" 1.00.97   97  1.0.1 [should have been 2.0.97]
- *    0.97c                  0.97      97  2.0.97
- *    0.98                   0.98      98  2.0.98
- *    0.99                   0.99      98  2.0.99
- *    0.99a-m                0.99      99  2.0.99
- *    1.00                   1.00     100  2.1.0 [100 should be 10000]
- *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]
- *    1.0.1       png.h string is   10001  2.1.0
- *    1.0.1a-e    identical to the  10002  from here on, the shared library
- *    1.0.2       source version)   10002  is 2.V where V is the source code
- *    1.0.2a-b                      10003  version, except as noted.
- *    1.0.3                         10003
- *    1.0.3a-d                      10004
- *    1.0.4                         10004
- *    1.0.4a-f                      10005
- *    1.0.5 (+ 2 patches)           10005
- *    1.0.5a-d                      10006
- *    1.0.5e-r                      10100 (not source compatible)
- *    1.0.5s-v                      10006 (not binary compatible)
- *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)
- *    1.0.6d-f                      10007 (still binary incompatible)
- *    1.0.6g                        10007
- *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)
- *    1.0.6i                        10007  10.6i
- *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)
- *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)
- *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)
- *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)
- *    1.0.7                    1    10007  (still compatible)
- *    1.0.8beta1-4             1    10008  2.1.0.8beta1-4
- *    1.0.8rc1                 1    10008  2.1.0.8rc1
- *    1.0.8                    1    10008  2.1.0.8
- *    1.0.9beta1-6             1    10009  2.1.0.9beta1-6
- *    1.0.9rc1                 1    10009  2.1.0.9rc1
- *    1.0.9beta7-10            1    10009  2.1.0.9beta7-10
- *    1.0.9rc2                 1    10009  2.1.0.9rc2
- *    1.0.9                    1    10009  2.1.0.9
- *    1.0.10beta1              1    10010  2.1.0.10beta1
- *    1.0.10rc1                1    10010  2.1.0.10rc1
- *    1.0.10                   1    10010  2.1.0.10
- *    1.0.11beta1-3            1    10011  2.1.0.11beta1-3
- *    1.0.11rc1                1    10011  2.1.0.11rc1
- *    1.0.11                   1    10011  2.1.0.11
- *    1.0.12beta1-2            2    10012  2.1.0.12beta1-2
- *    1.0.12rc1                2    10012  2.1.0.12rc1
- *    1.0.12                   2    10012  2.1.0.12
- *    1.1.0a-f                 -    10100  2.1.1.0a-f (branch abandoned)
- *    1.2.0beta1-2             2    10200  2.1.2.0beta1-2
- *    1.2.0beta3-5             3    10200  3.1.2.0beta3-5
- *    1.2.0rc1                 3    10200  3.1.2.0rc1
- *    1.2.0                    3    10200  3.1.2.0
- *    1.2.1beta1-4             3    10201  3.1.2.1beta1-4
- *    1.2.1rc1-2               3    10201  3.1.2.1rc1-2
- *    1.2.1                    3    10201  3.1.2.1
- *    1.2.2beta1-6            12    10202  12.so.0.1.2.2beta1-6
- *    1.0.13beta1             10    10013  10.so.0.1.0.13beta1
- *    1.0.13rc1               10    10013  10.so.0.1.0.13rc1
- *    1.2.2rc1                12    10202  12.so.0.1.2.2rc1
- *    1.0.13                  10    10013  10.so.0.1.0.13
- *    1.2.2                   12    10202  12.so.0.1.2.2
- *    1.2.3rc1-6              12    10203  12.so.0.1.2.3rc1-6
- *    1.2.3                   12    10203  12.so.0.1.2.3
- *    1.2.4beta1-3            13    10204  12.so.0.1.2.4beta1-3
- *    1.0.14rc1               13    10014  10.so.0.1.0.14rc1
- *    1.2.4rc1                13    10204  12.so.0.1.2.4rc1
- *    1.0.14                  10    10014  10.so.0.1.0.14
- *    1.2.4                   13    10204  12.so.0.1.2.4
- *    1.2.5beta1-2            13    10205  12.so.0.1.2.5beta1-2
- *    1.0.15rc1-3             10    10015  10.so.0.1.0.15rc1-3
- *    1.2.5rc1-3              13    10205  12.so.0.1.2.5rc1-3
- *    1.0.15                  10    10015  10.so.0.1.0.15
- *    1.2.5                   13    10205  12.so.0.1.2.5
- *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
- *    1.0.16                  10    10016  10.so.0.1.0.16
- *    1.2.6                   13    10206  12.so.0.1.2.6
- *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
- *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
- *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
- *    1.0.17                  10    10017  12.so.0.1.0.17
- *    1.2.7                   13    10207  12.so.0.1.2.7
- *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
- *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
- *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
- *    1.0.18                  10    10018  12.so.0.1.0.18
- *    1.2.8                   13    10208  12.so.0.1.2.8
- *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3
- *    1.2.9beta4-11           13    10209  12.so.0.9[.0]
- *    1.2.9rc1                13    10209  12.so.0.9[.0]
- *    1.2.9                   13    10209  12.so.0.9[.0]
- *    1.2.10beta1-7           13    10210  12.so.0.10[.0]
- *    1.2.10rc1-2             13    10210  12.so.0.10[.0]
- *    1.2.10                  13    10210  12.so.0.10[.0]
- *    1.4.0beta1-5            14    10400  14.so.0.0[.0]
- *    1.2.11beta1-4           13    10211  12.so.0.11[.0]
- *    1.4.0beta7-8            14    10400  14.so.0.0[.0]
- *    1.2.11                  13    10211  12.so.0.11[.0]
- *    1.2.12                  13    10212  12.so.0.12[.0]
- *    1.4.0beta9-14           14    10400  14.so.0.0[.0]
- *    1.2.13                  13    10213  12.so.0.13[.0]
- *    1.4.0beta15-36          14    10400  14.so.0.0[.0]
- *    1.4.0beta37-87          14    10400  14.so.14.0[.0]
- *    1.4.0rc01               14    10400  14.so.14.0[.0]
- *    1.4.0beta88-109         14    10400  14.so.14.0[.0]
- *    1.4.0rc02-08            14    10400  14.so.14.0[.0]
- *    1.4.0                   14    10400  14.so.14.0[.0]
- *    1.4.1beta01-03          14    10401  14.so.14.1[.0]
- *    1.4.1rc01               14    10401  14.so.14.1[.0]
- *    1.4.1beta04-12          14    10401  14.so.14.1[.0]
- *    1.4.1                   14    10401  14.so.14.1[.0]
- *    1.4.2                   14    10402  14.so.14.2[.0]
- *    1.4.3                   14    10403  14.so.14.3[.0]
- *    1.4.4                   14    10404  14.so.14.4[.0]
- *    1.5.0beta01-58          15    10500  15.so.15.0[.0]
- *    1.5.0rc01-07            15    10500  15.so.15.0[.0]
- *    1.5.0                   15    10500  15.so.15.0[.0]
- *    1.5.1beta01-11          15    10501  15.so.15.1[.0]
- *    1.5.1rc01-02            15    10501  15.so.15.1[.0]
- *    1.5.1                   15    10501  15.so.15.1[.0]
- *    1.5.2beta01-03          15    10502  15.so.15.2[.0]
- *    1.5.2rc01-03            15    10502  15.so.15.2[.0]
- *    1.5.2                   15    10502  15.so.15.2[.0]
- *    1.5.3beta01-10          15    10503  15.so.15.3[.0]
- *    1.5.3rc01-02            15    10503  15.so.15.3[.0]
- *    1.5.3beta11             15    10503  15.so.15.3[.0]
- *    1.5.3 [omitted]
- *    1.5.4beta01-08          15    10504  15.so.15.4[.0]
- *    1.5.4rc01               15    10504  15.so.15.4[.0]
- *    1.5.4                   15    10504  15.so.15.4[.0]
- *    1.5.5beta01-08          15    10505  15.so.15.5[.0]
- *    1.5.5rc01               15    10505  15.so.15.5[.0]
- *    1.5.5                   15    10505  15.so.15.5[.0]
- *    1.5.6beta01-07          15    10506  15.so.15.6[.0]
- *    1.5.6rc01-03            15    10506  15.so.15.6[.0]
- *    1.5.6                   15    10506  15.so.15.6[.0]
- *    1.5.7beta01-05          15    10507  15.so.15.7[.0]
- *    1.5.7rc01-03            15    10507  15.so.15.7[.0]
- *    1.5.7                   15    10507  15.so.15.7[.0]
- *    1.6.0beta01-40          16    10600  16.so.16.0[.0]
- *    1.6.0rc01-08            16    10600  16.so.16.0[.0]
- *    1.6.0                   16    10600  16.so.16.0[.0]
- *    1.6.1beta01-10          16    10601  16.so.16.1[.0]
- *    1.6.1rc01               16    10601  16.so.16.1[.0]
- *    1.6.1                   16    10601  16.so.16.1[.0]
- *
- *   Henceforth the source version will match the shared-library major
- *   and minor numbers; the shared-library major version number will be
- *   used for changes in backward compatibility, as it is intended.  The
- *   PNG_LIBPNG_VER macro, which is not used within libpng but is available
- *   for applications, is an unsigned integer of the form xyyzz corresponding
- *   to the source version x.y.z (leading zeros in y and z).  Beta versions
- *   were given the previous public release number plus a letter, until
- *   version 1.0.6j; from then on they were given the upcoming public
- *   release number plus "betaNN" or "rcNN".
- *
- *   Binary incompatibility exists only when applications make direct access
- *   to the info_ptr or png_ptr members through png.h, and the compiled
- *   application is loaded with a different version of the library.
- *
- *   DLLNUM will change each time there are forward or backward changes
- *   in binary compatibility (e.g., when a new feature is added).
- *
- * See libpng-manual.txt or libpng.3 for more information.  The PNG
- * specification is available as a W3C Recommendation and as an ISO
- * Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/
- */
-
-/*
- * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
- *
- * If you modify libpng you may insert additional notices immediately following
- * this sentence.
- *
- * This code is released under the libpng license.
- *
- * libpng versions 1.2.6, August 15, 2004, through 1.6.1, March 28, 2013, are
- * Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-1.2.5
- * with the following individual added to the list of Contributing Authors:
- *
- *    Cosmin Truta
- *
- * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
- * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-1.0.6
- * with the following individuals added to the list of Contributing Authors:
- *
- *    Simon-Pierre Cadieux
- *    Eric S. Raymond
- *    Gilles Vollant
- *
- * and with the following additions to the disclaimer:
- *
- *    There is no warranty against interference with your enjoyment of the
- *    library or against infringement.  There is no warranty that our
- *    efforts or the library will fulfill any of your particular purposes
- *    or needs.  This library is provided with all faults, and the entire
- *    risk of satisfactory quality, performance, accuracy, and effort is with
- *    the user.
- *
- * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
- * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-0.96,
- * with the following individuals added to the list of Contributing Authors:
- *
- *    Tom Lane
- *    Glenn Randers-Pehrson
- *    Willem van Schaik
- *
- * libpng versions 0.89, June 1996, through 0.96, May 1997, are
- * Copyright (c) 1996, 1997 Andreas Dilger
- * Distributed according to the same disclaimer and license as libpng-0.88,
- * with the following individuals added to the list of Contributing Authors:
- *
- *    John Bowler
- *    Kevin Bracey
- *    Sam Bushell
- *    Magnus Holmgren
- *    Greg Roelofs
- *    Tom Tanner
- *
- * libpng versions 0.5, May 1995, through 0.88, January 1996, are
- * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
- *
- * For the purposes of this copyright and license, "Contributing Authors"
- * is defined as the following set of individuals:
- *
- *    Andreas Dilger
- *    Dave Martindale
- *    Guy Eric Schalnat
- *    Paul Schmidt
- *    Tim Wegner
- *
- * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
- * and Group 42, Inc. disclaim all warranties, expressed or implied,
- * including, without limitation, the warranties of merchantability and of
- * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
- * assume no liability for direct, indirect, incidental, special, exemplary,
- * or consequential damages, which may result from the use of the PNG
- * Reference Library, even if advised of the possibility of such damage.
- *
- * Permission is hereby granted to use, copy, modify, and distribute this
- * source code, or portions hereof, for any purpose, without fee, subject
- * to the following restrictions:
- *
- *   1. The origin of this source code must not be misrepresented.
- *
- *   2. Altered versions must be plainly marked as such and must not
- *      be misrepresented as being the original source.
- *
- *   3. This Copyright notice may not be removed or altered from
- *      any source or altered source distribution.
- *
- * The Contributing Authors and Group 42, Inc. specifically permit, without
- * fee, and encourage the use of this source code as a component to
- * supporting the PNG file format in commercial products.  If you use this
- * source code in a product, acknowledgment is not required but would be
- * appreciated.
- */
-
-/*
- * A "png_get_copyright" function is available, for convenient use in "about"
- * boxes and the like:
- *
- *     printf("%s", png_get_copyright(NULL));
- *
- * Also, the PNG logo (in PNG format, of course) is supplied in the
- * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
- */
-
-/*
- * Libpng is OSI Certified Open Source Software.  OSI Certified is a
- * certification mark of the Open Source Initiative.
- */
-
-/*
- * The contributing authors would like to thank all those who helped
- * with testing, bug fixes, and patience.  This wouldn't have been
- * possible without all of you.
- *
- * Thanks to Frank J. T. Wojcik for helping with the documentation.
- */
-
-/*
- * Y2K compliance in libpng:
- * =========================
- *
- *    March 28, 2013
- *
- *    Since the PNG Development group is an ad-hoc body, we can't make
- *    an official declaration.
- *
- *    This is your unofficial assurance that libpng from version 0.71 and
- *    upward through 1.6.1 are Y2K compliant.  It is my belief that
- *    earlier versions were also Y2K compliant.
- *
- *    Libpng only has two year fields.  One is a 2-byte unsigned integer
- *    that will hold years up to 65535.  The other, which is deprecated,
- *    holds the date in text format, and will hold years up to 9999.
- *
- *    The integer is
- *        "png_uint_16 year" in png_time_struct.
- *
- *    The string is
- *        "char time_buffer[29]" in png_struct.  This is no longer used
- *    in libpng-1.6.x and will be removed from libpng-1.7.0.
- *
- *    There are seven time-related functions:
- *        png.c: png_convert_to_rfc_1123_buffer() in png.c
- *          (formerly png_convert_to_rfc_1123() prior to libpng-1.5.x and
- *          png_convert_to_rfc_1152() in error prior to libpng-0.98)
- *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
- *        png_convert_from_time_t() in pngwrite.c
- *        png_get_tIME() in pngget.c
- *        png_handle_tIME() in pngrutil.c, called in pngread.c
- *        png_set_tIME() in pngset.c
- *        png_write_tIME() in pngwutil.c, called in pngwrite.c
- *
- *    All handle dates properly in a Y2K environment.  The
- *    png_convert_from_time_t() function calls gmtime() to convert from system
- *    clock time, which returns (year - 1900), which we properly convert to
- *    the full 4-digit year.  There is a possibility that libpng applications
- *    are not passing 4-digit years into the png_convert_to_rfc_1123_buffer()
- *    function, or that they are incorrectly passing only a 2-digit year
- *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
- *    but this is not under our control.  The libpng documentation has always
- *    stated that it works with 4-digit years, and the APIs have been
- *    documented as such.
- *
- *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
- *    integer to hold the year, and can hold years as large as 65535.
- *
- *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
- *    no date-related code.
- *
- *       Glenn Randers-Pehrson
- *       libpng maintainer
- *       PNG Development Group
- */
-
-#ifndef PNG_H
-#define PNG_H
-
-/* This is not the place to learn how to use libpng. The file libpng-manual.txt
- * describes how to use libpng, and the file example.c summarizes it
- * with some code on which to build.  This file is useful for looking
- * at the actual function definitions and structure components.
- *
- * If you just need to read a PNG file and don't want to read the documentation
- * skip to the end of this file and read the section entitled 'simplified API'.
- */
-
-/* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.6.1"
-#define PNG_HEADER_VERSION_STRING \
-     " libpng version 1.6.1 - March 28, 2013\n"
-
-#define PNG_LIBPNG_VER_SONUM   16
-#define PNG_LIBPNG_VER_DLLNUM  16
-
-/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
-#define PNG_LIBPNG_VER_MAJOR   1
-#define PNG_LIBPNG_VER_MINOR   6
-#define PNG_LIBPNG_VER_RELEASE 1
-
-/* This should match the numeric part of the final component of
- * PNG_LIBPNG_VER_STRING, omitting any leading zero:
- */
-
-#define PNG_LIBPNG_VER_BUILD  0
-
-/* Release Status */
-#define PNG_LIBPNG_BUILD_ALPHA    1
-#define PNG_LIBPNG_BUILD_BETA     2
-#define PNG_LIBPNG_BUILD_RC       3
-#define PNG_LIBPNG_BUILD_STABLE   4
-#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
-
-/* Release-Specific Flags */
-#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
-                                       PNG_LIBPNG_BUILD_STABLE only */
-#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
-                                       PNG_LIBPNG_BUILD_SPECIAL */
-#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
-                                       PNG_LIBPNG_BUILD_PRIVATE */
-
-#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
-
-/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
- * We must not include leading zeros.
- * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
- * version 1.0.0 was mis-numbered 100 instead of 10000).  From
- * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
- */
-#define PNG_LIBPNG_VER 10601 /* 1.6.1 */
-
-/* Library configuration: these options cannot be changed after
- * the library has been built.
- */
-#ifndef PNGLCONF_H
-    /* If pnglibconf.h is missing, you can
-     * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
-     */
-#   include "pnglibconf.h"
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-   /* Machine specific configuration. */
-#  include "pngconf.h"
-#endif
-
-/*
- * Added at libpng-1.2.8
- *
- * Ref MSDN: Private as priority over Special
- * VS_FF_PRIVATEBUILD File *was not* built using standard release
- * procedures. If this value is given, the StringFileInfo block must
- * contain a PrivateBuild string.
- *
- * VS_FF_SPECIALBUILD File *was* built by the original company using
- * standard release procedures but is a variation of the standard
- * file of the same version number. If this value is given, the
- * StringFileInfo block must contain a SpecialBuild string.
- */
-
-#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */
-#  define PNG_LIBPNG_BUILD_TYPE \
-       (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
-#else
-#  ifdef PNG_LIBPNG_SPECIALBUILD
-#    define PNG_LIBPNG_BUILD_TYPE \
-         (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
-#  else
-#    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
-#  endif
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-
-/* Version information for C files, stored in png.c.  This had better match
- * the version above.
- */
-#define png_libpng_ver png_get_header_ver(NULL)
-
-/* This file is arranged in several sections:
- *
- * 1. Any configuration options that can be specified by for the application
- *    code when it is built.  (Build time configuration is in pnglibconf.h)
- * 2. Type definitions (base types are defined in pngconf.h), structure
- *    definitions.
- * 3. Exported library functions.
- * 4. Simplified API.
- *
- * The library source code has additional files (principally pngpriv.h) that
- * allow configuration of the library.
- */
-/* Section 1: run time configuration
- * See pnglibconf.h for build time configuration
- *
- * Run time configuration allows the application to choose between
- * implementations of certain arithmetic APIs.  The default is set
- * at build time and recorded in pnglibconf.h, but it is safe to
- * override these (and only these) settings.  Note that this won't
- * change what the library does, only application code, and the
- * settings can (and probably should) be made on a per-file basis
- * by setting the #defines before including png.h
- *
- * Use macros to read integers from PNG data or use the exported
- * functions?
- *   PNG_USE_READ_MACROS: use the macros (see below)  Note that
- *     the macros evaluate their argument multiple times.
- *   PNG_NO_USE_READ_MACROS: call the relevant library function.
- *
- * Use the alternative algorithm for compositing alpha samples that
- * does not use division?
- *   PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'
- *      algorithm.
- *   PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.
- *
- * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is
- * false?
- *   PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error
- *      APIs to png_warning.
- * Otherwise the calls are mapped to png_error.
- */
-
-/* Section 2: type definitions, including structures and compile time
- * constants.
- * See pngconf.h for base types that vary by machine/system
- */
-
-/* This triggers a compiler error in png.c, if png.c and png.h
- * do not agree upon the version number.
- */
-typedef char* png_libpng_version_1_6_1;
-
-/* Basic control structions.  Read libpng-manual.txt or libpng.3 for more info.
- *
- * png_struct is the cache of information used while reading or writing a single
- * PNG file.  One of these is always required, although the simplified API
- * (below) hides the creation and destruction of it.
- */
-typedef struct png_struct_def png_struct;
-typedef const png_struct * png_const_structp;
-typedef png_struct * png_structp;
-typedef png_struct * * png_structpp;
-
-/* png_info contains information read from or to be written to a PNG file.  One
- * or more of these must exist while reading or creating a PNG file.  The
- * information is not used by libpng during read but is used to control what
- * gets written when a PNG file is created.  "png_get_" function calls read
- * information during read and "png_set_" functions calls write information
- * when creating a PNG.
- * been moved into a separate header file that is not accessible to
- * applications.  Read libpng-manual.txt or libpng.3 for more info.
- */
-typedef struct png_info_def png_info;
-typedef png_info * png_infop;
-typedef const png_info * png_const_infop;
-typedef png_info * * png_infopp;
-
-/* Types with names ending 'p' are pointer types.  The corresponding types with
- * names ending 'rp' are identical pointer types except that the pointer is
- * marked 'restrict', which means that it is the only pointer to the object
- * passed to the function.  Applications should not use the 'restrict' types;
- * it is always valid to pass 'p' to a pointer with a function argument of the
- * corresponding 'rp' type.  Different compilers have different rules with
- * regard to type matching in the presence of 'restrict'.  For backward
- * compatibility libpng callbacks never have 'restrict' in their parameters and,
- * consequentially, writing portable application code is extremely difficult if
- * an attempt is made to use 'restrict'.
- */
-typedef png_struct * PNG_RESTRICT png_structrp;
-typedef const png_struct * PNG_RESTRICT png_const_structrp;
-typedef png_info * PNG_RESTRICT png_inforp;
-typedef const png_info * PNG_RESTRICT png_const_inforp;
-
-/* Three color definitions.  The order of the red, green, and blue, (and the
- * exact size) is not important, although the size of the fields need to
- * be png_byte or png_uint_16 (as defined below).
- */
-typedef struct png_color_struct
-{
-   png_byte red;
-   png_byte green;
-   png_byte blue;
-} png_color;
-typedef png_color * png_colorp;
-typedef const png_color * png_const_colorp;
-typedef png_color * * png_colorpp;
-
-typedef struct png_color_16_struct
-{
-   png_byte index;    /* used for palette files */
-   png_uint_16 red;   /* for use in red green blue files */
-   png_uint_16 green;
-   png_uint_16 blue;
-   png_uint_16 gray;  /* for use in grayscale files */
-} png_color_16;
-typedef png_color_16 * png_color_16p;
-typedef const png_color_16 * png_const_color_16p;
-typedef png_color_16 * * png_color_16pp;
-
-typedef struct png_color_8_struct
-{
-   png_byte red;   /* for use in red green blue files */
-   png_byte green;
-   png_byte blue;
-   png_byte gray;  /* for use in grayscale files */
-   png_byte alpha; /* for alpha channel files */
-} png_color_8;
-typedef png_color_8 * png_color_8p;
-typedef const png_color_8 * png_const_color_8p;
-typedef png_color_8 * * png_color_8pp;
-
-/*
- * The following two structures are used for the in-core representation
- * of sPLT chunks.
- */
-typedef struct png_sPLT_entry_struct
-{
-   png_uint_16 red;
-   png_uint_16 green;
-   png_uint_16 blue;
-   png_uint_16 alpha;
-   png_uint_16 frequency;
-} png_sPLT_entry;
-typedef png_sPLT_entry * png_sPLT_entryp;
-typedef const png_sPLT_entry * png_const_sPLT_entryp;
-typedef png_sPLT_entry * * png_sPLT_entrypp;
-
-/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
- *  occupy the LSB of their respective members, and the MSB of each member
- *  is zero-filled.  The frequency member always occupies the full 16 bits.
- */
-
-typedef struct png_sPLT_struct
-{
-   png_charp name;           /* palette name */
-   png_byte depth;           /* depth of palette samples */
-   png_sPLT_entryp entries;  /* palette entries */
-   png_int_32 nentries;      /* number of palette entries */
-} png_sPLT_t;
-typedef png_sPLT_t * png_sPLT_tp;
-typedef const png_sPLT_t * png_const_sPLT_tp;
-typedef png_sPLT_t * * png_sPLT_tpp;
-
-#ifdef PNG_TEXT_SUPPORTED
-/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
- * and whether that contents is compressed or not.  The "key" field
- * points to a regular zero-terminated C string.  The "text" fields can be a
- * regular C string, an empty string, or a NULL pointer.
- * However, the structure returned by png_get_text() will always contain
- * the "text" field as a regular zero-terminated C string (possibly
- * empty), never a NULL pointer, so it can be safely used in printf() and
- * other string-handling functions.  Note that the "itxt_length", "lang", and
- * "lang_key" members of the structure only exist when the library is built
- * with iTXt chunk support.  Prior to libpng-1.4.0 the library was built by
- * default without iTXt support. Also note that when iTXt *is* supported,
- * the "lang" and "lang_key" fields contain NULL pointers when the
- * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or
- * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the
- * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag"
- * which is always 0 or 1, or its "compression method" which is always 0.
- */
-typedef struct png_text_struct
-{
-   int  compression;       /* compression value:
-                             -1: tEXt, none
-                              0: zTXt, deflate
-                              1: iTXt, none
-                              2: iTXt, deflate  */
-   png_charp key;          /* keyword, 1-79 character description of "text" */
-   png_charp text;         /* comment, may be an empty string (ie "")
-                              or a NULL pointer */
-   png_size_t text_length; /* length of the text string */
-   png_size_t itxt_length; /* length of the itxt string */
-   png_charp lang;         /* language code, 0-79 characters
-                              or a NULL pointer */
-   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
-                              chars or a NULL pointer */
-} png_text;
-typedef png_text * png_textp;
-typedef const png_text * png_const_textp;
-typedef png_text * * png_textpp;
-#endif
-
-/* Supported compression types for text in PNG files (tEXt, and zTXt).
- * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
-#define PNG_TEXT_COMPRESSION_NONE_WR -3
-#define PNG_TEXT_COMPRESSION_zTXt_WR -2
-#define PNG_TEXT_COMPRESSION_NONE    -1
-#define PNG_TEXT_COMPRESSION_zTXt     0
-#define PNG_ITXT_COMPRESSION_NONE     1
-#define PNG_ITXT_COMPRESSION_zTXt     2
-#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
-
-/* png_time is a way to hold the time in an machine independent way.
- * Two conversions are provided, both from time_t and struct tm.  There
- * is no portable way to convert to either of these structures, as far
- * as I know.  If you know of a portable way, send it to me.  As a side
- * note - PNG has always been Year 2000 compliant!
- */
-typedef struct png_time_struct
-{
-   png_uint_16 year; /* full year, as in, 1995 */
-   png_byte month;   /* month of year, 1 - 12 */
-   png_byte day;     /* day of month, 1 - 31 */
-   png_byte hour;    /* hour of day, 0 - 23 */
-   png_byte minute;  /* minute of hour, 0 - 59 */
-   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
-} png_time;
-typedef png_time * png_timep;
-typedef const png_time * png_const_timep;
-typedef png_time * * png_timepp;
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-/* png_unknown_chunk is a structure to hold queued chunks for which there is
- * no specific support.  The idea is that we can use this to queue
- * up private chunks for output even though the library doesn't actually
- * know about their semantics.
- *
- * The data in the structure is set by libpng on read and used on write.
- */
-typedef struct png_unknown_chunk_t
-{
-    png_byte name[5]; /* Textual chunk name with '\0' terminator */
-    png_byte *data;   /* Data, should not be modified on read! */
-    png_size_t size;
-
-    /* On write 'location' must be set using the flag values listed below.
-     * Notice that on read it is set by libpng however the values stored have
-     * more bits set than are listed below.  Always treat the value as a
-     * bitmask.  On write set only one bit - setting multiple bits may cause the
-     * chunk to be written in multiple places.
-     */
-    png_byte location; /* mode of operation at read time */
-}
-png_unknown_chunk;
-
-typedef png_unknown_chunk * png_unknown_chunkp;
-typedef const png_unknown_chunk * png_const_unknown_chunkp;
-typedef png_unknown_chunk * * png_unknown_chunkpp;
-#endif
-
-/* Flag values for the unknown chunk location byte. */
-#define PNG_HAVE_IHDR  0x01
-#define PNG_HAVE_PLTE  0x02
-#define PNG_AFTER_IDAT 0x08
-
-/* Maximum positive integer used in PNG is (2^31)-1 */
-#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
-#define PNG_UINT_32_MAX ((png_uint_32)(-1))
-#define PNG_SIZE_MAX ((png_size_t)(-1))
-
-/* These are constants for fixed point values encoded in the
- * PNG specification manner (x100000)
- */
-#define PNG_FP_1    100000
-#define PNG_FP_HALF  50000
-#define PNG_FP_MAX  ((png_fixed_point)0x7fffffffL)
-#define PNG_FP_MIN  (-PNG_FP_MAX)
-
-/* These describe the color_type field in png_info. */
-/* color type masks */
-#define PNG_COLOR_MASK_PALETTE    1
-#define PNG_COLOR_MASK_COLOR      2
-#define PNG_COLOR_MASK_ALPHA      4
-
-/* color types.  Note that not all combinations are legal */
-#define PNG_COLOR_TYPE_GRAY 0
-#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
-#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
-#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
-#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
-/* aliases */
-#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
-#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
-
-/* This is for compression type. PNG 1.0-1.2 only define the single type. */
-#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
-#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
-
-/* This is for filter type. PNG 1.0-1.2 only define the single type. */
-#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
-#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
-#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
-
-/* These are for the interlacing type.  These values should NOT be changed. */
-#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
-#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
-#define PNG_INTERLACE_LAST        2 /* Not a valid value */
-
-/* These are for the oFFs chunk.  These values should NOT be changed. */
-#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
-#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
-#define PNG_OFFSET_LAST           2 /* Not a valid value */
-
-/* These are for the pCAL chunk.  These values should NOT be changed. */
-#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
-#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
-#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
-#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
-#define PNG_EQUATION_LAST         4 /* Not a valid value */
-
-/* These are for the sCAL chunk.  These values should NOT be changed. */
-#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
-#define PNG_SCALE_METER           1 /* meters per pixel */
-#define PNG_SCALE_RADIAN          2 /* radians per pixel */
-#define PNG_SCALE_LAST            3 /* Not a valid value */
-
-/* These are for the pHYs chunk.  These values should NOT be changed. */
-#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
-#define PNG_RESOLUTION_METER      1 /* pixels/meter */
-#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
-
-/* These are for the sRGB chunk.  These values should NOT be changed. */
-#define PNG_sRGB_INTENT_PERCEPTUAL 0
-#define PNG_sRGB_INTENT_RELATIVE   1
-#define PNG_sRGB_INTENT_SATURATION 2
-#define PNG_sRGB_INTENT_ABSOLUTE   3
-#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
-
-/* This is for text chunks */
-#define PNG_KEYWORD_MAX_LENGTH     79
-
-/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
-#define PNG_MAX_PALETTE_LENGTH    256
-
-/* These determine if an ancillary chunk's data has been successfully read
- * from the PNG header, or if the application has filled in the corresponding
- * data in the info_struct to be written into the output file.  The values
- * of the PNG_INFO_<chunk> defines should NOT be changed.
- */
-#define PNG_INFO_gAMA 0x0001
-#define PNG_INFO_sBIT 0x0002
-#define PNG_INFO_cHRM 0x0004
-#define PNG_INFO_PLTE 0x0008
-#define PNG_INFO_tRNS 0x0010
-#define PNG_INFO_bKGD 0x0020
-#define PNG_INFO_hIST 0x0040
-#define PNG_INFO_pHYs 0x0080
-#define PNG_INFO_oFFs 0x0100
-#define PNG_INFO_tIME 0x0200
-#define PNG_INFO_pCAL 0x0400
-#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
-#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
-#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
-#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
-#define PNG_INFO_IDAT 0x8000   /* ESR, 1.0.6 */
-
-/* This is used for the transformation routines, as some of them
- * change these values for the row.  It also should enable using
- * the routines for other purposes.
- */
-typedef struct png_row_info_struct
-{
-   png_uint_32 width;    /* width of row */
-   png_size_t rowbytes;  /* number of bytes in row */
-   png_byte color_type;  /* color type of row */
-   png_byte bit_depth;   /* bit depth of row */
-   png_byte channels;    /* number of channels (1, 2, 3, or 4) */
-   png_byte pixel_depth; /* bits per pixel (depth * channels) */
-} png_row_info;
-
-typedef png_row_info * png_row_infop;
-typedef png_row_info * * png_row_infopp;
-
-/* These are the function types for the I/O functions and for the functions
- * that allow the user to override the default I/O functions with his or her
- * own.  The png_error_ptr type should match that of user-supplied warning
- * and error functions, while the png_rw_ptr type should match that of the
- * user read/write data functions.  Note that the 'write' function must not
- * modify the buffer it is passed. The 'read' function, on the other hand, is
- * expected to return the read data in the buffer.
- */
-typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));
-typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));
-typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));
-typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,
-    int));
-typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32,
-    int));
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
-typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
-
-/* The following callback receives png_uint_32 row_number, int pass for the
- * png_bytep data of the row.  When transforming an interlaced image the
- * row number is the row number within the sub-image of the interlace pass, so
- * the value will increase to the height of the sub-image (not the full image)
- * then reset to 0 for the next pass.
- *
- * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
- * find the output pixel (x,y) given an interlaced sub-image pixel
- * (row,col,pass).  (See below for these macros.)
- */
-typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep,
-    png_uint_32, int));
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop,
-    png_bytep));
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,
-    png_unknown_chunkp));
-#endif
-#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
-/* not used anywhere */
-/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* This must match the function definition in <setjmp.h>, and the application
- * must include this before png.h to obtain the definition of jmp_buf.  The
- * function is required to be PNG_NORETURN, but this is not checked.  If the
- * function does return the application will crash via an abort() or similar
- * system level call.
- *
- * If you get a warning here while building the library you may need to make
- * changes to ensure that pnglibconf.h records the calling convention used by
- * your compiler.  This may be very difficult - try using a different compiler
- * to build the library!
- */
-PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
-#endif
-
-/* Transform masks for the high-level interface */
-#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
-#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
-#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
-#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
-#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
-#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
-#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
-#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
-#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
-#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
-#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
-#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
-#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */
-/* Added to libpng-1.2.34 */
-#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
-#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
-/* Added to libpng-1.4.0 */
-#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
-/* Added to libpng-1.5.4 */
-#define PNG_TRANSFORM_EXPAND_16     0x4000      /* read only */
-#define PNG_TRANSFORM_SCALE_16      0x8000      /* read only */
-
-/* Flags for MNG supported features */
-#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
-#define PNG_FLAG_MNG_FILTER_64      0x04
-#define PNG_ALL_MNG_FEATURES        0x05
-
-/* NOTE: prior to 1.5 these functions had no 'API' style declaration,
- * this allowed the zlib default functions to be used on Windows
- * platforms.  In 1.5 the zlib default malloc (which just calls malloc and
- * ignores the first argument) should be completely compatible with the
- * following.
- */
-typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
-    png_alloc_size_t));
-typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
-
-/* Section 3: exported functions
- * Here are the function definitions most commonly used.  This is not
- * the place to find out how to use libpng.  See libpng-manual.txt for the
- * full explanation, see example.c for the summary.  This just provides
- * a simple one line description of the use of each function.
- *
- * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in
- * pngconf.h and in the *.dfn files in the scripts directory.
- *
- *   PNG_EXPORT(ordinal, type, name, (args));
- *
- *       ordinal:    ordinal that is used while building
- *                   *.def files. The ordinal value is only
- *                   relevant when preprocessing png.h with
- *                   the *.dfn files for building symbol table
- *                   entries, and are removed by pngconf.h.
- *       type:       return type of the function
- *       name:       function name
- *       args:       function arguments, with types
- *
- * When we wish to append attributes to a function prototype we use
- * the PNG_EXPORTA() macro instead.
- *
- *   PNG_EXPORTA(ordinal, type, name, (args), attributes);
- *
- *       ordinal, type, name, and args: same as in PNG_EXPORT().
- *       attributes: function attributes
- */
-
-/* Returns the version number of the library */
-PNG_EXPORT(1, png_uint_32, png_access_version_number, (void));
-
-/* Tell lib we have already handled the first <num_bytes> magic bytes.
- * Handling more than 8 bytes from the beginning of the file is an error.
- */
-PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes));
-
-/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
- * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
- * signature, and non-zero otherwise.  Having num_to_check == 0 or
- * start > 7 will always fail (ie return non-zero).
- */
-PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,
-    png_size_t num_to_check));
-
-/* Simple signature checking function.  This is the same as calling
- * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
- */
-#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))
-
-/* Allocate and initialize png_ptr struct for reading, and any other memory. */
-PNG_EXPORTA(4, png_structp, png_create_read_struct,
-    (png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn),
-    PNG_ALLOCATED);
-
-/* Allocate and initialize png_ptr struct for writing, and any other memory */
-PNG_EXPORTA(5, png_structp, png_create_write_struct,
-    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn),
-    PNG_ALLOCATED);
-
-PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,
-    (png_const_structrp png_ptr));
-
-PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr,
-    png_size_t size));
-
-/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
- * match up.
- */
-#ifdef PNG_SETJMP_SUPPORTED
-/* This function returns the jmp_buf built in to *png_ptr.  It must be
- * supplied with an appropriate 'longjmp' function to use on that jmp_buf
- * unless the default error function is overridden in which case NULL is
- * acceptable.  The size of the jmp_buf is checked against the actual size
- * allocated by the library - the call will return NULL on a mismatch
- * indicating an ABI mismatch.
- */
-PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr,
-    png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
-#  define png_jmpbuf(png_ptr) \
-      (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf))))
-#else
-#  define png_jmpbuf(png_ptr) \
-      (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
-#endif
-/* This function should be used by libpng applications in place of
- * longjmp(png_ptr->jmpbuf, val).  If longjmp_fn() has been set, it
- * will use it; otherwise it will call PNG_ABORT().  This function was
- * added in libpng-1.5.0.
- */
-PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val),
-    PNG_NORETURN);
-
-#ifdef PNG_READ_SUPPORTED
-/* Reset the compression stream */
-PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED);
-#endif
-
-/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
-#ifdef PNG_USER_MEM_SUPPORTED
-PNG_EXPORTA(11, png_structp, png_create_read_struct_2,
-    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn,
-    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
-    PNG_ALLOCATED);
-PNG_EXPORTA(12, png_structp, png_create_write_struct_2,
-    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn,
-    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
-    PNG_ALLOCATED);
-#endif
-
-/* Write the PNG file signature. */
-PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr));
-
-/* Write a PNG chunk - size, type, (optional) data, CRC. */
-PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep
-    chunk_name, png_const_bytep data, png_size_t length));
-
-/* Write the start of a PNG chunk - length and chunk name. */
-PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr,
-    png_const_bytep chunk_name, png_uint_32 length));
-
-/* Write the data of a PNG chunk started with png_write_chunk_start(). */
-PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr,
-    png_const_bytep data, png_size_t length));
-
-/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
-PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr));
-
-/* Allocate and initialize the info structure */
-PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr),
-    PNG_ALLOCATED);
-
-/* DEPRECATED: this function allowed init structures to be created using the
- * default allocation method (typically malloc).  Use is deprecated in 1.6.0 and
- * the API will be removed in the future.
- */
-PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr,
-    png_size_t png_info_struct_size), PNG_DEPRECATED);
-
-/* Writes all the PNG information before the image. */
-PNG_EXPORT(20, void, png_write_info_before_PLTE,
-    (png_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(21, void, png_write_info,
-    (png_structrp png_ptr, png_const_inforp info_ptr));
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the information before the actual image data. */
-PNG_EXPORT(22, void, png_read_info,
-    (png_structrp png_ptr, png_inforp info_ptr));
-#endif
-
-#ifdef PNG_TIME_RFC1123_SUPPORTED
-   /* Convert to a US string format: there is no localization support in this
-    * routine.  The original implementation used a 29 character buffer in
-    * png_struct, this will be removed in future versions.
-    */
-#if PNG_LIBPNG_VER < 10700
-/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */
-PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr,
-    png_const_timep ptime),PNG_DEPRECATED);
-#endif
-PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29],
-    png_const_timep ptime));
-#endif
-
-#ifdef PNG_CONVERT_tIME_SUPPORTED
-/* Convert from a struct tm to png_time */
-PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime,
-    const struct tm * ttime));
-
-/* Convert from time_t to png_time.  Uses gmtime() */
-PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime));
-#endif /* PNG_CONVERT_tIME_SUPPORTED */
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
-PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr));
-PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr));
-PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr));
-PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion
- * of a tRNS chunk if present.
- */
-PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Use blue, green, red order for pixels. */
-PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-/* Expand the grayscale to 24-bit RGB if necessary. */
-PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-/* Reduce RGB to grayscale. */
-#define PNG_ERROR_ACTION_NONE  1
-#define PNG_ERROR_ACTION_WARN  2
-#define PNG_ERROR_ACTION_ERROR 3
-#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/
-
-PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr,
-    int error_action, double red, double green))
-PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr,
-    int error_action, png_fixed_point red, png_fixed_point green))
-
-PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp
-    png_ptr));
-#endif
-
-#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
-PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth,
-    png_colorp palette));
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-/* How the alpha channel is interpreted - this affects how the color channels of
- * a PNG file are returned when an alpha channel, or tRNS chunk in a palette
- * file, is present.
- *
- * This has no effect on the way pixels are written into a PNG output
- * datastream. The color samples in a PNG datastream are never premultiplied
- * with the alpha samples.
- *
- * The default is to return data according to the PNG specification: the alpha
- * channel is a linear measure of the contribution of the pixel to the
- * corresponding composited pixel.  The gamma encoded color channels must be
- * scaled according to the contribution and to do this it is necessary to undo
- * the encoding, scale the color values, perform the composition and reencode
- * the values.  This is the 'PNG' mode.
- *
- * The alternative is to 'associate' the alpha with the color information by
- * storing color channel values that have been scaled by the alpha.  The
- * advantage is that the color channels can be resampled (the image can be
- * scaled) in this form.  The disadvantage is that normal practice is to store
- * linear, not (gamma) encoded, values and this requires 16-bit channels for
- * still images rather than the 8-bit channels that are just about sufficient if
- * gamma encoding is used.  In addition all non-transparent pixel values,
- * including completely opaque ones, must be gamma encoded to produce the final
- * image.  This is the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' mode (the
- * latter being the two common names for associated alpha color channels.)
- *
- * Since it is not necessary to perform arithmetic on opaque color values so
- * long as they are not to be resampled and are in the final color space it is
- * possible to optimize the handling of alpha by storing the opaque pixels in
- * the PNG format (adjusted for the output color space) while storing partially
- * opaque pixels in the standard, linear, format.  The accuracy required for
- * standard alpha composition is relatively low, because the pixels are
- * isolated, therefore typically the accuracy loss in storing 8-bit linear
- * values is acceptable.  (This is not true if the alpha channel is used to
- * simulate transparency over large areas - use 16 bits or the PNG mode in
- * this case!)  This is the 'OPTIMIZED' mode.  For this mode a pixel is
- * treated as opaque only if the alpha value is equal to the maximum value.
- *
- * The final choice is to gamma encode the alpha channel as well.  This is
- * broken because, in practice, no implementation that uses this choice
- * correctly undoes the encoding before handling alpha composition.  Use this
- * choice only if other serious errors in the software or hardware you use
- * mandate it; the typical serious error is for dark halos to appear around
- * opaque areas of the composited PNG image because of arithmetic overflow.
- *
- * The API function png_set_alpha_mode specifies which of these choices to use
- * with an enumerated 'mode' value and the gamma of the required output:
- */
-#define PNG_ALPHA_PNG           0 /* according to the PNG standard */
-#define PNG_ALPHA_STANDARD      1 /* according to Porter/Duff */
-#define PNG_ALPHA_ASSOCIATED    1 /* as above; this is the normal practice */
-#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */
-#define PNG_ALPHA_OPTIMIZED     2 /* 'PNG' for opaque pixels, else 'STANDARD' */
-#define PNG_ALPHA_BROKEN        3 /* the alpha channel is gamma encoded */
-
-PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode,
-    double output_gamma))
-PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr,
-    int mode, png_fixed_point output_gamma))
-#endif
-
-#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-/* The output_gamma value is a screen gamma in libpng terminology: it expresses
- * how to decode the output values, not how they are encoded.  The values used
- * correspond to the normal numbers used to describe the overall gamma of a
- * computer display system; for example 2.2 for an sRGB conformant system.  The
- * values are scaled by 100000 in the _fixed version of the API (so 220000 for
- * sRGB.)
- *
- * The inverse of the value is always used to provide a default for the PNG file
- * encoding if it has no gAMA chunk and if png_set_gamma() has not been called
- * to override the PNG gamma information.
- *
- * When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode
- * opaque pixels however pixels with lower alpha values are not encoded,
- * regardless of the output gamma setting.
- *
- * When the standard Porter Duff handling is requested with mode 1 the output
- * encoding is set to be linear and the output_gamma value is only relevant
- * as a default for input data that has no gamma information.  The linear output
- * encoding will be overridden if png_set_gamma() is called - the results may be
- * highly unexpected!
- *
- * The following numbers are derived from the sRGB standard and the research
- * behind it.  sRGB is defined to be approximated by a PNG gAMA chunk value of
- * 0.45455 (1/2.2) for PNG.  The value implicitly includes any viewing
- * correction required to take account of any differences in the color
- * environment of the original scene and the intended display environment; the
- * value expresses how to *decode* the image for display, not how the original
- * data was *encoded*.
- *
- * sRGB provides a peg for the PNG standard by defining a viewing environment.
- * sRGB itself, and earlier TV standards, actually use a more complex transform
- * (a linear portion then a gamma 2.4 power law) than PNG can express.  (PNG is
- * limited to simple power laws.)  By saying that an image for direct display on
- * an sRGB conformant system should be stored with a gAMA chunk value of 45455
- * (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification
- * makes it possible to derive values for other display systems and
- * environments.
- *
- * The Mac value is deduced from the sRGB based on an assumption that the actual
- * extra viewing correction used in early Mac display systems was implemented as
- * a power 1.45 lookup table.
- *
- * Any system where a programmable lookup table is used or where the behavior of
- * the final display device characteristics can be changed requires system
- * specific code to obtain the current characteristic.  However this can be
- * difficult and most PNG gamma correction only requires an approximate value.
- *
- * By default, if png_set_alpha_mode() is not called, libpng assumes that all
- * values are unencoded, linear, values and that the output device also has a
- * linear characteristic.  This is only very rarely correct - it is invariably
- * better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the
- * default if you don't know what the right answer is!
- *
- * The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS
- * 10.6) which used a correction table to implement a somewhat lower gamma on an
- * otherwise sRGB system.
- *
- * Both these values are reserved (not simple gamma values) in order to allow
- * more precise correction internally in the future.
- *
- * NOTE: the following values can be passed to either the fixed or floating
- * point APIs, but the floating point API will also accept floating point
- * values.
- */
-#define PNG_DEFAULT_sRGB -1       /* sRGB gamma and color space */
-#define PNG_GAMMA_MAC_18 -2       /* Old Mac '1.8' gamma and color space */
-#define PNG_GAMMA_sRGB   220000   /* Television standards--matches sRGB gamma */
-#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */
-#endif
-
-/* The following are examples of calls to png_set_alpha_mode to achieve the
- * required overall gamma correction and, where necessary, alpha
- * premultiplication.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
- *    This is the default libpng handling of the alpha channel - it is not
- *    pre-multiplied into the color components.  In addition the call states
- *    that the output is for a sRGB system and causes all PNG files without gAMA
- *    chunks to be assumed to be encoded using sRGB.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
- *    In this case the output is assumed to be something like an sRGB conformant
- *    display preceeded by a power-law lookup table of power 1.45.  This is how
- *    early Mac systems behaved.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
- *    This is the classic Jim Blinn approach and will work in academic
- *    environments where everything is done by the book.  It has the shortcoming
- *    of assuming that input PNG data with no gamma information is linear - this
- *    is unlikely to be correct unless the PNG files where generated locally.
- *    Most of the time the output precision will be so low as to show
- *    significant banding in dark areas of the image.
- *
- * png_set_expand_16(pp);
- * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);
- *    This is a somewhat more realistic Jim Blinn inspired approach.  PNG files
- *    are assumed to have the sRGB encoding if not marked with a gamma value and
- *    the output is always 16 bits per component.  This permits accurate scaling
- *    and processing of the data.  If you know that your input PNG files were
- *    generated locally you might need to replace PNG_DEFAULT_sRGB with the
- *    correct value for your system.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);
- *    If you just need to composite the PNG image onto an existing background
- *    and if you control the code that does this you can use the optimization
- *    setting.  In this case you just copy completely opaque pixels to the
- *    output.  For pixels that are not completely transparent (you just skip
- *    those) you do the composition math using png_composite or png_composite_16
- *    below then encode the resultant 8-bit or 16-bit values to match the output
- *    encoding.
- *
- * Other cases
- *    If neither the PNG nor the standard linear encoding work for you because
- *    of the software or hardware you use then you have a big problem.  The PNG
- *    case will probably result in halos around the image.  The linear encoding
- *    will probably result in a washed out, too bright, image (it's actually too
- *    contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably
- *    substantially reduce the halos.  Alternatively try:
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);
- *    This option will also reduce the halos, but there will be slight dark
- *    halos round the opaque parts of the image where the background is light.
- *    In the OPTIMIZED mode the halos will be light halos where the background
- *    is dark.  Take your pick - the halos are unavoidable unless you can get
- *    your hardware/software fixed!  (The OPTIMIZED approach is slightly
- *    faster.)
- *
- * When the default gamma of PNG files doesn't match the output gamma.
- *    If you have PNG files with no gamma information png_set_alpha_mode allows
- *    you to provide a default gamma, but it also sets the ouput gamma to the
- *    matching value.  If you know your PNG files have a gamma that doesn't
- *    match the output you can take advantage of the fact that
- *    png_set_alpha_mode always sets the output gamma but only sets the PNG
- *    default if it is not already set:
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
- *    The first call sets both the default and the output gamma values, the
- *    second call overrides the output gamma without changing the default.  This
- *    is easier than achieving the same effect with png_set_gamma.  You must use
- *    PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will
- *    fire if more than one call to png_set_alpha_mode and png_set_background is
- *    made in the same read operation, however multiple calls with PNG_ALPHA_PNG
- *    are ignored.
- */
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
-PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler,
-    int flags));
-/* The values of the PNG_FILLER_ defines should NOT be changed */
-#  define PNG_FILLER_BEFORE 0
-#  define PNG_FILLER_AFTER 1
-/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
-PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr,
-    png_uint_32 filler, int flags));
-#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Swap bytes in 16-bit depth files. */
-PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
-/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
-PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \
-    defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-/* Swap packing order of pixels in bytes. */
-PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-/* Converts files to legal bit depths. */
-PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p
-    true_bits));
-#endif
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
-    defined(PNG_WRITE_INTERLACING_SUPPORTED)
-/* Have the code handle the interlacing.  Returns the number of passes.
- * MUST be called before png_read_update_info or png_start_read_image,
- * otherwise it will not have the desired effect.  Note that it is still
- * necessary to call png_read_row or png_read_rows png_get_image_height
- * times for each pass.
-*/
-PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-/* Invert monochrome files */
-PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-/* Handle alpha and tRNS by replacing with a background color.  Prior to
- * libpng-1.5.4 this API must not be called before the PNG file header has been
- * read.  Doing so will result in unexpected behavior and possible warnings or
- * errors if the PNG file contains a bKGD chunk.
- */
-PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, double background_gamma))
-PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, png_fixed_point background_gamma))
-#endif
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-#  define PNG_BACKGROUND_GAMMA_UNKNOWN 0
-#  define PNG_BACKGROUND_GAMMA_SCREEN  1
-#  define PNG_BACKGROUND_GAMMA_FILE    2
-#  define PNG_BACKGROUND_GAMMA_UNIQUE  3
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-/* Scale a 16-bit depth file down to 8-bit, accurately. */
-PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */
-/* Strip the second byte of information from a 16-bit depth file. */
-PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-/* Turn on quantizing, and reduce the palette to the number of colors
- * available.
- */
-PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr,
-    png_colorp palette, int num_palette, int maximum_colors,
-    png_const_uint_16p histogram, int full_quantize));
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* The threshold on gamma processing is configurable but hard-wired into the
- * library.  The following is the floating point variant.
- */
-#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001)
-
-/* Handle gamma correction. Screen_gamma=(display_exponent).
- * NOTE: this API simply sets the screen and file gamma values. It will
- * therefore override the value for gamma in a PNG file if it is called after
- * the file header has been read - use with care  - call before reading the PNG
- * file for best results!
- *
- * These routines accept the same gamma values as png_set_alpha_mode (described
- * above).  The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either
- * API (floating point or fixed.)  Notice, however, that the 'file_gamma' value
- * is the inverse of a 'screen gamma' value.
- */
-PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr,
-    double screen_gamma, double override_file_gamma))
-PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr,
-    png_fixed_point screen_gamma, png_fixed_point override_file_gamma))
-#endif
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-/* Set how many lines between output flushes - 0 for no flushing */
-PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows));
-/* Flush the current PNG output buffer */
-PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr));
-#endif
-
-/* Optional update palette with requested transformations */
-PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr));
-
-/* Optional call to update the users info structure */
-PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr,
-    png_inforp info_ptr));
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read one or more rows of image data. */
-PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row,
-    png_bytepp display_row, png_uint_32 num_rows));
-#endif
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read a row of data. */
-PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row,
-    png_bytep display_row));
-#endif
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the whole image into memory at once. */
-PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image));
-#endif
-
-/* Write a row of image data */
-PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr,
-    png_const_bytep row));
-
-/* Write a few rows of image data: (*row) is not written; however, the type
- * is declared as writeable to maintain compatibility with previous versions
- * of libpng and to allow the 'display_row' array from read_rows to be passed
- * unchanged to write_rows.
- */
-PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row,
-    png_uint_32 num_rows));
-
-/* Write the image data */
-PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image));
-
-/* Write the end of the PNG file. */
-PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr,
-    png_inforp info_ptr));
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the end of the PNG file. */
-PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr));
-#endif
-
-/* Free any memory associated with the png_info_struct */
-PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr,
-    png_infopp info_ptr_ptr));
-
-/* Free any memory associated with the png_struct and the png_info_structs */
-PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr,
-    png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
-
-/* Free any memory associated with the png_struct and the png_info_structs */
-PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr,
-    png_infopp info_ptr_ptr));
-
-/* Set the libpng method of handling chunk CRC errors */
-PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action,
-    int ancil_action));
-
-/* Values for png_set_crc_action() say how to handle CRC errors in
- * ancillary and critical chunks, and whether to use the data contained
- * therein.  Note that it is impossible to "discard" data in a critical
- * chunk.  For versions prior to 0.90, the action was always error/quit,
- * whereas in version 0.90 and later, the action for CRC errors in ancillary
- * chunks is warn/discard.  These values should NOT be changed.
- *
- *      value                       action:critical     action:ancillary
- */
-#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
-#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
-#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
-#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
-#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
-#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
-
-/* These functions give the user control over the scan-line filtering in
- * libpng and the compression methods used by zlib.  These functions are
- * mainly useful for testing, as the defaults should work with most users.
- * Those users who are tight on memory or want faster performance at the
- * expense of compression can modify them.  See the compression library
- * header file (zlib.h) for an explination of the compression functions.
- */
-
-/* Set the filtering method(s) used by libpng.  Currently, the only valid
- * value for "method" is 0.
- */
-PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method,
-    int filters));
-
-/* Flags for png_set_filter() to say which filters to use.  The flags
- * are chosen so that they don't conflict with real filter types
- * below, in case they are supplied instead of the #defined constants.
- * These values should NOT be changed.
- */
-#define PNG_NO_FILTERS     0x00
-#define PNG_FILTER_NONE    0x08
-#define PNG_FILTER_SUB     0x10
-#define PNG_FILTER_UP      0x20
-#define PNG_FILTER_AVG     0x40
-#define PNG_FILTER_PAETH   0x80
-#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
-                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
-
-/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
- * These defines should NOT be changed.
- */
-#define PNG_FILTER_VALUE_NONE  0
-#define PNG_FILTER_VALUE_SUB   1
-#define PNG_FILTER_VALUE_UP    2
-#define PNG_FILTER_VALUE_AVG   3
-#define PNG_FILTER_VALUE_PAETH 4
-#define PNG_FILTER_VALUE_LAST  5
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
-/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
- * defines, either the default (minimum-sum-of-absolute-differences), or
- * the experimental method (weighted-minimum-sum-of-absolute-differences).
- *
- * Weights are factors >= 1.0, indicating how important it is to keep the
- * filter type consistent between rows.  Larger numbers mean the current
- * filter is that many times as likely to be the same as the "num_weights"
- * previous filters.  This is cumulative for each previous row with a weight.
- * There needs to be "num_weights" values in "filter_weights", or it can be
- * NULL if the weights aren't being specified.  Weights have no influence on
- * the selection of the first row filter.  Well chosen weights can (in theory)
- * improve the compression for a given image.
- *
- * Costs are factors >= 1.0 indicating the relative decoding costs of a
- * filter type.  Higher costs indicate more decoding expense, and are
- * therefore less likely to be selected over a filter with lower computational
- * costs.  There needs to be a value in "filter_costs" for each valid filter
- * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
- * setting the costs.  Costs try to improve the speed of decompression without
- * unduly increasing the compressed image size.
- *
- * A negative weight or cost indicates the default value is to be used, and
- * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
- * The default values for both weights and costs are currently 1.0, but may
- * change if good general weighting/cost heuristics can be found.  If both
- * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
- * to the UNWEIGHTED method, but with added encoding time/computation.
- */
-PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr,
-    int heuristic_method, int num_weights, png_const_doublep filter_weights,
-    png_const_doublep filter_costs))
-PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed,
-    (png_structrp png_ptr, int heuristic_method, int num_weights,
-    png_const_fixed_point_p filter_weights,
-    png_const_fixed_point_p filter_costs))
-#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
-
-/* Heuristic used for row filter selection.  These defines should NOT be
- * changed.
- */
-#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
-#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
-#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
-#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
-
-#ifdef PNG_WRITE_SUPPORTED
-/* Set the library compression level.  Currently, valid values range from
- * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
- * (0 - no compression, 9 - "maximal" compression).  Note that tests have
- * shown that zlib compression levels 3-6 usually perform as well as level 9
- * for PNG images, and do considerably fewer caclulations.  In the future,
- * these values may not correspond directly to the zlib compression levels.
- */
-PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr,
-    int level));
-
-PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr,
-    int mem_level));
-
-PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr,
-    int strategy));
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr,
-    int window_bits));
-
-PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr,
-    int method));
-#endif
-
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-/* Also set zlib parameters for compressing non-IDAT chunks */
-PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr,
-    int level));
-
-PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr,
-    int mem_level));
-
-PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr,
-    int strategy));
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-PNG_EXPORT(225, void, png_set_text_compression_window_bits,
-    (png_structrp png_ptr, int window_bits));
-
-PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr,
-    int method));
-#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */
-
-/* These next functions are called for input/output, memory, and error
- * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
- * and call standard C I/O routines such as fread(), fwrite(), and
- * fprintf().  These functions can be made to use other I/O routines
- * at run time for those applications that need to handle I/O in a
- * different manner by calling png_set_???_fn().  See libpng-manual.txt for
- * more information.
- */
-
-#ifdef PNG_STDIO_SUPPORTED
-/* Initialize the input/output for the PNG file to the default functions. */
-PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp));
-#endif
-
-/* Replace the (error and abort), and warning functions with user
- * supplied functions.  If no messages are to be printed you must still
- * write and use replacement functions. The replacement error_fn should
- * still do a longjmp to the last setjmp location if you are using this
- * method of error handling.  If error_fn or warning_fn is NULL, the
- * default function will be used.
- */
-
-PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr,
-    png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
-
-/* Return the user pointer associated with the error functions */
-PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr));
-
-/* Replace the default data output functions with a user supplied one(s).
- * If buffered output is not used, then output_flush_fn can be set to NULL.
- * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
- * output_flush_fn will be ignored (and thus can be NULL).
- * It is probably a mistake to use NULL for output_flush_fn if
- * write_data_fn is not also NULL unless you have built libpng with
- * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's
- * default flush function, which uses the standard *FILE structure, will
- * be used.
- */
-PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr,
-    png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
-
-/* Replace the default data input function with a user supplied one. */
-PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr,
-    png_rw_ptr read_data_fn));
-
-/* Return the user pointer associated with the I/O functions */
-PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr));
-
-PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr,
-    png_read_status_ptr read_row_fn));
-
-PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr,
-    png_write_status_ptr write_row_fn));
-
-#ifdef PNG_USER_MEM_SUPPORTED
-/* Replace the default memory allocation functions with user supplied one(s). */
-PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
-/* Return the user pointer associated with the memory functions */
-PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr,
-    png_user_transform_ptr read_user_transform_fn));
-#endif
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr,
-    png_user_transform_ptr write_user_transform_fn));
-#endif
-
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr,
-    png_voidp user_transform_ptr, int user_transform_depth,
-    int user_transform_channels));
-/* Return the user pointer associated with the user transform functions */
-PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr,
-    (png_const_structrp png_ptr));
-#endif
-
-#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED
-/* Return information about the row currently being processed.  Note that these
- * APIs do not fail but will return unexpected results if called outside a user
- * transform callback.  Also note that when transforming an interlaced image the
- * row number is the row number within the sub-image of the interlace pass, so
- * the value will increase to the height of the sub-image (not the full image)
- * then reset to 0 for the next pass.
- *
- * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
- * find the output pixel (x,y) given an interlaced sub-image pixel
- * (row,col,pass).  (See below for these macros.)
- */
-PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp));
-PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp));
-#endif
-
-#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-/* This callback is called only for *unknown* chunks.  If
- * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known
- * chunks to be treated as unknown, however in this case the callback must do
- * any processing required by the chunk (e.g. by calling the appropriate
- * png_set_ APIs.)
- *
- * There is no write support - on write, by default, all the chunks in the
- * 'unknown' list are written in the specified position.
- *
- * The integer return from the callback function is interpreted thus:
- *
- * negative: An error occured, png_chunk_error will be called.
- *     zero: The chunk was not handled, the chunk will be saved. A critical
- *           chunk will cause an error at this point unless it is to be saved.
- * positive: The chunk was handled, libpng will ignore/discard it.
- *
- * See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about
- * how this behavior will change in libpng 1.7
- */
-PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr,
-    png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr));
-#endif
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-/* Sets the function callbacks for the push reader, and a pointer to a
- * user-defined structure available to the callback functions.
- */
-PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr,
-    png_voidp progressive_ptr, png_progressive_info_ptr info_fn,
-    png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn));
-
-/* Returns the user pointer associated with the push read functions */
-PNG_EXPORT(91, png_voidp, png_get_progressive_ptr,
-    (png_const_structrp png_ptr));
-
-/* Function to be called when data becomes available */
-PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr,
-    png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size));
-
-/* A function which may be called *only* within png_process_data to stop the
- * processing of any more data.  The function returns the number of bytes
- * remaining, excluding any that libpng has cached internally.  A subsequent
- * call to png_process_data must supply these bytes again.  If the argument
- * 'save' is set to true the routine will first save all the pending data and
- * will always return 0.
- */
-PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structrp, int save));
-
-/* A function which may be called *only* outside (after) a call to
- * png_process_data.  It returns the number of bytes of data to skip in the
- * input.  Normally it will return 0, but if it returns a non-zero value the
- * application must skip than number of bytes of input data and pass the
- * following data to the next call to png_process_data.
- */
-PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp));
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-/* Function that combines rows.  'new_row' is a flag that should come from
- * the callback and be non-NULL if anything needs to be done; the library
- * stores its own version of the new data internally and ignores the passed
- * in value.
- */
-PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr,
-    png_bytep old_row, png_const_bytep new_row));
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
-PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED);
-/* Added at libpng version 1.4.0 */
-PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED);
-
-/* Added at libpng version 1.2.4 */
-PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED);
-
-/* Frees a pointer allocated by png_malloc() */
-PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr));
-
-/* Free data that was allocated internally */
-PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 free_me, int num));
-
-/* Reassign responsibility for freeing existing data, whether allocated
- * by libpng or by the application; this works on the png_info structure passed
- * in, it does not change the state for other png_info structures.
- *
- * It is unlikely that this function works correctly as of 1.6.0 and using it
- * may result either in memory leaks or double free of allocated data.
- */
-PNG_EXPORTA(99, void, png_data_freer, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int freer, png_uint_32 mask), PNG_DEPRECATED);
-
-/* Assignments for png_data_freer */
-#define PNG_DESTROY_WILL_FREE_DATA 1
-#define PNG_SET_WILL_FREE_DATA 1
-#define PNG_USER_WILL_FREE_DATA 2
-/* Flags for png_ptr->free_me and info_ptr->free_me */
-#define PNG_FREE_HIST 0x0008
-#define PNG_FREE_ICCP 0x0010
-#define PNG_FREE_SPLT 0x0020
-#define PNG_FREE_ROWS 0x0040
-#define PNG_FREE_PCAL 0x0080
-#define PNG_FREE_SCAL 0x0100
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-#  define PNG_FREE_UNKN 0x0200
-#endif
-/*      PNG_FREE_LIST 0x0400    removed in 1.6.0 because it is ignored */
-#define PNG_FREE_PLTE 0x1000
-#define PNG_FREE_TRNS 0x2000
-#define PNG_FREE_TEXT 0x4000
-#define PNG_FREE_ALL  0x7fff
-#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
-
-#ifdef PNG_USER_MEM_SUPPORTED
-PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED);
-PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr,
-    png_voidp ptr), PNG_DEPRECATED);
-#endif
-
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-/* Fatal error in PNG image of libpng - can't continue */
-PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr,
-    png_const_charp error_message), PNG_NORETURN);
-
-/* The same, but the chunk name is prepended to the error string. */
-PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr,
-    png_const_charp error_message), PNG_NORETURN);
-
-#else
-/* Fatal error in PNG image of libpng - can't continue */
-PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN);
-#endif
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* Non-fatal error in libpng.  Can continue, but may have a problem. */
-PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-
-/* Non-fatal error in libpng, chunk name is prepended to message. */
-PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-#endif
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-/* Benign error in libpng.  Can continue, but may have a problem.
- * User can choose whether to handle as a fatal error or as a warning. */
-PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-
-#ifdef PNG_READ_SUPPORTED
-/* Same, chunk name is prepended to message (only during read) */
-PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-#endif
-
-PNG_EXPORT(109, void, png_set_benign_errors,
-    (png_structrp png_ptr, int allowed));
-#else
-#  ifdef PNG_ALLOW_BENIGN_ERRORS
-#    define png_benign_error png_warning
-#    define png_chunk_benign_error png_chunk_warning
-#  else
-#    define png_benign_error png_error
-#    define png_chunk_benign_error png_chunk_error
-#  endif
-#endif
-
-/* The png_set_<chunk> functions are for storing values in the png_info_struct.
- * Similarly, the png_get_<chunk> calls are used to read values from the
- * png_info_struct, either storing the parameters in the passed variables, or
- * setting pointers into the png_info_struct where the data is stored.  The
- * png_get_<chunk> functions return a non-zero value if the data was available
- * in info_ptr, or return zero and do not change any of the parameters if the
- * data was not available.
- *
- * These functions should be used instead of directly accessing png_info
- * to avoid problems with future changes in the size and internal layout of
- * png_info_struct.
- */
-/* Returns "flag" if chunk data is valid in info_ptr. */
-PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 flag));
-
-/* Returns number of bytes needed to hold a transformed row. */
-PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-/* Returns row_pointers, which is an array of pointers to scanlines that was
- * returned from png_read_png().
- */
-PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Set row_pointers, which is an array of pointers to scanlines for use
- * by png_write_png().
- */
-PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_bytepp row_pointers));
-#endif
-
-/* Returns number of color channels in image. */
-PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
-/* Returns image width in pixels. */
-PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image height in pixels. */
-PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image bit_depth. */
-PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image color_type. */
-PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image filter_type. */
-PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image interlace_type. */
-PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image compression_type. */
-PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image resolution in pixels per meter, from pHYs chunk data. */
-PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
-PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-
-/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
-PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(128, png_int_32, png_get_x_offset_microns,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(129, png_int_32, png_get_y_offset_microns,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-#endif /* PNG_EASY_ACCESS_SUPPORTED */
-
-#ifdef PNG_READ_SUPPORTED
-/* Returns pointer to signature string read from PNG header */
-PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-#endif
-
-#ifdef PNG_bKGD_SUPPORTED
-PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_color_16p *background));
-#endif
-
-#ifdef PNG_bKGD_SUPPORTED
-PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_color_16p background));
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x,
-    double *red_y, double *green_x, double *green_y, double *blue_x,
-    double *blue_y))
-PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z,
-    double *green_X, double *green_Y, double *green_Z, double *blue_X,
-    double *blue_Y, double *blue_Z))
-PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_white_x, png_fixed_point *int_white_y,
-    png_fixed_point *int_red_x, png_fixed_point *int_red_y,
-    png_fixed_point *int_green_x, png_fixed_point *int_green_y,
-    png_fixed_point *int_blue_x, png_fixed_point *int_blue_y))
-PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
-    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
-    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
-    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
-    png_fixed_point *int_blue_Z))
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr,
-    png_inforp info_ptr,
-    double white_x, double white_y, double red_x, double red_y, double green_x,
-    double green_y, double blue_x, double blue_y))
-PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr,
-    png_inforp info_ptr, double red_X, double red_Y, double red_Z,
-    double green_X, double green_Y, double green_Z, double blue_X,
-    double blue_Y, double blue_Z))
-PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_fixed_point int_white_x,
-    png_fixed_point int_white_y, png_fixed_point int_red_x,
-    png_fixed_point int_red_y, png_fixed_point int_green_x,
-    png_fixed_point int_green_y, png_fixed_point int_blue_x,
-    png_fixed_point int_blue_y))
-PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y,
-    png_fixed_point int_red_Z, png_fixed_point int_green_X,
-    png_fixed_point int_green_Y, png_fixed_point int_green_Z,
-    png_fixed_point int_blue_X, png_fixed_point int_blue_Y,
-    png_fixed_point int_blue_Z))
-#endif
-
-#ifdef PNG_gAMA_SUPPORTED
-PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, double *file_gamma))
-PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_file_gamma))
-#endif
-
-#ifdef PNG_gAMA_SUPPORTED
-PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr,
-    png_inforp info_ptr, double file_gamma))
-PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_fixed_point int_file_gamma))
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_16p *hist));
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_uint_16p hist));
-#endif
-
-PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height,
-    int *bit_depth, int *color_type, int *interlace_method,
-    int *compression_method, int *filter_method));
-
-PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
-    int color_type, int interlace_method, int compression_method,
-    int filter_method));
-
-#ifdef PNG_oFFs_SUPPORTED
-PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr,
-   png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
-   int *unit_type));
-#endif
-
-#ifdef PNG_oFFs_SUPPORTED
-PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y,
-    int unit_type));
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_charp *purpose, png_int_32 *X0,
-    png_int_32 *X1, int *type, int *nparams, png_charp *units,
-    png_charpp *params));
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1,
-    int type, int nparams, png_const_charp units, png_charpp params));
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,
-    int *unit_type));
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
-#endif
-
-PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr,
-   png_inforp info_ptr, png_colorp *palette, int *num_palette));
-
-PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr,
-    png_inforp info_ptr, png_const_colorp palette, int num_palette));
-
-#ifdef PNG_sBIT_SUPPORTED
-PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_color_8p *sig_bit));
-#endif
-
-#ifdef PNG_sBIT_SUPPORTED
-PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_color_8p sig_bit));
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, int *file_srgb_intent));
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int srgb_intent));
-PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int srgb_intent));
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_charpp name, int *compression_type,
-    png_bytepp profile, png_uint_32 *proflen));
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_charp name, int compression_type,
-    png_const_bytep profile, png_uint_32 proflen));
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_sPLT_tpp entries));
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_sPLT_tp entries, int nentries));
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-/* png_get_text also returns the number of text chunks in *num_text */
-PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_textp *text_ptr, int *num_text));
-#endif
-
-/* Note while png_set_text() will accept a structure whose text,
- * language, and  translated keywords are NULL pointers, the structure
- * returned by png_get_text will always contain regular
- * zero-terminated C strings.  They might be empty strings but
- * they will never be NULL pointers.
- */
-
-#ifdef PNG_TEXT_SUPPORTED
-PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_textp text_ptr, int num_text));
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_timep *mod_time));
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_timep mod_time));
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans,
-    png_color_16p *trans_color));
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr,
-    png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans,
-    png_const_color_16p trans_color));
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, int *unit, double *width, double *height))
-#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
-   defined(PNG_FLOATING_POINT_SUPPORTED)
-/* NOTE: this API is currently implemented using floating point arithmetic,
- * consequently it can only be used on systems with floating point support.
- * In any case the range of values supported by png_fixed_point is small and it
- * is highly recommended that png_get_sCAL_s be used instead.
- */
-PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit,
-    png_fixed_point *width, png_fixed_point *height))
-#endif
-PNG_EXPORT(169, png_uint_32, png_get_sCAL_s,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit,
-    png_charpp swidth, png_charpp sheight));
-
-PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int unit, double width, double height))
-PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr,
-   png_inforp info_ptr, int unit, png_fixed_point width,
-   png_fixed_point height))
-PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int unit,
-    png_const_charp swidth, png_const_charp sheight));
-#endif /* PNG_sCAL_SUPPORTED */
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-/* Provide the default handling for all unknown chunks or, optionally, for
- * specific unknown chunks.
- *
- * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was
- * ignored and the default was used, the per-chunk setting only had an effect on
- * write.  If you wish to have chunk-specific handling on read in code that must
- * work on earlier versions you must use a user chunk callback to specify the
- * desired handling (keep or discard.)
- *
- * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below.  The
- * parameter is interpreted as follows:
- *
- * READ:
- *    PNG_HANDLE_CHUNK_AS_DEFAULT:
- *       Known chunks: do normal libpng processing, do not keep the chunk (but
- *          see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
- *       Unknown chunks: for a specific chunk use the global default, when used
- *          as the default discard the chunk data.
- *    PNG_HANDLE_CHUNK_NEVER:
- *       Discard the chunk data.
- *    PNG_HANDLE_CHUNK_IF_SAFE:
- *       Keep the chunk data if the chunk is not critical else raise a chunk
- *       error.
- *    PNG_HANDLE_CHUNK_ALWAYS:
- *       Keep the chunk data.
- *
- * If the chunk data is saved it can be retrieved using png_get_unknown_chunks,
- * below.  Notice that specifying "AS_DEFAULT" as a global default is equivalent
- * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks
- * it simply resets the behavior to the libpng default.
- *
- * INTERACTION WTIH USER CHUNK CALLBACKS:
- * The per-chunk handling is always used when there is a png_user_chunk_ptr
- * callback and the callback returns 0; the chunk is then always stored *unless*
- * it is critical and the per-chunk setting is other than ALWAYS.  Notice that
- * the global default is *not* used in this case.  (In effect the per-chunk
- * value is incremented to at least IF_SAFE.)
- *
- * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and
- * per-chunk defaults will be honored.  If you want to preserve the current
- * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE
- * as the default - if you don't do this libpng 1.6 will issue a warning.
- *
- * If you want unhandled unknown chunks to be discarded in libpng 1.6 and
- * earlier simply return '1' (handled).
- *
- * PNG_HANDLE_AS_UNKNOWN_SUPPORTED:
- *    If this is *not* set known chunks will always be handled by libpng and
- *    will never be stored in the unknown chunk list.  Known chunks listed to
- *    png_set_keep_unknown_chunks will have no effect.  If it is set then known
- *    chunks listed with a keep other than AS_DEFAULT will *never* be processed
- *    by libpng, in addition critical chunks must either be processed by the
- *    callback or saved.
- *
- *    The IHDR and IEND chunks must not be listed.  Because this turns off the
- *    default handling for chunks that would otherwise be recognized the
- *    behavior of libpng transformations may well become incorrect!
- *
- * WRITE:
- *    When writing chunks the options only apply to the chunks specified by
- *    png_set_unknown_chunks (below), libpng will *always* write known chunks
- *    required by png_set_ calls and will always write the core critical chunks
- *    (as required for PLTE).
- *
- *    Each chunk in the png_set_unknown_chunks list is looked up in the
- *    png_set_keep_unknown_chunks list to find the keep setting, this is then
- *    interpreted as follows:
- *
- *    PNG_HANDLE_CHUNK_AS_DEFAULT:
- *       Write safe-to-copy chunks and write other chunks if the global
- *       default is set to _ALWAYS, otherwise don't write this chunk.
- *    PNG_HANDLE_CHUNK_NEVER:
- *       Do not write the chunk.
- *    PNG_HANDLE_CHUNK_IF_SAFE:
- *       Write the chunk if it is safe-to-copy, otherwise do not write it.
- *    PNG_HANDLE_CHUNK_ALWAYS:
- *       Write the chunk.
- *
- * Note that the default behavior is effectively the opposite of the read case -
- * in read unknown chunks are not stored by default, in write they are written
- * by default.  Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different
- * - on write the safe-to-copy bit is checked, on read the critical bit is
- * checked and on read if the chunk is critical an error will be raised.
- *
- * num_chunks:
- * ===========
- *    If num_chunks is positive, then the "keep" parameter specifies the manner
- *    for handling only those chunks appearing in the chunk_list array,
- *    otherwise the chunk list array is ignored.
- *
- *    If num_chunks is 0 the "keep" parameter specifies the default behavior for
- *    unknown chunks, as described above.
- *
- *    If num_chunks is negative, then the "keep" parameter specifies the manner
- *    for handling all unknown chunks plus all chunks recognized by libpng
- *    except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
- *    be processed by libpng.
- */
-PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
-    int keep, png_const_bytep chunk_list, int num_chunks));
-
-/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
- * the result is therefore true (non-zero) if special handling is required,
- * false for the default handling.
- */
-PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
-    png_const_bytep chunk_name));
-#endif
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_unknown_chunkp unknowns,
-    int num_unknowns));
-   /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added
-    * unknowns to the location currently stored in the png_struct.  This is
-    * invariably the wrong value on write.  To fix this call the following API
-    * for each chunk in the list with the correct location.  If you know your
-    * code won't be compiled on earlier versions you can rely on
-    * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing
-    * the correct thing.
-    */
-
-PNG_EXPORT(175, void, png_set_unknown_chunk_location,
-    (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location));
-
-PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_unknown_chunkpp entries));
-#endif
-
-/* Png_free_data() will turn off the "valid" flag for anything it frees.
- * If you need to turn it off for a chunk that your application has freed,
- * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
- */
-PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int mask));
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-/* The "params" pointer is currently not used and is for future expansion. */
-PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr,
-    int transforms, png_voidp params));
-PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr,
-    int transforms, png_voidp params));
-#endif
-
-PNG_EXPORT(180, png_const_charp, png_get_copyright,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(181, png_const_charp, png_get_header_ver,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(182, png_const_charp, png_get_header_version,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(183, png_const_charp, png_get_libpng_ver,
-    (png_const_structrp png_ptr));
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr,
-    png_uint_32 mng_features_permitted));
-#endif
-
-/* For use in png_set_keep_unknown, added to version 1.2.6 */
-#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
-#define PNG_HANDLE_CHUNK_NEVER        1
-#define PNG_HANDLE_CHUNK_IF_SAFE      2
-#define PNG_HANDLE_CHUNK_ALWAYS       3
-#define PNG_HANDLE_CHUNK_LAST         4
-
-/* Strip the prepended error numbers ("#nnn ") from error and warning
- * messages before passing them to the error or warning handler.
- */
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr,
-    png_uint_32 strip_mode));
-#endif
-
-/* Added in libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr,
-    png_uint_32 user_width_max, png_uint_32 user_height_max));
-PNG_EXPORT(187, png_uint_32, png_get_user_width_max,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(188, png_uint_32, png_get_user_height_max,
-    (png_const_structrp png_ptr));
-/* Added in libpng-1.4.0 */
-PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr,
-    png_uint_32 user_chunk_cache_max));
-PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max,
-    (png_const_structrp png_ptr));
-/* Added in libpng-1.4.1 */
-PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr,
-    png_alloc_size_t user_chunk_cache_max));
-PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max,
-    (png_const_structrp png_ptr));
-#endif
-
-#if defined(PNG_INCH_CONVERSIONS_SUPPORTED)
-PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-PNG_FP_EXPORT(196, float, png_get_x_offset_inches,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */
-PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-#endif
-
-PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr))
-#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */
-PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-#endif
-
-#  ifdef PNG_pHYs_SUPPORTED
-PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,
-    int *unit_type));
-#  endif /* PNG_pHYs_SUPPORTED */
-#endif  /* PNG_INCH_CONVERSIONS_SUPPORTED */
-
-/* Added in libpng-1.4.0 */
-#ifdef PNG_IO_STATE_SUPPORTED
-PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr));
-
-/* Removed from libpng 1.6; use png_get_io_chunk_type. */
-PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr),
-    PNG_DEPRECATED)
-
-PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,
-    (png_const_structrp png_ptr));
-
-/* The flags returned by png_get_io_state() are the following: */
-#  define PNG_IO_NONE        0x0000   /* no I/O at this moment */
-#  define PNG_IO_READING     0x0001   /* currently reading */
-#  define PNG_IO_WRITING     0x0002   /* currently writing */
-#  define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */
-#  define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */
-#  define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */
-#  define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */
-#  define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */
-#  define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */
-#endif /* ?PNG_IO_STATE_SUPPORTED */
-
-/* Interlace support.  The following macros are always defined so that if
- * libpng interlace handling is turned off the macros may be used to handle
- * interlaced images within the application.
- */
-#define PNG_INTERLACE_ADAM7_PASSES 7
-
-/* Two macros to return the first row and first column of the original,
- * full, image which appears in a given pass.  'pass' is in the range 0
- * to 6 and the result is in the range 0 to 7.
- */
-#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7)
-#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7)
-
-/* A macro to return the offset between pixels in the output row for a pair of
- * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that
- * follows.  Note that ROW_OFFSET is the offset from one row to the next whereas
- * COL_OFFSET is from one column to the next, within a row.
- */
-#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8)
-#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1))
-
-/* Two macros to help evaluate the number of rows or columns in each
- * pass.  This is expressed as a shift - effectively log2 of the number or
- * rows or columns in each 8x8 tile of the original image.
- */
-#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3)
-#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3)
-
-/* Hence two macros to determine the number of rows or columns in a given
- * pass of an image given its height or width.  In fact these macros may
- * return non-zero even though the sub-image is empty, because the other
- * dimension may be empty for a small image.
- */
-#define PNG_PASS_ROWS(height, pass) (((height)+(((1<<PNG_PASS_ROW_SHIFT(pass))\
-   -1)-PNG_PASS_START_ROW(pass)))>>PNG_PASS_ROW_SHIFT(pass))
-#define PNG_PASS_COLS(width, pass) (((width)+(((1<<PNG_PASS_COL_SHIFT(pass))\
-   -1)-PNG_PASS_START_COL(pass)))>>PNG_PASS_COL_SHIFT(pass))
-
-/* For the reader row callbacks (both progressive and sequential) it is
- * necessary to find the row in the output image given a row in an interlaced
- * image, so two more macros:
- */
-#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \
-   (((y_in)<<PNG_PASS_ROW_SHIFT(pass))+PNG_PASS_START_ROW(pass))
-#define PNG_COL_FROM_PASS_COL(x_in, pass) \
-   (((x_in)<<PNG_PASS_COL_SHIFT(pass))+PNG_PASS_START_COL(pass))
-
-/* Two macros which return a boolean (0 or 1) saying whether the given row
- * or column is in a particular pass.  These use a common utility macro that
- * returns a mask for a given pass - the offset 'off' selects the row or
- * column version.  The mask has the appropriate bit set for each column in
- * the tile.
- */
-#define PNG_PASS_MASK(pass,off) ( \
-   ((0x110145AF>>(((7-(off))-(pass))<<2)) & 0xF) | \
-   ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0))
-
-#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \
-   ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1)
-#define PNG_COL_IN_INTERLACE_PASS(x, pass) \
-   ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1)
-
-#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
-/* With these routines we avoid an integer divide, which will be slower on
- * most machines.  However, it does take more operations than the corresponding
- * divide method, so it may be slower on a few RISC systems.  There are two
- * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
- *
- * Note that the rounding factors are NOT supposed to be the same!  128 and
- * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
- * standard method.
- *
- * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
- */
-
- /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
-
-#  define png_composite(composite, fg, alpha, bg)         \
-     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
-           * (png_uint_16)(alpha)                         \
-           + (png_uint_16)(bg)*(png_uint_16)(255          \
-           - (png_uint_16)(alpha)) + 128);                \
-       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
-
-#  define png_composite_16(composite, fg, alpha, bg)       \
-     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg)  \
-           * (png_uint_32)(alpha)                          \
-           + (png_uint_32)(bg)*(65535                      \
-           - (png_uint_32)(alpha)) + 32768);               \
-       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
-
-#else  /* Standard method using integer division */
-
-#  define png_composite(composite, fg, alpha, bg)                          \
-     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +  \
-     (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
-     127) / 255)
-
-#  define png_composite_16(composite, fg, alpha, bg)                         \
-     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
-     (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) +         \
-     32767) / 65535)
-#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
-
-#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
-PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf));
-PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf));
-PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf));
-#endif
-
-PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr,
-    png_const_bytep buf));
-/* No png_get_int_16 -- may be added if there's a real need for it. */
-
-/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
-#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i));
-#endif
-#ifdef PNG_SAVE_INT_32_SUPPORTED
-PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i));
-#endif
-
-/* Place a 16-bit number into a buffer in PNG byte order.
- * The parameter is declared unsigned int, not png_uint_16,
- * just to avoid potential problems on pre-ANSI C compilers.
- */
-#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
-/* No png_save_int_16 -- may be added if there's a real need for it. */
-#endif
-
-#ifdef PNG_USE_READ_MACROS
-/* Inline macros to do direct reads of bytes from the input buffer.
- * The png_get_int_32() routine assumes we are using two's complement
- * format for negative values, which is almost certainly true.
- */
-#  define PNG_get_uint_32(buf) \
-     (((png_uint_32)(*(buf)) << 24) + \
-      ((png_uint_32)(*((buf) + 1)) << 16) + \
-      ((png_uint_32)(*((buf) + 2)) << 8) + \
-      ((png_uint_32)(*((buf) + 3))))
-
-   /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
-    * function) incorrectly returned a value of type png_uint_32.
-    */
-#  define PNG_get_uint_16(buf) \
-     ((png_uint_16) \
-      (((unsigned int)(*(buf)) << 8) + \
-       ((unsigned int)(*((buf) + 1)))))
-
-#  define PNG_get_int_32(buf) \
-     ((png_int_32)((*(buf) & 0x80) \
-      ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \
-      : (png_int_32)png_get_uint_32(buf)))
-
-   /* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h,
-    * but defining a macro name prefixed with PNG_PREFIX.
-    */
-#  ifndef PNG_PREFIX
-#     define png_get_uint_32(buf) PNG_get_uint_32(buf)
-#     define png_get_uint_16(buf) PNG_get_uint_16(buf)
-#     define png_get_int_32(buf)  PNG_get_int_32(buf)
-#  endif
-#else
-#  ifdef PNG_PREFIX
-      /* No macros; revert to the (redefined) function */
-#     define PNG_get_uint_32 (png_get_uint_32)
-#     define PNG_get_uint_16 (png_get_uint_16)
-#     define PNG_get_int_32  (png_get_int_32)
-#  endif
-#endif
-
-/*******************************************************************************
- *  SIMPLIFIED API
- *******************************************************************************
- *
- * Please read the documentation in libpng-manual.txt (TODO: write said
- * documentation) if you don't understand what follows.
- *
- * The simplified API hides the details of both libpng and the PNG file format
- * itself.  It allows PNG files to be read into a very limited number of
- * in-memory bitmap formats or to be written from the same formats.  If these
- * formats do not accomodate your needs then you can, and should, use the more
- * sophisticated APIs above - these support a wide variety of in-memory formats
- * and a wide variety of sophisticated transformations to those formats as well
- * as a wide variety of APIs to manipulate ancillary information.
- *
- * To read a PNG file using the simplified API:
- *
- * 1) Declare a 'png_image' structure (see below) on the stack and set the
- *    version field to PNG_IMAGE_VERSION.
- * 2) Call the appropriate png_image_begin_read... function.
- * 3) Set the png_image 'format' member to the required sample format.
- * 4) Allocate a buffer for the image and, if required, the color-map.
- * 5) Call png_image_finish_read to read the image and, if required, the
- *    color-map into your buffers.
- *
- * There are no restrictions on the format of the PNG input itself; all valid
- * color types, bit depths, and interlace methods are acceptable, and the
- * input image is transformed as necessary to the requested in-memory format
- * during the png_image_finish_read() step.  The only caveat is that if you
- * request a color-mapped image from a PNG that is full-color or makes
- * complex use of an alpha channel the transformation is extremely lossy and the
- * result may look terrible.
- *
- * To write a PNG file using the simplified API:
- *
- * 1) Declare a 'png_image' structure on the stack and memset() it to all zero.
- * 2) Initialize the members of the structure that describe the image, setting
- *    the 'format' member to the format of the image samples.
- * 3) Call the appropriate png_image_write... function with a pointer to the
- *    image and, if necessary, the color-map to write the PNG data.
- *
- * png_image is a structure that describes the in-memory format of an image
- * when it is being read or defines the in-memory format of an image that you
- * need to write:
- */
-#define PNG_IMAGE_VERSION 1
-
-typedef struct png_control *png_controlp;
-typedef struct
-{
-   png_controlp opaque;    /* Initialize to NULL, free with png_image_free */
-   png_uint_32  version;   /* Set to PNG_IMAGE_VERSION */
-   png_uint_32  width;     /* Image width in pixels (columns) */
-   png_uint_32  height;    /* Image height in pixels (rows) */
-   png_uint_32  format;    /* Image format as defined below */
-   png_uint_32  flags;     /* A bit mask containing informational flags */
-   png_uint_32  colormap_entries;
-                           /* Number of entries in the color-map */
-
-   /* In the event of an error or warning the following field will be set to a
-    * non-zero value and the 'message' field will contain a '\0' terminated
-    * string with the libpng error or warning message.  If both warnings and
-    * an error were encountered, only the error is recorded.  If there
-    * are multiple warnings, only the first one is recorded.
-    *
-    * The upper 30 bits of this value are reserved, the low two bits contain
-    * a value as follows:
-    */
-#  define PNG_IMAGE_WARNING 1
-#  define PNG_IMAGE_ERROR 2
-   /*
-    * The result is a two bit code such that a value more than 1 indicates
-    * a failure in the API just called:
-    *
-    *    0 - no warning or error
-    *    1 - warning
-    *    2 - error
-    *    3 - error preceded by warning
-    */
-#  define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1)
-
-   png_uint_32  warning_or_error;
-
-   char         message[64];
-} png_image, *png_imagep;
-
-/* The samples of the image have one to four channels whose components have
- * original values in the range 0 to 1.0:
- *
- * 1: A single gray or luminance channel (G).
- * 2: A gray/luminance channel and an alpha channel (GA).
- * 3: Three red, green, blue color channels (RGB).
- * 4: Three color channels and an alpha channel (RGBA).
- *
- * The components are encoded in one of two ways:
- *
- * a) As a small integer, value 0..255, contained in a single byte.  For the
- * alpha channel the original value is simply value/255.  For the color or
- * luminance channels the value is encoded according to the sRGB specification
- * and matches the 8-bit format expected by typical display devices.
- *
- * The color/gray channels are not scaled (pre-multiplied) by the alpha
- * channel and are suitable for passing to color management software.
- *
- * b) As a value in the range 0..65535, contained in a 2-byte integer.  All
- * channels can be converted to the original value by dividing by 65535; all
- * channels are linear.  Color channels use the RGB encoding (RGB end-points) of
- * the sRGB specification.  This encoding is identified by the
- * PNG_FORMAT_FLAG_LINEAR flag below.
- *
- * When the simplified API needs to convert between sRGB and linear colorspaces,
- * the actual sRGB transfer curve defined in the sRGB specification (see the
- * article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
- * approximation used elsewhere in libpng.
- *
- * When an alpha channel is present it is expected to denote pixel coverage
- * of the color or luminance channels and is returned as an associated alpha
- * channel: the color/gray channels are scaled (pre-multiplied) by the alpha
- * value.
- *
- * The samples are either contained directly in the image data, between 1 and 8
- * bytes per pixel according to the encoding, or are held in a color-map indexed
- * by bytes in the image data.  In the case of a color-map the color-map entries
- * are individual samples, encoded as above, and the image data has one byte per
- * pixel to select the relevant sample from the color-map.
- */
-
-/* PNG_FORMAT_*
- *
- * #defines to be used in png_image::format.  Each #define identifies a
- * particular layout of sample data and, if present, alpha values.  There are
- * separate defines for each of the two component encodings.
- *
- * A format is built up using single bit flag values.  All combinations are
- * valid.  Formats can be built up from the flag values or you can use one of
- * the predefined values below.  When testing formats always use the FORMAT_FLAG
- * macros to test for individual features - future versions of the library may
- * add new flags.
- *
- * When reading or writing color-mapped images the format should be set to the
- * format of the entries in the color-map then png_image_{read,write}_colormap
- * called to read or write the color-map and set the format correctly for the
- * image data.  Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
- *
- * NOTE: libpng can be built with particular features disabled, if you see
- * compiler errors because the definition of one of the following flags has been
- * compiled out it is because libpng does not have the required support.  It is
- * possible, however, for the libpng configuration to enable the format on just
- * read or just write; in that case you may see an error at run time.  You can
- * guard against this by checking for the definition of the appropriate
- * "_SUPPORTED" macro, one of:
- *
- *    PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
- */
-#define PNG_FORMAT_FLAG_ALPHA    0x01U /* format with an alpha channel */
-#define PNG_FORMAT_FLAG_COLOR    0x02U /* color format: otherwise grayscale */
-#define PNG_FORMAT_FLAG_LINEAR   0x04U /* 2 byte channels else 1 byte */
-#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */
-
-#ifdef PNG_FORMAT_BGR_SUPPORTED
-#  define PNG_FORMAT_FLAG_BGR    0x10U /* BGR colors, else order is RGB */
-#endif
-
-#ifdef PNG_FORMAT_AFIRST_SUPPORTED
-#  define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */
-#endif
-
-/* Commonly used formats have predefined macros.
- *
- * First the single byte (sRGB) formats:
- */
-#define PNG_FORMAT_GRAY 0
-#define PNG_FORMAT_GA   PNG_FORMAT_FLAG_ALPHA
-#define PNG_FORMAT_AG   (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
-#define PNG_FORMAT_RGB  PNG_FORMAT_FLAG_COLOR
-#define PNG_FORMAT_BGR  (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
-#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
-#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
-#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
-#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
-
-/* Then the linear 2-byte formats.  When naming these "Y" is used to
- * indicate a luminance (gray) channel.
- */
-#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
-#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
-#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
-#define PNG_FORMAT_LINEAR_RGB_ALPHA \
-   (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA)
-
-/* With color-mapped formats the image data is one byte for each pixel, the byte
- * is an index into the color-map which is formatted as above.  To obtain a
- * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
- * to one of the above definitions, or you can use one of the definitions below.
- */
-#define PNG_FORMAT_RGB_COLORMAP  (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_BGR_COLORMAP  (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP)
-
-/* PNG_IMAGE macros
- *
- * These are convenience macros to derive information from a png_image
- * structure.  The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
- * actual image sample values - either the entries in the color-map or the
- * pixels in the image.  The PNG_IMAGE_PIXEL_ macros return corresponding values
- * for the pixels and will always return 1 for color-mapped formats.  The
- * remaining macros return information about the rows in the image and the
- * complete image.
- *
- * NOTE: All the macros that take a png_image::format parameter are compile time
- * constants if the format parameter is, itself, a constant.  Therefore these
- * macros can be used in array declarations and case labels where required.
- * Similarly the macros are also pre-processor constants (sizeof is not used) so
- * they can be used in #if tests.
- *
- * First the information about the samples.
- */
-#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\
-   (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1)
-   /* Return the total number of channels in a given format: 1..4 */
-
-#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\
-   ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1)
-   /* Return the size in bytes of a single component of a pixel or color-map
-    * entry (as appropriate) in the image: 1 or 2.
-    */
-
-#define PNG_IMAGE_SAMPLE_SIZE(fmt)\
-   (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt))
-   /* This is the size of the sample data for one sample.  If the image is
-    * color-mapped it is the size of one color-map entry (and image pixels are
-    * one byte in size), otherwise it is the size of one image pixel.
-    */
-
-#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
-   (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
-   /* The maximum size of the color-map required by the format expressed in a
-    * count of components.  This can be used to compile-time allocate a
-    * color-map:
-    *
-    * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
-    *
-    * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
-    *
-    * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
-    * information from one of the png_image_begin_read_ APIs and dynamically
-    * allocate the required memory.
-    */
-
-/* Corresponding information about the pixels */
-#define PNG_IMAGE_PIXEL_(test,fmt)\
-   (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt))
-
-#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\
-   PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt)
-   /* The number of separate channels (components) in a pixel; 1 for a
-    * color-mapped image.
-    */
-
-#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
-   PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt)
-   /* The size, in bytes, of each component in a pixel; 1 for a color-mapped
-    * image.
-    */
-
-#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt)
-   /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */
-
-/* Information about the whole row, or whole image */
-#define PNG_IMAGE_ROW_STRIDE(image)\
-   (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width)
-   /* Return the total number of components in a single row of the image; this
-    * is the minimum 'row stride', the minimum count of components between each
-    * row.  For a color-mapped image this is the minimum number of bytes in a
-    * row.
-    */
-
-#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
-   (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride))
-   /* Return the size, in bytes, of an image buffer given a png_image and a row
-    * stride - the number of components to leave space for in each row.
-    */
-
-#define PNG_IMAGE_SIZE(image)\
-   PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image))
-   /* Return the size, in bytes, of the image in memory given just a png_image;
-    * the row stride is the minimum stride required for the image.
-    */
-
-#define PNG_IMAGE_COLORMAP_SIZE(image)\
-   (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries)
-   /* Return the size, in bytes, of the color-map of this image.  If the image
-    * format is not a color-map format this will return a size sufficient for
-    * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if
-    * you don't want to allocate a color-map in this case.
-    */
-
-/* PNG_IMAGE_FLAG_*
- *
- * Flags containing additional information about the image are held in the
- * 'flags' field of png_image.
- */
-#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01
-   /* This indicates the the RGB values of the in-memory bitmap do not
-    * correspond to the red, green and blue end-points defined by sRGB.
-    */
-
-#define PNG_IMAGE_FLAG_FAST 0x02
-   /* On write emphasise speed over compression; the resultant PNG file will be
-    * larger but will be produced significantly faster, particular for large
-    * images.  Do not use this option for images which will be distributed, only
-    * used it when producing intermediate files that will be read back in
-    * repeatedly.  For a typical 24-bit image the option will double the read
-    * speed at the cost of increasing the image size by 25%, however for many
-    * more compressible images the PNG file can be 10 times larger with only a
-    * slight speed gain.
-    */
-
-#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04
-   /* On read if the image is a 16-bit per component image and there is no gAMA
-    * or sRGB chunk assume that the components are sRGB encoded.  Notice that
-    * images output by the simplified API always have gamma information; setting
-    * this flag only affects the interpretation of 16-bit images from an
-    * external source.  It is recommended that the application expose this flag
-    * to the user; the user can normally easily recognize the difference between
-    * linear and sRGB encoding.  This flag has no effect on write - the data
-    * passed to the write APIs must have the correct encoding (as defined
-    * above.)
-    *
-    * If the flag is not set (the default) input 16-bit per component data is
-    * assumed to be linear.
-    *
-    * NOTE: the flag can only be set after the png_image_begin_read_ call,
-    * because that call initializes the 'flags' field.
-    */
-
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-/* READ APIs
- * ---------
- *
- * The png_image passed to the read APIs must have been initialized by setting
- * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.)
- */
-#ifdef PNG_STDIO_SUPPORTED
-PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image,
-   const char *file_name));
-   /* The named file is opened for read and the image header is filled in
-    * from the PNG header in the file.
-    */
-
-PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image,
-   FILE* file));
-   /* The PNG header is read from the stdio FILE object. */
-#endif /* PNG_STDIO_SUPPORTED */
-
-PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image,
-   png_const_voidp memory, png_size_t size));
-   /* The PNG header is read from the given memory buffer. */
-
-PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image,
-   png_const_colorp background, void *buffer, png_int_32 row_stride,
-   void *colormap));
-   /* Finish reading the image into the supplied buffer and clean up the
-    * png_image structure.
-    *
-    * row_stride is the step, in byte or 2-byte units as appropriate,
-    * between adjacent rows.  A positive stride indicates that the top-most row
-    * is first in the buffer - the normal top-down arrangement.  A negative
-    * stride indicates that the bottom-most row is first in the buffer.
-    *
-    * background need only be supplied if an alpha channel must be removed from
-    * a png_byte format and the removal is to be done by compositing on a solid
-    * color; otherwise it may be NULL and any composition will be done directly
-    * onto the buffer.  The value is an sRGB color to use for the background,
-    * for grayscale output the green channel is used.
-    *
-    * background must be supplied when an alpha channel must be removed from a
-    * single byte color-mapped output format, in other words if:
-    *
-    * 1) The original format from png_image_begin_read_from_* had
-    *    PNG_FORMAT_FLAG_ALPHA set.
-    * 2) The format set by the application does not.
-    * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and
-    *    PNG_FORMAT_FLAG_LINEAR *not* set.
-    *
-    * For linear output removing the alpha channel is always done by compositing
-    * on black and background is ignored.
-    *
-    * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set.  It must
-    * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE.
-    * image->colormap_entries will be updated to the actual number of entries
-    * written to the colormap; this may be less than the original value.
-    */
-
-PNG_EXPORT(238, void, png_image_free, (png_imagep image));
-   /* Free any data allocated by libpng in image->opaque, setting the pointer to
-    * NULL.  May be called at any time after the structure is initialized.
-    */
-#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
-
-#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
-/* WRITE APIS
- * ----------
- * For write you must initialize a png_image structure to describe the image to
- * be written.  To do this use memset to set the whole structure to 0 then
- * initialize fields describing your image.
- *
- * version: must be set to PNG_IMAGE_VERSION
- * opaque: must be initialized to NULL
- * width: image width in pixels
- * height: image height in rows
- * format: the format of the data (image and color-map) you wish to write
- * flags: set to 0 unless one of the defined flags applies; set
- *    PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB
- *    values do not correspond to the colors in sRGB.
- * colormap_entries: set to the number of entries in the color-map (0 to 256)
- */
-PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image,
-   const char *file, int convert_to_8bit, const void *buffer,
-   png_int_32 row_stride, const void *colormap));
-   /* Write the image to the named file. */
-
-PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
-   int convert_to_8_bit, const void *buffer, png_int_32 row_stride,
-   const void *colormap));
-   /* Write the image to the given (FILE*). */
-
-/* With both write APIs if image is in one of the linear formats with 16-bit
- * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG
- * gamma encoded according to the sRGB specification, otherwise a 16-bit linear
- * encoded PNG file is written.
- *
- * With color-mapped data formats the colormap parameter point to a color-map
- * with at least image->colormap_entries encoded in the specified format.  If
- * the format is linear the written PNG color-map will be converted to sRGB
- * regardless of the convert_to_8_bit flag.
- *
- * With all APIs row_stride is handled as in the read APIs - it is the spacing
- * from one row to the next in component sized units (1 or 2 bytes) and if
- * negative indicates a bottom-up row layout in the buffer.
- *
- * Note that the write API does not support interlacing or sub-8-bit pixels.
- */
-#endif /* PNG_SIMPLIFIED_WRITE_SUPPORTED */
-/*******************************************************************************
- *  END OF SIMPLIFIED API
- ******************************************************************************/
-
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-PNG_EXPORT(242, void, png_set_check_for_invalid_index,
-    (png_structrp png_ptr, int allowed));
-#  ifdef PNG_GET_PALETTE_MAX_SUPPORTED
-PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
-    png_const_infop info_ptr));
-#  endif
-#endif /* CHECK_FOR_INVALID_INDEX */
-
-/*******************************************************************************
- *  IMPLEMENTATION OPTIONS
- *******************************************************************************
- *
- * Support for arbitrary implementation-specific optimizations.  The API allows
- * particular options to be turned on or off.  'Option' is the number of the
- * option and 'onoff' is 0 (off) or non-0 (on).  The value returned is given
- * by the PNG_OPTION_ defines below.
- *
- * HARDWARE: normally hardware capabilites, such as the Intel SSE instructions,
- *           are detected at run time, however sometimes it may be impossible
- *           to do this in user mode, in which case it is necessary to discover
- *           the capabilities in an OS specific way.  Such capabilities are
- *           listed here when libpng has support for them and must be turned
- *           ON by the application if present.
- *
- * SOFTWARE: sometimes software optimizations actually result in performance
- *           decrease on some architectures or systems, or with some sets of
- *           PNG images.  'Software' options allow such optimizations to be
- *           selected at run time.
- */
-#ifdef PNG_SET_OPTION_SUPPORTED
-#ifdef PNG_ARM_NEON_API_SUPPORTED
-#  define PNG_ARM_NEON   0 /* HARDWARE: ARM Neon SIMD instructions supported */
-#endif
-#define PNG_OPTION_NEXT  2 /* Next option - numbers must be even */
-
-/* Return values: NOTE: there are four values and 'off' is *not* zero */
-#define PNG_OPTION_UNSET   0 /* Unset - defaults to off */
-#define PNG_OPTION_INVALID 1 /* Option number out of range */
-#define PNG_OPTION_OFF     2
-#define PNG_OPTION_ON      3
-
-PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option,
-   int onoff));
-#endif
-
-/*******************************************************************************
- *  END OF HARDWARE OPTIONS
- ******************************************************************************/
-
-/* Maintainer: Put new public prototypes here ^, in libpng.3, and project
- * defs, scripts/pnglibconf.h, and scripts/pnglibconf.h.prebuilt
- */
-
-/* The last ordinal number (this is the *last* one already used; the next
- * one to use is one more than this.)  Maintainer, remember to add an entry to
- * scripts/symbols.def as well.
- */
-#ifdef PNG_EXPORT_LAST_ORDINAL
-  PNG_EXPORT_LAST_ORDINAL(244);
-#endif
-
-#endif /* PNG_VERSION_INFO_ONLY */
-/* Do not put anything past this line */
-#endif /* PNG_H */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngconf.h b/modules/juce_graphics/image_formats/pnglib/pngconf.h
deleted file mode 100644
index b3ceeae..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngconf.h
+++ /dev/null
@@ -1,616 +0,0 @@
-
-/* pngconf.h - machine configurable file for libpng
- *
- * libpng version 1.6.1 - March 28, 2013
- *
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- */
-
-/* Any machine specific code is near the front of this file, so if you
- * are configuring libpng for a machine, you may want to read the section
- * starting here down to where it starts to typedef png_color, png_text,
- * and png_info.
- */
-
-#ifndef PNGCONF_H
-#define PNGCONF_H
-
-/* To do: Do all of this in scripts/pnglibconf.dfa */
-#ifdef PNG_SAFE_LIMITS_SUPPORTED
-#  ifdef PNG_USER_WIDTH_MAX
-#    undef PNG_USER_WIDTH_MAX
-#    define PNG_USER_WIDTH_MAX 1000000L
-#  endif
-#  ifdef PNG_USER_HEIGHT_MAX
-#    undef PNG_USER_HEIGHT_MAX
-#    define PNG_USER_HEIGHT_MAX 1000000L
-#  endif
-#  ifdef PNG_USER_CHUNK_MALLOC_MAX
-#    undef PNG_USER_CHUNK_MALLOC_MAX
-#    define PNG_USER_CHUNK_MALLOC_MAX 4000000L
-#  endif
-#  ifdef PNG_USER_CHUNK_CACHE_MAX
-#    undef PNG_USER_CHUNK_CACHE_MAX
-#    define PNG_USER_CHUNK_CACHE_MAX 128
-#  endif
-#endif
-
-#ifndef PNG_BUILDING_SYMBOL_TABLE /* else includes may cause problems */
-
-/* From libpng 1.6.0 libpng requires an ANSI X3.159-1989 ("ISOC90") compliant C
- * compiler for correct compilation.  The following header files are required by
- * the standard.  If your compiler doesn't provide these header files, or they
- * do not match the standard, you will need to provide/improve them.
- */
-#include <limits.h>
-#include <stddef.h>
-
-/* Library header files.  These header files are all defined by ISOC90; libpng
- * expects conformant implementations, however, an ISOC90 conformant system need
- * not provide these header files if the functionality cannot be implemented.
- * In this case it will be necessary to disable the relevant parts of libpng in
- * the build of pnglibconf.h.
- *
- * Prior to 1.6.0 string.h was included here; the API changes in 1.6.0 to not
- * include this unnecessary header file.
- */
-
-#ifdef PNG_STDIO_SUPPORTED
-   /* Required for the definition of FILE: */
-#  include <stdio.h>
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-   /* Required for the definition of jmp_buf and the declaration of longjmp: */
-#  include <setjmp.h>
-#endif
-
-#ifdef PNG_CONVERT_tIME_SUPPORTED
-   /* Required for struct tm: */
-#  include <time.h>
-#endif
-
-#endif /* PNG_BUILDING_SYMBOL_TABLE */
-
-/* Prior to 1.6.0 it was possible to turn off 'const' in declarations using
- * PNG_NO_CONST; this is no longer supported except for data declarations which
- * apparently still cause problems in 2011 on some compilers.
- */
-#define PNG_CONST const /* backward compatibility only */
-
-/* This controls optimization of the reading of 16 and 32 bit values
- * from PNG files.  It can be set on a per-app-file basis - it
- * just changes whether a macro is used when the function is called.
- * The library builder sets the default; if read functions are not
- * built into the library the macro implementation is forced on.
- */
-#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED
-#  define PNG_USE_READ_MACROS
-#endif
-#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
-#  if PNG_DEFAULT_READ_MACROS
-#    define PNG_USE_READ_MACROS
-#  endif
-#endif
-
-/* COMPILER SPECIFIC OPTIONS.
- *
- * These options are provided so that a variety of difficult compilers
- * can be used.  Some are fixed at build time (e.g. PNG_API_RULE
- * below) but still have compiler specific implementations, others
- * may be changed on a per-file basis when compiling against libpng.
- */
-
-/* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect
- * against legacy (pre ISOC90) compilers that did not understand function
- * prototypes.  It is not required for modern C compilers.
- */
-#ifndef PNGARG
-#  define PNGARG(arglist) arglist
-#endif
-
-/* Function calling conventions.
- * =============================
- * Normally it is not necessary to specify to the compiler how to call
- * a function - it just does it - however on x86 systems derived from
- * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems
- * and some others) there are multiple ways to call a function and the
- * default can be changed on the compiler command line.  For this reason
- * libpng specifies the calling convention of every exported function and
- * every function called via a user supplied function pointer.  This is
- * done in this file by defining the following macros:
- *
- * PNGAPI    Calling convention for exported functions.
- * PNGCBAPI  Calling convention for user provided (callback) functions.
- * PNGCAPI   Calling convention used by the ANSI-C library (required
- *           for longjmp callbacks and sometimes used internally to
- *           specify the calling convention for zlib).
- *
- * These macros should never be overridden.  If it is necessary to
- * change calling convention in a private build this can be done
- * by setting PNG_API_RULE (which defaults to 0) to one of the values
- * below to select the correct 'API' variants.
- *
- * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout.
- *                This is correct in every known environment.
- * PNG_API_RULE=1 Use the operating system convention for PNGAPI and
- *                the 'C' calling convention (from PNGCAPI) for
- *                callbacks (PNGCBAPI).  This is no longer required
- *                in any known environment - if it has to be used
- *                please post an explanation of the problem to the
- *                libpng mailing list.
- *
- * These cases only differ if the operating system does not use the C
- * calling convention, at present this just means the above cases
- * (x86 DOS/Windows sytems) and, even then, this does not apply to
- * Cygwin running on those systems.
- *
- * Note that the value must be defined in pnglibconf.h so that what
- * the application uses to call the library matches the conventions
- * set when building the library.
- */
-
-/* Symbol export
- * =============
- * When building a shared library it is almost always necessary to tell
- * the compiler which symbols to export.  The png.h macro 'PNG_EXPORT'
- * is used to mark the symbols.  On some systems these symbols can be
- * extracted at link time and need no special processing by the compiler,
- * on other systems the symbols are flagged by the compiler and just
- * the declaration requires a special tag applied (unfortunately) in a
- * compiler dependent way.  Some systems can do either.
- *
- * A small number of older systems also require a symbol from a DLL to
- * be flagged to the program that calls it.  This is a problem because
- * we do not know in the header file included by application code that
- * the symbol will come from a shared library, as opposed to a statically
- * linked one.  For this reason the application must tell us by setting
- * the magic flag PNG_USE_DLL to turn on the special processing before
- * it includes png.h.
- *
- * Four additional macros are used to make this happen:
- *
- * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from
- *            the build or imported if PNG_USE_DLL is set - compiler
- *            and system specific.
- *
- * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to
- *                       'type', compiler specific.
- *
- * PNG_DLL_EXPORT Set to the magic to use during a libpng build to
- *                make a symbol exported from the DLL.  Not used in the
- *                public header files; see pngpriv.h for how it is used
- *                in the libpng build.
- *
- * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come
- *                from a DLL - used to define PNG_IMPEXP when
- *                PNG_USE_DLL is set.
- */
-
-/* System specific discovery.
- * ==========================
- * This code is used at build time to find PNG_IMPEXP, the API settings
- * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL
- * import processing is possible.  On Windows systems it also sets
- * compiler-specific macros to the values required to change the calling
- * conventions of the various functions.
- */
-#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\
-    defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-  /* Windows system (DOS doesn't support DLLs).  Includes builds under Cygwin or
-   * MinGW on any architecture currently supported by Windows.  Also includes
-   * Watcom builds but these need special treatment because they are not
-   * compatible with GCC or Visual C because of different calling conventions.
-   */
-#  if PNG_API_RULE == 2
-    /* If this line results in an error, either because __watcall is not
-     * understood or because of a redefine just below you cannot use *this*
-     * build of the library with the compiler you are using.  *This* build was
-     * build using Watcom and applications must also be built using Watcom!
-     */
-#    define PNGCAPI __watcall
-#  endif
-
-#  if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800))
-#    define PNGCAPI __cdecl
-#    if PNG_API_RULE == 1
-       /* If this line results in an error __stdcall is not understood and
-        * PNG_API_RULE should not have been set to '1'.
-        */
-#      define PNGAPI __stdcall
-#    endif
-#  else
-    /* An older compiler, or one not detected (erroneously) above,
-     * if necessary override on the command line to get the correct
-     * variants for the compiler.
-     */
-#    ifndef PNGCAPI
-#      define PNGCAPI _cdecl
-#    endif
-#    if PNG_API_RULE == 1 && !defined(PNGAPI)
-#      define PNGAPI _stdcall
-#    endif
-#  endif /* compiler/api */
-  /* NOTE: PNGCBAPI always defaults to PNGCAPI. */
-
-#  if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)
-#     error "PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed"
-#  endif
-
-#  if (defined(_MSC_VER) && _MSC_VER < 800) ||\
-      (defined(__BORLANDC__) && __BORLANDC__ < 0x500)
-    /* older Borland and MSC
-     * compilers used '__export' and required this to be after
-     * the type.
-     */
-#    ifndef PNG_EXPORT_TYPE
-#      define PNG_EXPORT_TYPE(type) type PNG_IMPEXP
-#    endif
-#    define PNG_DLL_EXPORT __export
-#  else /* newer compiler */
-#    define PNG_DLL_EXPORT __declspec(dllexport)
-#    ifndef PNG_DLL_IMPORT
-#      define PNG_DLL_IMPORT __declspec(dllimport)
-#    endif
-#  endif /* compiler */
-
-#else /* !Windows */
-#  if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
-#    define PNGAPI _System
-#  else /* !Windows/x86 && !OS/2 */
-    /* Use the defaults, or define PNG*API on the command line (but
-     * this will have to be done for every compile!)
-     */
-#  endif /* other system, !OS/2 */
-#endif /* !Windows/x86 */
-
-/* Now do all the defaulting . */
-#ifndef PNGCAPI
-#  define PNGCAPI
-#endif
-#ifndef PNGCBAPI
-#  define PNGCBAPI PNGCAPI
-#endif
-#ifndef PNGAPI
-#  define PNGAPI PNGCAPI
-#endif
-
-/* PNG_IMPEXP may be set on the compilation system command line or (if not set)
- * then in an internal header file when building the library, otherwise (when
- * using the library) it is set here.
- */
-#ifndef PNG_IMPEXP
-#  if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT)
-     /* This forces use of a DLL, disallowing static linking */
-#    define PNG_IMPEXP PNG_DLL_IMPORT
-#  endif
-
-#  ifndef PNG_IMPEXP
-#    define PNG_IMPEXP
-#  endif
-#endif
-
-/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat
- * 'attributes' as a storage class - the attributes go at the start of the
- * function definition, and attributes are always appended regardless of the
- * compiler.  This considerably simplifies these macros but may cause problems
- * if any compilers both need function attributes and fail to handle them as
- * a storage class (this is unlikely.)
- */
-#ifndef PNG_FUNCTION
-#  define PNG_FUNCTION(type, name, args, attributes) attributes type name args
-#endif
-
-#ifndef PNG_EXPORT_TYPE
-#  define PNG_EXPORT_TYPE(type) PNG_IMPEXP type
-#endif
-
-   /* The ordinal value is only relevant when preprocessing png.h for symbol
-    * table entries, so we discard it here.  See the .dfn files in the
-    * scripts directory.
-    */
-#ifndef PNG_EXPORTA
-
-#  define PNG_EXPORTA(ordinal, type, name, args, attributes)\
-      PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \
-        extern attributes)
-#endif
-
-/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,
- * so make something non-empty to satisfy the requirement:
- */
-#define PNG_EMPTY /*empty list*/
-
-#define PNG_EXPORT(ordinal, type, name, args)\
-   PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)
-
-/* Use PNG_REMOVED to comment out a removed interface. */
-#ifndef PNG_REMOVED
-#  define PNG_REMOVED(ordinal, type, name, args, attributes)
-#endif
-
-#ifndef PNG_CALLBACK
-#  define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args)
-#endif
-
-/* Support for compiler specific function attributes.  These are used
- * so that where compiler support is available incorrect use of API
- * functions in png.h will generate compiler warnings.
- *
- * Added at libpng-1.2.41.
- */
-
-#ifndef PNG_NO_PEDANTIC_WARNINGS
-#  ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED
-#    define PNG_PEDANTIC_WARNINGS_SUPPORTED
-#  endif
-#endif
-
-#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED
-  /* Support for compiler specific function attributes.  These are used
-   * so that where compiler support is available, incorrect use of API
-   * functions in png.h will generate compiler warnings.  Added at libpng
-   * version 1.2.41.  Disabling these removes the warnings but may also produce
-   * less efficient code.
-   */
-#  if defined(__GNUC__)
-#    ifndef PNG_USE_RESULT
-#      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
-#    endif
-#    ifndef PNG_NORETURN
-#      define PNG_NORETURN   __attribute__((__noreturn__))
-#    endif
-#    if __GNUC__ >= 3
-#      ifndef PNG_ALLOCATED
-#        define PNG_ALLOCATED  __attribute__((__malloc__))
-#      endif
-#      ifndef PNG_DEPRECATED
-#        define PNG_DEPRECATED __attribute__((__deprecated__))
-#      endif
-#      ifndef PNG_PRIVATE
-#        if 0 /* Doesn't work so we use deprecated instead*/
-#          define PNG_PRIVATE \
-            __attribute__((warning("This function is not exported by libpng.")))
-#        else
-#          define PNG_PRIVATE \
-            __attribute__((__deprecated__))
-#        endif
-#      endif
-#      if ((__GNUC__ != 3) || !defined(__GNUC_MINOR__) || (__GNUC_MINOR__ >= 1))
-#        ifndef PNG_RESTRICT
-#          define PNG_RESTRICT __restrict
-#        endif
-#      endif /*  __GNUC__ == 3.0 */
-#    endif /*  __GNUC__ >= 3 */
-
-#  elif defined(_MSC_VER)  && (_MSC_VER >= 1300)
-#    ifndef PNG_USE_RESULT
-#      define PNG_USE_RESULT /* not supported */
-#    endif
-#    ifndef PNG_NORETURN
-#      define PNG_NORETURN   __declspec(noreturn)
-#    endif
-#    ifndef PNG_ALLOCATED
-#      if (_MSC_VER >= 1400)
-#        define PNG_ALLOCATED __declspec(restrict)
-#      endif
-#    endif
-#    ifndef PNG_DEPRECATED
-#      define PNG_DEPRECATED __declspec(deprecated)
-#    endif
-#    ifndef PNG_PRIVATE
-#      define PNG_PRIVATE __declspec(deprecated)
-#    endif
-#    ifndef PNG_RESTRICT
-#      if (_MSC_VER >= 1400)
-#        define PNG_RESTRICT __restrict
-#      endif
-#    endif
-
-#  elif defined(__WATCOMC__)
-#    ifndef PNG_RESTRICT
-#      define PNG_RESTRICT __restrict
-#    endif
-#  endif /* _MSC_VER */
-#endif /* PNG_PEDANTIC_WARNINGS */
-
-#ifndef PNG_DEPRECATED
-#  define PNG_DEPRECATED  /* Use of this function is deprecated */
-#endif
-#ifndef PNG_USE_RESULT
-#  define PNG_USE_RESULT  /* The result of this function must be checked */
-#endif
-#ifndef PNG_NORETURN
-#  define PNG_NORETURN    /* This function does not return */
-#endif
-#ifndef PNG_ALLOCATED
-#  define PNG_ALLOCATED   /* The result of the function is new memory */
-#endif
-#ifndef PNG_PRIVATE
-#  define PNG_PRIVATE     /* This is a private libpng function */
-#endif
-#ifndef PNG_RESTRICT
-#  define PNG_RESTRICT    /* The C99 "restrict" feature */
-#endif
-#ifndef PNG_FP_EXPORT     /* A floating point API. */
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-#     define PNG_FP_EXPORT(ordinal, type, name, args)\
-         PNG_EXPORT(ordinal, type, name, args);
-#  else                   /* No floating point APIs */
-#     define PNG_FP_EXPORT(ordinal, type, name, args)
-#  endif
-#endif
-#ifndef PNG_FIXED_EXPORT  /* A fixed point API. */
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-#     define PNG_FIXED_EXPORT(ordinal, type, name, args)\
-         PNG_EXPORT(ordinal, type, name, args);
-#  else                   /* No fixed point APIs */
-#     define PNG_FIXED_EXPORT(ordinal, type, name, args)
-#  endif
-#endif
-
-#ifndef PNG_BUILDING_SYMBOL_TABLE
-/* Some typedefs to get us started.  These should be safe on most of the common
- * platforms.
- *
- * png_uint_32 and png_int_32 may, currently, be larger than required to hold a
- * 32-bit value however this is not normally advisable.
- *
- * png_uint_16 and png_int_16 should always be two bytes in size - this is
- * verified at library build time.
- *
- * png_byte must always be one byte in size.
- *
- * The checks below use constants from limits.h, as defined by the ISOC90
- * standard.
- */
-#if CHAR_BIT == 8 && UCHAR_MAX == 255
-   typedef unsigned char png_byte;
-#else
-#  error "libpng requires 8 bit bytes"
-#endif
-
-#if INT_MIN == -32768 && INT_MAX == 32767
-   typedef int png_int_16;
-#elif SHRT_MIN == -32768 && SHRT_MAX == 32767
-   typedef short png_int_16;
-#else
-#  error "libpng requires a signed 16 bit type"
-#endif
-
-#if UINT_MAX == 65535
-   typedef unsigned int png_uint_16;
-#elif USHRT_MAX == 65535
-   typedef unsigned short png_uint_16;
-#else
-#  error "libpng requires an unsigned 16 bit type"
-#endif
-
-#if INT_MIN < -2147483646 && INT_MAX > 2147483646
-   typedef int png_int_32;
-#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
-   typedef long int png_int_32;
-#else
-#  error "libpng requires a signed 32 bit (or more) type"
-#endif
-
-#if UINT_MAX > 4294967294
-   typedef unsigned int png_uint_32;
-#elif ULONG_MAX > 4294967294
-   typedef unsigned long int png_uint_32;
-#else
-#  error "libpng requires an unsigned 32 bit (or more) type"
-#endif
-
-/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
- * requires an ISOC90 compiler and relies on consistent behavior of sizeof.
- */
-typedef size_t png_size_t;
-typedef ptrdiff_t png_ptrdiff_t;
-
-/* libpng needs to know the maximum value of 'size_t' and this controls the
- * definition of png_alloc_size_t, below.  This maximum value of size_t limits
- * but does not control the maximum allocations the library makes - there is
- * direct application control of this through png_set_user_limits().
- */
-#ifndef PNG_SMALL_SIZE_T
-   /* Compiler specific tests for systems where size_t is known to be less than
-    * 32 bits (some of these systems may no longer work because of the lack of
-    * 'far' support; see above.)
-    */
-#  if (defined(__TURBOC__) && !defined(__FLAT__)) ||\
-   (defined(_MSC_VER) && defined(MAXSEG_64K))
-#     define PNG_SMALL_SIZE_T
-#  endif
-#endif
-
-/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, and no
- * smaller than png_uint_32.  Casts from png_size_t or png_uint_32 to
- * png_alloc_size_t are not necessary; in fact, it is recommended not to use
- * them at all so that the compiler can complain when something turns out to be
- * problematic.
- *
- * Casts in the other direction (from png_alloc_size_t to png_size_t or
- * png_uint_32) should be explicitly applied; however, we do not expect to
- * encounter practical situations that require such conversions.
- *
- * PNG_SMALL_SIZE_T must be defined if the maximum value of size_t is less than
- * 4294967295 - i.e. less than the maximum value of png_uint_32.
- */
-#ifdef PNG_SMALL_SIZE_T
-   typedef png_uint_32 png_alloc_size_t;
-#else
-   typedef png_size_t png_alloc_size_t;
-#endif
-
-/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler
- * implementations of Intel CPU specific support of user-mode segmented address
- * spaces, where 16-bit pointers address more than 65536 bytes of memory using
- * separate 'segment' registers.  The implementation requires two different
- * types of pointer (only one of which includes the segment value.)
- *
- * If required this support is available in version 1.2 of libpng and may be
- * available in versions through 1.5, although the correctness of the code has
- * not been verified recently.
- */
-
-/* Typedef for floating-point numbers that are converted to fixed-point with a
- * multiple of 100,000, e.g., gamma
- */
-typedef png_int_32 png_fixed_point;
-
-/* Add typedefs for pointers */
-typedef void                  * png_voidp;
-typedef const void            * png_const_voidp;
-typedef png_byte              * png_bytep;
-typedef const png_byte        * png_const_bytep;
-typedef png_uint_32           * png_uint_32p;
-typedef const png_uint_32     * png_const_uint_32p;
-typedef png_int_32            * png_int_32p;
-typedef const png_int_32      * png_const_int_32p;
-typedef png_uint_16           * png_uint_16p;
-typedef const png_uint_16     * png_const_uint_16p;
-typedef png_int_16            * png_int_16p;
-typedef const png_int_16      * png_const_int_16p;
-typedef char                  * png_charp;
-typedef const char            * png_const_charp;
-typedef png_fixed_point       * png_fixed_point_p;
-typedef const png_fixed_point * png_const_fixed_point_p;
-typedef png_size_t            * png_size_tp;
-typedef const png_size_t      * png_const_size_tp;
-
-#ifdef PNG_STDIO_SUPPORTED
-typedef FILE            * png_FILE_p;
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-typedef double       * png_doublep;
-typedef const double * png_const_doublep;
-#endif
-
-/* Pointers to pointers; i.e. arrays */
-typedef png_byte        * * png_bytepp;
-typedef png_uint_32     * * png_uint_32pp;
-typedef png_int_32      * * png_int_32pp;
-typedef png_uint_16     * * png_uint_16pp;
-typedef png_int_16      * * png_int_16pp;
-typedef const char      * * png_const_charpp;
-typedef char            * * png_charpp;
-typedef png_fixed_point * * png_fixed_point_pp;
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-typedef double          * * png_doublepp;
-#endif
-
-/* Pointers to pointers to pointers; i.e., pointer to array */
-typedef char            * * * png_charppp;
-
-#endif /* PNG_BUILDING_SYMBOL_TABLE */
-
-#endif /* PNGCONF_H */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngerror.c b/modules/juce_graphics/image_formats/pnglib/pngerror.c
deleted file mode 100644
index f40cc83..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngerror.c
+++ /dev/null
@@ -1,932 +0,0 @@
-
-/* pngerror.c - stub functions for i/o and memory allocation
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all error handling.  Users who
- * need special error handling are expected to write replacement functions
- * and use png_set_error_fn() to use those functions.  See the instructions
- * at each function.
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-static PNG_FUNCTION(void, png_default_error,PNGARG((png_const_structrp png_ptr,
-    png_const_charp error_message)),PNG_NORETURN);
-
-#ifdef PNG_WARNINGS_SUPPORTED
-static void /* PRIVATE */
-png_default_warning PNGARG((png_const_structrp png_ptr,
-   png_const_charp warning_message));
-#endif /* PNG_WARNINGS_SUPPORTED */
-
-/* This function is called whenever there is a fatal error.  This function
- * should not be changed.  If there is a need to handle errors differently,
- * you should supply a replacement error function and use png_set_error_fn()
- * to replace the error function at run-time.
- */
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-PNG_FUNCTION(void,PNGAPI
-png_error,(png_const_structrp png_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   char msg[16];
-   if (png_ptr != NULL)
-   {
-      if (png_ptr->flags&
-         (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
-      {
-         if (*error_message == PNG_LITERAL_SHARP)
-         {
-            /* Strip "#nnnn " from beginning of error message. */
-            int offset;
-            for (offset = 1; offset<15; offset++)
-               if (error_message[offset] == ' ')
-                  break;
-
-            if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
-            {
-               int i;
-               for (i = 0; i < offset - 1; i++)
-                  msg[i] = error_message[i + 1];
-               msg[i - 1] = '\0';
-               error_message = msg;
-            }
-
-            else
-               error_message += offset;
-      }
-
-      else
-      {
-         if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT)
-         {
-            msg[0] = '0';
-            msg[1] = '\0';
-            error_message = msg;
-         }
-       }
-     }
-   }
-#endif
-   if (png_ptr != NULL && png_ptr->error_fn != NULL)
-      (*(png_ptr->error_fn))(png_constcast(png_structrp,png_ptr),
-          error_message);
-
-   /* If the custom handler doesn't exist, or if it returns,
-      use the default handler, which will not return. */
-   png_default_error(png_ptr, error_message);
-}
-#else
-PNG_FUNCTION(void,PNGAPI
-png_err,(png_const_structrp png_ptr),PNG_NORETURN)
-{
-   /* Prior to 1.5.2 the error_fn received a NULL pointer, expressed
-    * erroneously as '\0', instead of the empty string "".  This was
-    * apparently an error, introduced in libpng-1.2.20, and png_default_error
-    * will crash in this case.
-    */
-   if (png_ptr != NULL && png_ptr->error_fn != NULL)
-      (*(png_ptr->error_fn))(png_constcast(png_structrp,png_ptr), "");
-
-   /* If the custom handler doesn't exist, or if it returns,
-      use the default handler, which will not return. */
-   png_default_error(png_ptr, "");
-}
-#endif /* PNG_ERROR_TEXT_SUPPORTED */
-
-/* Utility to safely appends strings to a buffer.  This never errors out so
- * error checking is not required in the caller.
- */
-size_t
-png_safecat(png_charp buffer, size_t bufsize, size_t pos,
-   png_const_charp string)
-{
-   if (buffer != NULL && pos < bufsize)
-   {
-      if (string != NULL)
-         while (*string != '\0' && pos < bufsize-1)
-           buffer[pos++] = *string++;
-
-      buffer[pos] = '\0';
-   }
-
-   return pos;
-}
-
-#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_TIME_RFC1123_SUPPORTED)
-/* Utility to dump an unsigned value into a buffer, given a start pointer and
- * and end pointer (which should point just *beyond* the end of the buffer!)
- * Returns the pointer to the start of the formatted string.
- */
-png_charp
-png_format_number(png_const_charp start, png_charp end, int format,
-   png_alloc_size_t number)
-{
-   int count = 0;    /* number of digits output */
-   int mincount = 1; /* minimum number required */
-   int output = 0;   /* digit output (for the fixed point format) */
-
-   *--end = '\0';
-
-   /* This is written so that the loop always runs at least once, even with
-    * number zero.
-    */
-   while (end > start && (number != 0 || count < mincount))
-   {
-
-      static const char digits[] = "0123456789ABCDEF";
-
-      switch (format)
-      {
-         case PNG_NUMBER_FORMAT_fixed:
-            /* Needs five digits (the fraction) */
-            mincount = 5;
-            if (output || number % 10 != 0)
-            {
-               *--end = digits[number % 10];
-               output = 1;
-            }
-            number /= 10;
-            break;
-
-         case PNG_NUMBER_FORMAT_02u:
-            /* Expects at least 2 digits. */
-            mincount = 2;
-            /* FALL THROUGH */
-
-         case PNG_NUMBER_FORMAT_u:
-            *--end = digits[number % 10];
-            number /= 10;
-            break;
-
-         case PNG_NUMBER_FORMAT_02x:
-            /* This format expects at least two digits */
-            mincount = 2;
-            /* FALL THROUGH */
-
-         case PNG_NUMBER_FORMAT_x:
-            *--end = digits[number & 0xf];
-            number >>= 4;
-            break;
-
-         default: /* an error */
-            number = 0;
-            break;
-      }
-
-      /* Keep track of the number of digits added */
-      ++count;
-
-      /* Float a fixed number here: */
-      if (format == PNG_NUMBER_FORMAT_fixed) if (count == 5) if (end > start)
-      {
-         /* End of the fraction, but maybe nothing was output?  In that case
-          * drop the decimal point.  If the number is a true zero handle that
-          * here.
-          */
-         if (output)
-            *--end = '.';
-         else if (number == 0) /* and !output */
-            *--end = '0';
-      }
-   }
-
-   return end;
-}
-#endif
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* This function is called whenever there is a non-fatal error.  This function
- * should not be changed.  If there is a need to handle warnings differently,
- * you should supply a replacement warning function and use
- * png_set_error_fn() to replace the warning function at run-time.
- */
-void PNGAPI
-png_warning(png_const_structrp png_ptr, png_const_charp warning_message)
-{
-   int offset = 0;
-   if (png_ptr != NULL)
-   {
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   if (png_ptr->flags&
-       (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))
-#endif
-      {
-         if (*warning_message == PNG_LITERAL_SHARP)
-         {
-            for (offset = 1; offset < 15; offset++)
-               if (warning_message[offset] == ' ')
-                  break;
-         }
-      }
-   }
-   if (png_ptr != NULL && png_ptr->warning_fn != NULL)
-      (*(png_ptr->warning_fn))(png_constcast(png_structrp,png_ptr),
-         warning_message + offset);
-   else
-      png_default_warning(png_ptr, warning_message + offset);
-}
-
-/* These functions support 'formatted' warning messages with up to
- * PNG_WARNING_PARAMETER_COUNT parameters.  In the format string the parameter
- * is introduced by @<number>, where 'number' starts at 1.  This follows the
- * standard established by X/Open for internationalizable error messages.
- */
-void
-png_warning_parameter(png_warning_parameters p, int number,
-   png_const_charp string)
-{
-   if (number > 0 && number <= PNG_WARNING_PARAMETER_COUNT)
-      (void)png_safecat(p[number-1], (sizeof p[number-1]), 0, string);
-}
-
-void
-png_warning_parameter_unsigned(png_warning_parameters p, int number, int format,
-   png_alloc_size_t value)
-{
-   char buffer[PNG_NUMBER_BUFFER_SIZE];
-   png_warning_parameter(p, number, PNG_FORMAT_NUMBER(buffer, format, value));
-}
-
-void
-png_warning_parameter_signed(png_warning_parameters p, int number, int format,
-   png_int_32 value)
-{
-   png_alloc_size_t u;
-   png_charp str;
-   char buffer[PNG_NUMBER_BUFFER_SIZE];
-
-   /* Avoid overflow by doing the negate in a png_alloc_size_t: */
-   u = (png_alloc_size_t)value;
-   if (value < 0)
-      u = ~u + 1;
-
-   str = PNG_FORMAT_NUMBER(buffer, format, u);
-
-   if (value < 0 && str > buffer)
-      *--str = '-';
-
-   png_warning_parameter(p, number, str);
-}
-
-void
-png_formatted_warning(png_const_structrp png_ptr, png_warning_parameters p,
-   png_const_charp message)
-{
-   /* The internal buffer is just 192 bytes - enough for all our messages,
-    * overflow doesn't happen because this code checks!  If someone figures
-    * out how to send us a message longer than 192 bytes, all that will
-    * happen is that the message will be truncated appropriately.
-    */
-   size_t i = 0; /* Index in the msg[] buffer: */
-   char msg[192];
-
-   /* Each iteration through the following loop writes at most one character
-    * to msg[i++] then returns here to validate that there is still space for
-    * the trailing '\0'.  It may (in the case of a parameter) read more than
-    * one character from message[]; it must check for '\0' and continue to the
-    * test if it finds the end of string.
-    */
-   while (i<(sizeof msg)-1 && *message != '\0')
-   {
-      /* '@' at end of string is now just printed (previously it was skipped);
-       * it is an error in the calling code to terminate the string with @.
-       */
-      if (p != NULL && *message == '@' && message[1] != '\0')
-      {
-         int parameter_char = *++message; /* Consume the '@' */
-         static const char valid_parameters[] = "123456789";
-         int parameter = 0;
-
-         /* Search for the parameter digit, the index in the string is the
-          * parameter to use.
-          */
-         while (valid_parameters[parameter] != parameter_char &&
-            valid_parameters[parameter] != '\0')
-            ++parameter;
-
-         /* If the parameter digit is out of range it will just get printed. */
-         if (parameter < PNG_WARNING_PARAMETER_COUNT)
-         {
-            /* Append this parameter */
-            png_const_charp parm = p[parameter];
-            png_const_charp pend = p[parameter] + (sizeof p[parameter]);
-
-            /* No need to copy the trailing '\0' here, but there is no guarantee
-             * that parm[] has been initialized, so there is no guarantee of a
-             * trailing '\0':
-             */
-            while (i<(sizeof msg)-1 && *parm != '\0' && parm < pend)
-               msg[i++] = *parm++;
-
-            /* Consume the parameter digit too: */
-            ++message;
-            continue;
-         }
-
-         /* else not a parameter and there is a character after the @ sign; just
-          * copy that.  This is known not to be '\0' because of the test above.
-          */
-      }
-
-      /* At this point *message can't be '\0', even in the bad parameter case
-       * above where there is a lone '@' at the end of the message string.
-       */
-      msg[i++] = *message++;
-   }
-
-   /* i is always less than (sizeof msg), so: */
-   msg[i] = '\0';
-
-   /* And this is the formatted message. It may be larger than
-    * PNG_MAX_ERROR_TEXT, but that is only used for 'chunk' errors and these
-    * are not (currently) formatted.
-    */
-   png_warning(png_ptr, msg);
-}
-#endif /* PNG_WARNINGS_SUPPORTED */
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-void PNGAPI
-png_benign_error(png_const_structrp png_ptr, png_const_charp error_message)
-{
-   if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
-   {
-#     ifdef PNG_READ_SUPPORTED
-         if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-            png_ptr->chunk_name != 0)
-            png_chunk_warning(png_ptr, error_message);
-         else
-#     endif
-      png_warning(png_ptr, error_message);
-   }
-
-   else
-   {
-#     ifdef PNG_READ_SUPPORTED
-         if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-            png_ptr->chunk_name != 0)
-            png_chunk_error(png_ptr, error_message);
-         else
-#     endif
-      png_error(png_ptr, error_message);
-   }
-}
-
-void /* PRIVATE */
-png_app_warning(png_const_structrp png_ptr, png_const_charp error_message)
-{
-  if (png_ptr->flags & PNG_FLAG_APP_WARNINGS_WARN)
-     png_warning(png_ptr, error_message);
-  else
-     png_error(png_ptr, error_message);
-}
-
-void /* PRIVATE */
-png_app_error(png_const_structrp png_ptr, png_const_charp error_message)
-{
-  if (png_ptr->flags & PNG_FLAG_APP_ERRORS_WARN)
-     png_warning(png_ptr, error_message);
-  else
-     png_error(png_ptr, error_message);
-}
-#endif /* BENIGN_ERRORS */
-
-/* These utilities are used internally to build an error message that relates
- * to the current chunk.  The chunk name comes from png_ptr->chunk_name,
- * this is used to prefix the message.  The message is limited in length
- * to 63 bytes, the name characters are output as hex digits wrapped in []
- * if the character is invalid.
- */
-#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
-static PNG_CONST char png_digit[16] = {
-   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-   'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-#define PNG_MAX_ERROR_TEXT 196 /* Currently limited be profile_error in png.c */
-#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_ERROR_TEXT_SUPPORTED)
-static void /* PRIVATE */
-png_format_buffer(png_const_structrp png_ptr, png_charp buffer, png_const_charp
-    error_message)
-{
-   png_uint_32 chunk_name = png_ptr->chunk_name;
-   int iout = 0, ishift = 24;
-
-   while (ishift >= 0)
-   {
-      int c = (int)(chunk_name >> ishift) & 0xff;
-
-      ishift -= 8;
-      if (isnonalpha(c))
-      {
-         buffer[iout++] = PNG_LITERAL_LEFT_SQUARE_BRACKET;
-         buffer[iout++] = png_digit[(c & 0xf0) >> 4];
-         buffer[iout++] = png_digit[c & 0x0f];
-         buffer[iout++] = PNG_LITERAL_RIGHT_SQUARE_BRACKET;
-      }
-
-      else
-      {
-         buffer[iout++] = (char)c;
-      }
-   }
-
-   if (error_message == NULL)
-      buffer[iout] = '\0';
-
-   else
-   {
-      int iin = 0;
-
-      buffer[iout++] = ':';
-      buffer[iout++] = ' ';
-
-      while (iin < PNG_MAX_ERROR_TEXT-1 && error_message[iin] != '\0')
-         buffer[iout++] = error_message[iin++];
-
-      /* iin < PNG_MAX_ERROR_TEXT, so the following is safe: */
-      buffer[iout] = '\0';
-   }
-}
-#endif /* PNG_WARNINGS_SUPPORTED || PNG_ERROR_TEXT_SUPPORTED */
-
-#if defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
-PNG_FUNCTION(void,PNGAPI
-png_chunk_error,(png_const_structrp png_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-   char msg[18+PNG_MAX_ERROR_TEXT];
-   if (png_ptr == NULL)
-      png_error(png_ptr, error_message);
-
-   else
-   {
-      png_format_buffer(png_ptr, msg, error_message);
-      png_error(png_ptr, msg);
-   }
-}
-#endif /* PNG_READ_SUPPORTED && PNG_ERROR_TEXT_SUPPORTED */
-
-#ifdef PNG_WARNINGS_SUPPORTED
-void PNGAPI
-png_chunk_warning(png_const_structrp png_ptr, png_const_charp warning_message)
-{
-   char msg[18+PNG_MAX_ERROR_TEXT];
-   if (png_ptr == NULL)
-      png_warning(png_ptr, warning_message);
-
-   else
-   {
-      png_format_buffer(png_ptr, msg, warning_message);
-      png_warning(png_ptr, msg);
-   }
-}
-#endif /* PNG_WARNINGS_SUPPORTED */
-
-#ifdef PNG_READ_SUPPORTED
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-void PNGAPI
-png_chunk_benign_error(png_const_structrp png_ptr, png_const_charp
-    error_message)
-{
-   if (png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN)
-      png_chunk_warning(png_ptr, error_message);
-
-   else
-      png_chunk_error(png_ptr, error_message);
-}
-#endif
-#endif /* PNG_READ_SUPPORTED */
-
-void /* PRIVATE */
-png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
-{
-   /* This is always supported, but for just read or just write it
-    * unconditionally does the right thing.
-    */
-#  if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
-      if (png_ptr->mode & PNG_IS_READ_STRUCT)
-#  endif
-
-#  ifdef PNG_READ_SUPPORTED
-      {
-         if (error < PNG_CHUNK_ERROR)
-            png_chunk_warning(png_ptr, message);
-
-         else
-            png_chunk_benign_error(png_ptr, message);
-      }
-#  endif
-
-#  if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
-      else if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
-#  endif
-
-#  ifdef PNG_WRITE_SUPPORTED
-      {
-         if (error < PNG_CHUNK_WRITE_ERROR)
-            png_app_warning(png_ptr, message);
-
-         else
-            png_app_error(png_ptr, message);
-      }
-#  endif
-}
-
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-PNG_FUNCTION(void,
-png_fixed_error,(png_const_structrp png_ptr, png_const_charp name),PNG_NORETURN)
-{
-#  define fixed_message "fixed point overflow in "
-#  define fixed_message_ln ((sizeof fixed_message)-1)
-   int  iin;
-   char msg[fixed_message_ln+PNG_MAX_ERROR_TEXT];
-   memcpy(msg, fixed_message, fixed_message_ln);
-   iin = 0;
-   if (name != NULL) while (iin < (PNG_MAX_ERROR_TEXT-1) && name[iin] != 0)
-   {
-      msg[fixed_message_ln + iin] = name[iin];
-      ++iin;
-   }
-   msg[fixed_message_ln + iin] = 0;
-   png_error(png_ptr, msg);
-}
-#endif
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* This API only exists if ANSI-C style error handling is used,
- * otherwise it is necessary for png_default_error to be overridden.
- */
-jmp_buf* PNGAPI
-png_set_longjmp_fn(png_structrp png_ptr, png_longjmp_ptr longjmp_fn,
-    size_t jmp_buf_size)
-{
-   /* From libpng 1.6.0 the app gets one chance to set a 'jmpbuf_size' value
-    * and it must not change after that.  Libpng doesn't care how big the
-    * buffer is, just that it doesn't change.
-    *
-    * If the buffer size is no *larger* than the size of jmp_buf when libpng is
-    * compiled a built in jmp_buf is returned; this preserves the pre-1.6.0
-    * semantics that this call will not fail.  If the size is larger, however,
-    * the buffer is allocated and this may fail, causing the function to return
-    * NULL.
-    */
-   if (png_ptr == NULL)
-      return NULL;
-
-   if (png_ptr->jmp_buf_ptr == NULL)
-   {
-      png_ptr->jmp_buf_size = 0; /* not allocated */
-
-      if (jmp_buf_size <= (sizeof png_ptr->jmp_buf_local))
-         png_ptr->jmp_buf_ptr = &png_ptr->jmp_buf_local;
-
-      else
-      {
-         png_ptr->jmp_buf_ptr = png_voidcast(jmp_buf *,
-            png_malloc_warn(png_ptr, jmp_buf_size));
-
-         if (png_ptr->jmp_buf_ptr == NULL)
-            return NULL; /* new NULL return on OOM */
-
-         png_ptr->jmp_buf_size = jmp_buf_size;
-      }
-   }
-
-   else /* Already allocated: check the size */
-   {
-      size_t size = png_ptr->jmp_buf_size;
-
-      if (size == 0)
-      {
-         size = (sizeof png_ptr->jmp_buf_local);
-         if (png_ptr->jmp_buf_ptr != &png_ptr->jmp_buf_local)
-         {
-            /* This is an internal error in libpng: somehow we have been left
-             * with a stack allocated jmp_buf when the application regained
-             * control.  It's always possible to fix this up, but for the moment
-             * this is a png_error because that makes it easy to detect.
-             */
-            png_error(png_ptr, "Libpng jmp_buf still allocated");
-            /* png_ptr->jmp_buf_ptr = &png_ptr->jmp_buf_local; */
-         }
-      }
-
-      if (size != jmp_buf_size)
-      {
-         png_warning(png_ptr, "Application jmp_buf size changed");
-         return NULL; /* caller will probably crash: no choice here */
-      }
-   }
-
-   /* Finally fill in the function, now we have a satisfactory buffer. It is
-    * valid to change the function on every call.
-    */
-   png_ptr->longjmp_fn = longjmp_fn;
-   return png_ptr->jmp_buf_ptr;
-}
-
-void /* PRIVATE */
-png_free_jmpbuf(png_structrp png_ptr)
-{
-   if (png_ptr != NULL)
-   {
-      jmp_buf *jb = png_ptr->jmp_buf_ptr;
-
-      /* A size of 0 is used to indicate a local, stack, allocation of the
-       * pointer; used here and in png.c
-       */
-      if (jb != NULL && png_ptr->jmp_buf_size > 0)
-      {
-
-         /* This stuff is so that a failure to free the error control structure
-          * does not leave libpng in a state with no valid error handling: the
-          * free always succeeds, if there is an error it gets ignored.
-          */
-         if (jb != &png_ptr->jmp_buf_local)
-         {
-            /* Make an internal, libpng, jmp_buf to return here */
-            jmp_buf free_jmp_buf;
-
-            if (!setjmp(free_jmp_buf))
-            {
-               png_ptr->jmp_buf_ptr = &free_jmp_buf; /* come back here */
-               png_ptr->jmp_buf_size = 0; /* stack allocation */
-               png_ptr->longjmp_fn = longjmp;
-               png_free(png_ptr, jb); /* Return to setjmp on error */
-            }
-         }
-      }
-
-      /* *Always* cancel everything out: */
-      png_ptr->jmp_buf_size = 0;
-      png_ptr->jmp_buf_ptr = NULL;
-      png_ptr->longjmp_fn = 0;
-   }
-}
-#endif
-
-/* This is the default error handling function.  Note that replacements for
- * this function MUST NOT RETURN, or the program will likely crash.  This
- * function is used by default, or if the program supplies NULL for the
- * error function pointer in png_set_error_fn().
- */
-static PNG_FUNCTION(void /* PRIVATE */,
-png_default_error,(png_const_structrp png_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-#ifdef PNG_CONSOLE_IO_SUPPORTED
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   /* Check on NULL only added in 1.5.4 */
-   if (error_message != NULL && *error_message == PNG_LITERAL_SHARP)
-   {
-      /* Strip "#nnnn " from beginning of error message. */
-      int offset;
-      char error_number[16];
-      for (offset = 0; offset<15; offset++)
-      {
-         error_number[offset] = error_message[offset + 1];
-         if (error_message[offset] == ' ')
-            break;
-      }
-
-      if ((offset > 1) && (offset < 15))
-      {
-         error_number[offset - 1] = '\0';
-         fprintf(stderr, "libpng error no. %s: %s",
-             error_number, error_message + offset + 1);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-
-      else
-      {
-         fprintf(stderr, "libpng error: %s, offset=%d",
-             error_message, offset);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-   }
-   else
-#endif
-   {
-      fprintf(stderr, "libpng error: %s", error_message ? error_message :
-         "undefined");
-      fprintf(stderr, PNG_STRING_NEWLINE);
-   }
-#else
-   PNG_UNUSED(error_message) /* Make compiler happy */
-#endif
-   png_longjmp(png_ptr, 1);
-}
-
-PNG_FUNCTION(void,PNGAPI
-png_longjmp,(png_const_structrp, int),PNG_NORETURN)
-{
-#ifdef PNG_SETJMP_SUPPORTED
-   if (png_ptr && png_ptr->longjmp_fn && png_ptr->jmp_buf_ptr)
-      png_ptr->longjmp_fn(*png_ptr->jmp_buf_ptr, val);
-#endif
-
-   /* Here if not setjmp support or if png_ptr is null. */
-   PNG_ABORT();
-}
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* This function is called when there is a warning, but the library thinks
- * it can continue anyway.  Replacement functions don't have to do anything
- * here if you don't want them to.  In the default configuration, png_ptr is
- * not used, but it is passed in case it may be useful.
- */
-static void /* PRIVATE */
-png_default_warning(png_const_structrp png_ptr, png_const_charp warning_message)
-{
-#ifdef PNG_CONSOLE_IO_SUPPORTED
-#  ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   if (*warning_message == PNG_LITERAL_SHARP)
-   {
-      int offset;
-      char warning_number[16];
-      for (offset = 0; offset < 15; offset++)
-      {
-         warning_number[offset] = warning_message[offset + 1];
-         if (warning_message[offset] == ' ')
-            break;
-      }
-
-      if ((offset > 1) && (offset < 15))
-      {
-         warning_number[offset + 1] = '\0';
-         fprintf(stderr, "libpng warning no. %s: %s",
-             warning_number, warning_message + offset);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-
-      else
-      {
-         fprintf(stderr, "libpng warning: %s",
-             warning_message);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-   }
-   else
-#  endif
-
-   {
-      fprintf(stderr, "libpng warning: %s", warning_message);
-      fprintf(stderr, PNG_STRING_NEWLINE);
-   }
-#else
-   PNG_UNUSED(warning_message) /* Make compiler happy */
-#endif
-   PNG_UNUSED(png_ptr) /* Make compiler happy */
-}
-#endif /* PNG_WARNINGS_SUPPORTED */
-
-/* This function is called when the application wants to use another method
- * of handling errors and warnings.  Note that the error function MUST NOT
- * return to the calling routine or serious problems will occur.  The return
- * method used in the default routine calls longjmp(png_ptr->jmp_buf_ptr, 1)
- */
-void PNGAPI
-png_set_error_fn(png_structrp png_ptr, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warning_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->error_ptr = error_ptr;
-   png_ptr->error_fn = error_fn;
-#ifdef PNG_WARNINGS_SUPPORTED
-   png_ptr->warning_fn = warning_fn;
-#else
-   PNG_UNUSED(warning_fn)
-#endif
-}
-
-
-/* This function returns a pointer to the error_ptr associated with the user
- * functions.  The application should free any memory associated with this
- * pointer before png_write_destroy and png_read_destroy are called.
- */
-png_voidp PNGAPI
-png_get_error_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return NULL;
-
-   return ((png_voidp)png_ptr->error_ptr);
-}
-
-
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-void PNGAPI
-png_set_strip_error_numbers(png_structrp png_ptr, png_uint_32 strip_mode)
-{
-   if (png_ptr != NULL)
-   {
-      png_ptr->flags &=
-         ((~(PNG_FLAG_STRIP_ERROR_NUMBERS |
-         PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
-   }
-}
-#endif
-
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-   /* Currently the above both depend on SETJMP_SUPPORTED, however it would be
-    * possible to implement without setjmp support just so long as there is some
-    * way to handle the error return here:
-    */
-PNG_FUNCTION(void /* PRIVATE */,
-png_safe_error,(png_structp png_nonconst_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-   const png_const_structrp png_ptr = png_nonconst_ptr;
-   png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
-
-   /* An error is always logged here, overwriting anything (typically a warning)
-    * that is already there:
-    */
-   if (image != NULL)
-   {
-      png_safecat(image->message, (sizeof image->message), 0, error_message);
-      image->warning_or_error |= PNG_IMAGE_ERROR;
-
-      /* Retrieve the jmp_buf from within the png_control, making this work for
-       * C++ compilation too is pretty tricky: C++ wants a pointer to the first
-       * element of a jmp_buf, but C doesn't tell us the type of that.
-       */
-      if (image->opaque != NULL && image->opaque->error_buf != NULL)
-         longjmp(png_control_jmp_buf(image->opaque), 1);
-
-      /* Missing longjmp buffer, the following is to help debugging: */
-      {
-         size_t pos = png_safecat(image->message, (sizeof image->message), 0,
-            "bad longjmp: ");
-         png_safecat(image->message, (sizeof image->message), pos,
-             error_message);
-      }
-   }
-
-   /* Here on an internal programming error. */
-   abort();
-}
-
-#ifdef PNG_WARNINGS_SUPPORTED
-void /* PRIVATE */
-png_safe_warning(png_structp png_nonconst_ptr, png_const_charp warning_message)
-{
-   const png_const_structrp png_ptr = png_nonconst_ptr;
-   png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
-
-   /* A warning is only logged if there is no prior warning or error. */
-   if (image->warning_or_error == 0)
-   {
-      png_safecat(image->message, (sizeof image->message), 0, warning_message);
-      image->warning_or_error |= PNG_IMAGE_WARNING;
-   }
-}
-#endif
-
-int /* PRIVATE */
-png_safe_execute(png_imagep image_in, int (*function)(png_voidp), png_voidp arg)
-{
-   volatile png_imagep image = image_in;
-   volatile int result;
-   volatile png_voidp saved_error_buf;
-   jmp_buf safe_jmpbuf;
-
-   /* Safely execute function(arg) with png_error returning to this function. */
-   saved_error_buf = image->opaque->error_buf;
-   result = setjmp(safe_jmpbuf) == 0;
-
-   if (result)
-   {
-
-      image->opaque->error_buf = safe_jmpbuf;
-      result = function(arg);
-   }
-
-   image->opaque->error_buf = saved_error_buf;
-
-   /* And do the cleanup prior to any failure return. */
-   if (!result)
-      png_image_free(image);
-
-   return result;
-}
-#endif /* SIMPLIFIED READ/WRITE */
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngget.c b/modules/juce_graphics/image_formats/pnglib/pngget.c
deleted file mode 100644
index 80ab055..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngget.c
+++ /dev/null
@@ -1,1177 +0,0 @@
-
-/* pngget.c - retrieval of values from info struct
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-png_uint_32 PNGAPI
-png_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 flag)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->valid & flag);
-
-   return(0);
-}
-
-png_size_t PNGAPI
-png_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->rowbytes);
-
-   return(0);
-}
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-png_bytepp PNGAPI
-png_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->row_pointers);
-
-   return(0);
-}
-#endif
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
-/* Easy access to info, added in libpng-0.99 */
-png_uint_32 PNGAPI
-png_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->width;
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->height;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->bit_depth;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->color_type;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->filter_type;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->interlace_type;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->compression_type;
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
-   info_ptr)
-{
-#ifdef PNG_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
-      {
-         png_debug1(1, "in %s retrieval function",
-             "png_get_x_pixels_per_meter");
-
-         if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
-            return (info_ptr->x_pixels_per_unit);
-      }
-#endif
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
-    info_ptr)
-{
-#ifdef PNG_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
-   {
-      png_debug1(1, "in %s retrieval function",
-          "png_get_y_pixels_per_meter");
-
-      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
-         return (info_ptr->y_pixels_per_unit);
-   }
-#endif
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter");
-
-      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER &&
-          info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit)
-         return (info_ptr->x_pixels_per_unit);
-   }
-#endif
-
-   return (0);
-}
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp
-   info_ptr)
-{
-#ifdef PNG_READ_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio");
-
-      if (info_ptr->x_pixels_per_unit != 0)
-         return ((float)((float)info_ptr->y_pixels_per_unit
-             /(float)info_ptr->x_pixels_per_unit));
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return ((float)0.0);
-}
-#endif
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_fixed_point PNGAPI
-png_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr,
-    png_const_inforp info_ptr)
-{
-#ifdef PNG_READ_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs)
-       && info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0
-       && info_ptr->x_pixels_per_unit <= PNG_UINT_31_MAX
-       && info_ptr->y_pixels_per_unit <= PNG_UINT_31_MAX)
-   {
-      png_fixed_point res;
-
-      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed");
-
-      /* The following casts work because a PNG 4 byte integer only has a valid
-       * range of 0..2^31-1; otherwise the cast might overflow.
-       */
-      if (png_muldiv(&res, (png_int_32)info_ptr->y_pixels_per_unit, PNG_FP_1,
-          (png_int_32)info_ptr->x_pixels_per_unit))
-         return res;
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return 0;
-}
-#endif
-
-png_int_32 PNGAPI
-png_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
-         return (info_ptr->x_offset);
-   }
-#endif
-
-   return (0);
-}
-
-png_int_32 PNGAPI
-png_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
-         return (info_ptr->y_offset);
-   }
-#endif
-
-   return (0);
-}
-
-png_int_32 PNGAPI
-png_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
-         return (info_ptr->x_offset);
-   }
-#endif
-
-   return (0);
-}
-
-png_int_32 PNGAPI
-png_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
-         return (info_ptr->y_offset);
-   }
-#endif
-
-   return (0);
-}
-
-#ifdef PNG_INCH_CONVERSIONS_SUPPORTED
-static png_uint_32
-ppi_from_ppm(png_uint_32 ppm)
-{
-#if 0
-   /* The conversion is *(2.54/100), in binary (32 digits):
-    * .00000110100000001001110101001001
-    */
-   png_uint_32 t1001, t1101;
-   ppm >>= 1;                  /* .1 */
-   t1001 = ppm + (ppm >> 3);   /* .1001 */
-   t1101 = t1001 + (ppm >> 1); /* .1101 */
-   ppm >>= 20;                 /* .000000000000000000001 */
-   t1101 += t1101 >> 15;       /* .1101000000000001101 */
-   t1001 >>= 11;               /* .000000000001001 */
-   t1001 += t1001 >> 12;       /* .000000000001001000000001001 */
-   ppm += t1001;               /* .000000000001001000001001001 */
-   ppm += t1101;               /* .110100000001001110101001001 */
-   return (ppm + 16) >> 5;/* .00000110100000001001110101001001 */
-#else
-   /* The argument is a PNG unsigned integer, so it is not permitted
-    * to be bigger than 2^31.
-    */
-   png_fixed_point result;
-   if (ppm <= PNG_UINT_31_MAX && png_muldiv(&result, (png_int_32)ppm, 127,
-       5000))
-      return result;
-
-   /* Overflow. */
-   return 0;
-#endif
-}
-
-png_uint_32 PNGAPI
-png_get_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   return ppi_from_ppm(png_get_pixels_per_meter(png_ptr, info_ptr));
-}
-
-png_uint_32 PNGAPI
-png_get_x_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   return ppi_from_ppm(png_get_x_pixels_per_meter(png_ptr, info_ptr));
-}
-
-png_uint_32 PNGAPI
-png_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   return ppi_from_ppm(png_get_y_pixels_per_meter(png_ptr, info_ptr));
-}
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-static png_fixed_point
-png_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns)
-{
-   /* Convert from metres * 1,000,000 to inches * 100,000, meters to
-    * inches is simply *(100/2.54), so we want *(10/2.54) == 500/127.
-    * Notice that this can overflow - a warning is output and 0 is
-    * returned.
-    */
-   return png_muldiv_warn(png_ptr, microns, 500, 127);
-}
-
-png_fixed_point PNGAPI
-png_get_x_offset_inches_fixed(png_const_structrp png_ptr,
-    png_const_inforp info_ptr)
-{
-   return png_fixed_inches_from_microns(png_ptr,
-       png_get_x_offset_microns(png_ptr, info_ptr));
-}
-#endif
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_fixed_point PNGAPI
-png_get_y_offset_inches_fixed(png_const_structrp png_ptr,
-    png_const_inforp info_ptr)
-{
-   return png_fixed_inches_from_microns(png_ptr,
-       png_get_y_offset_microns(png_ptr, info_ptr));
-}
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_x_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   /* To avoid the overflow do the conversion directly in floating
-    * point.
-    */
-   return (float)(png_get_x_offset_microns(png_ptr, info_ptr) * .00003937);
-}
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_y_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   /* To avoid the overflow do the conversion directly in floating
-    * point.
-    */
-   return (float)(png_get_y_offset_microns(png_ptr, info_ptr) * .00003937);
-}
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-png_uint_32 PNGAPI
-png_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
-{
-   png_uint_32 retval = 0;
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
-   {
-      png_debug1(1, "in %s retrieval function", "pHYs");
-
-      if (res_x != NULL)
-      {
-         *res_x = info_ptr->x_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (res_y != NULL)
-      {
-         *res_y = info_ptr->y_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (unit_type != NULL)
-      {
-         *unit_type = (int)info_ptr->phys_unit_type;
-         retval |= PNG_INFO_pHYs;
-
-         if (*unit_type == 1)
-         {
-            if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
-            if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
-         }
-      }
-   }
-
-   return (retval);
-}
-#endif /* PNG_pHYs_SUPPORTED */
-#endif  /* PNG_INCH_CONVERSIONS_SUPPORTED */
-
-/* png_get_channels really belongs in here, too, but it's been around longer */
-
-#endif  /* PNG_EASY_ACCESS_SUPPORTED */
-
-
-png_byte PNGAPI
-png_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->channels);
-
-   return (0);
-}
-
-#ifdef PNG_READ_SUPPORTED
-png_const_bytep PNGAPI
-png_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->signature);
-
-   return (NULL);
-}
-#endif
-
-#ifdef PNG_bKGD_SUPPORTED
-png_uint_32 PNGAPI
-png_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
-   png_color_16p *background)
-{
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)
-       && background != NULL)
-   {
-      png_debug1(1, "in %s retrieval function", "bKGD");
-
-      *background = &(info_ptr->background);
-      return (PNG_INFO_bKGD);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-/* The XYZ APIs were added in 1.5.5 to take advantage of the code added at the
- * same time to correct the rgb grayscale coefficient defaults obtained from the
- * cHRM chunk in 1.5.4
- */
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    double *white_x, double *white_y, double *red_x, double *red_y,
-    double *green_x, double *green_y, double *blue_x, double *blue_y)
-{
-   /* Quiet API change: this code used to only return the end points if a cHRM
-    * chunk was present, but the end points can also come from iCCP or sRGB
-    * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and
-    * the png_set_ APIs merely check that set end points are mutually
-    * consistent.
-    */
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
-   {
-      png_debug1(1, "in %s retrieval function", "cHRM");
-
-      if (white_x != NULL)
-         *white_x = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
-      if (white_y != NULL)
-         *white_y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y");
-      if (red_x != NULL)
-         *red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx,
-            "cHRM red X");
-      if (red_y != NULL)
-         *red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy,
-            "cHRM red Y");
-      if (green_x != NULL)
-         *green_x = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.greenx, "cHRM green X");
-      if (green_y != NULL)
-         *green_y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y");
-      if (blue_x != NULL)
-         *blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex,
-            "cHRM blue X");
-      if (blue_y != NULL)
-         *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
-            "cHRM blue Y");
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
-   double *red_X, double *red_Y, double *red_Z, double *green_X,
-   double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
-   double *blue_Z)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
-   {
-      png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
-
-      if (red_X != NULL)
-         *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
-            "cHRM red X");
-      if (red_Y != NULL)
-         *red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y,
-            "cHRM red Y");
-      if (red_Z != NULL)
-         *red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z,
-            "cHRM red Z");
-      if (green_X != NULL)
-         *green_X = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X");
-      if (green_Y != NULL)
-         *green_Y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y");
-      if (green_Z != NULL)
-         *green_Z = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
-      if (blue_X != NULL)
-         *blue_X = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
-      if (blue_Y != NULL)
-         *blue_Y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
-      if (blue_Z != NULL)
-         *blue_Z = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-#  endif
-
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
-    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
-    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
-    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
-    png_fixed_point *int_blue_Z)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
-   {
-      png_debug1(1, "in %s retrieval function", "cHRM_XYZ");
-
-      if (int_red_X != NULL)
-         *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X;
-      if (int_red_Y != NULL)
-         *int_red_Y = info_ptr->colorspace.end_points_XYZ.red_Y;
-      if (int_red_Z != NULL)
-         *int_red_Z = info_ptr->colorspace.end_points_XYZ.red_Z;
-      if (int_green_X != NULL)
-         *int_green_X = info_ptr->colorspace.end_points_XYZ.green_X;
-      if (int_green_Y != NULL)
-         *int_green_Y = info_ptr->colorspace.end_points_XYZ.green_Y;
-      if (int_green_Z != NULL)
-         *int_green_Z = info_ptr->colorspace.end_points_XYZ.green_Z;
-      if (int_blue_X != NULL)
-         *int_blue_X = info_ptr->colorspace.end_points_XYZ.blue_X;
-      if (int_blue_Y != NULL)
-         *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y;
-      if (int_blue_Z != NULL)
-         *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z;
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
-    png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
-    png_fixed_point *blue_x, png_fixed_point *blue_y)
-{
-   png_debug1(1, "in %s retrieval function", "cHRM");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS))
-   {
-      if (white_x != NULL)
-         *white_x = info_ptr->colorspace.end_points_xy.whitex;
-      if (white_y != NULL)
-         *white_y = info_ptr->colorspace.end_points_xy.whitey;
-      if (red_x != NULL)
-         *red_x = info_ptr->colorspace.end_points_xy.redx;
-      if (red_y != NULL)
-         *red_y = info_ptr->colorspace.end_points_xy.redy;
-      if (green_x != NULL)
-         *green_x = info_ptr->colorspace.end_points_xy.greenx;
-      if (green_y != NULL)
-         *green_y = info_ptr->colorspace.end_points_xy.greeny;
-      if (blue_x != NULL)
-         *blue_x = info_ptr->colorspace.end_points_xy.bluex;
-      if (blue_y != NULL)
-         *blue_y = info_ptr->colorspace.end_points_xy.bluey;
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-#  endif
-#endif
-
-#ifdef PNG_gAMA_SUPPORTED
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *file_gamma)
-{
-   png_debug1(1, "in %s retrieval function", "gAMA");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) &&
-      file_gamma != NULL)
-   {
-      *file_gamma = info_ptr->colorspace.gamma;
-      return (PNG_INFO_gAMA);
-   }
-
-   return (0);
-}
-#  endif
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    double *file_gamma)
-{
-   png_debug1(1, "in %s retrieval function", "gAMA(float)");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) &&
-      file_gamma != NULL)
-   {
-      *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
-         "png_get_gAMA");
-      return (PNG_INFO_gAMA);
-   }
-
-   return (0);
-}
-#  endif
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *file_srgb_intent)
-{
-   png_debug1(1, "in %s retrieval function", "sRGB");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)
-       && file_srgb_intent != NULL)
-   {
-      *file_srgb_intent = info_ptr->colorspace.rendering_intent;
-      return (PNG_INFO_sRGB);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-png_uint_32 PNGAPI
-png_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_charpp name, int *compression_type,
-    png_bytepp profile, png_uint_32 *proflen)
-{
-   png_debug1(1, "in %s retrieval function", "iCCP");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
-       && name != NULL && compression_type != NULL && profile != NULL &&
-		 proflen != NULL)
-   {
-      *name = info_ptr->iccp_name;
-      *profile = info_ptr->iccp_profile;
-      *proflen = png_get_uint_32(info_ptr->iccp_profile);
-      /* This is somewhat irrelevant since the profile data returned has
-       * actually been uncompressed.
-       */
-      *compression_type = PNG_COMPRESSION_TYPE_BASE;
-      return (PNG_INFO_iCCP);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-int PNGAPI
-png_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_sPLT_tpp spalettes)
-{
-   if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
-   {
-      *spalettes = info_ptr->splt_palettes;
-      return info_ptr->splt_palettes_num;
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-png_uint_32 PNGAPI
-png_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_uint_16p *hist)
-{
-   png_debug1(1, "in %s retrieval function", "hIST");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)
-       && hist != NULL)
-   {
-      *hist = info_ptr->hist;
-      return (PNG_INFO_hIST);
-   }
-
-   return (0);
-}
-#endif
-
-png_uint_32 PNGAPI
-png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 *width, png_uint_32 *height, int *bit_depth,
-    int *color_type, int *interlace_type, int *compression_type,
-    int *filter_type)
-{
-   png_debug1(1, "in %s retrieval function", "IHDR");
-
-   if (png_ptr == NULL || info_ptr == NULL || width == NULL ||
-       height == NULL || bit_depth == NULL || color_type == NULL)
-      return (0);
-
-   *width = info_ptr->width;
-   *height = info_ptr->height;
-   *bit_depth = info_ptr->bit_depth;
-   *color_type = info_ptr->color_type;
-
-   if (compression_type != NULL)
-      *compression_type = info_ptr->compression_type;
-
-   if (filter_type != NULL)
-      *filter_type = info_ptr->filter_type;
-
-   if (interlace_type != NULL)
-      *interlace_type = info_ptr->interlace_type;
-
-   /* This is redundant if we can be sure that the info_ptr values were all
-    * assigned in png_set_IHDR().  We do the check anyhow in case an
-    * application has ignored our advice not to mess with the members
-    * of info_ptr directly.
-    */
-   png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height,
-       info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
-       info_ptr->compression_type, info_ptr->filter_type);
-
-   return (1);
-}
-
-#ifdef PNG_oFFs_SUPPORTED
-png_uint_32 PNGAPI
-png_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
-{
-   png_debug1(1, "in %s retrieval function", "oFFs");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)
-       && offset_x != NULL && offset_y != NULL && unit_type != NULL)
-   {
-      *offset_x = info_ptr->x_offset;
-      *offset_y = info_ptr->y_offset;
-      *unit_type = (int)info_ptr->offset_unit_type;
-      return (PNG_INFO_oFFs);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-png_uint_32 PNGAPI
-png_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
-    png_charp *units, png_charpp *params)
-{
-   png_debug1(1, "in %s retrieval function", "pCAL");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)
-       && purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
-       nparams != NULL && units != NULL && params != NULL)
-   {
-      *purpose = info_ptr->pcal_purpose;
-      *X0 = info_ptr->pcal_X0;
-      *X1 = info_ptr->pcal_X1;
-      *type = (int)info_ptr->pcal_type;
-      *nparams = (int)info_ptr->pcal_nparams;
-      *units = info_ptr->pcal_units;
-      *params = info_ptr->pcal_params;
-      return (PNG_INFO_pCAL);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-#    if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
-         defined(PNG_FLOATING_POINT_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *unit, png_fixed_point *width, png_fixed_point *height)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sCAL))
-   {
-      *unit = info_ptr->scal_unit;
-      /*TODO: make this work without FP support; the API is currently eliminated
-       * if neither floating point APIs nor internal floating point arithmetic
-       * are enabled.
-       */
-      *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
-      *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
-         "sCAL height");
-      return (PNG_INFO_sCAL);
-   }
-
-   return(0);
-}
-#    endif /* FLOATING_ARITHMETIC */
-#  endif /* FIXED_POINT */
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *unit, double *width, double *height)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sCAL))
-   {
-      *unit = info_ptr->scal_unit;
-      *width = atof(info_ptr->scal_s_width);
-      *height = atof(info_ptr->scal_s_height);
-      return (PNG_INFO_sCAL);
-   }
-
-   return(0);
-}
-#  endif /* FLOATING POINT */
-png_uint_32 PNGAPI
-png_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *unit, png_charpp width, png_charpp height)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sCAL))
-   {
-      *unit = info_ptr->scal_unit;
-      *width = info_ptr->scal_s_width;
-      *height = info_ptr->scal_s_height;
-      return (PNG_INFO_sCAL);
-   }
-
-   return(0);
-}
-#endif /* sCAL */
-
-#ifdef PNG_pHYs_SUPPORTED
-png_uint_32 PNGAPI
-png_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
-{
-   png_uint_32 retval = 0;
-
-   png_debug1(1, "in %s retrieval function", "pHYs");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs))
-   {
-      if (res_x != NULL)
-      {
-         *res_x = info_ptr->x_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (res_y != NULL)
-      {
-         *res_y = info_ptr->y_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (unit_type != NULL)
-      {
-         *unit_type = (int)info_ptr->phys_unit_type;
-         retval |= PNG_INFO_pHYs;
-      }
-   }
-
-   return (retval);
-}
-#endif /* pHYs */
-
-png_uint_32 PNGAPI
-png_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_colorp *palette, int *num_palette)
-{
-   png_debug1(1, "in %s retrieval function", "PLTE");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE)
-       && palette != NULL)
-   {
-      *palette = info_ptr->palette;
-      *num_palette = info_ptr->num_palette;
-      png_debug1(3, "num_palette = %d", *num_palette);
-      return (PNG_INFO_PLTE);
-   }
-
-   return (0);
-}
-
-#ifdef PNG_sBIT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_color_8p *sig_bit)
-{
-   png_debug1(1, "in %s retrieval function", "sBIT");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)
-       && sig_bit != NULL)
-   {
-      *sig_bit = &(info_ptr->sig_bit);
-      return (PNG_INFO_sBIT);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-int PNGAPI
-png_get_text(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_textp *text_ptr, int *num_text)
-{
-   if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
-   {
-      png_debug1(1, "in 0x%lx retrieval function",
-         (unsigned long)png_ptr->chunk_name);
-
-      if (text_ptr != NULL)
-         *text_ptr = info_ptr->text;
-
-      if (num_text != NULL)
-         *num_text = info_ptr->num_text;
-
-      return info_ptr->num_text;
-   }
-
-   if (num_text != NULL)
-      *num_text = 0;
-
-   return(0);
-}
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-png_uint_32 PNGAPI
-png_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_timep *mod_time)
-{
-   png_debug1(1, "in %s retrieval function", "tIME");
-
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)
-       && mod_time != NULL)
-   {
-      *mod_time = &(info_ptr->mod_time);
-      return (PNG_INFO_tIME);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-png_uint_32 PNGAPI
-png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)
-{
-   png_uint_32 retval = 0;
-   if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
-   {
-      png_debug1(1, "in %s retrieval function", "tRNS");
-
-      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         if (trans_alpha != NULL)
-         {
-            *trans_alpha = info_ptr->trans_alpha;
-            retval |= PNG_INFO_tRNS;
-         }
-
-         if (trans_color != NULL)
-            *trans_color = &(info_ptr->trans_color);
-      }
-
-      else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
-      {
-         if (trans_color != NULL)
-         {
-            *trans_color = &(info_ptr->trans_color);
-            retval |= PNG_INFO_tRNS;
-         }
-
-         if (trans_alpha != NULL)
-            *trans_alpha = NULL;
-      }
-
-      if (num_trans != NULL)
-      {
-         *num_trans = info_ptr->num_trans;
-         retval |= PNG_INFO_tRNS;
-      }
-   }
-
-   return (retval);
-}
-#endif
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-int PNGAPI
-png_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_unknown_chunkpp unknowns)
-{
-   if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
-   {
-      *unknowns = info_ptr->unknown_chunks;
-      return info_ptr->unknown_chunks_num;
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-png_byte PNGAPI
-png_get_rgb_to_gray_status (png_const_structrp png_ptr)
-{
-   return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0);
-}
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-png_voidp PNGAPI
-png_get_user_chunk_ptr(png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_chunk_ptr : NULL);
-}
-#endif
-
-png_size_t PNGAPI
-png_get_compression_buffer_size(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return 0;
-
-#  ifdef PNG_WRITE_SUPPORTED
-      if (png_ptr->mode & PNG_IS_READ_STRUCT)
-#  endif
-   {
-#     ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-         return png_ptr->IDAT_read_size;
-#     else
-         return PNG_IDAT_READ_SIZE;
-#     endif
-   }
-
-#  ifdef PNG_WRITE_SUPPORTED
-      else
-         return png_ptr->zbuffer_size;
-#  endif
-}
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-/* These functions were added to libpng 1.2.6 and were enabled
- * by default in libpng-1.4.0 */
-png_uint_32 PNGAPI
-png_get_user_width_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_width_max : 0);
-}
-
-png_uint_32 PNGAPI
-png_get_user_height_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_height_max : 0);
-}
-
-/* This function was added to libpng 1.4.0 */
-png_uint_32 PNGAPI
-png_get_chunk_cache_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_chunk_cache_max : 0);
-}
-
-/* This function was added to libpng 1.4.1 */
-png_alloc_size_t PNGAPI
-png_get_chunk_malloc_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_chunk_malloc_max : 0);
-}
-#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
-
-/* These functions were added to libpng 1.4.0 */
-#ifdef PNG_IO_STATE_SUPPORTED
-png_uint_32 PNGAPI
-png_get_io_state (png_const_structrp png_ptr)
-{
-   return png_ptr->io_state;
-}
-
-png_uint_32 PNGAPI
-png_get_io_chunk_type (png_const_structrp png_ptr)
-{
-   return png_ptr->chunk_name;
-}
-#endif /* ?PNG_IO_STATE_SUPPORTED */
-
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-#  ifdef PNG_GET_PALETTE_MAX_SUPPORTED
-int PNGAPI
-png_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return png_ptr->num_palette_max;
-
-   return (-1);
-}
-#  endif
-#endif
-
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pnginfo.h b/modules/juce_graphics/image_formats/pnglib/pnginfo.h
deleted file mode 100644
index 898a406..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pnginfo.h
+++ /dev/null
@@ -1,260 +0,0 @@
-
-/* pnginfo.h - header file for PNG reference library
- *
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
- /* png_info is a structure that holds the information in a PNG file so
- * that the application can find out the characteristics of the image.
- * If you are reading the file, this structure will tell you what is
- * in the PNG file.  If you are writing the file, fill in the information
- * you want to put into the PNG file, using png_set_*() functions, then
- * call png_write_info().
- *
- * The names chosen should be very close to the PNG specification, so
- * consult that document for information about the meaning of each field.
- *
- * With libpng < 0.95, it was only possible to directly set and read the
- * the values in the png_info_struct, which meant that the contents and
- * order of the values had to remain fixed.  With libpng 0.95 and later,
- * however, there are now functions that abstract the contents of
- * png_info_struct from the application, so this makes it easier to use
- * libpng with dynamic libraries, and even makes it possible to use
- * libraries that don't have all of the libpng ancillary chunk-handing
- * functionality.  In libpng-1.5.0 this was moved into a separate private
- * file that is not visible to applications.
- *
- * The following members may have allocated storage attached that should be
- * cleaned up before the structure is discarded: palette, trans, text,
- * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
- * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these
- * are automatically freed when the info structure is deallocated, if they were
- * allocated internally by libpng.  This behavior can be changed by means
- * of the png_data_freer() function.
- *
- * More allocation details: all the chunk-reading functions that
- * change these members go through the corresponding png_set_*
- * functions.  A function to clear these members is available: see
- * png_free_data().  The png_set_* functions do not depend on being
- * able to point info structure members to any of the storage they are
- * passed (they make their own copies), EXCEPT that the png_set_text
- * functions use the same storage passed to them in the text_ptr or
- * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
- * functions do not make their own copies.
- */
-#ifndef PNGINFO_H
-#define PNGINFO_H
-
-struct png_info_def
-{
-   /* The following are necessary for every PNG file */
-   png_uint_32 width;  /* width of image in pixels (from IHDR) */
-   png_uint_32 height; /* height of image in pixels (from IHDR) */
-   png_uint_32 valid;  /* valid chunk data (see PNG_INFO_ below) */
-   png_size_t rowbytes; /* bytes needed to hold an untransformed row */
-   png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */
-   png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
-   png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */
-   png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
-   png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
-   /* The following three should have been named *_method not *_type */
-   png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
-   png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
-   png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
-
-   /* The following are set by png_set_IHDR, called from the application on
-    * write, but the are never actually used by the write code.
-    */
-   png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */
-   png_byte pixel_depth;    /* number of bits per pixel */
-   png_byte spare_byte;     /* to align the data, and for future use */
-
-#ifdef PNG_READ_SUPPORTED
-   /* This is never set during write */
-   png_byte signature[8];   /* magic bytes read by libpng from start of file */
-#endif
-
-   /* The rest of the data is optional.  If you are reading, check the
-    * valid field to see if the information in these are valid.  If you
-    * are writing, set the valid field to those chunks you want written,
-    * and initialize the appropriate fields below.
-    */
-
-#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
-   /* png_colorspace only contains 'flags' if neither GAMMA or COLORSPACE are
-    * defined.  When COLORSPACE is switched on all the colorspace-defining
-    * chunks should be enabled, when GAMMA is switched on all the gamma-defining
-    * chunks should be enabled.  If this is not done it becomes possible to read
-    * inconsistent PNG files and assign a probably incorrect interpretation to
-    * the information.  (In other words, by carefully choosing which chunks to
-    * recognize the system configuration can select an interpretation for PNG
-    * files containing ambiguous data and this will result in inconsistent
-    * behavior between different libpng builds!)
-    */
-   png_colorspace colorspace;
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-   /* iCCP chunk data. */
-   png_charp iccp_name;     /* profile name */
-   png_bytep iccp_profile;  /* International Color Consortium profile data */
-   png_uint_32 iccp_proflen;  /* ICC profile data length */
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-   /* The tEXt, and zTXt chunks contain human-readable textual data in
-    * uncompressed, compressed, and optionally compressed forms, respectively.
-    * The data in "text" is an array of pointers to uncompressed,
-    * null-terminated C strings. Each chunk has a keyword that describes the
-    * textual data contained in that chunk.  Keywords are not required to be
-    * unique, and the text string may be empty.  Any number of text chunks may
-    * be in an image.
-    */
-   int num_text; /* number of comments read or comments to write */
-   int max_text; /* current size of text array */
-   png_textp text; /* array of comments read or comments to write */
-#endif /* PNG_TEXT_SUPPORTED */
-
-#ifdef PNG_tIME_SUPPORTED
-   /* The tIME chunk holds the last time the displayed image data was
-    * modified.  See the png_time struct for the contents of this struct.
-    */
-   png_time mod_time;
-#endif
-
-#ifdef PNG_sBIT_SUPPORTED
-   /* The sBIT chunk specifies the number of significant high-order bits
-    * in the pixel data.  Values are in the range [1, bit_depth], and are
-    * only specified for the channels in the pixel data.  The contents of
-    * the low-order bits is not specified.  Data is valid if
-    * (valid & PNG_INFO_sBIT) is non-zero.
-    */
-   png_color_8 sig_bit; /* significant bits in color channels */
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
-defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* The tRNS chunk supplies transparency data for paletted images and
-    * other image types that don't need a full alpha channel.  There are
-    * "num_trans" transparency values for a paletted image, stored in the
-    * same order as the palette colors, starting from index 0.  Values
-    * for the data are in the range [0, 255], ranging from fully transparent
-    * to fully opaque, respectively.  For non-paletted images, there is a
-    * single color specified that should be treated as fully transparent.
-    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
-    */
-   png_bytep trans_alpha;    /* alpha values for paletted image */
-   png_color_16 trans_color; /* transparent color for non-palette image */
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* The bKGD chunk gives the suggested image background color if the
-    * display program does not have its own background color and the image
-    * is needs to composited onto a background before display.  The colors
-    * in "background" are normally in the same color space/depth as the
-    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
-    */
-   png_color_16 background;
-#endif
-
-#ifdef PNG_oFFs_SUPPORTED
-   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
-    * and downwards from the top-left corner of the display, page, or other
-    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
-    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
-    */
-   png_int_32 x_offset; /* x offset on page */
-   png_int_32 y_offset; /* y offset on page */
-   png_byte offset_unit_type; /* offset units type */
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-   /* The pHYs chunk gives the physical pixel density of the image for
-    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
-    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
-    */
-   png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
-   png_uint_32 y_pixels_per_unit; /* vertical pixel density */
-   png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-   /* The hIST chunk contains the relative frequency or importance of the
-    * various palette entries, so that a viewer can intelligently select a
-    * reduced-color palette, if required.  Data is an array of "num_palette"
-    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
-    * is non-zero.
-    */
-   png_uint_16p hist;
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-   /* The pCAL chunk describes a transformation between the stored pixel
-    * values and original physical data values used to create the image.
-    * The integer range [0, 2^bit_depth - 1] maps to the floating-point
-    * range given by [pcal_X0, pcal_X1], and are further transformed by a
-    * (possibly non-linear) transformation function given by "pcal_type"
-    * and "pcal_params" into "pcal_units".  Please see the PNG_EQUATION_
-    * defines below, and the PNG-Group's PNG extensions document for a
-    * complete description of the transformations and how they should be
-    * implemented, and for a description of the ASCII parameter strings.
-    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
-    */
-   png_charp pcal_purpose;  /* pCAL chunk description string */
-   png_int_32 pcal_X0;      /* minimum value */
-   png_int_32 pcal_X1;      /* maximum value */
-   png_charp pcal_units;    /* Latin-1 string giving physical units */
-   png_charpp pcal_params;  /* ASCII strings containing parameter values */
-   png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */
-   png_byte pcal_nparams;   /* number of parameters given in pcal_params */
-#endif
-
-/* New members added in libpng-1.0.6 */
-   png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-   /* Storage for unknown chunks that the library doesn't recognize. */
-   png_unknown_chunkp unknown_chunks;
-
-   /* The type of this field is limited by the type of
-    * png_struct::user_chunk_cache_max, else overflow can occur.
-    */
-   int                unknown_chunks_num;
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-   /* Data on sPLT chunks (there may be more than one). */
-   png_sPLT_tp splt_palettes;
-   int         splt_palettes_num; /* Match type returned by png_get API */
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-   /* The sCAL chunk describes the actual physical dimensions of the
-    * subject matter of the graphic.  The chunk contains a unit specification
-    * a byte value, and two ASCII strings representing floating-point
-    * values.  The values are width and height corresponsing to one pixel
-    * in the image.  Data values are valid if (valid & PNG_INFO_sCAL) is
-    * non-zero.
-    */
-   png_byte scal_unit;         /* unit of physical scale */
-   png_charp scal_s_width;     /* string containing height */
-   png_charp scal_s_height;    /* string containing width */
-#endif
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS)
-      non-zero */
-   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
-   png_bytepp row_pointers;        /* the image bits */
-#endif
-
-};
-#endif /* PNGINFO_H */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngmem.c b/modules/juce_graphics/image_formats/pnglib/pngmem.c
deleted file mode 100644
index 43e2948..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngmem.c
+++ /dev/null
@@ -1,277 +0,0 @@
-
-/* pngmem.c - stub functions for memory allocation
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all memory allocation.  Users who
- * need special memory handling are expected to supply replacement
- * functions for png_malloc() and png_free(), and to use
- * png_create_read_struct_2() and png_create_write_struct_2() to
- * identify the replacement functions.
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Free a png_struct */
-void /* PRIVATE */
-png_destroy_png_struct(png_structrp png_ptr)
-{
-   if (png_ptr != NULL)
-   {
-      /* png_free might call png_error and may certainly call
-       * png_get_mem_ptr, so fake a temporary png_struct to support this.
-       */
-      png_struct dummy_struct = *png_ptr;
-      memset(png_ptr, 0, (sizeof *png_ptr));
-      png_free(&dummy_struct, png_ptr);
-
-#     ifdef PNG_SETJMP_SUPPORTED
-         /* We may have a jmp_buf left to deallocate. */
-         png_free_jmpbuf(&dummy_struct);
-#     endif
-   }
-}
-
-/* Allocate memory.  For reasonable files, size should never exceed
- * 64K.  However, zlib may allocate more then 64K if you don't tell
- * it not to.  See zconf.h and png.h for more information.  zlib does
- * need to allocate exactly 64K, so whatever you call here must
- * have the ability to do that.
- */
-PNG_FUNCTION(png_voidp,PNGAPI
-png_calloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
-{
-   png_voidp ret;
-
-   ret = png_malloc(png_ptr, size);
-
-   if (ret != NULL)
-      memset(ret, 0, size);
-
-   return ret;
-}
-
-/* png_malloc_base, an internal function added at libpng 1.6.0, does the work of
- * allocating memory, taking into account limits and PNG_USER_MEM_SUPPORTED.
- * Checking and error handling must happen outside this routine; it returns NULL
- * if the allocation cannot be done (for any reason.)
- */
-PNG_FUNCTION(png_voidp /* PRIVATE */,
-png_malloc_base,(png_const_structrp, png_alloc_size_t size),
-   PNG_ALLOCATED)
-{
-   /* Moved to png_malloc_base from png_malloc_default in 1.6.0; the DOS
-    * allocators have also been removed in 1.6.0, so any 16-bit system now has
-    * to implement a user memory handler.  This checks to be sure it isn't
-    * called with big numbers.
-    */
-#ifdef PNG_USER_MEM_SUPPORTED
-   PNG_UNUSED(png_ptr)
-#endif
-   if (size > 0 && size <= PNG_SIZE_MAX
-#     ifdef PNG_MAX_MALLOC_64K
-         && size <= 65536U
-#     endif
-      )
-   {
-#ifdef PNG_USER_MEM_SUPPORTED
-      if (png_ptr != NULL && png_ptr->malloc_fn != NULL)
-         return png_ptr->malloc_fn(png_constcast(png_structrp,png_ptr), size);
-
-      else
-#endif
-         return malloc((size_t)size); /* checked for truncation above */
-   }
-
-   else
-      return NULL;
-}
-
-/* This is really here only to work round a spurious warning in GCC 4.6 and 4.7
- * that arises because of the checks in png_realloc_array that are repeated in
- * png_malloc_array.
- */
-static png_voidp
-png_malloc_array_checked(png_const_structrp png_ptr, int nelements,
-   size_t element_size)
-{
-   png_alloc_size_t req = nelements; /* known to be > 0 */
-
-   if (req <= PNG_SIZE_MAX/element_size)
-      return png_malloc_base(png_ptr, req * element_size);
-
-   /* The failure case when the request is too large */
-   return NULL;
-}
-
-PNG_FUNCTION(png_voidp /* PRIVATE */,
-png_malloc_array,(png_const_structrp png_ptr, int nelements,
-   size_t element_size),PNG_ALLOCATED)
-{
-   if (nelements <= 0 || element_size == 0)
-      png_error(png_ptr, "internal error: array alloc");
-
-   return png_malloc_array_checked(png_ptr, nelements, element_size);
-}
-
-PNG_FUNCTION(png_voidp /* PRIVATE */,
-png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
-   int old_elements, int add_elements, size_t element_size),PNG_ALLOCATED)
-{
-   /* These are internal errors: */
-   if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
-      (old_array == NULL && old_elements > 0))
-      png_error(png_ptr, "internal error: array realloc");
-
-   /* Check for overflow on the elements count (so the caller does not have to
-    * check.)
-    */
-   if (add_elements <= INT_MAX - old_elements)
-   {
-      png_voidp new_array = png_malloc_array_checked(png_ptr,
-         old_elements+add_elements, element_size);
-
-      if (new_array != NULL)
-      {
-         /* Because png_malloc_array worked the size calculations below cannot
-          * overflow.
-          */
-         if (old_elements > 0)
-            memcpy(new_array, old_array, element_size*(unsigned)old_elements);
-
-         memset((char*)new_array + element_size*(unsigned)old_elements, 0,
-            element_size*(unsigned)add_elements);
-
-         return new_array;
-      }
-   }
-
-   return NULL; /* error */
-}
-
-/* Various functions that have different error handling are derived from this.
- * png_malloc always exists, but if PNG_USER_MEM_SUPPORTED is defined a separate
- * function png_malloc_default is also provided.
- */
-PNG_FUNCTION(png_voidp,PNGAPI
-png_malloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
-{
-   png_voidp ret;
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   ret = png_malloc_base(png_ptr, size);
-
-   if (ret == NULL)
-       png_error(png_ptr, "Out of memory"); /* 'm' means png_malloc */
-
-   return ret;
-}
-
-#ifdef PNG_USER_MEM_SUPPORTED
-PNG_FUNCTION(png_voidp,PNGAPI
-png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
-   PNG_ALLOCATED PNG_DEPRECATED)
-{
-   png_voidp ret;
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   /* Passing 'NULL' here bypasses the application provided memory handler. */
-   ret = png_malloc_base(NULL/*use malloc*/, size);
-
-   if (ret == NULL)
-      png_error(png_ptr, "Out of Memory"); /* 'M' means png_malloc_default */
-
-   return ret;
-}
-#endif /* PNG_USER_MEM_SUPPORTED */
-
-/* This function was added at libpng version 1.2.3.  The png_malloc_warn()
- * function will issue a png_warning and return NULL instead of issuing a
- * png_error, if it fails to allocate the requested memory.
- */
-PNG_FUNCTION(png_voidp,PNGAPI
-png_malloc_warn,(png_const_structrp png_ptr, png_alloc_size_t size),
-   PNG_ALLOCATED)
-{
-   if (png_ptr != NULL)
-   {
-      png_voidp ret = png_malloc_base(png_ptr, size);
-
-      if (ret != NULL)
-         return ret;
-
-      png_warning(png_ptr, "Out of memory");
-   }
-
-   return NULL;
-}
-
-/* Free a pointer allocated by png_malloc().  If ptr is NULL, return
- * without taking any action.
- */
-void PNGAPI
-png_free(png_const_structrp png_ptr, png_voidp ptr)
-{
-   if (png_ptr == NULL || ptr == NULL)
-      return;
-
-#ifdef PNG_USER_MEM_SUPPORTED
-   if (png_ptr->free_fn != NULL)
-      png_ptr->free_fn(png_constcast(png_structrp,png_ptr), ptr);
-
-   else
-      png_free_default(png_ptr, ptr);
-}
-
-PNG_FUNCTION(void,PNGAPI
-png_free_default,(png_const_structrp png_ptr, png_voidp ptr),PNG_DEPRECATED)
-{
-   if (png_ptr == NULL || ptr == NULL)
-      return;
-#endif /* PNG_USER_MEM_SUPPORTED */
-
-   free(ptr);
-}
-
-#ifdef PNG_USER_MEM_SUPPORTED
-/* This function is called when the application wants to use another method
- * of allocating and freeing memory.
- */
-void PNGAPI
-png_set_mem_fn(png_structrp png_ptr, png_voidp mem_ptr, png_malloc_ptr
-  malloc_fn, png_free_ptr free_fn)
-{
-   if (png_ptr != NULL)
-   {
-      png_ptr->mem_ptr = mem_ptr;
-      png_ptr->malloc_fn = malloc_fn;
-      png_ptr->free_fn = free_fn;
-   }
-}
-
-/* This function returns a pointer to the mem_ptr associated with the user
- * functions.  The application should free any memory associated with this
- * pointer before png_write_destroy and png_read_destroy are called.
- */
-png_voidp PNGAPI
-png_get_mem_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return NULL;
-
-   return png_ptr->mem_ptr;
-}
-#endif /* PNG_USER_MEM_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngpread.c b/modules/juce_graphics/image_formats/pnglib/pngpread.c
deleted file mode 100644
index a133331..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngpread.c
+++ /dev/null
@@ -1,1291 +0,0 @@
-
-/* pngpread.c - read a png file in push mode
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-
-/* Push model modes */
-#define PNG_READ_SIG_MODE   0
-#define PNG_READ_CHUNK_MODE 1
-#define PNG_READ_IDAT_MODE  2
-#define PNG_SKIP_MODE       3
-#define PNG_READ_tEXt_MODE  4
-#define PNG_READ_zTXt_MODE  5
-#define PNG_READ_DONE_MODE  6
-#define PNG_READ_iTXt_MODE  7
-#define PNG_ERROR_MODE      8
-
-void PNGAPI
-png_process_data(png_structrp png_ptr, png_inforp info_ptr,
-    png_bytep buffer, png_size_t buffer_size)
-{
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   png_push_restore_buffer(png_ptr, buffer, buffer_size);
-
-   while (png_ptr->buffer_size)
-   {
-      png_process_some_data(png_ptr, info_ptr);
-   }
-}
-
-png_size_t PNGAPI
-png_process_data_pause(png_structrp png_ptr, int save)
-{
-   if (png_ptr != NULL)
-   {
-      /* It's easiest for the caller if we do the save, then the caller doesn't
-       * have to supply the same data again:
-       */
-      if (save)
-         png_push_save_buffer(png_ptr);
-      else
-      {
-         /* This includes any pending saved bytes: */
-         png_size_t remaining = png_ptr->buffer_size;
-         png_ptr->buffer_size = 0;
-
-         /* So subtract the saved buffer size, unless all the data
-          * is actually 'saved', in which case we just return 0
-          */
-         if (png_ptr->save_buffer_size < remaining)
-            return remaining - png_ptr->save_buffer_size;
-      }
-   }
-
-   return 0;
-}
-
-png_uint_32 PNGAPI
-png_process_data_skip(png_structrp png_ptr)
-{
-   png_uint_32 remaining = 0;
-
-   if (png_ptr != NULL && png_ptr->process_mode == PNG_SKIP_MODE &&
-      png_ptr->skip_length > 0)
-   {
-      /* At the end of png_process_data the buffer size must be 0 (see the loop
-       * above) so we can detect a broken call here:
-       */
-      if (png_ptr->buffer_size != 0)
-         png_error(png_ptr,
-            "png_process_data_skip called inside png_process_data");
-
-      /* If is impossible for there to be a saved buffer at this point -
-       * otherwise we could not be in SKIP mode.  This will also happen if
-       * png_process_skip is called inside png_process_data (but only very
-       * rarely.)
-       */
-      if (png_ptr->save_buffer_size != 0)
-         png_error(png_ptr, "png_process_data_skip called with saved data");
-
-      remaining = png_ptr->skip_length;
-      png_ptr->skip_length = 0;
-      png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-   }
-
-   return remaining;
-}
-
-/* What we do with the incoming data depends on what we were previously
- * doing before we ran out of data...
- */
-void /* PRIVATE */
-png_process_some_data(png_structrp png_ptr, png_inforp info_ptr)
-{
-   if (png_ptr == NULL)
-      return;
-
-   switch (png_ptr->process_mode)
-   {
-      case PNG_READ_SIG_MODE:
-      {
-         png_push_read_sig(png_ptr, info_ptr);
-         break;
-      }
-
-      case PNG_READ_CHUNK_MODE:
-      {
-         png_push_read_chunk(png_ptr, info_ptr);
-         break;
-      }
-
-      case PNG_READ_IDAT_MODE:
-      {
-         png_push_read_IDAT(png_ptr);
-         break;
-      }
-
-      case PNG_SKIP_MODE:
-      {
-         png_push_crc_finish(png_ptr);
-         break;
-      }
-
-      default:
-      {
-         png_ptr->buffer_size = 0;
-         break;
-      }
-   }
-}
-
-/* Read any remaining signature bytes from the stream and compare them with
- * the correct PNG signature.  It is possible that this routine is called
- * with bytes already read from the signature, either because they have been
- * checked by the calling application, or because of multiple calls to this
- * routine.
- */
-void /* PRIVATE */
-png_push_read_sig(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_size_t num_checked = png_ptr->sig_bytes,
-             num_to_check = 8 - num_checked;
-
-   if (png_ptr->buffer_size < num_to_check)
-   {
-      num_to_check = png_ptr->buffer_size;
-   }
-
-   png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]),
-       num_to_check);
-   png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes + num_to_check);
-
-   if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
-   {
-      if (num_checked < 4 &&
-          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
-         png_error(png_ptr, "Not a PNG file");
-
-      else
-         png_error(png_ptr, "PNG file corrupted by ASCII conversion");
-   }
-   else
-   {
-      if (png_ptr->sig_bytes >= 8)
-      {
-         png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-      }
-   }
-}
-
-void /* PRIVATE */
-png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_uint_32 chunk_name;
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   int keep; /* unknown handling method */
-#endif
-
-   /* First we make sure we have enough data for the 4 byte chunk name
-    * and the 4 byte chunk length before proceeding with decoding the
-    * chunk data.  To fully decode each of these chunks, we also make
-    * sure we have enough data in the buffer for the 4 byte CRC at the
-    * end of every chunk (except IDAT, which is handled separately).
-    */
-   if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
-   {
-      png_byte chunk_length[4];
-      png_byte chunk_tag[4];
-
-      if (png_ptr->buffer_size < 8)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_push_fill_buffer(png_ptr, chunk_length, 4);
-      png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
-      png_reset_crc(png_ptr);
-      png_crc_read(png_ptr, chunk_tag, 4);
-      png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag);
-      png_check_chunk_name(png_ptr, png_ptr->chunk_name);
-      png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
-   }
-
-   chunk_name = png_ptr->chunk_name;
-
-   if (chunk_name == png_IDAT)
-   {
-      if (png_ptr->mode & PNG_AFTER_IDAT)
-         png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
-
-      /* If we reach an IDAT chunk, this means we have read all of the
-       * header chunks, and we can start reading the image (or if this
-       * is called after the image has been read - we have an error).
-       */
-      if (!(png_ptr->mode & PNG_HAVE_IHDR))
-         png_error(png_ptr, "Missing IHDR before IDAT");
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-          !(png_ptr->mode & PNG_HAVE_PLTE))
-         png_error(png_ptr, "Missing PLTE before IDAT");
-
-      png_ptr->mode |= PNG_HAVE_IDAT;
-
-      if (!(png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
-         if (png_ptr->push_length == 0)
-            return;
-
-      if (png_ptr->mode & PNG_AFTER_IDAT)
-         png_benign_error(png_ptr, "Too many IDATs found");
-   }
-
-   if (chunk_name == png_IHDR)
-   {
-      if (png_ptr->push_length != 13)
-         png_error(png_ptr, "Invalid IHDR length");
-
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-   else if (chunk_name == png_IEND)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length);
-
-      png_ptr->process_mode = PNG_READ_DONE_MODE;
-      png_push_have_end(png_ptr, info_ptr);
-   }
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   else if ((keep = png_chunk_unknown_handling(png_ptr, chunk_name)) != 0)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length, keep);
-
-      if (chunk_name == png_PLTE)
-         png_ptr->mode |= PNG_HAVE_PLTE;
-   }
-
-#endif
-   else if (chunk_name == png_PLTE)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-      png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-   else if (chunk_name == png_IDAT)
-   {
-      png_ptr->idat_size = png_ptr->push_length;
-      png_ptr->process_mode = PNG_READ_IDAT_MODE;
-      png_push_have_info(png_ptr, info_ptr);
-      png_ptr->zstream.avail_out =
-          (uInt) PNG_ROWBYTES(png_ptr->pixel_depth,
-          png_ptr->iwidth) + 1;
-      png_ptr->zstream.next_out = png_ptr->row_buf;
-      return;
-   }
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-   else if (png_ptr->chunk_name == png_gAMA)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sBIT_SUPPORTED
-   else if (png_ptr->chunk_name == png_sBIT)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_cHRM_SUPPORTED
-   else if (png_ptr->chunk_name == png_cHRM)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sRGB_SUPPORTED
-   else if (chunk_name == png_sRGB)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_iCCP_SUPPORTED
-   else if (png_ptr->chunk_name == png_iCCP)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sPLT_SUPPORTED
-   else if (chunk_name == png_sPLT)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_tRNS_SUPPORTED
-   else if (chunk_name == png_tRNS)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_bKGD_SUPPORTED
-   else if (chunk_name == png_bKGD)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_hIST_SUPPORTED
-   else if (chunk_name == png_hIST)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_pHYs_SUPPORTED
-   else if (chunk_name == png_pHYs)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_oFFs_SUPPORTED
-   else if (chunk_name == png_oFFs)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length);
-   }
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-   else if (chunk_name == png_pCAL)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sCAL_SUPPORTED
-   else if (chunk_name == png_sCAL)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_tIME_SUPPORTED
-   else if (chunk_name == png_tIME)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_tEXt_SUPPORTED
-   else if (chunk_name == png_tEXt)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_zTXt_SUPPORTED
-   else if (chunk_name == png_zTXt)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_iTXt_SUPPORTED
-   else if (chunk_name == png_iTXt)
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-   else
-   {
-      if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-      png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length,
-         PNG_HANDLE_CHUNK_AS_DEFAULT);
-   }
-
-   png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-}
-
-void /* PRIVATE */
-png_push_crc_skip(png_structrp png_ptr, png_uint_32 skip)
-{
-   png_ptr->process_mode = PNG_SKIP_MODE;
-   png_ptr->skip_length = skip;
-}
-
-void /* PRIVATE */
-png_push_crc_finish(png_structrp png_ptr)
-{
-   if (png_ptr->skip_length && png_ptr->save_buffer_size)
-   {
-      png_size_t save_size = png_ptr->save_buffer_size;
-      png_uint_32 skip_length = png_ptr->skip_length;
-
-      /* We want the smaller of 'skip_length' and 'save_buffer_size', but
-       * they are of different types and we don't know which variable has the
-       * fewest bits.  Carefully select the smaller and cast it to the type of
-       * the larger - this cannot overflow.  Do not cast in the following test
-       * - it will break on either 16 or 64 bit platforms.
-       */
-      if (skip_length < save_size)
-         save_size = (png_size_t)skip_length;
-
-      else
-         skip_length = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
-      png_ptr->skip_length -= skip_length;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->save_buffer_size -= save_size;
-      png_ptr->save_buffer_ptr += save_size;
-   }
-   if (png_ptr->skip_length && png_ptr->current_buffer_size)
-   {
-      png_size_t save_size = png_ptr->current_buffer_size;
-      png_uint_32 skip_length = png_ptr->skip_length;
-
-      /* We want the smaller of 'skip_length' and 'current_buffer_size', here,
-       * the same problem exists as above and the same solution.
-       */
-      if (skip_length < save_size)
-         save_size = (png_size_t)skip_length;
-
-      else
-         skip_length = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
-      png_ptr->skip_length -= skip_length;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->current_buffer_size -= save_size;
-      png_ptr->current_buffer_ptr += save_size;
-   }
-   if (!png_ptr->skip_length)
-   {
-      if (png_ptr->buffer_size < 4)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_crc_finish(png_ptr, 0);
-      png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-   }
-}
-
-void PNGCBAPI
-png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
-{
-   png_bytep ptr;
-
-   if (png_ptr == NULL)
-      return;
-
-   ptr = buffer;
-   if (png_ptr->save_buffer_size)
-   {
-      png_size_t save_size;
-
-      if (length < png_ptr->save_buffer_size)
-         save_size = length;
-
-      else
-         save_size = png_ptr->save_buffer_size;
-
-      memcpy(ptr, png_ptr->save_buffer_ptr, save_size);
-      length -= save_size;
-      ptr += save_size;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->save_buffer_size -= save_size;
-      png_ptr->save_buffer_ptr += save_size;
-   }
-   if (length && png_ptr->current_buffer_size)
-   {
-      png_size_t save_size;
-
-      if (length < png_ptr->current_buffer_size)
-         save_size = length;
-
-      else
-         save_size = png_ptr->current_buffer_size;
-
-      memcpy(ptr, png_ptr->current_buffer_ptr, save_size);
-      png_ptr->buffer_size -= save_size;
-      png_ptr->current_buffer_size -= save_size;
-      png_ptr->current_buffer_ptr += save_size;
-   }
-}
-
-void /* PRIVATE */
-png_push_save_buffer(png_structrp png_ptr)
-{
-   if (png_ptr->save_buffer_size)
-   {
-      if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
-      {
-         png_size_t i, istop;
-         png_bytep sp;
-         png_bytep dp;
-
-         istop = png_ptr->save_buffer_size;
-         for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
-             i < istop; i++, sp++, dp++)
-         {
-            *dp = *sp;
-         }
-      }
-   }
-   if (png_ptr->save_buffer_size + png_ptr->current_buffer_size >
-       png_ptr->save_buffer_max)
-   {
-      png_size_t new_max;
-      png_bytep old_buffer;
-
-      if (png_ptr->save_buffer_size > PNG_SIZE_MAX -
-          (png_ptr->current_buffer_size + 256))
-      {
-         png_error(png_ptr, "Potential overflow of save_buffer");
-      }
-
-      new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256;
-      old_buffer = png_ptr->save_buffer;
-      png_ptr->save_buffer = (png_bytep)png_malloc_warn(png_ptr,
-          (png_size_t)new_max);
-
-      if (png_ptr->save_buffer == NULL)
-      {
-         png_free(png_ptr, old_buffer);
-         png_error(png_ptr, "Insufficient memory for save_buffer");
-      }
-
-      memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
-      png_free(png_ptr, old_buffer);
-      png_ptr->save_buffer_max = new_max;
-   }
-   if (png_ptr->current_buffer_size)
-   {
-      memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size,
-         png_ptr->current_buffer_ptr, png_ptr->current_buffer_size);
-      png_ptr->save_buffer_size += png_ptr->current_buffer_size;
-      png_ptr->current_buffer_size = 0;
-   }
-   png_ptr->save_buffer_ptr = png_ptr->save_buffer;
-   png_ptr->buffer_size = 0;
-}
-
-void /* PRIVATE */
-png_push_restore_buffer(png_structrp png_ptr, png_bytep buffer,
-   png_size_t buffer_length)
-{
-   png_ptr->current_buffer = buffer;
-   png_ptr->current_buffer_size = buffer_length;
-   png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size;
-   png_ptr->current_buffer_ptr = png_ptr->current_buffer;
-}
-
-void /* PRIVATE */
-png_push_read_IDAT(png_structrp png_ptr)
-{
-   if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
-   {
-      png_byte chunk_length[4];
-      png_byte chunk_tag[4];
-
-      /* TODO: this code can be commoned up with the same code in push_read */
-      if (png_ptr->buffer_size < 8)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_push_fill_buffer(png_ptr, chunk_length, 4);
-      png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
-      png_reset_crc(png_ptr);
-      png_crc_read(png_ptr, chunk_tag, 4);
-      png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag);
-      png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
-
-      if (png_ptr->chunk_name != png_IDAT)
-      {
-         png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-
-         if (!(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
-            png_error(png_ptr, "Not enough compressed data");
-
-         return;
-      }
-
-      png_ptr->idat_size = png_ptr->push_length;
-   }
-
-   if (png_ptr->idat_size && png_ptr->save_buffer_size)
-   {
-      png_size_t save_size = png_ptr->save_buffer_size;
-      png_uint_32 idat_size = png_ptr->idat_size;
-
-      /* We want the smaller of 'idat_size' and 'current_buffer_size', but they
-       * are of different types and we don't know which variable has the fewest
-       * bits.  Carefully select the smaller and cast it to the type of the
-       * larger - this cannot overflow.  Do not cast in the following test - it
-       * will break on either 16 or 64 bit platforms.
-       */
-      if (idat_size < save_size)
-         save_size = (png_size_t)idat_size;
-
-      else
-         idat_size = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
-      png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
-      png_ptr->idat_size -= idat_size;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->save_buffer_size -= save_size;
-      png_ptr->save_buffer_ptr += save_size;
-   }
-
-   if (png_ptr->idat_size && png_ptr->current_buffer_size)
-   {
-      png_size_t save_size = png_ptr->current_buffer_size;
-      png_uint_32 idat_size = png_ptr->idat_size;
-
-      /* We want the smaller of 'idat_size' and 'current_buffer_size', but they
-       * are of different types and we don't know which variable has the fewest
-       * bits.  Carefully select the smaller and cast it to the type of the
-       * larger - this cannot overflow.
-       */
-      if (idat_size < save_size)
-         save_size = (png_size_t)idat_size;
-
-      else
-         idat_size = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
-      png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
-      png_ptr->idat_size -= idat_size;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->current_buffer_size -= save_size;
-      png_ptr->current_buffer_ptr += save_size;
-   }
-   if (!png_ptr->idat_size)
-   {
-      if (png_ptr->buffer_size < 4)
-      {
-         png_push_save_buffer(png_ptr);
-         return;
-      }
-
-      png_crc_finish(png_ptr, 0);
-      png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-      png_ptr->mode |= PNG_AFTER_IDAT;
-      png_ptr->zowner = 0;
-   }
-}
-
-void /* PRIVATE */
-png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
-   png_size_t buffer_length)
-{
-   /* The caller checks for a non-zero buffer length. */
-   if (!(buffer_length > 0) || buffer == NULL)
-      png_error(png_ptr, "No IDAT data (internal error)");
-
-   /* This routine must process all the data it has been given
-    * before returning, calling the row callback as required to
-    * handle the uncompressed results.
-    */
-   png_ptr->zstream.next_in = buffer;
-   /* TODO: WARNING: TRUNCATION ERROR: DANGER WILL ROBINSON: */
-   png_ptr->zstream.avail_in = (uInt)buffer_length;
-
-   /* Keep going until the decompressed data is all processed
-    * or the stream marked as finished.
-    */
-   while (png_ptr->zstream.avail_in > 0 &&
-      !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
-   {
-      int ret;
-
-      /* We have data for zlib, but we must check that zlib
-       * has someplace to put the results.  It doesn't matter
-       * if we don't expect any results -- it may be the input
-       * data is just the LZ end code.
-       */
-      if (!(png_ptr->zstream.avail_out > 0))
-      {
-         /* TODO: WARNING: TRUNCATION ERROR: DANGER WILL ROBINSON: */
-         png_ptr->zstream.avail_out = (uInt)(PNG_ROWBYTES(png_ptr->pixel_depth,
-             png_ptr->iwidth) + 1);
-
-         png_ptr->zstream.next_out = png_ptr->row_buf;
-      }
-
-      /* Using Z_SYNC_FLUSH here means that an unterminated
-       * LZ stream (a stream with a missing end code) can still
-       * be handled, otherwise (Z_NO_FLUSH) a future zlib
-       * implementation might defer output and therefore
-       * change the current behavior (see comments in inflate.c
-       * for why this doesn't happen at present with zlib 1.2.5).
-       */
-      ret = inflate(&png_ptr->zstream, Z_SYNC_FLUSH);
-
-      /* Check for any failure before proceeding. */
-      if (ret != Z_OK && ret != Z_STREAM_END)
-      {
-         /* Terminate the decompression. */
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-         png_ptr->zowner = 0;
-
-         /* This may be a truncated stream (missing or
-          * damaged end code).  Treat that as a warning.
-          */
-         if (png_ptr->row_number >= png_ptr->num_rows ||
-             png_ptr->pass > 6)
-            png_warning(png_ptr, "Truncated compressed data in IDAT");
-
-         else
-            png_error(png_ptr, "Decompression error in IDAT");
-
-         /* Skip the check on unprocessed input */
-         return;
-      }
-
-      /* Did inflate output any data? */
-      if (png_ptr->zstream.next_out != png_ptr->row_buf)
-      {
-         /* Is this unexpected data after the last row?
-          * If it is, artificially terminate the LZ output
-          * here.
-          */
-         if (png_ptr->row_number >= png_ptr->num_rows ||
-             png_ptr->pass > 6)
-         {
-            /* Extra data. */
-            png_warning(png_ptr, "Extra compressed data in IDAT");
-            png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-            png_ptr->zowner = 0;
-
-            /* Do no more processing; skip the unprocessed
-             * input check below.
-             */
-            return;
-         }
-
-         /* Do we have a complete row? */
-         if (png_ptr->zstream.avail_out == 0)
-            png_push_process_row(png_ptr);
-      }
-
-      /* And check for the end of the stream. */
-      if (ret == Z_STREAM_END)
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-   }
-
-   /* All the data should have been processed, if anything
-    * is left at this point we have bytes of IDAT data
-    * after the zlib end code.
-    */
-   if (png_ptr->zstream.avail_in > 0)
-      png_warning(png_ptr, "Extra compression data in IDAT");
-}
-
-void /* PRIVATE */
-png_push_process_row(png_structrp png_ptr)
-{
-   /* 1.5.6: row_info moved out of png_struct to a local here. */
-   png_row_info row_info;
-
-   row_info.width = png_ptr->iwidth; /* NOTE: width of current interlaced row */
-   row_info.color_type = png_ptr->color_type;
-   row_info.bit_depth = png_ptr->bit_depth;
-   row_info.channels = png_ptr->channels;
-   row_info.pixel_depth = png_ptr->pixel_depth;
-   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
-
-   if (png_ptr->row_buf[0] > PNG_FILTER_VALUE_NONE)
-   {
-      if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST)
-         png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1,
-            png_ptr->prev_row + 1, png_ptr->row_buf[0]);
-      else
-         png_error(png_ptr, "bad adaptive filter value");
-   }
-
-   /* libpng 1.5.6: the following line was copying png_ptr->rowbytes before
-    * 1.5.6, while the buffer really is this big in current versions of libpng
-    * it may not be in the future, so this was changed just to copy the
-    * interlaced row count:
-    */
-   memcpy(png_ptr->prev_row, png_ptr->row_buf, row_info.rowbytes + 1);
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   if (png_ptr->transformations)
-      png_do_read_transformations(png_ptr, &row_info);
-#endif
-
-   /* The transformed pixel depth should match the depth now in row_info. */
-   if (png_ptr->transformed_pixel_depth == 0)
-   {
-      png_ptr->transformed_pixel_depth = row_info.pixel_depth;
-      if (row_info.pixel_depth > png_ptr->maximum_pixel_depth)
-         png_error(png_ptr, "progressive row overflow");
-   }
-
-   else if (png_ptr->transformed_pixel_depth != row_info.pixel_depth)
-      png_error(png_ptr, "internal progressive row size calculation error");
-
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Blow up interlaced rows to full size */
-   if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
-   {
-      if (png_ptr->pass < 6)
-         png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
-            png_ptr->transformations);
-
-    switch (png_ptr->pass)
-    {
-         case 0:
-         {
-            int i;
-            for (i = 0; i < 8 && png_ptr->pass == 0; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr); /* Updates png_ptr->pass */
-            }
-
-            if (png_ptr->pass == 2) /* Pass 1 might be empty */
-            {
-               for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            if (png_ptr->pass == 4 && png_ptr->height <= 4)
-            {
-               for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            if (png_ptr->pass == 6 && png_ptr->height <= 4)
-            {
-                png_push_have_row(png_ptr, NULL);
-                png_read_push_finish_row(png_ptr);
-            }
-
-            break;
-         }
-
-         case 1:
-         {
-            int i;
-            for (i = 0; i < 8 && png_ptr->pass == 1; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 2) /* Skip top 4 generated rows */
-            {
-               for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            break;
-         }
-
-         case 2:
-         {
-            int i;
-
-            for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 4) /* Pass 3 might be empty */
-            {
-               for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            break;
-         }
-
-         case 3:
-         {
-            int i;
-
-            for (i = 0; i < 4 && png_ptr->pass == 3; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 4) /* Skip top two generated rows */
-            {
-               for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            break;
-         }
-
-         case 4:
-         {
-            int i;
-
-            for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 6) /* Pass 5 might be empty */
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            break;
-         }
-
-         case 5:
-         {
-            int i;
-
-            for (i = 0; i < 2 && png_ptr->pass == 5; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 6) /* Skip top generated row */
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            break;
-         }
-
-         default:
-         case 6:
-         {
-            png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-            png_read_push_finish_row(png_ptr);
-
-            if (png_ptr->pass != 6)
-               break;
-
-            png_push_have_row(png_ptr, NULL);
-            png_read_push_finish_row(png_ptr);
-         }
-      }
-   }
-   else
-#endif
-   {
-      png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-      png_read_push_finish_row(png_ptr);
-   }
-}
-
-void /* PRIVATE */
-png_read_push_finish_row(png_structrp png_ptr)
-{
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
-
-   /* Height of interlace block.  This is not currently used - if you need
-    * it, uncomment it here and in png.h
-   static PNG_CONST png_byte png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
-   */
-#endif
-
-   png_ptr->row_number++;
-   if (png_ptr->row_number < png_ptr->num_rows)
-      return;
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if (png_ptr->interlaced)
-   {
-      png_ptr->row_number = 0;
-      memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
-      do
-      {
-         png_ptr->pass++;
-         if ((png_ptr->pass == 1 && png_ptr->width < 5) ||
-             (png_ptr->pass == 3 && png_ptr->width < 3) ||
-             (png_ptr->pass == 5 && png_ptr->width < 2))
-            png_ptr->pass++;
-
-         if (png_ptr->pass > 7)
-            png_ptr->pass--;
-
-         if (png_ptr->pass >= 7)
-            break;
-
-         png_ptr->iwidth = (png_ptr->width +
-             png_pass_inc[png_ptr->pass] - 1 -
-             png_pass_start[png_ptr->pass]) /
-             png_pass_inc[png_ptr->pass];
-
-         if (png_ptr->transformations & PNG_INTERLACE)
-            break;
-
-         png_ptr->num_rows = (png_ptr->height +
-             png_pass_yinc[png_ptr->pass] - 1 -
-             png_pass_ystart[png_ptr->pass]) /
-             png_pass_yinc[png_ptr->pass];
-
-      } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0);
-   }
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-}
-
-void /* PRIVATE */
-png_push_have_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-   if (png_ptr->info_fn != NULL)
-      (*(png_ptr->info_fn))(png_ptr, info_ptr);
-}
-
-void /* PRIVATE */
-png_push_have_end(png_structrp png_ptr, png_inforp info_ptr)
-{
-   if (png_ptr->end_fn != NULL)
-      (*(png_ptr->end_fn))(png_ptr, info_ptr);
-}
-
-void /* PRIVATE */
-png_push_have_row(png_structrp png_ptr, png_bytep row)
-{
-   if (png_ptr->row_fn != NULL)
-      (*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number,
-         (int)png_ptr->pass);
-}
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-void PNGAPI
-png_progressive_combine_row(png_const_structrp png_ptr, png_bytep old_row,
-    png_const_bytep new_row)
-{
-   if (png_ptr == NULL)
-      return;
-
-   /* new_row is a flag here - if it is NULL then the app callback was called
-    * from an empty row (see the calls to png_struct::row_fn below), otherwise
-    * it must be png_ptr->row_buf+1
-    */
-   if (new_row != NULL)
-      png_combine_row(png_ptr, old_row, 1/*display*/);
-}
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-
-void PNGAPI
-png_set_progressive_read_fn(png_structrp png_ptr, png_voidp progressive_ptr,
-    png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
-    png_progressive_end_ptr end_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->info_fn = info_fn;
-   png_ptr->row_fn = row_fn;
-   png_ptr->end_fn = end_fn;
-
-   png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
-}
-
-png_voidp PNGAPI
-png_get_progressive_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return (NULL);
-
-   return png_ptr->io_ptr;
-}
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngpriv.h b/modules/juce_graphics/image_formats/pnglib/pngpriv.h
deleted file mode 100644
index a93a877..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngpriv.h
+++ /dev/null
@@ -1,1904 +0,0 @@
-
-/* pngpriv.h - private declarations for use inside libpng
- *
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-/* The symbols declared in this file (including the functions declared
- * as extern) are PRIVATE.  They are not part of the libpng public
- * interface, and are not recommended for use by regular applications.
- * Some of them may become public in the future; others may stay private,
- * change in an incompatible way, or even disappear.
- * Although the libpng users are not forbidden to include this header,
- * they should be well aware of the issues that may arise from doing so.
- */
-
-#ifndef PNGPRIV_H
-#define PNGPRIV_H
-
-/* Feature Test Macros.  The following are defined here to ensure that correctly
- * implemented libraries reveal the APIs libpng needs to build and hide those
- * that are not needed and potentially damaging to the compilation.
- *
- * Feature Test Macros must be defined before any system header is included (see
- * POSIX 1003.1 2.8.2 "POSIX Symbols."
- *
- * These macros only have an effect if the operating system supports either
- * POSIX 1003.1 or C99, or both.  On other operating systems (particularly
- * Windows/Visual Studio) there is no effect; the OS specific tests below are
- * still required (as of 2011-05-02.)
- */
-#define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
-
-#ifndef PNG_VERSION_INFO_ONLY
-/* Standard library headers not required by png.h: */
-#  include <stdlib.h>
-#  include <string.h>
-#endif
-
-#define PNGLIB_BUILD /*libpng is being built, not used*/
-
-/* If HAVE_CONFIG_H is defined during the build then the build system must
- * provide an appropriate "config.h" file on the include path.  The header file
- * must provide definitions as required below (search for "HAVE_CONFIG_H");
- * see configure.ac for more details of the requirements.  The macro
- * "PNG_NO_CONFIG_H" is provided for maintainers to test for dependencies on
- * 'configure'; define this macro to prevent the configure build including the
- * configure generated config.h.  Libpng is expected to compile without *any*
- * special build system support on a reasonably ANSI-C compliant system.
- */
-#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
-#  include <config.h>
-
-   /* Pick up the definition of 'restrict' from config.h if it was read: */
-#  define PNG_RESTRICT restrict
-#endif
-
-/* To support symbol prefixing it is necessary to know *before* including png.h
- * whether the fixed point (and maybe other) APIs are exported, because if they
- * are not internal definitions may be required.  This is handled below just
- * before png.h is included, but load the configuration now if it is available.
- */
-#ifndef PNGLCONF_H
-#  include "pnglibconf.h"
-#endif
-
-/* Local renames may change non-exported API functions from png.h */
-#if defined(PNG_PREFIX) && !defined(PNGPREFIX_H)
-#  include "pngprefix.h"
-#endif
-
-#ifdef PNG_USER_CONFIG
-#  include "pngusr.h"
-   /* These should have been defined in pngusr.h */
-#  ifndef PNG_USER_PRIVATEBUILD
-#    define PNG_USER_PRIVATEBUILD "Custom libpng build"
-#  endif
-#  ifndef PNG_USER_DLLFNAME_POSTFIX
-#    define PNG_USER_DLLFNAME_POSTFIX "Cb"
-#  endif
-#endif
-
-/* Is this a build of a DLL where compilation of the object modules requires
- * different preprocessor settings to those required for a simple library?  If
- * so PNG_BUILD_DLL must be set.
- *
- * If libpng is used inside a DLL but that DLL does not export the libpng APIs
- * PNG_BUILD_DLL must not be set.  To avoid the code below kicking in build a
- * static library of libpng then link the DLL against that.
- */
-#ifndef PNG_BUILD_DLL
-#  ifdef DLL_EXPORT
-      /* This is set by libtool when files are compiled for a DLL; libtool
-       * always compiles twice, even on systems where it isn't necessary.  Set
-       * PNG_BUILD_DLL in case it is necessary:
-       */
-#     define PNG_BUILD_DLL
-#  else
-#     ifdef _WINDLL
-         /* This is set by the Microsoft Visual Studio IDE in projects that
-          * build a DLL.  It can't easily be removed from those projects (it
-          * isn't visible in the Visual Studio UI) so it is a fairly reliable
-          * indication that PNG_IMPEXP needs to be set to the DLL export
-          * attributes.
-          */
-#        define PNG_BUILD_DLL
-#     else
-#        ifdef __DLL__
-            /* This is set by the Borland C system when compiling for a DLL
-             * (as above.)
-             */
-#           define PNG_BUILD_DLL
-#        else
-            /* Add additional compiler cases here. */
-#        endif
-#     endif
-#  endif
-#endif /* Setting PNG_BUILD_DLL if required */
-
-/* See pngconf.h for more details: the builder of the library may set this on
- * the command line to the right thing for the specific compilation system or it
- * may be automagically set above (at present we know of no system where it does
- * need to be set on the command line.)
- *
- * PNG_IMPEXP must be set here when building the library to prevent pngconf.h
- * setting it to the "import" setting for a DLL build.
- */
-#ifndef PNG_IMPEXP
-#  ifdef PNG_BUILD_DLL
-#     define PNG_IMPEXP PNG_DLL_EXPORT
-#  else
-      /* Not building a DLL, or the DLL doesn't require specific export
-       * definitions.
-       */
-#     define PNG_IMPEXP
-#  endif
-#endif
-
-/* No warnings for private or deprecated functions in the build: */
-#ifndef PNG_DEPRECATED
-#  define PNG_DEPRECATED
-#endif
-#ifndef PNG_PRIVATE
-#  define PNG_PRIVATE
-#endif
-
-/* Symbol preprocessing support.
- *
- * To enable listing global, but internal, symbols the following macros should
- * always be used to declare an extern data or function object in this file.
- */
-#ifndef PNG_INTERNAL_DATA
-#  define PNG_INTERNAL_DATA(type, name, array) extern type name array
-#endif
-
-#ifndef PNG_INTERNAL_FUNCTION
-#  define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
-      extern PNG_FUNCTION(type, name, args, PNG_EMPTY attributes)
-#endif
-
-/* If floating or fixed point APIs are disabled they may still be compiled
- * internally.  To handle this make sure they are declared as the appropriate
- * internal extern function (otherwise the symbol prefixing stuff won't work and
- * the functions will be used without definitions.)
- *
- * NOTE: although all the API functions are declared here they are not all
- * actually built!  Because the declarations are still made it is necessary to
- * fake out types that they depend on.
- */
-#ifndef PNG_FP_EXPORT
-#  ifndef PNG_FLOATING_POINT_SUPPORTED
-#     define PNG_FP_EXPORT(ordinal, type, name, args)\
-         PNG_INTERNAL_FUNCTION(type, name, args, PNG_EMPTY);
-#     ifndef PNG_VERSION_INFO_ONLY
-         typedef struct png_incomplete png_double;
-         typedef png_double*           png_doublep;
-         typedef const png_double*     png_const_doublep;
-         typedef png_double**          png_doublepp;
-#     endif
-#  endif
-#endif
-#ifndef PNG_FIXED_EXPORT
-#  ifndef PNG_FIXED_POINT_SUPPORTED
-#     define PNG_FIXED_EXPORT(ordinal, type, name, args)\
-         PNG_INTERNAL_FUNCTION(type, name, args, PNG_EMPTY);
-#  endif
-#endif
-
-#include "png.h"
-
-/* pngconf.h does not set PNG_DLL_EXPORT unless it is required, so: */
-#ifndef PNG_DLL_EXPORT
-#  define PNG_DLL_EXPORT
-#endif
-
-/* SECURITY and SAFETY:
- *
- * By default libpng is built without any internal limits on image size,
- * individual heap (png_malloc) allocations or the total amount of memory used.
- * If PNG_SAFE_LIMITS_SUPPORTED is defined, however, the limits below are used
- * (unless individually overridden).  These limits are believed to be fairly
- * safe, but builders of secure systems should verify the values against the
- * real system capabilities.
- */
-#ifdef PNG_SAFE_LIMITS_SUPPORTED
-   /* 'safe' limits */
-#  ifndef PNG_USER_WIDTH_MAX
-#     define PNG_USER_WIDTH_MAX 1000000
-#  endif
-#  ifndef PNG_USER_HEIGHT_MAX
-#     define PNG_USER_HEIGHT_MAX 1000000
-#  endif
-#  ifndef PNG_USER_CHUNK_CACHE_MAX
-#     define PNG_USER_CHUNK_CACHE_MAX 128
-#  endif
-#  ifndef PNG_USER_CHUNK_MALLOC_MAX
-#     define PNG_USER_CHUNK_MALLOC_MAX 8000000
-#  endif
-#else
-   /* values for no limits */
-#  ifndef PNG_USER_WIDTH_MAX
-#     define PNG_USER_WIDTH_MAX 0x7fffffff
-#  endif
-#  ifndef PNG_USER_HEIGHT_MAX
-#     define PNG_USER_HEIGHT_MAX 0x7fffffff
-#  endif
-#  ifndef PNG_USER_CHUNK_CACHE_MAX
-#     define PNG_USER_CHUNK_CACHE_MAX 0
-#  endif
-#  ifndef PNG_USER_CHUNK_MALLOC_MAX
-#     define PNG_USER_CHUNK_MALLOC_MAX 0
-#  endif
-#endif
-
-/* Moved to pngpriv.h at libpng-1.5.0 */
-/* NOTE: some of these may have been used in external applications as
- * these definitions were exposed in pngconf.h prior to 1.5.
- */
-
-/* If you are running on a machine where you cannot allocate more
- * than 64K of memory at once, uncomment this.  While libpng will not
- * normally need that much memory in a chunk (unless you load up a very
- * large file), zlib needs to know how big of a chunk it can use, and
- * libpng thus makes sure to check any memory allocation to verify it
- * will fit into memory.
- *
- * zlib provides 'MAXSEG_64K' which, if defined, indicates the
- * same limit and pngconf.h (already included) sets the limit
- * if certain operating systems are detected.
- */
-#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
-#  define PNG_MAX_MALLOC_64K
-#endif
-
-#ifndef PNG_UNUSED
-/* Unused formal parameter warnings are silenced using the following macro
- * which is expected to have no bad effects on performance (optimizing
- * compilers will probably remove it entirely).  Note that if you replace
- * it with something other than whitespace, you must include the terminating
- * semicolon.
- */
-#  define PNG_UNUSED(param) (void)param;
-#endif
-
-/* Just a little check that someone hasn't tried to define something
- * contradictory.
- */
-#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)
-#  undef PNG_ZBUF_SIZE
-#  define PNG_ZBUF_SIZE 65536L
-#endif
-
-/* If warnings or errors are turned off the code is disabled or redirected here.
- * From 1.5.4 functions have been added to allow very limited formatting of
- * error and warning messages - this code will also be disabled here.
- */
-#ifdef PNG_WARNINGS_SUPPORTED
-#  define PNG_WARNING_PARAMETERS(p) png_warning_parameters p;
-#else
-#  define png_warning(s1,s2) ((void)(s1))
-#  define png_chunk_warning(s1,s2) ((void)(s1))
-#  define png_warning_parameter(p,number,string) ((void)0)
-#  define png_warning_parameter_unsigned(p,number,format,value) ((void)0)
-#  define png_warning_parameter_signed(p,number,format,value) ((void)0)
-#  define png_formatted_warning(pp,p,message) ((void)(pp))
-#  define PNG_WARNING_PARAMETERS(p)
-#endif
-#ifndef PNG_ERROR_TEXT_SUPPORTED
-#  define png_error(s1,s2) png_err(s1)
-#  define png_chunk_error(s1,s2) png_err(s1)
-#  define png_fixed_error(s1,s2) png_err(s1)
-#endif
-
-/* C allows up-casts from (void*) to any pointer and (const void*) to any
- * pointer to a const object.  C++ regards this as a type error and requires an
- * explicit, static, cast and provides the static_cast<> rune to ensure that
- * const is not cast away.
- */
-#ifdef __cplusplus
-#  define png_voidcast(type, value) static_cast<type>(value)
-#  define png_constcast(type, value) const_cast<type>(value)
-#  define png_aligncast(type, value) \
-   static_cast<type>(static_cast<void*>(value))
-#  define png_aligncastconst(type, value) \
-   static_cast<type>(static_cast<const void*>(value))
-#else
-#  define png_voidcast(type, value) (value)
-#  define png_constcast(type, value) ((type)(value))
-#  define png_aligncast(type, value) ((void*)(value))
-#  define png_aligncastconst(type, value) ((const void*)(value))
-#endif /* __cplusplus */
-
-/* Some fixed point APIs are still required even if not exported because
- * they get used by the corresponding floating point APIs.  This magic
- * deals with this:
- */
-#ifdef PNG_FIXED_POINT_SUPPORTED
-#  define PNGFAPI PNGAPI
-#else
-#  define PNGFAPI /* PRIVATE */
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-/* Other defines specific to compilers can go here.  Try to keep
- * them inside an appropriate ifdef/endif pair for portability.
- */
-#if defined(PNG_FLOATING_POINT_SUPPORTED) ||\
-    defined(PNG_FLOATING_ARITHMETIC_SUPPORTED)
-   /* png.c requires the following ANSI-C constants if the conversion of
-    * floating point to ASCII is implemented therein:
-    *
-    *  DBL_DIG  Maximum number of decimal digits (can be set to any constant)
-    *  DBL_MIN  Smallest normalized fp number (can be set to an arbitrary value)
-    *  DBL_MAX  Maximum floating point number (can be set to an arbitrary value)
-    */
-#  include <float.h>
-
-#  if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
-    defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
-     /* We need to check that <math.h> hasn't already been included earlier
-      * as it seems it doesn't agree with <fp.h>, yet we should really use
-      * <fp.h> if possible.
-      */
-#    if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
-#      include <fp.h>
-#    endif
-#  else
-#    include <math.h>
-#  endif
-#  if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
-     /* Amiga SAS/C: We must include builtin FPU functions when compiling using
-      * MATH=68881
-      */
-#    include <m68881.h>
-#  endif
-#endif
-
-/* This provides the non-ANSI (far) memory allocation routines. */
-#if defined(__TURBOC__) && defined(__MSDOS__)
-#  include <mem.h>
-#  include <alloc.h>
-#endif
-
-#if defined(WIN32) || defined(_Windows) || defined(_WINDOWS) || \
-    defined(_WIN32) || defined(__WIN32__)
-#  include <windows.h>  /* defines _WINDOWS_ macro */
-#endif
-#endif /* PNG_VERSION_INFO_ONLY */
-
-/* Moved here around 1.5.0beta36 from pngconf.h */
-/* Users may want to use these so they are not private.  Any library
- * functions that are passed far data must be model-independent.
- */
-
-/* Memory model/platform independent fns */
-#ifndef PNG_ABORT
-#  ifdef _WINDOWS_
-#    define PNG_ABORT() ExitProcess(0)
-#  else
-#    define PNG_ABORT() abort()
-#  endif
-#endif
-
-/* These macros may need to be architecture dependent. */
-#define PNG_ALIGN_NONE   0 /* do not use data alignment */
-#define PNG_ALIGN_ALWAYS 1 /* assume unaligned accesses are OK */
-#ifdef offsetof
-#  define PNG_ALIGN_OFFSET 2 /* use offsetof to determine alignment */
-#else
-#  define PNG_ALIGN_OFFSET -1 /* prevent the use of this */
-#endif
-#define PNG_ALIGN_SIZE   3 /* use sizeof to determine alignment */
-
-#ifndef PNG_ALIGN_TYPE
-   /* Default to using aligned access optimizations and requiring alignment to a
-    * multiple of the data type size.  Override in a compiler specific fashion
-    * if necessary by inserting tests here:
-    */
-#  define PNG_ALIGN_TYPE PNG_ALIGN_SIZE
-#endif
-
-#if PNG_ALIGN_TYPE == PNG_ALIGN_SIZE
-   /* This is used because in some compiler implementations non-aligned
-    * structure members are supported, so the offsetof approach below fails.
-    * Set PNG_ALIGN_SIZE=0 for compiler combinations where unaligned access
-    * is good for performance.  Do not do this unless you have tested the result
-    * and understand it.
-    */
-#  define png_alignof(type) (sizeof (type))
-#else
-#  if PNG_ALIGN_TYPE == PNG_ALIGN_OFFSET
-#     define png_alignof(type) offsetof(struct{char c; type t;}, t)
-#  else
-#     if PNG_ALIGN_TYPE == PNG_ALIGN_ALWAYS
-#        define png_alignof(type) (1)
-#     endif
-      /* Else leave png_alignof undefined to prevent use thereof */
-#  endif
-#endif
-
-/* This implicitly assumes alignment is always to a power of 2. */
-#ifdef png_alignof
-#  define png_isaligned(ptr, type)\
-   ((((const char*)ptr-(const char*)0) & (png_alignof(type)-1)) == 0)
-#else
-#  define png_isaligned(ptr, type) 0
-#endif
-
-/* End of memory model/platform independent support */
-/* End of 1.5.0beta36 move from pngconf.h */
-
-/* CONSTANTS and UTILITY MACROS
- * These are used internally by libpng and not exposed in the API
- */
-
-/* Various modes of operation.  Note that after an init, mode is set to
- * zero automatically when the structure is created.  Three of these
- * are defined in png.h because they need to be visible to applications
- * that call png_set_unknown_chunk().
- */
-/* #define PNG_HAVE_IHDR            0x01 (defined in png.h) */
-/* #define PNG_HAVE_PLTE            0x02 (defined in png.h) */
-#define PNG_HAVE_IDAT               0x04
-/* #define PNG_AFTER_IDAT           0x08 (defined in png.h) */
-#define PNG_HAVE_IEND               0x10
-                   /*               0x20 (unused) */
-                   /*               0x40 (unused) */
-                   /*               0x80 (unused) */
-#define PNG_HAVE_CHUNK_HEADER      0x100
-#define PNG_WROTE_tIME             0x200
-#define PNG_WROTE_INFO_BEFORE_PLTE 0x400
-#define PNG_BACKGROUND_IS_GRAY     0x800
-#define PNG_HAVE_PNG_SIGNATURE    0x1000
-#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
-                   /*             0x4000 (unused) */
-#define PNG_IS_READ_STRUCT        0x8000 /* Else is a write struct */
-
-/* Flags for the transformations the PNG library does on the image data */
-#define PNG_BGR                 0x0001
-#define PNG_INTERLACE           0x0002
-#define PNG_PACK                0x0004
-#define PNG_SHIFT               0x0008
-#define PNG_SWAP_BYTES          0x0010
-#define PNG_INVERT_MONO         0x0020
-#define PNG_QUANTIZE            0x0040
-#define PNG_COMPOSE             0x0080     /* Was PNG_BACKGROUND */
-#define PNG_BACKGROUND_EXPAND   0x0100
-#define PNG_EXPAND_16           0x0200     /* Added to libpng 1.5.2 */
-#define PNG_16_TO_8             0x0400     /* Becomes 'chop' in 1.5.4 */
-#define PNG_RGBA                0x0800
-#define PNG_EXPAND              0x1000
-#define PNG_GAMMA               0x2000
-#define PNG_GRAY_TO_RGB         0x4000
-#define PNG_FILLER              0x8000
-#define PNG_PACKSWAP           0x10000
-#define PNG_SWAP_ALPHA         0x20000
-#define PNG_STRIP_ALPHA        0x40000
-#define PNG_INVERT_ALPHA       0x80000
-#define PNG_USER_TRANSFORM    0x100000
-#define PNG_RGB_TO_GRAY_ERR   0x200000
-#define PNG_RGB_TO_GRAY_WARN  0x400000
-#define PNG_RGB_TO_GRAY       0x600000 /* two bits, RGB_TO_GRAY_ERR|WARN */
-#define PNG_ENCODE_ALPHA      0x800000 /* Added to libpng-1.5.4 */
-#define PNG_ADD_ALPHA         0x1000000 /* Added to libpng-1.2.7 */
-#define PNG_EXPAND_tRNS       0x2000000 /* Added to libpng-1.2.9 */
-#define PNG_SCALE_16_TO_8     0x4000000 /* Added to libpng-1.5.4 */
-                       /*   0x8000000 unused */
-                       /*  0x10000000 unused */
-                       /*  0x20000000 unused */
-                       /*  0x40000000 unused */
-/* Flags for png_create_struct */
-#define PNG_STRUCT_PNG   0x0001
-#define PNG_STRUCT_INFO  0x0002
-
-/* Scaling factor for filter heuristic weighting calculations */
-#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
-#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
-
-/* Flags for the png_ptr->flags rather than declaring a byte for each one */
-#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
-#define PNG_FLAG_ZSTREAM_INITIALIZED      0x0002 /* Added to libpng-1.6.0 */
-                                  /*      0x0004    unused */
-#define PNG_FLAG_ZSTREAM_ENDED            0x0008 /* Added to libpng-1.6.0 */
-                                  /*      0x0010    unused */
-                                  /*      0x0020    unused */
-#define PNG_FLAG_ROW_INIT                 0x0040
-#define PNG_FLAG_FILLER_AFTER             0x0080
-#define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
-#define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
-#define PNG_FLAG_CRC_CRITICAL_USE         0x0400
-#define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
-#define PNG_FLAG_ASSUME_sRGB              0x1000 /* Added to libpng-1.5.4 */
-#define PNG_FLAG_OPTIMIZE_ALPHA           0x2000 /* Added to libpng-1.5.4 */
-#define PNG_FLAG_DETECT_UNINITIALIZED     0x4000 /* Added to libpng-1.5.4 */
-/* #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000 */
-/* #define PNG_FLAG_KEEP_UNSAFE_CHUNKS      0x10000 */
-#define PNG_FLAG_LIBRARY_MISMATCH        0x20000
-#define PNG_FLAG_STRIP_ERROR_NUMBERS     0x40000
-#define PNG_FLAG_STRIP_ERROR_TEXT        0x80000
-#define PNG_FLAG_BENIGN_ERRORS_WARN     0x100000 /* Added to libpng-1.4.0 */
-#define PNG_FLAG_APP_WARNINGS_WARN      0x200000 /* Added to libpng-1.6.0 */
-#define PNG_FLAG_APP_ERRORS_WARN        0x400000 /* Added to libpng-1.6.0 */
-                                  /*    0x800000    unused */
-                                  /*   0x1000000    unused */
-                                  /*   0x2000000    unused */
-                                  /*   0x4000000    unused */
-                                  /*   0x8000000    unused */
-                                  /*  0x10000000    unused */
-                                  /*  0x20000000    unused */
-                                  /*  0x40000000    unused */
-
-#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
-                                     PNG_FLAG_CRC_ANCILLARY_NOWARN)
-
-#define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
-                                     PNG_FLAG_CRC_CRITICAL_IGNORE)
-
-#define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
-                                     PNG_FLAG_CRC_CRITICAL_MASK)
-
-/* Save typing and make code easier to understand */
-
-#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
-   abs((int)((c1).green) - (int)((c2).green)) + \
-   abs((int)((c1).blue) - (int)((c2).blue)))
-
-/* Added to libpng-1.6.0: scale a 16-bit value in the range 0..65535 to 0..255
- * by dividing by 257 *with rounding*.  This macro is exact for the given range.
- * See the discourse in pngrtran.c png_do_scale_16_to_8.  The values in the
- * macro were established by experiment (modifying the added value).  The macro
- * has a second variant that takes a value already scaled by 255 and divides by
- * 65535 - this has a maximum error of .502.  Over the range 0..65535*65535 it
- * only gives off-by-one errors and only for 0.5% (1 in 200) of the values.
- */
-#define PNG_DIV65535(v24) (((v24) + 32895) >> 16)
-#define PNG_DIV257(v16) PNG_DIV65535((png_uint_32)(v16) * 255)
-
-/* Added to libpng-1.2.6 JB */
-#define PNG_ROWBYTES(pixel_bits, width) \
-    ((pixel_bits) >= 8 ? \
-    ((png_size_t)(width) * (((png_size_t)(pixel_bits)) >> 3)) : \
-    (( ((png_size_t)(width) * ((png_size_t)(pixel_bits))) + 7) >> 3) )
-
-/* PNG_OUT_OF_RANGE returns true if value is outside the range
- * ideal-delta..ideal+delta.  Each argument is evaluated twice.
- * "ideal" and "delta" should be constants, normally simple
- * integers, "value" a variable. Added to libpng-1.2.6 JB
- */
-#define PNG_OUT_OF_RANGE(value, ideal, delta) \
-   ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
-
-/* Conversions between fixed and floating point, only defined if
- * required (to make sure the code doesn't accidentally use float
- * when it is supposedly disabled.)
- */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-/* The floating point conversion can't overflow, though it can and
- * does lose accuracy relative to the original fixed point value.
- * In practice this doesn't matter because png_fixed_point only
- * stores numbers with very low precision.  The png_ptr and s
- * arguments are unused by default but are there in case error
- * checking becomes a requirement.
- */
-#define png_float(png_ptr, fixed, s) (.00001 * (fixed))
-
-/* The fixed point conversion performs range checking and evaluates
- * its argument multiple times, so must be used with care.  The
- * range checking uses the PNG specification values for a signed
- * 32 bit fixed point value except that the values are deliberately
- * rounded-to-zero to an integral value - 21474 (21474.83 is roughly
- * (2^31-1) * 100000). 's' is a string that describes the value being
- * converted.
- *
- * NOTE: this macro will raise a png_error if the range check fails,
- * therefore it is normally only appropriate to use this on values
- * that come from API calls or other sources where an out of range
- * error indicates a programming error, not a data error!
- *
- * NOTE: by default this is off - the macro is not used - because the
- * function call saves a lot of code.
- */
-#ifdef PNG_FIXED_POINT_MACRO_SUPPORTED
-#define png_fixed(png_ptr, fp, s) ((fp) <= 21474 && (fp) >= -21474 ?\
-    ((png_fixed_point)(100000 * (fp))) : (png_fixed_error(png_ptr, s),0))
-#endif
-/* else the corresponding function is defined below, inside the scope of the
- * cplusplus test.
- */
-#endif
-
-/* Constants for known chunk types.  If you need to add a chunk, define the name
- * here.  For historical reasons these constants have the form png_<name>; i.e.
- * the prefix is lower case.  Please use decimal values as the parameters to
- * match the ISO PNG specification and to avoid relying on the C locale
- * interpretation of character values.
- *
- * Prior to 1.5.6 these constants were strings, as of 1.5.6 png_uint_32 values
- * are computed and a new macro (PNG_STRING_FROM_CHUNK) added to allow a string
- * to be generated if required.
- *
- * PNG_32b correctly produces a value shifted by up to 24 bits, even on
- * architectures where (int) is only 16 bits.
- */
-#define PNG_32b(b,s) ((png_uint_32)(b) << (s))
-#define PNG_CHUNK(b1,b2,b3,b4) \
-   (PNG_32b(b1,24) | PNG_32b(b2,16) | PNG_32b(b3,8) | PNG_32b(b4,0))
-
-#define png_IHDR PNG_CHUNK( 73,  72,  68,  82)
-#define png_IDAT PNG_CHUNK( 73,  68,  65,  84)
-#define png_IEND PNG_CHUNK( 73,  69,  78,  68)
-#define png_PLTE PNG_CHUNK( 80,  76,  84,  69)
-#define png_bKGD PNG_CHUNK( 98,  75,  71,  68)
-#define png_cHRM PNG_CHUNK( 99,  72,  82,  77)
-#define png_gAMA PNG_CHUNK(103,  65,  77,  65)
-#define png_hIST PNG_CHUNK(104,  73,  83,  84)
-#define png_iCCP PNG_CHUNK(105,  67,  67,  80)
-#define png_iTXt PNG_CHUNK(105,  84,  88, 116)
-#define png_oFFs PNG_CHUNK(111,  70,  70, 115)
-#define png_pCAL PNG_CHUNK(112,  67,  65,  76)
-#define png_sCAL PNG_CHUNK(115,  67,  65,  76)
-#define png_pHYs PNG_CHUNK(112,  72,  89, 115)
-#define png_sBIT PNG_CHUNK(115,  66,  73,  84)
-#define png_sPLT PNG_CHUNK(115,  80,  76,  84)
-#define png_sRGB PNG_CHUNK(115,  82,  71,  66)
-#define png_sTER PNG_CHUNK(115,  84,  69,  82)
-#define png_tEXt PNG_CHUNK(116,  69,  88, 116)
-#define png_tIME PNG_CHUNK(116,  73,  77,  69)
-#define png_tRNS PNG_CHUNK(116,  82,  78,  83)
-#define png_zTXt PNG_CHUNK(122,  84,  88, 116)
-
-/* The following will work on (signed char*) strings, whereas the get_uint_32
- * macro will fail on top-bit-set values because of the sign extension.
- */
-#define PNG_CHUNK_FROM_STRING(s)\
-   PNG_CHUNK(0xff&(s)[0], 0xff&(s)[1], 0xff&(s)[2], 0xff&(s)[3])
-
-/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is
- * signed and the argument is a (char[])  This macro will fail miserably on
- * systems where (char) is more than 8 bits.
- */
-#define PNG_STRING_FROM_CHUNK(s,c)\
-   (void)(((char*)(s))[0]=(char)((c)>>24), ((char*)(s))[1]=(char)((c)>>16),\
-   ((char*)(s))[2]=(char)((c)>>8), ((char*)(s))[3]=(char)((c)))
-
-/* Do the same but terminate with a null character. */
-#define PNG_CSTRING_FROM_CHUNK(s,c)\
-   (void)(PNG_STRING_FROM_CHUNK(s,c), ((char*)(s))[4] = 0)
-
-/* Test on flag values as defined in the spec (section 5.4): */
-#define PNG_CHUNK_ANCILLIARY(c)   (1 & ((c) >> 29))
-#define PNG_CHUNK_CRITICAL(c)     (!PNG_CHUNK_ANCILLIARY(c))
-#define PNG_CHUNK_PRIVATE(c)      (1 & ((c) >> 21))
-#define PNG_CHUNK_RESERVED(c)     (1 & ((c) >> 13))
-#define PNG_CHUNK_SAFE_TO_COPY(c) (1 & ((c) >>  5))
-
-/* Gamma values (new at libpng-1.5.4): */
-#define PNG_GAMMA_MAC_OLD 151724  /* Assume '1.8' is really 2.2/1.45! */
-#define PNG_GAMMA_MAC_INVERSE 65909
-#define PNG_GAMMA_sRGB_INVERSE 45455
-
-/* Almost everything below is C specific; the #defines above can be used in
- * non-C code (so long as it is C-preprocessed) the rest of this stuff cannot.
- */
-#ifndef PNG_VERSION_INFO_ONLY
-
-#include "pngstruct.h"
-#include "pnginfo.h"
-
-/* This is used for 16 bit gamma tables -- only the top level pointers are
- * const; this could be changed:
- */
-typedef const png_uint_16p * png_const_uint_16pp;
-
-/* Added to libpng-1.5.7: sRGB conversion tables */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_table, [256]);
-   /* Convert from an sRGB encoded value 0..255 to a 16-bit linear value,
-    * 0..65535.  This table gives the closest 16-bit answers (no errors).
-    */
-#endif
-
-PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_base, [512]);
-PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
-
-#define PNG_sRGB_FROM_LINEAR(linear) ((png_byte)((png_sRGB_base[(linear)>>15] +\
-   ((((linear)&0x7fff)*png_sRGB_delta[(linear)>>15])>>12)) >> 8))
-   /* Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
-    * encoded value with maximum error 0.646365.  Note that the input is not a
-    * 16-bit value; it has been multiplied by 255! */
-#endif /* PNG_SIMPLIFIED_READ/WRITE */
-
-
-/* Internal functions; these are not exported from a DLL however because they
- * are used within several of the C source files they have to be C extern.
- *
- * All of these functions must be declared with PNG_INTERNAL_FUNCTION.
- */
-
-/* Zlib support */
-#define PNG_UNEXPECTED_ZLIB_RETURN (-7)
-PNG_INTERNAL_FUNCTION(void, png_zstream_error,(png_structrp png_ptr, int ret),
-   PNG_EMPTY);
-   /* Used by the zlib handling functions to ensure that z_stream::msg is always
-    * set before they return.
-    */
-
-#ifdef PNG_WRITE_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_free_buffer_list,(png_structrp png_ptr,
-   png_compression_bufferp *list),PNG_EMPTY);
-   /* Free the buffer list used by the compressed write code. */
-#endif
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && \
-   !defined(PNG_FIXED_POINT_MACRO_SUPPORTED) && \
-   (defined(PNG_gAMA_SUPPORTED) || defined(PNG_cHRM_SUPPORTED) || \
-   defined(PNG_sCAL_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)) || \
-   (defined(PNG_sCAL_SUPPORTED) && \
-   defined(PNG_FLOATING_ARITHMETIC_SUPPORTED))
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_fixed,(png_const_structrp png_ptr,
-   double fp, png_const_charp text),PNG_EMPTY);
-#endif
-
-/* Check the user version string for compatibility, returns false if the version
- * numbers aren't compatible.
- */
-PNG_INTERNAL_FUNCTION(int,png_user_version_check,(png_structrp png_ptr,
-   png_const_charp user_png_ver),PNG_EMPTY);
-
-/* Internal base allocator - no messages, NULL on failure to allocate.  This
- * does, however, call the application provided allocator and that could call
- * png_error (although that would be a bug in the application implementation.)
- */
-PNG_INTERNAL_FUNCTION(png_voidp,png_malloc_base,(png_const_structrp png_ptr,
-   png_alloc_size_t size),PNG_ALLOCATED);
-
-#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) ||\
-   defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED)
-/* Internal array allocator, outputs no error or warning messages on failure,
- * just returns NULL.
- */
-PNG_INTERNAL_FUNCTION(png_voidp,png_malloc_array,(png_const_structrp png_ptr,
-   int nelements, size_t element_size),PNG_ALLOCATED);
-
-/* The same but an existing array is extended by add_elements.  This function
- * also memsets the new elements to 0 and copies the old elements.  The old
- * array is not freed or altered.
- */
-PNG_INTERNAL_FUNCTION(png_voidp,png_realloc_array,(png_const_structrp png_ptr,
-   png_const_voidp array, int old_elements, int add_elements,
-   size_t element_size),PNG_ALLOCATED);
-#endif /* text, sPLT or unknown chunks */
-
-/* Magic to create a struct when there is no struct to call the user supplied
- * memory allocators.  Because error handling has not been set up the memory
- * handlers can't safely call png_error, but this is an obscure and undocumented
- * restriction so libpng has to assume that the 'free' handler, at least, might
- * call png_error.
- */
-PNG_INTERNAL_FUNCTION(png_structp,png_create_png_struct,
-   (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn,
-    png_free_ptr free_fn),PNG_ALLOCATED);
-
-/* Free memory from internal libpng struct */
-PNG_INTERNAL_FUNCTION(void,png_destroy_png_struct,(png_structrp png_ptr),
-   PNG_EMPTY);
-
-/* Free an allocated jmp_buf (always succeeds) */
-PNG_INTERNAL_FUNCTION(void,png_free_jmpbuf,(png_structrp png_ptr),PNG_EMPTY);
-
-/* Function to allocate memory for zlib.  PNGAPI is disallowed. */
-PNG_INTERNAL_FUNCTION(voidpf,png_zalloc,(voidpf png_ptr, uInt items, uInt size),
-   PNG_ALLOCATED);
-
-/* Function to free memory for zlib.  PNGAPI is disallowed. */
-PNG_INTERNAL_FUNCTION(void,png_zfree,(voidpf png_ptr, voidpf ptr),PNG_EMPTY);
-
-/* Next four functions are used internally as callbacks.  PNGCBAPI is required
- * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3, changed to
- * PNGCBAPI at 1.5.0
- */
-
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_read_data,(png_structp png_ptr,
-    png_bytep data, png_size_t length),PNG_EMPTY);
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_push_fill_buffer,(png_structp png_ptr,
-    png_bytep buffer, png_size_t length),PNG_EMPTY);
-#endif
-
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_write_data,(png_structp png_ptr,
-    png_bytep data, png_size_t length),PNG_EMPTY);
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-#  ifdef PNG_STDIO_SUPPORTED
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_flush,(png_structp png_ptr),
-   PNG_EMPTY);
-#  endif
-#endif
-
-/* Reset the CRC variable */
-PNG_INTERNAL_FUNCTION(void,png_reset_crc,(png_structrp png_ptr),PNG_EMPTY);
-
-/* Write the "data" buffer to whatever output you are using */
-PNG_INTERNAL_FUNCTION(void,png_write_data,(png_structrp png_ptr,
-    png_const_bytep data, png_size_t length),PNG_EMPTY);
-
-/* Read and check the PNG file signature */
-PNG_INTERNAL_FUNCTION(void,png_read_sig,(png_structrp png_ptr,
-   png_inforp info_ptr),PNG_EMPTY);
-
-/* Read the chunk header (length + type name) */
-PNG_INTERNAL_FUNCTION(png_uint_32,png_read_chunk_header,(png_structrp png_ptr),
-   PNG_EMPTY);
-
-/* Read data from whatever input you are using into the "data" buffer */
-PNG_INTERNAL_FUNCTION(void,png_read_data,(png_structrp png_ptr, png_bytep data,
-    png_size_t length),PNG_EMPTY);
-
-/* Read bytes into buf, and update png_ptr->crc */
-PNG_INTERNAL_FUNCTION(void,png_crc_read,(png_structrp png_ptr, png_bytep buf,
-    png_uint_32 length),PNG_EMPTY);
-
-/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
-PNG_INTERNAL_FUNCTION(int,png_crc_finish,(png_structrp png_ptr,
-   png_uint_32 skip),PNG_EMPTY);
-
-/* Read the CRC from the file and compare it to the libpng calculated CRC */
-PNG_INTERNAL_FUNCTION(int,png_crc_error,(png_structrp png_ptr),PNG_EMPTY);
-
-/* Calculate the CRC over a section of data.  Note that we are only
- * passing a maximum of 64K on systems that have this as a memory limit,
- * since this is the maximum buffer size we can specify.
- */
-PNG_INTERNAL_FUNCTION(void,png_calculate_crc,(png_structrp png_ptr,
-   png_const_bytep ptr, png_size_t length),PNG_EMPTY);
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_flush,(png_structrp png_ptr),PNG_EMPTY);
-#endif
-
-/* Write various chunks */
-
-/* Write the IHDR chunk, and update the png_struct with the necessary
- * information.
- */
-PNG_INTERNAL_FUNCTION(void,png_write_IHDR,(png_structrp png_ptr,
-   png_uint_32 width, png_uint_32 height, int bit_depth, int color_type,
-   int compression_method, int filter_method, int interlace_method),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_write_PLTE,(png_structrp png_ptr,
-   png_const_colorp palette, png_uint_32 num_pal),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_compress_IDAT,(png_structrp png_ptr,
-   png_const_bytep row_data, png_alloc_size_t row_data_length, int flush),
-   PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_write_IEND,(png_structrp png_ptr),PNG_EMPTY);
-
-#ifdef PNG_WRITE_gAMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_gAMA_fixed,(png_structrp png_ptr,
-    png_fixed_point file_gamma),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_sBIT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sBIT,(png_structrp png_ptr,
-    png_const_color_8p sbit, int color_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_cHRM_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_cHRM_fixed,(png_structrp png_ptr,
-    const png_xy *xy), PNG_EMPTY);
-    /* The xy value must have been previously validated */
-#endif
-
-#ifdef PNG_WRITE_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sRGB,(png_structrp png_ptr,
-    int intent),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_iCCP_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_iCCP,(png_structrp png_ptr,
-   png_const_charp name, png_const_bytep profile), PNG_EMPTY);
-   /* The profile must have been previously validated for correctness, the
-    * length comes from the first four bytes.  Only the base, deflate,
-    * compression is supported.
-    */
-#endif
-
-#ifdef PNG_WRITE_sPLT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sPLT,(png_structrp png_ptr,
-    png_const_sPLT_tp palette),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_tRNS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_tRNS,(png_structrp png_ptr,
-    png_const_bytep trans, png_const_color_16p values, int number,
-    int color_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_bKGD_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_bKGD,(png_structrp png_ptr,
-    png_const_color_16p values, int color_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_hIST_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_hIST,(png_structrp png_ptr,
-    png_const_uint_16p hist, int num_hist),PNG_EMPTY);
-#endif
-
-/* Chunks that have keywords */
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_tEXt,(png_structrp png_ptr,
-   png_const_charp key, png_const_charp text, png_size_t text_len),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_zTXt,(png_structrp png_ptr, png_const_charp
-    key, png_const_charp text, png_size_t text_len, int compression),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_iTXt,(png_structrp png_ptr,
-    int compression, png_const_charp key, png_const_charp lang,
-    png_const_charp lang_key, png_const_charp text),PNG_EMPTY);
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED  /* Added at version 1.0.14 and 1.2.4 */
-PNG_INTERNAL_FUNCTION(int,png_set_text_2,(png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_textp text_ptr, int num_text),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_oFFs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_oFFs,(png_structrp png_ptr,
-    png_int_32 x_offset, png_int_32 y_offset, int unit_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_pCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_pCAL,(png_structrp png_ptr,
-    png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams,
-    png_const_charp units, png_charpp params),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_pHYs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_pHYs,(png_structrp png_ptr,
-    png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
-    int unit_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_tIME_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_tIME,(png_structrp png_ptr,
-    png_const_timep mod_time),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_sCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sCAL_s,(png_structrp png_ptr,
-    int unit, png_const_charp width, png_const_charp height),PNG_EMPTY);
-#endif
-
-/* Called when finished processing a row of data */
-PNG_INTERNAL_FUNCTION(void,png_write_finish_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-
-/* Internal use only.   Called before first row of data */
-PNG_INTERNAL_FUNCTION(void,png_write_start_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-
-/* Combine a row of data, dealing with alpha, etc. if requested.  'row' is an
- * array of png_ptr->width pixels.  If the image is not interlaced or this
- * is the final pass this just does a memcpy, otherwise the "display" flag
- * is used to determine whether to copy pixels that are not in the current pass.
- *
- * Because 'png_do_read_interlace' (below) replicates pixels this allows this
- * function to achieve the documented 'blocky' appearance during interlaced read
- * if display is 1 and the 'sparkle' appearance, where existing pixels in 'row'
- * are not changed if they are not in the current pass, when display is 0.
- *
- * 'display' must be 0 or 1, otherwise the memcpy will be done regardless.
- *
- * The API always reads from the png_struct row buffer and always assumes that
- * it is full width (png_do_read_interlace has already been called.)
- *
- * This function is only ever used to write to row buffers provided by the
- * caller of the relevant libpng API and the row must have already been
- * transformed by the read transformations.
- *
- * The PNG_USE_COMPILE_TIME_MASKS option causes generation of pre-computed
- * bitmasks for use within the code, otherwise runtime generated masks are used.
- * The default is compile time masks.
- */
-#ifndef PNG_USE_COMPILE_TIME_MASKS
-#  define PNG_USE_COMPILE_TIME_MASKS 1
-#endif
-PNG_INTERNAL_FUNCTION(void,png_combine_row,(png_const_structrp png_ptr,
-    png_bytep row, int display),PNG_EMPTY);
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-/* Expand an interlaced row: the 'row_info' describes the pass data that has
- * been read in and must correspond to the pixels in 'row', the pixels are
- * expanded (moved apart) in 'row' to match the final layout, when doing this
- * the pixels are *replicated* to the intervening space.  This is essential for
- * the correct operation of png_combine_row, above.
- */
-PNG_INTERNAL_FUNCTION(void,png_do_read_interlace,(png_row_infop row_info,
-    png_bytep row, int pass, png_uint_32 transformations),PNG_EMPTY);
-#endif
-
-/* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-/* Grab pixels out of a row for an interlaced pass */
-PNG_INTERNAL_FUNCTION(void,png_do_write_interlace,(png_row_infop row_info,
-    png_bytep row, int pass),PNG_EMPTY);
-#endif
-
-/* Unfilter a row: check the filter value before calling this, there is no point
- * calling it for PNG_FILTER_VALUE_NONE.
- */
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
-    png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-
-/* Choose the best filter to use and filter the row data */
-PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
-    png_row_infop row_info),PNG_EMPTY);
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_read_IDAT_data,(png_structrp png_ptr,
-   png_bytep output, png_alloc_size_t avail_out),PNG_EMPTY);
-   /* Read 'avail_out' bytes of data from the IDAT stream.  If the output buffer
-    * is NULL the function checks, instead, for the end of the stream.  In this
-    * case a benign error will be issued if the stream end is not found or if
-    * extra data has to be consumed.
-    */
-PNG_INTERNAL_FUNCTION(void,png_read_finish_IDAT,(png_structrp png_ptr),
-   PNG_EMPTY);
-   /* This cleans up when the IDAT LZ stream does not end when the last image
-    * byte is read; there is still some pending input.
-    */
-
-PNG_INTERNAL_FUNCTION(void,png_read_finish_row,(png_structrp png_ptr),
-   PNG_EMPTY);
-   /* Finish a row while reading, dealing with interlacing passes, etc. */
-#endif
-
-/* Initialize the row buffers, etc. */
-PNG_INTERNAL_FUNCTION(void,png_read_start_row,(png_structrp png_ptr),PNG_EMPTY);
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-/* Optional call to update the users info structure */
-PNG_INTERNAL_FUNCTION(void,png_read_transform_info,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#endif
-
-/* These are the functions that do the transformations */
-#ifdef PNG_READ_FILLER_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_read_filler,(png_row_infop row_info,
-    png_bytep row, png_uint_32 filler, png_uint_32 flags),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_read_swap_alpha,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_write_swap_alpha,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_read_invert_alpha,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_write_invert_alpha,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
-    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_strip_channel,(png_row_infop row_info,
-    png_bytep row, int at_start),PNG_EMPTY);
-#endif
-
-#ifdef PNG_16BIT_SUPPORTED
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_swap,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \
-    defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_packswap,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-PNG_INTERNAL_FUNCTION(int,png_do_rgb_to_gray,(png_structrp png_ptr,
-    png_row_infop row_info, png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_gray_to_rgb,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_PACK_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_unpack,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_unshift,(png_row_infop row_info,
-    png_bytep row, png_const_color_8p sig_bits),PNG_EMPTY);
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_invert,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_scale_16_to_8,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_chop,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_quantize,(png_row_infop row_info,
-    png_bytep row, png_const_bytep palette_lookup,
-    png_const_bytep quantize_lookup),PNG_EMPTY);
-
-#  ifdef PNG_CORRECT_PALETTE_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_correct_palette,(png_structrp png_ptr,
-    png_colorp palette, int num_palette),PNG_EMPTY);
-#  endif
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_bgr,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_PACK_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_pack,(png_row_infop row_info,
-   png_bytep row, png_uint_32 bit_depth),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_shift,(png_row_infop row_info,
-    png_bytep row, png_const_color_8p bit_depth),PNG_EMPTY);
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-    defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_compose,(png_row_infop row_info,
-    png_bytep row, png_structrp png_ptr),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_gamma,(png_row_infop row_info,
-    png_bytep row, png_structrp png_ptr),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_encode_alpha,(png_row_infop row_info,
-   png_bytep row, png_structrp png_ptr),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_expand_palette,(png_row_infop row_info,
-    png_bytep row, png_const_colorp palette, png_const_bytep trans,
-    int num_trans),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_do_expand,(png_row_infop row_info,
-    png_bytep row, png_const_color_16p trans_color),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_expand_16,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-/* The following decodes the appropriate chunks, and does error correction,
- * then calls the appropriate callback for the chunk if it is valid.
- */
-
-/* Decode the IHDR chunk */
-PNG_INTERNAL_FUNCTION(void,png_handle_IHDR,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_handle_PLTE,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_handle_IEND,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_bKGD,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_cHRM,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_gAMA,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_hIST,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_iCCP,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif /* PNG_READ_iCCP_SUPPORTED */
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_iTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_oFFs,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_pCAL,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_pHYs,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sBIT,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sCAL,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sPLT,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif /* PNG_READ_sPLT_SUPPORTED */
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sRGB,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_tEXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_tIME,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_tRNS,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_zTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-PNG_INTERNAL_FUNCTION(void,png_check_chunk_name,(png_structrp png_ptr,
-    png_uint_32 chunk_name),PNG_EMPTY);
-
-#ifdef PNG_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_unknown,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length, int keep),PNG_EMPTY);
-   /* This is the function that gets called for unknown chunks.  The 'keep'
-    * argument is either non-zero for a known chunk that has been set to be
-    * handled as unknown or zero for an unknown chunk.  By default the function
-    * just skips the chunk or errors out if it is critical.
-    */
-
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-PNG_INTERNAL_FUNCTION(int,png_chunk_unknown_handling,
-    (png_const_structrp png_ptr, png_uint_32 chunk_name),PNG_EMPTY);
-   /* Exactly as the API png_handle_as_unknown() except that the argument is a
-    * 32-bit chunk name, not a string.
-    */
-#endif
-#endif /* PNG_READ_UNKNOWN_CHUNKS_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED */
-
-/* Handle the transformations for reading and writing */
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_read_transformations,(png_structrp png_ptr,
-   png_row_infop row_info),PNG_EMPTY);
-#endif
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_write_transformations,(png_structrp png_ptr,
-   png_row_infop row_info),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_init_read_transformations,(png_structrp png_ptr),
-    PNG_EMPTY);
-#endif
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_read_chunk,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_sig,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_check_crc,(png_structrp png_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_crc_skip,(png_structrp png_ptr,
-    png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_crc_finish,(png_structrp png_ptr),
-    PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_save_buffer,(png_structrp png_ptr),
-    PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_restore_buffer,(png_structrp png_ptr,
-    png_bytep buffer, png_size_t buffer_length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_IDAT,(png_structrp png_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_process_IDAT_data,(png_structrp png_ptr,
-    png_bytep buffer, png_size_t buffer_length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_process_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_handle_unknown,(png_structrp png_ptr,
-   png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_have_info,(png_structrp png_ptr,
-   png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_have_end,(png_structrp png_ptr,
-   png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_have_row,(png_structrp png_ptr,
-     png_bytep row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_end,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_process_some_data,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_push_finish_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-#  ifdef PNG_READ_tEXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_handle_tEXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_tEXt,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#  endif
-#  ifdef PNG_READ_zTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_handle_zTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_zTXt,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#  endif
-#  ifdef PNG_READ_iTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_handle_iTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_iTXt,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#  endif
-
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_read_intrapixel,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_do_write_intrapixel,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-/* Added at libpng version 1.6.0 */
-#ifdef PNG_GAMMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_colorspace_set_gamma,(png_const_structrp png_ptr,
-    png_colorspacerp colorspace, png_fixed_point gAMA), PNG_EMPTY);
-   /* Set the colorspace gamma with a value provided by the application or by
-    * the gAMA chunk on read.  The value will override anything set by an ICC
-    * profile.
-    */
-
-PNG_INTERNAL_FUNCTION(void,png_colorspace_sync_info,(png_const_structrp png_ptr,
-    png_inforp info_ptr), PNG_EMPTY);
-    /* Synchronize the info 'valid' flags with the colorspace */
-
-PNG_INTERNAL_FUNCTION(void,png_colorspace_sync,(png_const_structrp png_ptr,
-    png_inforp info_ptr), PNG_EMPTY);
-    /* Copy the png_struct colorspace to the info_struct and call the above to
-     * synchronize the flags.  Checks for NULL info_ptr and does nothing.
-     */
-#endif
-
-/* Added at libpng version 1.4.0 */
-#ifdef PNG_COLORSPACE_SUPPORTED
-/* These internal functions are for maintaining the colorspace structure within
- * a png_info or png_struct (or, indeed, both).
- */
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_chromaticities,
-   (png_const_structrp png_ptr, png_colorspacerp colorspace, const png_xy *xy,
-    int preferred), PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_endpoints,
-   (png_const_structrp png_ptr, png_colorspacerp colorspace, const png_XYZ *XYZ,
-    int preferred), PNG_EMPTY);
-
-#ifdef PNG_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_sRGB,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, int intent), PNG_EMPTY);
-   /* This does set the colorspace gAMA and cHRM values too, but doesn't set the
-    * flags to write them, if it returns false there was a problem and an error
-    * message has already been output (but the colorspace may still need to be
-    * synced to record the invalid flag).
-    */
-#endif /* sRGB */
-
-#ifdef PNG_iCCP_SUPPORTED
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_ICC,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length, png_const_bytep profile, int color_type),
-   PNG_EMPTY);
-   /* The 'name' is used for information only */
-
-/* Routines for checking parts of an ICC profile. */
-PNG_INTERNAL_FUNCTION(int,png_icc_check_length,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length), PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(int,png_icc_check_header,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length,
-   png_const_bytep profile /* first 132 bytes only */, int color_type),
-   PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(int,png_icc_check_tag_table,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length,
-   png_const_bytep profile /* header plus whole tag table */), PNG_EMPTY);
-#ifdef PNG_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_icc_set_sRGB,(
-   png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_bytep profile, uLong adler), PNG_EMPTY);
-   /* 'adler' is the Adler32 checksum of the uncompressed profile data. It may
-    * be zero to indicate that it is not available.  It is used, if provided,
-    * as a fast check on the profile when checking to see if it is sRGB.
-    */
-#endif
-#endif /* iCCP */
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_colorspace_set_rgb_coefficients,
-   (png_structrp png_ptr), PNG_EMPTY);
-   /* Set the rgb_to_gray coefficients from the colorspace Y values */
-#endif /* READ_RGB_TO_GRAY */
-#endif /* COLORSPACE */
-
-/* Added at libpng version 1.4.0 */
-PNG_INTERNAL_FUNCTION(void,png_check_IHDR,(png_const_structrp png_ptr,
-    png_uint_32 width, png_uint_32 height, int bit_depth,
-    int color_type, int interlace_type, int compression_type,
-    int filter_type),PNG_EMPTY);
-
-/* Added at libpng version 1.5.10 */
-#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \
-    defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_check_palette_indexes,
-   (png_structrp png_ptr, png_row_infop row_info),PNG_EMPTY);
-#endif
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_fixed_error,(png_const_structrp png_ptr,
-   png_const_charp name),PNG_NORETURN);
-#endif
-
-/* Puts 'string' into 'buffer' at buffer[pos], taking care never to overwrite
- * the end.  Always leaves the buffer nul terminated.  Never errors out (and
- * there is no error code.)
- */
-PNG_INTERNAL_FUNCTION(size_t,png_safecat,(png_charp buffer, size_t bufsize,
-   size_t pos, png_const_charp string),PNG_EMPTY);
-
-/* Various internal functions to handle formatted warning messages, currently
- * only implemented for warnings.
- */
-#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_TIME_RFC1123_SUPPORTED)
-/* Utility to dump an unsigned value into a buffer, given a start pointer and
- * and end pointer (which should point just *beyond* the end of the buffer!)
- * Returns the pointer to the start of the formatted string.  This utility only
- * does unsigned values.
- */
-PNG_INTERNAL_FUNCTION(png_charp,png_format_number,(png_const_charp start,
-   png_charp end, int format, png_alloc_size_t number),PNG_EMPTY);
-
-/* Convenience macro that takes an array: */
-#define PNG_FORMAT_NUMBER(buffer,format,number) \
-   png_format_number(buffer, buffer + (sizeof buffer), format, number)
-
-/* Suggested size for a number buffer (enough for 64 bits and a sign!) */
-#define PNG_NUMBER_BUFFER_SIZE 24
-
-/* These are the integer formats currently supported, the name is formed from
- * the standard printf(3) format string.
- */
-#define PNG_NUMBER_FORMAT_u     1 /* chose unsigned API! */
-#define PNG_NUMBER_FORMAT_02u   2
-#define PNG_NUMBER_FORMAT_d     1 /* chose signed API! */
-#define PNG_NUMBER_FORMAT_02d   2
-#define PNG_NUMBER_FORMAT_x     3
-#define PNG_NUMBER_FORMAT_02x   4
-#define PNG_NUMBER_FORMAT_fixed 5 /* choose the signed API */
-#endif
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* New defines and members adding in libpng-1.5.4 */
-#  define PNG_WARNING_PARAMETER_SIZE 32
-#  define PNG_WARNING_PARAMETER_COUNT 8 /* Maximum 9; see pngerror.c */
-
-/* An l-value of this type has to be passed to the APIs below to cache the
- * values of the parameters to a formatted warning message.
- */
-typedef char png_warning_parameters[PNG_WARNING_PARAMETER_COUNT][
-   PNG_WARNING_PARAMETER_SIZE];
-
-PNG_INTERNAL_FUNCTION(void,png_warning_parameter,(png_warning_parameters p,
-   int number, png_const_charp string),PNG_EMPTY);
-   /* Parameters are limited in size to PNG_WARNING_PARAMETER_SIZE characters,
-    * including the trailing '\0'.
-    */
-PNG_INTERNAL_FUNCTION(void,png_warning_parameter_unsigned,
-   (png_warning_parameters p, int number, int format, png_alloc_size_t value),
-   PNG_EMPTY);
-   /* Use png_alloc_size_t because it is an unsigned type as big as any we
-    * need to output.  Use the following for a signed value.
-    */
-PNG_INTERNAL_FUNCTION(void,png_warning_parameter_signed,
-   (png_warning_parameters p, int number, int format, png_int_32 value),
-   PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_formatted_warning,(png_const_structrp png_ptr,
-   png_warning_parameters p, png_const_charp message),PNG_EMPTY);
-   /* 'message' follows the X/Open approach of using @1, @2 to insert
-    * parameters previously supplied using the above functions.  Errors in
-    * specifying the parameters will simply result in garbage substitutions.
-    */
-#endif
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-/* Application errors (new in 1.6); use these functions (declared below) for
- * errors in the parameters or order of API function calls on read.  The
- * 'warning' should be used for an error that can be handled completely; the
- * 'error' for one which can be handled safely but which may lose application
- * information or settings.
- *
- * By default these both result in a png_error call prior to release, while in a
- * released version the 'warning' is just a warning.  However if the application
- * explicitly disables benign errors (explicitly permitting the code to lose
- * information) they both turn into warnings.
- *
- * If benign errors aren't supported they end up as the corresponding base call
- * (png_warning or png_error.)
- */
-PNG_INTERNAL_FUNCTION(void,png_app_warning,(png_const_structrp png_ptr,
-   png_const_charp message),PNG_EMPTY);
-   /* The application provided invalid parameters to an API function or called
-    * an API function at the wrong time, libpng can completely recover.
-    */
-
-PNG_INTERNAL_FUNCTION(void,png_app_error,(png_const_structrp png_ptr,
-   png_const_charp message),PNG_EMPTY);
-   /* As above but libpng will ignore the call, or attempt some other partial
-    * recovery from the error.
-    */
-#else
-#  define png_app_warning(pp,s) png_warning(pp,s)
-#  define png_app_error(pp,s) png_error(pp,s)
-#endif
-
-PNG_INTERNAL_FUNCTION(void,png_chunk_report,(png_const_structrp png_ptr,
-   png_const_charp message, int error),PNG_EMPTY);
-   /* Report a recoverable issue in chunk data.  On read this is used to report
-    * a problem found while reading a particular chunk and the
-    * png_chunk_benign_error or png_chunk_warning function is used as
-    * appropriate.  On write this is used to report an error that comes from
-    * data set via an application call to a png_set_ API and png_app_error or
-    * png_app_warning is used as appropriate.
-    *
-    * The 'error' parameter must have one of the following values:
-    */
-#define PNG_CHUNK_WARNING     0 /* never an error */
-#define PNG_CHUNK_WRITE_ERROR 1 /* an error only on write */
-#define PNG_CHUNK_ERROR       2 /* always an error */
-
-/* ASCII to FP interfaces, currently only implemented if sCAL
- * support is required.
- */
-#if defined(PNG_sCAL_SUPPORTED)
-/* MAX_DIGITS is actually the maximum number of characters in an sCAL
- * width or height, derived from the precision (number of significant
- * digits - a build time settable option) and assumptions about the
- * maximum ridiculous exponent.
- */
-#define PNG_sCAL_MAX_DIGITS (PNG_sCAL_PRECISION+1/*.*/+1/*E*/+10/*exponent*/)
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_ascii_from_fp,(png_const_structrp png_ptr,
-   png_charp ascii, png_size_t size, double fp, unsigned int precision),
-   PNG_EMPTY);
-#endif /* FLOATING_POINT */
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_ascii_from_fixed,(png_const_structrp png_ptr,
-   png_charp ascii, png_size_t size, png_fixed_point fp),PNG_EMPTY);
-#endif /* FIXED_POINT */
-#endif /* sCAL */
-
-#if defined(PNG_sCAL_SUPPORTED) || defined(PNG_pCAL_SUPPORTED)
-/* An internal API to validate the format of a floating point number.
- * The result is the index of the next character.  If the number is
- * not valid it will be the index of a character in the supposed number.
- *
- * The format of a number is defined in the PNG extensions specification
- * and this API is strictly conformant to that spec, not anyone elses!
- *
- * The format as a regular expression is:
- *
- * [+-]?[0-9]+.?([Ee][+-]?[0-9]+)?
- *
- * or:
- *
- * [+-]?.[0-9]+(.[0-9]+)?([Ee][+-]?[0-9]+)?
- *
- * The complexity is that either integer or fraction must be present and the
- * fraction is permitted to have no digits only if the integer is present.
- *
- * NOTE: The dangling E problem.
- *   There is a PNG valid floating point number in the following:
- *
- *       PNG floating point numbers are not greedy.
- *
- *   Working this out requires *TWO* character lookahead (because of the
- *   sign), the parser does not do this - it will fail at the 'r' - this
- *   doesn't matter for PNG sCAL chunk values, but it requires more care
- *   if the value were ever to be embedded in something more complex.  Use
- *   ANSI-C strtod if you need the lookahead.
- */
-/* State table for the parser. */
-#define PNG_FP_INTEGER    0  /* before or in integer */
-#define PNG_FP_FRACTION   1  /* before or in fraction */
-#define PNG_FP_EXPONENT   2  /* before or in exponent */
-#define PNG_FP_STATE      3  /* mask for the above */
-#define PNG_FP_SAW_SIGN   4  /* Saw +/- in current state */
-#define PNG_FP_SAW_DIGIT  8  /* Saw a digit in current state */
-#define PNG_FP_SAW_DOT   16  /* Saw a dot in current state */
-#define PNG_FP_SAW_E     32  /* Saw an E (or e) in current state */
-#define PNG_FP_SAW_ANY   60  /* Saw any of the above 4 */
-
-/* These three values don't affect the parser.  They are set but not used.
- */
-#define PNG_FP_WAS_VALID 64  /* Preceding substring is a valid fp number */
-#define PNG_FP_NEGATIVE 128  /* A negative number, including "-0" */
-#define PNG_FP_NONZERO  256  /* A non-zero value */
-#define PNG_FP_STICKY   448  /* The above three flags */
-
-/* This is available for the caller to store in 'state' if required.  Do not
- * call the parser after setting it (the parser sometimes clears it.)
- */
-#define PNG_FP_INVALID  512  /* Available for callers as a distinct value */
-
-/* Result codes for the parser (boolean - true meants ok, false means
- * not ok yet.)
- */
-#define PNG_FP_MAYBE      0  /* The number may be valid in the future */
-#define PNG_FP_OK         1  /* The number is valid */
-
-/* Tests on the sticky non-zero and negative flags.  To pass these checks
- * the state must also indicate that the whole number is valid - this is
- * achieved by testing PNG_FP_SAW_DIGIT (see the implementation for why this
- * is equivalent to PNG_FP_OK above.)
- */
-#define PNG_FP_NZ_MASK (PNG_FP_SAW_DIGIT | PNG_FP_NEGATIVE | PNG_FP_NONZERO)
-   /* NZ_MASK: the string is valid and a non-zero negative value */
-#define PNG_FP_Z_MASK (PNG_FP_SAW_DIGIT | PNG_FP_NONZERO)
-   /* Z MASK: the string is valid and a non-zero value. */
-   /* PNG_FP_SAW_DIGIT: the string is valid. */
-#define PNG_FP_IS_ZERO(state) (((state) & PNG_FP_Z_MASK) == PNG_FP_SAW_DIGIT)
-#define PNG_FP_IS_POSITIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_Z_MASK)
-#define PNG_FP_IS_NEGATIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_NZ_MASK)
-
-/* The actual parser.  This can be called repeatedly. It updates
- * the index into the string and the state variable (which must
- * be initialized to 0).  It returns a result code, as above.  There
- * is no point calling the parser any more if it fails to advance to
- * the end of the string - it is stuck on an invalid character (or
- * terminated by '\0').
- *
- * Note that the pointer will consume an E or even an E+ and then leave
- * a 'maybe' state even though a preceding integer.fraction is valid.
- * The PNG_FP_WAS_VALID flag indicates that a preceding substring was
- * a valid number.  It's possible to recover from this by calling
- * the parser again (from the start, with state 0) but with a string
- * that omits the last character (i.e. set the size to the index of
- * the problem character.)  This has not been tested within libpng.
- */
-PNG_INTERNAL_FUNCTION(int,png_check_fp_number,(png_const_charp string,
-   png_size_t size, int *statep, png_size_tp whereami),PNG_EMPTY);
-
-/* This is the same but it checks a complete string and returns true
- * only if it just contains a floating point number.  As of 1.5.4 this
- * function also returns the state at the end of parsing the number if
- * it was valid (otherwise it returns 0.)  This can be used for testing
- * for negative or zero values using the sticky flag.
- */
-PNG_INTERNAL_FUNCTION(int,png_check_fp_string,(png_const_charp string,
-   png_size_t size),PNG_EMPTY);
-#endif /* pCAL || sCAL */
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) ||\
-    defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG_READ_pHYs_SUPPORTED)
-/* Added at libpng version 1.5.0 */
-/* This is a utility to provide a*times/div (rounded) and indicate
- * if there is an overflow.  The result is a boolean - false (0)
- * for overflow, true (1) if no overflow, in which case *res
- * holds the result.
- */
-PNG_INTERNAL_FUNCTION(int,png_muldiv,(png_fixed_point_p res, png_fixed_point a,
-   png_int_32 multiplied_by, png_int_32 divided_by),PNG_EMPTY);
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_INCH_CONVERSIONS_SUPPORTED)
-/* Same deal, but issue a warning on overflow and return 0. */
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_muldiv_warn,
-   (png_const_structrp png_ptr, png_fixed_point a, png_int_32 multiplied_by,
-   png_int_32 divided_by),PNG_EMPTY);
-#endif
-
-#ifdef PNG_GAMMA_SUPPORTED
-/* Calculate a reciprocal - used for gamma values.  This returns
- * 0 if the argument is 0 in order to maintain an undefined value;
- * there are no warnings.
- */
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_reciprocal,(png_fixed_point a),
-   PNG_EMPTY);
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* The same but gives a reciprocal of the product of two fixed point
- * values.  Accuracy is suitable for gamma calculations but this is
- * not exact - use png_muldiv for that.  Only required at present on read.
- */
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_reciprocal2,(png_fixed_point a,
-   png_fixed_point b),PNG_EMPTY);
-#endif
-
-/* Return true if the gamma value is significantly different from 1.0 */
-PNG_INTERNAL_FUNCTION(int,png_gamma_significant,(png_fixed_point gamma_value),
-   PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* Internal fixed point gamma correction.  These APIs are called as
- * required to convert single values - they don't need to be fast,
- * they are not used when processing image pixel values.
- *
- * While the input is an 'unsigned' value it must actually be the
- * correct bit value - 0..255 or 0..65535 as required.
- */
-PNG_INTERNAL_FUNCTION(png_uint_16,png_gamma_correct,(png_structrp png_ptr,
-   unsigned int value, png_fixed_point gamma_value),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(png_uint_16,png_gamma_16bit_correct,(unsigned int value,
-   png_fixed_point gamma_value),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(png_byte,png_gamma_8bit_correct,(unsigned int value,
-   png_fixed_point gamma_value),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_destroy_gamma_table,(png_structrp png_ptr),
-   PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_build_gamma_table,(png_structrp png_ptr,
-   int bit_depth),PNG_EMPTY);
-#endif
-
-/* SIMPLIFIED READ/WRITE SUPPORT */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-/* The internal structure that png_image::opaque points to. */
-typedef struct png_control
-{
-   png_structp png_ptr;
-   png_infop   info_ptr;
-   png_voidp   error_buf;           /* Always a jmp_buf at present. */
-
-   png_const_bytep memory;          /* Memory buffer. */
-   png_size_t      size;            /* Size of the memory buffer. */
-
-   unsigned int for_write       :1; /* Otherwise it is a read structure */
-   unsigned int owned_file      :1; /* We own the file in io_ptr */
-} png_control;
-
-/* Return the pointer to the jmp_buf from a png_control: necessary because C
- * does not reveal the type of the elements of jmp_buf.
- */
-#ifdef __cplusplus
-#  define png_control_jmp_buf(pc) (((jmp_buf*)((pc)->error_buf))[0])
-#else
-#  define png_control_jmp_buf(pc) ((pc)->error_buf)
-#endif
-
-/* Utility to safely execute a piece of libpng code catching and logging any
- * errors that might occur.  Returns true on success, false on failure (either
- * of the function or as a result of a png_error.)
- */
-PNG_INTERNAL_FUNCTION(void,png_safe_error,(png_structp png_ptr,
-   png_const_charp error_message),PNG_NORETURN);
-
-#ifdef PNG_WARNINGS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_safe_warning,(png_structp png_ptr,
-   png_const_charp warning_message),PNG_EMPTY);
-#else
-#  define png_safe_warning 0/*dummy argument*/
-#endif
-
-PNG_INTERNAL_FUNCTION(int,png_safe_execute,(png_imagep image,
-   int (*function)(png_voidp), png_voidp arg),PNG_EMPTY);
-
-/* Utility to log an error; this also cleans up the png_image; the function
- * always returns 0 (false).
- */
-PNG_INTERNAL_FUNCTION(int,png_image_error,(png_imagep image,
-   png_const_charp error_message),PNG_EMPTY);
-
-#ifndef PNG_SIMPLIFIED_READ_SUPPORTED
-/* png_image_free is used by the write code but not exported */
-PNG_INTERNAL_FUNCTION(void, png_image_free, (png_imagep image), PNG_EMPTY);
-#endif /* !SIMPLIFIED_READ */
-
-#endif /* SIMPLIFIED READ/WRITE */
-
-#ifdef PNG_FILTER_OPTIMIZATIONS
-PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
-    unsigned int bpp), PNG_EMPTY);
-   /* This is the initialization function for hardware specific optimizations,
-    * one implementation (for ARM NEON machines) is contained in
-    * arm/filter_neon.c.  It need not be defined - the generic code will be used
-    * if not.
-    */
-#endif
-
-/* Maintainer: Put new private prototypes here ^ */
-
-//#include "pngdebug.h"
-
-#endif /* PNG_VERSION_INFO_ONLY */
-#endif /* PNGPRIV_H */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngread.c b/modules/juce_graphics/image_formats/pnglib/pngread.c
deleted file mode 100644
index f7bde96..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngread.c
+++ /dev/null
@@ -1,4000 +0,0 @@
-
-/* pngread.c - read a PNG file
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file contains routines that an application calls directly to
- * read a PNG file or stream.
- */
-
-#include "pngpriv.h"
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
-#  include <errno.h>
-#endif
-
-#ifdef PNG_READ_SUPPORTED
-
-/* Create a PNG structure for reading, and allocate any memory needed. */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_read_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn),PNG_ALLOCATED)
-{
-#ifndef PNG_USER_MEM_SUPPORTED
-   png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-      error_fn, warn_fn, NULL, NULL, NULL);
-#else
-   return png_create_read_struct_2(user_png_ver, error_ptr, error_fn,
-       warn_fn, NULL, NULL, NULL);
-}
-
-/* Alternate create PNG structure for reading, and allocate any memory
- * needed.
- */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_read_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
-{
-   png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-      error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
-#endif /* PNG_USER_MEM_SUPPORTED */
-
-   if (png_ptr != NULL)
-   {
-      png_ptr->mode = PNG_IS_READ_STRUCT;
-
-      /* Added in libpng-1.6.0; this can be used to detect a read structure if
-       * required (it will be zero in a write structure.)
-       */
-#     ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-         png_ptr->IDAT_read_size = PNG_IDAT_READ_SIZE;
-#     endif
-
-#     ifdef PNG_BENIGN_READ_ERRORS_SUPPORTED
-         png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
-
-         /* In stable builds only warn if an application error can be completely
-          * handled.
-          */
-#        if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-            png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
-#        endif
-#     endif
-
-      /* TODO: delay this, it can be done in png_init_io (if the app doesn't
-       * do it itself) avoiding setting the default function if it is not
-       * required.
-       */
-      png_set_read_fn(png_ptr, NULL, NULL);
-   }
-
-   return png_ptr;
-}
-
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the information before the actual image data.  This has been
- * changed in v0.90 to allow reading a file that already has the magic
- * bytes read from the stream.  You can tell libpng how many bytes have
- * been read from the beginning of the stream (up to the maximum of 8)
- * via png_set_sig_bytes(), and we will only check the remaining bytes
- * here.  The application can then have access to the signature bytes we
- * read if it is determined that this isn't a valid PNG file.
- */
-void PNGAPI
-png_read_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   int keep;
-#endif
-
-   png_debug(1, "in png_read_info");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* Read and check the PNG file signature. */
-   png_read_sig(png_ptr, info_ptr);
-
-   for (;;)
-   {
-      png_uint_32 length = png_read_chunk_header(png_ptr);
-      png_uint_32 chunk_name = png_ptr->chunk_name;
-
-      /* IDAT logic needs to happen here to simplify getting the two flags
-       * right.
-       */
-      if (chunk_name == png_IDAT)
-      {
-         if (!(png_ptr->mode & PNG_HAVE_IHDR))
-            png_chunk_error(png_ptr, "Missing IHDR before IDAT");
-
-         else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-             !(png_ptr->mode & PNG_HAVE_PLTE))
-            png_chunk_error(png_ptr, "Missing PLTE before IDAT");
-
-         else if (png_ptr->mode & PNG_AFTER_IDAT)
-            png_chunk_benign_error(png_ptr, "Too many IDATs found");
-
-         png_ptr->mode |= PNG_HAVE_IDAT;
-      }
-
-      else if (png_ptr->mode & PNG_HAVE_IDAT)
-         png_ptr->mode |= PNG_AFTER_IDAT;
-
-      /* This should be a binary subdivision search or a hash for
-       * matching the chunk name rather than a linear search.
-       */
-      if (chunk_name == png_IHDR)
-         png_handle_IHDR(png_ptr, info_ptr, length);
-
-      else if (chunk_name == png_IEND)
-         png_handle_IEND(png_ptr, info_ptr, length);
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-      else if ((keep = png_chunk_unknown_handling(png_ptr, chunk_name)) != 0)
-      {
-         png_handle_unknown(png_ptr, info_ptr, length, keep);
-
-         if (chunk_name == png_PLTE)
-            png_ptr->mode |= PNG_HAVE_PLTE;
-
-         else if (chunk_name == png_IDAT)
-         {
-            png_ptr->idat_size = 0; /* It has been consumed */
-            break;
-         }
-      }
-#endif
-      else if (chunk_name == png_PLTE)
-         png_handle_PLTE(png_ptr, info_ptr, length);
-
-      else if (chunk_name == png_IDAT)
-      {
-         png_ptr->idat_size = length;
-         break;
-      }
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-      else if (chunk_name == png_bKGD)
-         png_handle_bKGD(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-      else if (chunk_name == png_cHRM)
-         png_handle_cHRM(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-      else if (chunk_name == png_gAMA)
-         png_handle_gAMA(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-      else if (chunk_name == png_hIST)
-         png_handle_hIST(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-      else if (chunk_name == png_oFFs)
-         png_handle_oFFs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-      else if (chunk_name == png_pCAL)
-         png_handle_pCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-      else if (chunk_name == png_sCAL)
-         png_handle_sCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-      else if (chunk_name == png_pHYs)
-         png_handle_pHYs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-      else if (chunk_name == png_sBIT)
-         png_handle_sBIT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-      else if (chunk_name == png_sRGB)
-         png_handle_sRGB(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-      else if (chunk_name == png_iCCP)
-         png_handle_iCCP(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-      else if (chunk_name == png_sPLT)
-         png_handle_sPLT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-      else if (chunk_name == png_tEXt)
-         png_handle_tEXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-      else if (chunk_name == png_tIME)
-         png_handle_tIME(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-      else if (chunk_name == png_tRNS)
-         png_handle_tRNS(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-      else if (chunk_name == png_zTXt)
-         png_handle_zTXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-      else if (chunk_name == png_iTXt)
-         png_handle_iTXt(png_ptr, info_ptr, length);
-#endif
-
-      else
-         png_handle_unknown(png_ptr, info_ptr, length,
-            PNG_HANDLE_CHUNK_AS_DEFAULT);
-   }
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-/* Optional call to update the users info_ptr structure */
-void PNGAPI
-png_read_update_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_debug(1, "in png_read_update_info");
-
-   if (png_ptr != NULL)
-   {
-      if ((png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-      {
-         png_read_start_row(png_ptr);
-
-#        ifdef PNG_READ_TRANSFORMS_SUPPORTED
-            png_read_transform_info(png_ptr, info_ptr);
-#        else
-            PNG_UNUSED(info_ptr)
-#        endif
-      }
-
-      /* New in 1.6.0 this avoids the bug of doing the initializations twice */
-      else
-         png_app_error(png_ptr,
-            "png_read_update_info/png_start_read_image: duplicate call");
-   }
-}
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Initialize palette, background, etc, after transformations
- * are set, but before any reading takes place.  This allows
- * the user to obtain a gamma-corrected palette, for example.
- * If the user doesn't call this, we will do it ourselves.
- */
-void PNGAPI
-png_start_read_image(png_structrp png_ptr)
-{
-   png_debug(1, "in png_start_read_image");
-
-   if (png_ptr != NULL)
-   {
-      if ((png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-         png_read_start_row(png_ptr);
-
-      /* New in 1.6.0 this avoids the bug of doing the initializations twice */
-      else
-         png_app_error(png_ptr,
-            "png_start_read_image/png_read_update_info: duplicate call");
-   }
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-void PNGAPI
-png_read_row(png_structrp png_ptr, png_bytep row, png_bytep dsp_row)
-{
-   png_row_info row_info;
-
-   if (png_ptr == NULL)
-      return;
-
-   png_debug2(1, "in png_read_row (row %lu, pass %d)",
-       (unsigned long)png_ptr->row_number, png_ptr->pass);
-
-   /* png_read_start_row sets the information (in particular iwidth) for this
-    * interlace pass.
-    */
-   if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
-      png_read_start_row(png_ptr);
-
-   /* 1.5.6: row_info moved out of png_struct to a local here. */
-   row_info.width = png_ptr->iwidth; /* NOTE: width of current interlaced row */
-   row_info.color_type = png_ptr->color_type;
-   row_info.bit_depth = png_ptr->bit_depth;
-   row_info.channels = png_ptr->channels;
-   row_info.pixel_depth = png_ptr->pixel_depth;
-   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
-
-   if (png_ptr->row_number == 0 && png_ptr->pass == 0)
-   {
-   /* Check for transforms that have been set but were defined out */
-#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED)
-   if (png_ptr->transformations & PNG_INVERT_MONO)
-      png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED)
-   if (png_ptr->transformations & PNG_FILLER)
-      png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
-    !defined(PNG_READ_PACKSWAP_SUPPORTED)
-   if (png_ptr->transformations & PNG_PACKSWAP)
-      png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED)
-   if (png_ptr->transformations & PNG_PACK)
-      png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED)
-   if (png_ptr->transformations & PNG_SHIFT)
-      png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED)
-   if (png_ptr->transformations & PNG_BGR)
-      png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED)
-   if (png_ptr->transformations & PNG_SWAP_BYTES)
-      png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined");
-#endif
-   }
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* If interlaced and we do not need a new row, combine row and return.
-    * Notice that the pixels we have from previous rows have been transformed
-    * already; we can only combine like with like (transformed or
-    * untransformed) and, because of the libpng API for interlaced images, this
-    * means we must transform before de-interlacing.
-    */
-   if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
-   {
-      switch (png_ptr->pass)
-      {
-         case 0:
-            if (png_ptr->row_number & 0x07)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 1:
-            if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 2:
-            if ((png_ptr->row_number & 0x07) != 4)
-            {
-               if (dsp_row != NULL && (png_ptr->row_number & 4))
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 3:
-            if ((png_ptr->row_number & 3) || png_ptr->width < 3)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 4:
-            if ((png_ptr->row_number & 3) != 2)
-            {
-               if (dsp_row != NULL && (png_ptr->row_number & 2))
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 5:
-            if ((png_ptr->row_number & 1) || png_ptr->width < 2)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         default:
-         case 6:
-            if (!(png_ptr->row_number & 1))
-            {
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-      }
-   }
-#endif
-
-   if (!(png_ptr->mode & PNG_HAVE_IDAT))
-      png_error(png_ptr, "Invalid attempt to read row data");
-
-   /* Fill the row with IDAT data: */
-   png_read_IDAT_data(png_ptr, png_ptr->row_buf, row_info.rowbytes + 1);
-
-   if (png_ptr->row_buf[0] > PNG_FILTER_VALUE_NONE)
-   {
-      if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST)
-         png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1,
-            png_ptr->prev_row + 1, png_ptr->row_buf[0]);
-      else
-         png_error(png_ptr, "bad adaptive filter value");
-   }
-
-   /* libpng 1.5.6: the following line was copying png_ptr->rowbytes before
-    * 1.5.6, while the buffer really is this big in current versions of libpng
-    * it may not be in the future, so this was changed just to copy the
-    * interlaced count:
-    */
-   memcpy(png_ptr->prev_row, png_ptr->row_buf, row_info.rowbytes + 1);
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
-       (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
-   {
-      /* Intrapixel differencing */
-      png_do_read_intrapixel(&row_info, png_ptr->row_buf + 1);
-   }
-#endif
-
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   if (png_ptr->transformations)
-      png_do_read_transformations(png_ptr, &row_info);
-#endif
-
-   /* The transformed pixel depth should match the depth now in row_info. */
-   if (png_ptr->transformed_pixel_depth == 0)
-   {
-      png_ptr->transformed_pixel_depth = row_info.pixel_depth;
-      if (row_info.pixel_depth > png_ptr->maximum_pixel_depth)
-         png_error(png_ptr, "sequential row overflow");
-   }
-
-   else if (png_ptr->transformed_pixel_depth != row_info.pixel_depth)
-      png_error(png_ptr, "internal sequential row size calculation error");
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Blow up interlaced rows to full size */
-   if (png_ptr->interlaced &&
-      (png_ptr->transformations & PNG_INTERLACE))
-   {
-      if (png_ptr->pass < 6)
-         png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
-            png_ptr->transformations);
-
-      if (dsp_row != NULL)
-         png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-      if (row != NULL)
-         png_combine_row(png_ptr, row, 0/*row*/);
-   }
-
-   else
-#endif
-   {
-      if (row != NULL)
-         png_combine_row(png_ptr, row, -1/*ignored*/);
-
-      if (dsp_row != NULL)
-         png_combine_row(png_ptr, dsp_row, -1/*ignored*/);
-   }
-   png_read_finish_row(png_ptr);
-
-   if (png_ptr->read_row_fn != NULL)
-      (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
-
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read one or more rows of image data.  If the image is interlaced,
- * and png_set_interlace_handling() has been called, the rows need to
- * contain the contents of the rows from the previous pass.  If the
- * image has alpha or transparency, and png_handle_alpha()[*] has been
- * called, the rows contents must be initialized to the contents of the
- * screen.
- *
- * "row" holds the actual image, and pixels are placed in it
- * as they arrive.  If the image is displayed after each pass, it will
- * appear to "sparkle" in.  "display_row" can be used to display a
- * "chunky" progressive image, with finer detail added as it becomes
- * available.  If you do not want this "chunky" display, you may pass
- * NULL for display_row.  If you do not want the sparkle display, and
- * you have not called png_handle_alpha(), you may pass NULL for rows.
- * If you have called png_handle_alpha(), and the image has either an
- * alpha channel or a transparency chunk, you must provide a buffer for
- * rows.  In this case, you do not have to provide a display_row buffer
- * also, but you may.  If the image is not interlaced, or if you have
- * not called png_set_interlace_handling(), the display_row buffer will
- * be ignored, so pass NULL to it.
- *
- * [*] png_handle_alpha() does not exist yet, as of this version of libpng
- */
-
-void PNGAPI
-png_read_rows(png_structrp png_ptr, png_bytepp row,
-    png_bytepp display_row, png_uint_32 num_rows)
-{
-   png_uint_32 i;
-   png_bytepp rp;
-   png_bytepp dp;
-
-   png_debug(1, "in png_read_rows");
-
-   if (png_ptr == NULL)
-      return;
-
-   rp = row;
-   dp = display_row;
-   if (rp != NULL && dp != NULL)
-      for (i = 0; i < num_rows; i++)
-      {
-         png_bytep rptr = *rp++;
-         png_bytep dptr = *dp++;
-
-         png_read_row(png_ptr, rptr, dptr);
-      }
-
-   else if (rp != NULL)
-      for (i = 0; i < num_rows; i++)
-      {
-         png_bytep rptr = *rp;
-         png_read_row(png_ptr, rptr, NULL);
-         rp++;
-      }
-
-   else if (dp != NULL)
-      for (i = 0; i < num_rows; i++)
-      {
-         png_bytep dptr = *dp;
-         png_read_row(png_ptr, NULL, dptr);
-         dp++;
-      }
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the entire image.  If the image has an alpha channel or a tRNS
- * chunk, and you have called png_handle_alpha()[*], you will need to
- * initialize the image to the current image that PNG will be overlaying.
- * We set the num_rows again here, in case it was incorrectly set in
- * png_read_start_row() by a call to png_read_update_info() or
- * png_start_read_image() if png_set_interlace_handling() wasn't called
- * prior to either of these functions like it should have been.  You can
- * only call this function once.  If you desire to have an image for
- * each pass of a interlaced image, use png_read_rows() instead.
- *
- * [*] png_handle_alpha() does not exist yet, as of this version of libpng
- */
-void PNGAPI
-png_read_image(png_structrp png_ptr, png_bytepp image)
-{
-   png_uint_32 i, image_height;
-   int pass, j;
-   png_bytepp rp;
-
-   png_debug(1, "in png_read_image");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
-   {
-      pass = png_set_interlace_handling(png_ptr);
-      /* And make sure transforms are initialized. */
-      png_start_read_image(png_ptr);
-   }
-   else
-   {
-      if (png_ptr->interlaced && !(png_ptr->transformations & PNG_INTERLACE))
-      {
-         /* Caller called png_start_read_image or png_read_update_info without
-          * first turning on the PNG_INTERLACE transform.  We can fix this here,
-          * but the caller should do it!
-          */
-         png_warning(png_ptr, "Interlace handling should be turned on when "
-            "using png_read_image");
-         /* Make sure this is set correctly */
-         png_ptr->num_rows = png_ptr->height;
-      }
-
-      /* Obtain the pass number, which also turns on the PNG_INTERLACE flag in
-       * the above error case.
-       */
-      pass = png_set_interlace_handling(png_ptr);
-   }
-#else
-   if (png_ptr->interlaced)
-      png_error(png_ptr,
-          "Cannot read interlaced image -- interlace handler disabled");
-
-   pass = 1;
-#endif
-
-   image_height=png_ptr->height;
-
-   for (j = 0; j < pass; j++)
-   {
-      rp = image;
-      for (i = 0; i < image_height; i++)
-      {
-         png_read_row(png_ptr, *rp, NULL);
-         rp++;
-      }
-   }
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the end of the PNG file.  Will not read past the end of the
- * file, will verify the end is accurate, and will read any comments
- * or time information at the end of the file, if info is not NULL.
- */
-void PNGAPI
-png_read_end(png_structrp png_ptr, png_inforp info_ptr)
-{
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   int keep;
-#endif
-
-   png_debug(1, "in png_read_end");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* If png_read_end is called in the middle of reading the rows there may
-    * still be pending IDAT data and an owned zstream.  Deal with this here.
-    */
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   if (!png_chunk_unknown_handling(png_ptr, png_IDAT))
-#endif
-      png_read_finish_IDAT(png_ptr);
-
-#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Report invalid palette index; added at libng-1.5.10 */
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-      png_ptr->num_palette_max > png_ptr->num_palette)
-     png_benign_error(png_ptr, "Read palette index exceeding num_palette");
-#endif
-
-   do
-   {
-      png_uint_32 length = png_read_chunk_header(png_ptr);
-      png_uint_32 chunk_name = png_ptr->chunk_name;
-
-      if (chunk_name == png_IHDR)
-         png_handle_IHDR(png_ptr, info_ptr, length);
-
-      else if (chunk_name == png_IEND)
-         png_handle_IEND(png_ptr, info_ptr, length);
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-      else if ((keep = png_chunk_unknown_handling(png_ptr, chunk_name)) != 0)
-      {
-         if (chunk_name == png_IDAT)
-         {
-            if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
-               png_benign_error(png_ptr, "Too many IDATs found");
-         }
-         png_handle_unknown(png_ptr, info_ptr, length, keep);
-         if (chunk_name == png_PLTE)
-            png_ptr->mode |= PNG_HAVE_PLTE;
-      }
-#endif
-
-      else if (chunk_name == png_IDAT)
-      {
-         /* Zero length IDATs are legal after the last IDAT has been
-          * read, but not after other chunks have been read.
-          */
-         if ((length > 0) || (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT))
-            png_benign_error(png_ptr, "Too many IDATs found");
-
-         png_crc_finish(png_ptr, length);
-      }
-      else if (chunk_name == png_PLTE)
-         png_handle_PLTE(png_ptr, info_ptr, length);
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-      else if (chunk_name == png_bKGD)
-         png_handle_bKGD(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-      else if (chunk_name == png_cHRM)
-         png_handle_cHRM(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-      else if (chunk_name == png_gAMA)
-         png_handle_gAMA(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-      else if (chunk_name == png_hIST)
-         png_handle_hIST(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-      else if (chunk_name == png_oFFs)
-         png_handle_oFFs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-      else if (chunk_name == png_pCAL)
-         png_handle_pCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-      else if (chunk_name == png_sCAL)
-         png_handle_sCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-      else if (chunk_name == png_pHYs)
-         png_handle_pHYs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-      else if (chunk_name == png_sBIT)
-         png_handle_sBIT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-      else if (chunk_name == png_sRGB)
-         png_handle_sRGB(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-      else if (chunk_name == png_iCCP)
-         png_handle_iCCP(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-      else if (chunk_name == png_sPLT)
-         png_handle_sPLT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-      else if (chunk_name == png_tEXt)
-         png_handle_tEXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-      else if (chunk_name == png_tIME)
-         png_handle_tIME(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-      else if (chunk_name == png_tRNS)
-         png_handle_tRNS(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-      else if (chunk_name == png_zTXt)
-         png_handle_zTXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-      else if (chunk_name == png_iTXt)
-         png_handle_iTXt(png_ptr, info_ptr, length);
-#endif
-
-      else
-         png_handle_unknown(png_ptr, info_ptr, length,
-            PNG_HANDLE_CHUNK_AS_DEFAULT);
-   } while (!(png_ptr->mode & PNG_HAVE_IEND));
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-/* Free all memory used in the read struct */
-static void
-png_read_destroy(png_structrp png_ptr)
-{
-   png_debug(1, "in png_read_destroy");
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   png_destroy_gamma_table(png_ptr);
-#endif
-
-   png_free(png_ptr, png_ptr->big_row_buf);
-   png_free(png_ptr, png_ptr->big_prev_row);
-   png_free(png_ptr, png_ptr->read_buffer);
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   png_free(png_ptr, png_ptr->palette_lookup);
-   png_free(png_ptr, png_ptr->quantize_index);
-#endif
-
-   if (png_ptr->free_me & PNG_FREE_PLTE)
-      png_zfree(png_ptr, png_ptr->palette);
-   png_ptr->free_me &= ~PNG_FREE_PLTE;
-
-#if defined(PNG_tRNS_SUPPORTED) || \
-    defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   if (png_ptr->free_me & PNG_FREE_TRNS)
-      png_free(png_ptr, png_ptr->trans_alpha);
-   png_ptr->free_me &= ~PNG_FREE_TRNS;
-#endif
-
-   inflateEnd(&png_ptr->zstream);
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-   png_free(png_ptr, png_ptr->save_buffer);
-#endif
-
-#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) &&\
-   defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-   png_free(png_ptr, png_ptr->unknown_chunk.data);
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-   png_free(png_ptr, png_ptr->chunk_list);
-#endif
-
-   /* NOTE: the 'setjmp' buffer may still be allocated and the memory and error
-    * callbacks are still set at this point.  They are required to complete the
-    * destruction of the png_struct itself.
-    */
-}
-
-/* Free all memory used by the read */
-void PNGAPI
-png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
-    png_infopp end_info_ptr_ptr)
-{
-   png_structrp png_ptr = NULL;
-
-   png_debug(1, "in png_destroy_read_struct");
-
-   if (png_ptr_ptr != NULL)
-      png_ptr = *png_ptr_ptr;
-
-   if (png_ptr == NULL)
-      return;
-
-   /* libpng 1.6.0: use the API to destroy info structs to ensure consistent
-    * behavior.  Prior to 1.6.0 libpng did extra 'info' destruction in this API.
-    * The extra was, apparently, unnecessary yet this hides memory leak bugs.
-    */
-   png_destroy_info_struct(png_ptr, end_info_ptr_ptr);
-   png_destroy_info_struct(png_ptr, info_ptr_ptr);
-
-   *png_ptr_ptr = NULL;
-   png_read_destroy(png_ptr);
-   png_destroy_png_struct(png_ptr);
-}
-
-void PNGAPI
-png_set_read_status_fn(png_structrp png_ptr, png_read_status_ptr read_row_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->read_row_fn = read_row_fn;
-}
-
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-void PNGAPI
-png_read_png(png_structrp png_ptr, png_inforp info_ptr,
-                           int transforms,
-                           voidp params)
-{
-   int row;
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* png_read_info() gives us all of the information from the
-    * PNG file before the first IDAT (image data chunk).
-    */
-   png_read_info(png_ptr, info_ptr);
-   if (info_ptr->height > PNG_UINT_32_MAX/(sizeof (png_bytep)))
-      png_error(png_ptr, "Image is too high to process with png_read_png()");
-
-   /* -------------- image transformations start here ------------------- */
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-   /* Tell libpng to strip 16-bit/color files down to 8 bits per color.
-    */
-   if (transforms & PNG_TRANSFORM_SCALE_16)
-   {
-     /* Added at libpng-1.5.4. "strip_16" produces the same result that it
-      * did in earlier versions, while "scale_16" is now more accurate.
-      */
-      png_set_scale_16(png_ptr);
-   }
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-   /* If both SCALE and STRIP are required pngrtran will effectively cancel the
-    * latter by doing SCALE first.  This is ok and allows apps not to check for
-    * which is supported to get the right answer.
-    */
-   if (transforms & PNG_TRANSFORM_STRIP_16)
-      png_set_strip_16(png_ptr);
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   /* Strip alpha bytes from the input data without combining with
-    * the background (not recommended).
-    */
-   if (transforms & PNG_TRANSFORM_STRIP_ALPHA)
-      png_set_strip_alpha(png_ptr);
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) && !defined(PNG_READ_EXPAND_SUPPORTED)
-   /* Extract multiple pixels with bit depths of 1, 2, or 4 from a single
-    * byte into separate bytes (useful for paletted and grayscale images).
-    */
-   if (transforms & PNG_TRANSFORM_PACKING)
-      png_set_packing(png_ptr);
-#endif
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-   /* Change the order of packed pixels to least significant bit first
-    * (not useful if you are using png_set_packing).
-    */
-   if (transforms & PNG_TRANSFORM_PACKSWAP)
-      png_set_packswap(png_ptr);
-#endif
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   /* Expand paletted colors into true RGB triplets
-    * Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel
-    * Expand paletted or RGB images with transparency to full alpha
-    * channels so the data will be available as RGBA quartets.
-    */
-   if (transforms & PNG_TRANSFORM_EXPAND)
-      if ((png_ptr->bit_depth < 8) ||
-          (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ||
-          (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)))
-         png_set_expand(png_ptr);
-#endif
-
-   /* We don't handle background color or gamma transformation or quantizing.
-    */
-
-#ifdef PNG_READ_INVERT_SUPPORTED
-   /* Invert monochrome files to have 0 as white and 1 as black
-    */
-   if (transforms & PNG_TRANSFORM_INVERT_MONO)
-      png_set_invert_mono(png_ptr);
-#endif
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-   /* If you want to shift the pixel values from the range [0,255] or
-    * [0,65535] to the original [0,7] or [0,31], or whatever range the
-    * colors were originally in:
-    */
-   if ((transforms & PNG_TRANSFORM_SHIFT)
-       && png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
-   {
-      png_color_8p sig_bit = 0;
-
-      png_get_sBIT(png_ptr, info_ptr, &sig_bit);
-      png_set_shift(png_ptr, sig_bit);
-   }
-#endif
-
-#ifdef PNG_READ_BGR_SUPPORTED
-   /* Flip the RGB pixels to BGR (or RGBA to BGRA) */
-   if (transforms & PNG_TRANSFORM_BGR)
-      png_set_bgr(png_ptr);
-#endif
-
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-   /* Swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
-   if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
-      png_set_swap_alpha(png_ptr);
-#endif
-
-#ifdef PNG_READ_SWAP_SUPPORTED
-   /* Swap bytes of 16-bit files to least significant byte first */
-   if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
-      png_set_swap(png_ptr);
-#endif
-
-/* Added at libpng-1.2.41 */
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-   /* Invert the alpha channel from opacity to transparency */
-   if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
-      png_set_invert_alpha(png_ptr);
-#endif
-
-/* Added at libpng-1.2.41 */
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   /* Expand grayscale image to RGB */
-   if (transforms & PNG_TRANSFORM_GRAY_TO_RGB)
-      png_set_gray_to_rgb(png_ptr);
-#endif
-
-/* Added at libpng-1.5.4 */
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   if (transforms & PNG_TRANSFORM_EXPAND_16)
-      png_set_expand_16(png_ptr);
-#endif
-
-   /* We don't handle adding filler bytes */
-
-   /* We use png_read_image and rely on that for interlace handling, but we also
-    * call png_read_update_info therefore must turn on interlace handling now:
-    */
-   (void)png_set_interlace_handling(png_ptr);
-
-   /* Optional call to gamma correct and add the background to the palette
-    * and update info structure.  REQUIRED if you are expecting libpng to
-    * update the palette for you (i.e., you selected such a transform above).
-    */
-   png_read_update_info(png_ptr, info_ptr);
-
-   /* -------------- image transformations end here ------------------- */
-
-   png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
-   if (info_ptr->row_pointers == NULL)
-   {
-      png_uint_32 iptr;
-
-      info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
-          info_ptr->height * (sizeof (png_bytep)));
-      for (iptr=0; iptr<info_ptr->height; iptr++)
-         info_ptr->row_pointers[iptr] = NULL;
-
-      info_ptr->free_me |= PNG_FREE_ROWS;
-
-      for (row = 0; row < (int)info_ptr->height; row++)
-         info_ptr->row_pointers[row] = (png_bytep)png_malloc(png_ptr,
-            png_get_rowbytes(png_ptr, info_ptr));
-   }
-
-   png_read_image(png_ptr, info_ptr->row_pointers);
-   info_ptr->valid |= PNG_INFO_IDAT;
-
-   /* Read rest of file, and get additional chunks in info_ptr - REQUIRED */
-   png_read_end(png_ptr, info_ptr);
-
-   PNG_UNUSED(transforms)   /* Quiet compiler warnings */
-   PNG_UNUSED(params)
-
-}
-#endif /* PNG_INFO_IMAGE_SUPPORTED */
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-/* SIMPLIFIED READ
- *
- * This code currently relies on the sequential reader, though it could easily
- * be made to work with the progressive one.
- */
-/* Arguments to png_image_finish_read: */
-
-/* Encoding of PNG data (used by the color-map code) */
-/* TODO: change these, dang, ANSI-C reserves the 'E' namespace. */
-#  define E_NOTSET  0 /* File encoding not yet known */
-#  define E_sRGB    1 /* 8-bit encoded to sRGB gamma */
-#  define E_LINEAR  2 /* 16-bit linear: not encoded, NOT pre-multiplied! */
-#  define E_FILE    3 /* 8-bit encoded to file gamma, not sRGB or linear */
-#  define E_LINEAR8 4 /* 8-bit linear: only from a file value */
-
-/* Color-map processing: after libpng has run on the PNG image further
- * processing may be needed to conver the data to color-map indicies.
- */
-#define PNG_CMAP_NONE      0
-#define PNG_CMAP_GA        1 /* Process GA data to a color-map with alpha */
-#define PNG_CMAP_TRANS     2 /* Process GA data to a background index */
-#define PNG_CMAP_RGB       3 /* Process RGB data */
-#define PNG_CMAP_RGB_ALPHA 4 /* Process RGBA data */
-
-/* The following document where the background is for each processing case. */
-#define PNG_CMAP_NONE_BACKGROUND      256
-#define PNG_CMAP_GA_BACKGROUND        231
-#define PNG_CMAP_TRANS_BACKGROUND     254
-#define PNG_CMAP_RGB_BACKGROUND       256
-#define PNG_CMAP_RGB_ALPHA_BACKGROUND 216
-
-typedef struct
-{
-   /* Arguments: */
-   png_imagep image;
-   png_voidp  buffer;
-   png_int_32 row_stride;
-   png_voidp  colormap;
-   png_const_colorp background;
-   /* Local variables: */
-   png_voidp       local_row;
-   png_voidp       first_row;
-   ptrdiff_t       row_bytes;           /* step between rows */
-   int             file_encoding;       /* E_ values above */
-   png_fixed_point gamma_to_linear;     /* For E_FILE, reciprocal of gamma */
-   int             colormap_processing; /* PNG_CMAP_ values above */
-} png_image_read_control;
-
-/* Do all the *safe* initialization - 'safe' means that png_error won't be
- * called, so setting up the jmp_buf is not required.  This means that anything
- * called from here must *not* call png_malloc - it has to call png_malloc_warn
- * instead so that control is returned safely back to this routine.
- */
-static int
-png_image_read_init(png_imagep image)
-{
-   if (image->opaque == NULL)
-   {
-      png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, image,
-          png_safe_error, png_safe_warning);
-
-      /* And set the rest of the structure to NULL to ensure that the various
-       * fields are consistent.
-       */
-      memset(image, 0, (sizeof *image));
-      image->version = PNG_IMAGE_VERSION;
-
-      if (png_ptr != NULL)
-      {
-         png_infop info_ptr = png_create_info_struct(png_ptr);
-
-         if (info_ptr != NULL)
-         {
-            png_controlp control = png_voidcast(png_controlp,
-               png_malloc_warn(png_ptr, (sizeof *control)));
-
-            if (control != NULL)
-            {
-               memset(control, 0, (sizeof *control));
-
-               control->png_ptr = png_ptr;
-               control->info_ptr = info_ptr;
-               control->for_write = 0;
-
-               image->opaque = control;
-               return 1;
-            }
-
-            /* Error clean up */
-            png_destroy_info_struct(png_ptr, &info_ptr);
-         }
-
-         png_destroy_read_struct(&png_ptr, NULL, NULL);
-      }
-
-      return png_image_error(image, "png_image_read: out of memory");
-   }
-
-   return png_image_error(image, "png_image_read: opaque pointer not NULL");
-}
-
-/* Utility to find the base format of a PNG file from a png_struct. */
-static png_uint_32
-png_image_format(png_structrp png_ptr)
-{
-   png_uint_32 format = 0;
-
-   if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
-      format |= PNG_FORMAT_FLAG_COLOR;
-
-   if (png_ptr->color_type & PNG_COLOR_MASK_ALPHA)
-      format |= PNG_FORMAT_FLAG_ALPHA;
-
-   /* Use png_ptr here, not info_ptr, because by examination png_handle_tRNS
-    * sets the png_struct fields; that's all we are interested in here.  The
-    * precise interaction with an app call to png_set_tRNS and PNG file reading
-    * is unclear.
-    */
-   else if (png_ptr->num_trans > 0)
-      format |= PNG_FORMAT_FLAG_ALPHA;
-
-   if (png_ptr->bit_depth == 16)
-      format |= PNG_FORMAT_FLAG_LINEAR;
-
-   if (png_ptr->color_type & PNG_COLOR_MASK_PALETTE)
-      format |= PNG_FORMAT_FLAG_COLORMAP;
-
-   return format;
-}
-
-/* Is the given gamma significantly different from sRGB?  The test is the same
- * one used in pngrtran.c when deciding whether to do gamma correction.  The
- * arithmetic optimizes the division by using the fact that the inverse of the
- * file sRGB gamma is 2.2
- */
-static int
-png_gamma_not_sRGB(png_fixed_point g)
-{
-   if (g < PNG_FP_1)
-   {
-      /* An uninitialized gamma is assumed to be sRGB for the simplified API. */
-      if (g == 0)
-         return 0;
-
-      return png_gamma_significant((g * 11 + 2)/5 /* i.e. *2.2, rounded */);
-   }
-
-   return 1;
-}
-
-/* Do the main body of a 'png_image_begin_read' function; read the PNG file
- * header and fill in all the information.  This is executed in a safe context,
- * unlike the init routine above.
- */
-static int
-png_image_read_header(png_voidp argument)
-{
-   png_imagep image = png_voidcast(png_imagep, argument);
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-
-   png_set_benign_errors(png_ptr, 1/*warn*/);
-   png_read_info(png_ptr, info_ptr);
-
-   /* Do this the fast way; just read directly out of png_struct. */
-   image->width = png_ptr->width;
-   image->height = png_ptr->height;
-
-   {
-      png_uint_32 format = png_image_format(png_ptr);
-
-      image->format = format;
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-      /* Does the colorspace match sRGB?  If there is no color endpoint
-       * (colorant) information assume yes, otherwise require the
-       * 'ENDPOINTS_MATCHE_sRGB' colorspace flag to have been set.  If the
-       * colorspace has been determined to be invalid ignore it.
-       */
-      if ((format & PNG_FORMAT_FLAG_COLOR) != 0 && ((png_ptr->colorspace.flags
-         & (PNG_COLORSPACE_HAVE_ENDPOINTS|PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB|
-            PNG_COLORSPACE_INVALID)) == PNG_COLORSPACE_HAVE_ENDPOINTS))
-         image->flags |= PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB;
-#endif
-   }
-
-   /* We need the maximum number of entries regardless of the format the
-    * application sets here.
-    */
-   {
-      png_uint_32 cmap_entries;
-
-      switch (png_ptr->color_type)
-      {
-         case PNG_COLOR_TYPE_GRAY:
-            cmap_entries = 1U << png_ptr->bit_depth;
-            break;
-
-         case PNG_COLOR_TYPE_PALETTE:
-            cmap_entries = png_ptr->num_palette;
-            break;
-
-         default:
-            cmap_entries = 256;
-            break;
-      }
-
-      if (cmap_entries > 256)
-         cmap_entries = 256;
-
-      image->colormap_entries = cmap_entries;
-   }
-
-   return 1;
-}
-
-#ifdef PNG_STDIO_SUPPORTED
-int PNGAPI
-png_image_begin_read_from_stdio(png_imagep image, FILE* file)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file != NULL)
-      {
-         if (png_image_read_init(image))
-         {
-            /* This is slightly evil, but png_init_io doesn't do anything other
-             * than this and we haven't changed the standard IO functions so
-             * this saves a 'safe' function.
-             */
-            image->opaque->png_ptr->io_ptr = file;
-            return png_safe_execute(image, png_image_read_header, image);
-         }
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_begin_read_from_stdio: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_begin_read_from_stdio: incorrect PNG_IMAGE_VERSION");
-
-   return 0;
-}
-
-int PNGAPI
-png_image_begin_read_from_file(png_imagep image, const char *file_name)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file_name != NULL)
-      {
-         FILE *fp = fopen(file_name, "rb");
-
-         if (fp != NULL)
-         {
-            if (png_image_read_init(image))
-            {
-               image->opaque->png_ptr->io_ptr = fp;
-               image->opaque->owned_file = 1;
-               return png_safe_execute(image, png_image_read_header, image);
-            }
-
-            /* Clean up: just the opened file. */
-            (void)fclose(fp);
-         }
-
-         else
-            return png_image_error(image, strerror(errno));
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_begin_read_from_file: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_begin_read_from_file: incorrect PNG_IMAGE_VERSION");
-
-   return 0;
-}
-#endif /* PNG_STDIO_SUPPORTED */
-
-static void PNGCBAPI
-png_image_memory_read(png_structp png_ptr, png_bytep out, png_size_t need)
-{
-   if (png_ptr != NULL)
-   {
-      png_imagep image = png_voidcast(png_imagep, png_ptr->io_ptr);
-      if (image != NULL)
-      {
-         png_controlp cp = image->opaque;
-         if (cp != NULL)
-         {
-            png_const_bytep memory = cp->memory;
-            png_size_t size = cp->size;
-
-            if (memory != NULL && size >= need)
-            {
-               memcpy(out, memory, need);
-               cp->memory = memory + need;
-               cp->size = size - need;
-               return;
-            }
-
-            png_error(png_ptr, "read beyond end of data");
-         }
-      }
-
-      png_error(png_ptr, "invalid memory read");
-   }
-}
-
-int PNGAPI png_image_begin_read_from_memory(png_imagep image,
-   png_const_voidp memory, png_size_t size)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (memory != NULL && size > 0)
-      {
-         if (png_image_read_init(image))
-         {
-            /* Now set the IO functions to read from the memory buffer and
-             * store it into io_ptr.  Again do this in-place to avoid calling a
-             * libpng function that requires error handling.
-             */
-            image->opaque->memory = png_voidcast(png_const_bytep, memory);
-            image->opaque->size = size;
-            image->opaque->png_ptr->io_ptr = image;
-            image->opaque->png_ptr->read_data_fn = png_image_memory_read;
-
-            return png_safe_execute(image, png_image_read_header, image);
-         }
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_begin_read_from_memory: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_begin_read_from_memory: incorrect PNG_IMAGE_VERSION");
-
-   return 0;
-}
-
-/* Utility function to skip chunks that are not used by the simplified image
- * read functions and an appropriate macro to call it.
- */
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-static void
-png_image_skip_unused_chunks(png_structrp png_ptr)
-{
-   /* Prepare the reader to ignore all recognized chunks whose data will not
-    * be used, i.e., all chunks recognized by libpng except for those
-    * involved in basic image reading:
-    *
-    *    IHDR, PLTE, IDAT, IEND
-    *
-    * Or image data handling:
-    *
-    *    tRNS, bKGD, gAMA, cHRM, sRGB, iCCP and sBIT.
-    *
-    * This provides a small performance improvement and eliminates any
-    * potential vulnerability to security problems in the unused chunks.
-    */
-   {
-         static PNG_CONST png_byte chunks_to_process[] = {
-            98,  75,  71,  68, '\0',  /* bKGD */
-            99,  72,  82,  77, '\0',  /* cHRM */
-           103,  65,  77,  65, '\0',  /* gAMA */
-           105,  67,  67,  80, '\0',  /* iCCP */
-           115,  66,  73,  84, '\0',  /* sBIT */
-           115,  82,  71,  66, '\0',  /* sRGB */
-           };
-
-       /* Ignore unknown chunks and all other chunks except for the
-        * IHDR, PLTE, tRNS, IDAT, and IEND chunks.
-        */
-       png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_NEVER,
-         NULL, -1);
-
-       /* But do not ignore image data handling chunks */
-       png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_AS_DEFAULT,
-         chunks_to_process, (sizeof chunks_to_process)/5);
-    }
-}
-
-#  define PNG_SKIP_CHUNKS(p) png_image_skip_unused_chunks(p)
-#else
-#  define PNG_SKIP_CHUNKS(p) ((void)0)
-#endif /* PNG_HANDLE_AS_UNKNOWN_SUPPORTED */
-
-/* The following macro gives the exact rounded answer for all values in the
- * range 0..255 (it actually divides by 51.2, but the rounding still generates
- * the correct numbers 0..5
- */
-#define PNG_DIV51(v8) (((v8) * 5 + 130) >> 8)
-
-/* Utility functions to make particular color-maps */
-static void
-set_file_encoding(png_image_read_control *display)
-{
-   png_fixed_point g = display->image->opaque->png_ptr->colorspace.gamma;
-   if (png_gamma_significant(g))
-   {
-      if (png_gamma_not_sRGB(g))
-      {
-         display->file_encoding = E_FILE;
-         display->gamma_to_linear = png_reciprocal(g);
-      }
-
-      else
-         display->file_encoding = E_sRGB;
-   }
-
-   else
-      display->file_encoding = E_LINEAR8;
-}
-
-static unsigned int
-decode_gamma(png_image_read_control *display, png_uint_32 value, int encoding)
-{
-   if (encoding == E_FILE) /* double check */
-      encoding = display->file_encoding;
-
-   if (encoding == E_NOTSET) /* must be the file encoding */
-   {
-      set_file_encoding(display);
-      encoding = display->file_encoding;
-   }
-
-   switch (encoding)
-   {
-      case E_FILE:
-         value = png_gamma_16bit_correct(value*257, display->gamma_to_linear);
-         break;
-
-      case E_sRGB:
-         value = png_sRGB_table[value];
-         break;
-
-      case E_LINEAR:
-         break;
-
-      case E_LINEAR8:
-         value *= 257;
-         break;
-
-      default:
-         png_error(display->image->opaque->png_ptr,
-            "unexpected encoding (internal error)");
-         break;
-   }
-
-   return value;
-}
-
-static png_uint_32
-png_colormap_compose(png_image_read_control *display,
-   png_uint_32 foreground, int foreground_encoding, png_uint_32 alpha,
-   png_uint_32 background, int encoding)
-{
-   /* The file value is composed on the background, the background has the given
-    * encoding and so does the result, the file is encoded with E_FILE and the
-    * file and alpha are 8-bit values.  The (output) encoding will always be
-    * E_LINEAR or E_sRGB.
-    */
-   png_uint_32 f = decode_gamma(display, foreground, foreground_encoding);
-   png_uint_32 b = decode_gamma(display, background, encoding);
-
-   /* The alpha is always an 8-bit value (it comes from the palette), the value
-    * scaled by 255 is what PNG_sRGB_FROM_LINEAR requires.
-    */
-   f = f * alpha + b * (255-alpha);
-
-   if (encoding == E_LINEAR)
-   {
-      /* Scale to 65535; divide by 255, approximately (in fact this is extremely
-       * accurate, it divides by 255.00000005937181414556, with no overflow.)
-       */
-      f *= 257; /* Now scaled by 65535 */
-      f += f >> 16;
-      f = (f+32768) >> 16;
-   }
-
-   else /* E_sRGB */
-      f = PNG_sRGB_FROM_LINEAR(f);
-
-   return f;
-}
-
-/* NOTE: E_LINEAR values to this routine must be 16-bit, but E_FILE values must
- * be 8-bit.
- */
-static void
-png_create_colormap_entry(png_image_read_control *display,
-   png_uint_32 ip, png_uint_32 red, png_uint_32 green, png_uint_32 blue,
-   png_uint_32 alpha, int encoding)
-{
-   png_imagep image = display->image;
-   const int output_encoding = (image->format & PNG_FORMAT_FLAG_LINEAR) ?
-      E_LINEAR : E_sRGB;
-   const int convert_to_Y = (image->format & PNG_FORMAT_FLAG_COLOR) == 0 &&
-      (red != green || green != blue);
-
-   if (ip > 255)
-      png_error(image->opaque->png_ptr, "color-map index out of range");
-
-   /* Update the cache with whether the file gamma is significantly different
-    * from sRGB.
-    */
-   if (encoding == E_FILE)
-   {
-      if (display->file_encoding == E_NOTSET)
-         set_file_encoding(display);
-
-      /* Note that the cached value may be E_FILE too, but if it is then the
-       * gamma_to_linear member has been set.
-       */
-      encoding = display->file_encoding;
-   }
-
-   if (encoding == E_FILE)
-   {
-      png_fixed_point g = display->gamma_to_linear;
-
-      red = png_gamma_16bit_correct(red*257, g);
-      green = png_gamma_16bit_correct(green*257, g);
-      blue = png_gamma_16bit_correct(blue*257, g);
-
-      if (convert_to_Y || output_encoding == E_LINEAR)
-      {
-         alpha *= 257;
-         encoding = E_LINEAR;
-      }
-
-      else
-      {
-         red = PNG_sRGB_FROM_LINEAR(red * 255);
-         green = PNG_sRGB_FROM_LINEAR(green * 255);
-         blue = PNG_sRGB_FROM_LINEAR(blue * 255);
-         encoding = E_sRGB;
-      }
-   }
-
-   else if (encoding == E_LINEAR8)
-   {
-      /* This encoding occurs quite frequently in test cases because PngSuite
-       * includes a gAMA 1.0 chunk with most images.
-       */
-      red *= 257;
-      green *= 257;
-      blue *= 257;
-      alpha *= 257;
-      encoding = E_LINEAR;
-   }
-
-   else if (encoding == E_sRGB && (convert_to_Y || output_encoding == E_LINEAR))
-   {
-      /* The values are 8-bit sRGB values, but must be converted to 16-bit
-       * linear.
-       */
-      red = png_sRGB_table[red];
-      green = png_sRGB_table[green];
-      blue = png_sRGB_table[blue];
-      alpha *= 257;
-      encoding = E_LINEAR;
-   }
-
-   /* This is set if the color isn't gray but the output is. */
-   if (encoding == E_LINEAR)
-   {
-      if (convert_to_Y)
-      {
-         /* NOTE: these values are copied from png_do_rgb_to_gray */
-         png_uint_32 y = (png_uint_32)6968 * red  + (png_uint_32)23434 * green +
-            (png_uint_32)2366 * blue;
-
-         if (output_encoding == E_LINEAR)
-            y = (y + 16384) >> 15;
-
-         else
-         {
-            /* y is scaled by 32768, we need it scaled by 255: */
-            y = (y + 128) >> 8;
-            y *= 255;
-            y = PNG_sRGB_FROM_LINEAR((y + 64) >> 7);
-            encoding = E_sRGB;
-         }
-
-         blue = red = green = y;
-      }
-
-      else if (output_encoding == E_sRGB)
-      {
-         red = PNG_sRGB_FROM_LINEAR(red * 255);
-         green = PNG_sRGB_FROM_LINEAR(green * 255);
-         blue = PNG_sRGB_FROM_LINEAR(blue * 255);
-         alpha = PNG_DIV257(alpha);
-         encoding = E_sRGB;
-      }
-   }
-
-   if (encoding != output_encoding)
-      png_error(image->opaque->png_ptr, "bad encoding (internal error)");
-
-   /* Store the value. */
-   {
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         const int afirst = (image->format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
-            (image->format & PNG_FORMAT_FLAG_ALPHA) != 0;
-#     else
-#        define afirst 0
-#     endif
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         const int bgr = (image->format & PNG_FORMAT_FLAG_BGR) ? 2 : 0;
-#     else
-#        define bgr 0
-#     endif
-
-      if (output_encoding == E_LINEAR)
-      {
-         png_uint_16p entry = png_voidcast(png_uint_16p, display->colormap);
-
-         entry += ip * PNG_IMAGE_SAMPLE_CHANNELS(image->format);
-
-         /* The linear 16-bit values must be pre-multiplied by the alpha channel
-          * value, if less than 65535 (this is, effectively, composite on black
-          * if the alpha channel is removed.)
-          */
-         switch (PNG_IMAGE_SAMPLE_CHANNELS(image->format))
-         {
-            case 4:
-               entry[afirst ? 0 : 3] = (png_uint_16)alpha;
-               /* FALL THROUGH */
-
-            case 3:
-               if (alpha < 65535)
-               {
-                  if (alpha > 0)
-                  {
-                     blue = (blue * alpha + 32767U)/65535U;
-                     green = (green * alpha + 32767U)/65535U;
-                     red = (red * alpha + 32767U)/65535U;
-                  }
-
-                  else
-                     red = green = blue = 0;
-               }
-               entry[afirst + (2 ^ bgr)] = (png_uint_16)blue;
-               entry[afirst + 1] = (png_uint_16)green;
-               entry[afirst + bgr] = (png_uint_16)red;
-               break;
-
-            case 2:
-               entry[1 ^ afirst] = (png_uint_16)alpha;
-               /* FALL THROUGH */
-
-            case 1:
-               if (alpha < 65535)
-               {
-                  if (alpha > 0)
-                     green = (green * alpha + 32767U)/65535U;
-
-                  else
-                     green = 0;
-               }
-               entry[afirst] = (png_uint_16)green;
-               break;
-
-            default:
-               break;
-         }
-      }
-
-      else /* output encoding is E_sRGB */
-      {
-         png_bytep entry = png_voidcast(png_bytep, display->colormap);
-
-         entry += ip * PNG_IMAGE_SAMPLE_CHANNELS(image->format);
-
-         switch (PNG_IMAGE_SAMPLE_CHANNELS(image->format))
-         {
-            case 4:
-               entry[afirst ? 0 : 3] = (png_byte)alpha;
-            case 3:
-               entry[afirst + (2 ^ bgr)] = (png_byte)blue;
-               entry[afirst + 1] = (png_byte)green;
-               entry[afirst + bgr] = (png_byte)red;
-               break;
-
-            case 2:
-               entry[1 ^ afirst] = (png_byte)alpha;
-            case 1:
-               entry[afirst] = (png_byte)green;
-               break;
-
-            default:
-               break;
-         }
-      }
-
-#     ifdef afirst
-#        undef afirst
-#     endif
-#     ifdef bgr
-#        undef bgr
-#     endif
-   }
-}
-
-static int
-make_gray_file_colormap(png_image_read_control *display)
-{
-   unsigned int i;
-
-   for (i=0; i<256; ++i)
-      png_create_colormap_entry(display, i, i, i, i, 255, E_FILE);
-
-   return i;
-}
-
-static int
-make_gray_colormap(png_image_read_control *display)
-{
-   unsigned int i;
-
-   for (i=0; i<256; ++i)
-      png_create_colormap_entry(display, i, i, i, i, 255, E_sRGB);
-
-   return i;
-}
-#define PNG_GRAY_COLORMAP_ENTRIES 256
-
-static int
-make_ga_colormap(png_image_read_control *display)
-{
-   unsigned int i, a;
-
-   /* Alpha is retained, the output will be a color-map with entries
-    * selected by six levels of alpha.  One transparent entry, 6 gray
-    * levels for all the intermediate alpha values, leaving 230 entries
-    * for the opaque grays.  The color-map entries are the six values
-    * [0..5]*51, the GA processing uses PNG_DIV51(value) to find the
-    * relevant entry.
-    *
-    * if (alpha > 229) // opaque
-    * {
-    *    // The 231 entries are selected to make the math below work:
-    *    base = 0;
-    *    entry = (231 * gray + 128) >> 8;
-    * }
-    * else if (alpha < 26) // transparent
-    * {
-    *    base = 231;
-    *    entry = 0;
-    * }
-    * else // partially opaque
-    * {
-    *    base = 226 + 6 * PNG_DIV51(alpha);
-    *    entry = PNG_DIV51(gray);
-    * }
-    */
-   i = 0;
-   while (i < 231)
-   {
-      unsigned int gray = (i * 256 + 115) / 231;
-      png_create_colormap_entry(display, i++, gray, gray, gray, 255, E_sRGB);
-   }
-
-   /* 255 is used here for the component values for consistency with the code
-    * that undoes premultiplication in pngwrite.c.
-    */
-   png_create_colormap_entry(display, i++, 255, 255, 255, 0, E_sRGB);
-
-   for (a=1; a<5; ++a)
-   {
-      unsigned int g;
-
-      for (g=0; g<6; ++g)
-         png_create_colormap_entry(display, i++, g*51, g*51, g*51, a*51,
-            E_sRGB);
-   }
-
-   return i;
-}
-
-#define PNG_GA_COLORMAP_ENTRIES 256
-
-static int
-make_rgb_colormap(png_image_read_control *display)
-{
-   unsigned int i, r;
-
-   /* Build a 6x6x6 opaque RGB cube */
-   for (i=r=0; r<6; ++r)
-   {
-      unsigned int g;
-
-      for (g=0; g<6; ++g)
-      {
-         unsigned int b;
-
-         for (b=0; b<6; ++b)
-            png_create_colormap_entry(display, i++, r*51, g*51, b*51, 255,
-               E_sRGB);
-      }
-   }
-
-   return i;
-}
-
-#define PNG_RGB_COLORMAP_ENTRIES 216
-
-/* Return a palette index to the above palette given three 8-bit sRGB values. */
-#define PNG_RGB_INDEX(r,g,b) \
-   ((png_byte)(6 * (6 * PNG_DIV51(r) + PNG_DIV51(g)) + PNG_DIV51(b)))
-
-static int
-png_image_read_colormap(png_voidp argument)
-{
-   png_image_read_control *display =
-      png_voidcast(png_image_read_control*, argument);
-   const png_imagep image = display->image;
-
-   const png_structrp png_ptr = image->opaque->png_ptr;
-   const png_uint_32 output_format = image->format;
-   const int output_encoding = (output_format & PNG_FORMAT_FLAG_LINEAR) ?
-      E_LINEAR : E_sRGB;
-
-   unsigned int cmap_entries;
-   unsigned int output_processing;        /* Output processing option */
-   unsigned int data_encoding = E_NOTSET; /* Encoding libpng must produce */
-
-   /* Background information; the background color and the index of this color
-    * in the color-map if it exists (else 256).
-    */
-   unsigned int background_index = 256;
-   png_uint_32 back_r, back_g, back_b;
-
-   /* Flags to accumulate things that need to be done to the input. */
-   int expand_tRNS = 0;
-
-   /* Exclude the NYI feature of compositing onto a color-mapped buffer; it is
-    * very difficult to do, the results look awful, and it is difficult to see
-    * what possible use it is because the application can't control the
-    * color-map.
-    */
-   if (((png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0 ||
-         png_ptr->num_trans > 0) /* alpha in input */ &&
-      ((output_format & PNG_FORMAT_FLAG_ALPHA) == 0) /* no alpha in output */)
-   {
-      if (output_encoding == E_LINEAR) /* compose on black */
-         back_b = back_g = back_r = 0;
-
-      else if (display->background == NULL /* no way to remove it */)
-         png_error(png_ptr,
-            "a background color must be supplied to remove alpha/transparency");
-
-      /* Get a copy of the background color (this avoids repeating the checks
-       * below.)  The encoding is 8-bit sRGB or 16-bit linear, depending on the
-       * output format.
-       */
-      else
-      {
-         back_g = display->background->green;
-         if (output_format & PNG_FORMAT_FLAG_COLOR)
-         {
-            back_r = display->background->red;
-            back_b = display->background->blue;
-         }
-         else
-            back_b = back_r = back_g;
-      }
-   }
-
-   else if (output_encoding == E_LINEAR)
-      back_b = back_r = back_g = 65535;
-
-   else
-      back_b = back_r = back_g = 255;
-
-   /* Default the input file gamma if required - this is necessary because
-    * libpng assumes that if no gamma information is present the data is in the
-    * output format, but the simplified API deduces the gamma from the input
-    * format.
-    */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) == 0)
-   {
-      /* Do this directly, not using the png_colorspace functions, to ensure
-       * that it happens even if the colorspace is invalid (though probably if
-       * it is the setting will be ignored)  Note that the same thing can be
-       * achieved at the application interface with png_set_gAMA.
-       */
-      if (png_ptr->bit_depth == 16 &&
-         (image->flags & PNG_IMAGE_FLAG_16BIT_sRGB) == 0)
-         png_ptr->colorspace.gamma = PNG_GAMMA_LINEAR;
-
-      else
-         png_ptr->colorspace.gamma = PNG_GAMMA_sRGB_INVERSE;
-
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-   }
-
-   /* Decide what to do based on the PNG color type of the input data.  The
-    * utility function png_create_colormap_entry deals with most aspects of the
-    * output transformations; this code works out how to produce bytes of
-    * color-map entries from the original format.
-    */
-   switch (png_ptr->color_type)
-   {
-      case PNG_COLOR_TYPE_GRAY:
-         if (png_ptr->bit_depth <= 8)
-         {
-            /* There at most 256 colors in the output, regardless of
-             * transparency.
-             */
-            unsigned int step, i, val, trans = 256/*ignore*/, back_alpha = 0;
-
-            cmap_entries = 1U << png_ptr->bit_depth;
-            if (cmap_entries > image->colormap_entries)
-               png_error(png_ptr, "gray[8] color-map: too few entries");
-
-            step = 255 / (cmap_entries - 1);
-            output_processing = PNG_CMAP_NONE;
-
-            /* If there is a tRNS chunk then this either selects a transparent
-             * value or, if the output has no alpha, the background color.
-             */
-            if (png_ptr->num_trans > 0)
-            {
-               trans = png_ptr->trans_color.gray;
-
-               if ((output_format & PNG_FORMAT_FLAG_ALPHA) == 0)
-                  back_alpha = output_encoding == E_LINEAR ? 65535 : 255;
-            }
-
-            /* png_create_colormap_entry just takes an RGBA and writes the
-             * corresponding color-map entry using the format from 'image',
-             * including the required conversion to sRGB or linear as
-             * appropriate.  The input values are always either sRGB (if the
-             * gamma correction flag is 0) or 0..255 scaled file encoded values
-             * (if the function must gamma correct them).
-             */
-            for (i=val=0; i<cmap_entries; ++i, val += step)
-            {
-               /* 'i' is a file value.  While this will result in duplicated
-                * entries for 8-bit non-sRGB encoded files it is necessary to
-                * have non-gamma corrected values to do tRNS handling.
-                */
-               if (i != trans)
-                  png_create_colormap_entry(display, i, val, val, val, 255,
-                     E_FILE/*8-bit with file gamma*/);
-
-               /* Else this entry is transparent.  The colors don't matter if
-                * there is an alpha channel (back_alpha == 0), but it does no
-                * harm to pass them in; the values are not set above so this
-                * passes in white.
-                *
-                * NOTE: this preserves the full precision of the application
-                * supplied background color when it is used.
-                */
-               else
-                  png_create_colormap_entry(display, i, back_r, back_g, back_b,
-                     back_alpha, output_encoding);
-            }
-
-            /* We need libpng to preserve the original encoding. */
-            data_encoding = E_FILE;
-
-            /* The rows from libpng, while technically gray values, are now also
-             * color-map indicies; however, they may need to be expanded to 1
-             * byte per pixel.  This is what png_set_packing does (i.e., it
-             * unpacks the bit values into bytes.)
-             */
-            if (png_ptr->bit_depth < 8)
-               png_set_packing(png_ptr);
-         }
-
-         else /* bit depth is 16 */
-         {
-            /* The 16-bit input values can be converted directly to 8-bit gamma
-             * encoded values; however, if a tRNS chunk is present 257 color-map
-             * entries are required.  This means that the extra entry requires
-             * special processing; add an alpha channel, sacrifice gray level
-             * 254 and convert transparent (alpha==0) entries to that.
-             *
-             * Use libpng to chop the data to 8 bits.  Convert it to sRGB at the
-             * same time to minimize quality loss.  If a tRNS chunk is present
-             * this means libpng must handle it too; otherwise it is impossible
-             * to do the exact match on the 16-bit value.
-             *
-             * If the output has no alpha channel *and* the background color is
-             * gray then it is possible to let libpng handle the substitution by
-             * ensuring that the corresponding gray level matches the background
-             * color exactly.
-             */
-            data_encoding = E_sRGB;
-
-            if (PNG_GRAY_COLORMAP_ENTRIES > image->colormap_entries)
-               png_error(png_ptr, "gray[16] color-map: too few entries");
-
-            cmap_entries = make_gray_colormap(display);
-
-            if (png_ptr->num_trans > 0)
-            {
-               unsigned int back_alpha;
-
-               if (output_format & PNG_FORMAT_FLAG_ALPHA)
-                  back_alpha = 0;
-
-               else
-               {
-                  if (back_r == back_g && back_g == back_b)
-                  {
-                     /* Background is gray; no special processing will be
-                      * required.
-                      */
-                     png_color_16 c;
-                     png_uint_32 gray = back_g;
-
-                     if (output_encoding == E_LINEAR)
-                     {
-                        gray = PNG_sRGB_FROM_LINEAR(gray * 255);
-
-                        /* And make sure the corresponding palette entry
-                         * matches.
-                         */
-                        png_create_colormap_entry(display, gray, back_g, back_g,
-                           back_g, 65535, E_LINEAR);
-                     }
-
-                     /* The background passed to libpng, however, must be the
-                      * sRGB value.
-                      */
-                     c.index = 0; /*unused*/
-                     c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
-
-                     /* NOTE: does this work without expanding tRNS to alpha?
-                      * It should be the color->gray case below apparently
-                      * doesn't.
-                      */
-                     png_set_background_fixed(png_ptr, &c,
-                        PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                        0/*gamma: not used*/);
-
-                     output_processing = PNG_CMAP_NONE;
-                     break;
-                  }
-
-                  back_alpha = output_encoding == E_LINEAR ? 65535 : 255;
-               }
-
-               /* output_processing means that the libpng-processed row will be
-                * 8-bit GA and it has to be processing to single byte color-map
-                * values.  Entry 254 is replaced by either a completely
-                * transparent entry or by the background color at full
-                * precision (and the background color is not a simple gray leve
-                * in this case.)
-                */
-               expand_tRNS = 1;
-               output_processing = PNG_CMAP_TRANS;
-               background_index = 254;
-
-               /* And set (overwrite) color-map entry 254 to the actual
-                * background color at full precision.
-                */
-               png_create_colormap_entry(display, 254, back_r, back_g, back_b,
-                  back_alpha, output_encoding);
-            }
-
-            else
-               output_processing = PNG_CMAP_NONE;
-         }
-         break;
-
-      case PNG_COLOR_TYPE_GRAY_ALPHA:
-         /* 8-bit or 16-bit PNG with two channels - gray and alpha.  A minimum
-          * of 65536 combinations.  If, however, the alpha channel is to be
-          * removed there are only 256 possibilities if the background is gray.
-          * (Otherwise there is a subset of the 65536 possibilities defined by
-          * the triangle between black, white and the background color.)
-          *
-          * Reduce 16-bit files to 8-bit and sRGB encode the result.  No need to
-          * worry about tRNS matching - tRNS is ignored if there is an alpha
-          * channel.
-          */
-         data_encoding = E_sRGB;
-
-         if (output_format & PNG_FORMAT_FLAG_ALPHA)
-         {
-            if (PNG_GA_COLORMAP_ENTRIES > image->colormap_entries)
-               png_error(png_ptr, "gray+alpha color-map: too few entries");
-
-            cmap_entries = make_ga_colormap(display);
-
-            background_index = PNG_CMAP_GA_BACKGROUND;
-            output_processing = PNG_CMAP_GA;
-         }
-
-         else /* alpha is removed */
-         {
-            /* Alpha must be removed as the PNG data is processed when the
-             * background is a color because the G and A channels are
-             * independent and the vector addition (non-parallel vectors) is a
-             * 2-D problem.
-             *
-             * This can be reduced to the same algorithm as above by making a
-             * colormap containing gray levels (for the opaque grays), a
-             * background entry (for a transparent pixel) and a set of four six
-             * level color values, one set for each intermediate alpha value.
-             * See the comments in make_ga_colormap for how this works in the
-             * per-pixel processing.
-             *
-             * If the background is gray, however, we only need a 256 entry gray
-             * level color map.  It is sufficient to make the entry generated
-             * for the background color be exactly the color specified.
-             */
-            if ((output_format & PNG_FORMAT_FLAG_COLOR) == 0 ||
-               (back_r == back_g && back_g == back_b))
-            {
-               /* Background is gray; no special processing will be required. */
-               png_color_16 c;
-               png_uint_32 gray = back_g;
-
-               if (PNG_GRAY_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "gray-alpha color-map: too few entries");
-
-               cmap_entries = make_gray_colormap(display);
-
-               if (output_encoding == E_LINEAR)
-               {
-                  gray = PNG_sRGB_FROM_LINEAR(gray * 255);
-
-                  /* And make sure the corresponding palette entry matches. */
-                  png_create_colormap_entry(display, gray, back_g, back_g,
-                     back_g, 65535, E_LINEAR);
-               }
-
-               /* The background passed to libpng, however, must be the sRGB
-                * value.
-                */
-               c.index = 0; /*unused*/
-               c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
-
-               png_set_background_fixed(png_ptr, &c,
-                  PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                  0/*gamma: not used*/);
-
-               output_processing = PNG_CMAP_NONE;
-            }
-
-            else
-            {
-               png_uint_32 i, a;
-
-               /* This is the same as png_make_ga_colormap, above, except that
-                * the entries are all opaque.
-                */
-               if (PNG_GA_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "ga-alpha color-map: too few entries");
-
-               i = 0;
-               while (i < 231)
-               {
-                  png_uint_32 gray = (i * 256 + 115) / 231;
-                  png_create_colormap_entry(display, i++, gray, gray, gray,
-                     255, E_sRGB);
-               }
-
-               /* NOTE: this preserves the full precision of the application
-                * background color.
-                */
-               background_index = i;
-               png_create_colormap_entry(display, i++, back_r, back_g, back_b,
-                  output_encoding == E_LINEAR ? 65535U : 255U, output_encoding);
-
-               /* For non-opaque input composite on the sRGB background - this
-                * requires inverting the encoding for each component.  The input
-                * is still converted to the sRGB encoding because this is a
-                * reasonable approximate to the logarithmic curve of human
-                * visual sensitivity, at least over the narrow range which PNG
-                * represents.  Consequently 'G' is always sRGB encoded, while
-                * 'A' is linear.  We need the linear background colors.
-                */
-               if (output_encoding == E_sRGB) /* else already linear */
-               {
-                  /* This may produce a value not exactly matching the
-                   * background, but that's ok because these numbers are only
-                   * used when alpha != 0
-                   */
-                  back_r = png_sRGB_table[back_r];
-                  back_g = png_sRGB_table[back_g];
-                  back_b = png_sRGB_table[back_b];
-               }
-
-               for (a=1; a<5; ++a)
-               {
-                  unsigned int g;
-
-                  /* PNG_sRGB_FROM_LINEAR expects a 16-bit linear value scaled
-                   * by an 8-bit alpha value (0..255).
-                   */
-                  png_uint_32 alpha = 51 * a;
-                  png_uint_32 back_rx = (255-alpha) * back_r;
-                  png_uint_32 back_gx = (255-alpha) * back_g;
-                  png_uint_32 back_bx = (255-alpha) * back_b;
-
-                  for (g=0; g<6; ++g)
-                  {
-                     png_uint_32 gray = png_sRGB_table[g*51] * alpha;
-
-                     png_create_colormap_entry(display, i++,
-                        PNG_sRGB_FROM_LINEAR(gray + back_rx),
-                        PNG_sRGB_FROM_LINEAR(gray + back_gx),
-                        PNG_sRGB_FROM_LINEAR(gray + back_bx), 255, E_sRGB);
-                  }
-               }
-
-               cmap_entries = i;
-               output_processing = PNG_CMAP_GA;
-            }
-         }
-         break;
-
-      case PNG_COLOR_TYPE_RGB:
-      case PNG_COLOR_TYPE_RGB_ALPHA:
-         /* Exclude the case where the output is gray; we can always handle this
-          * with the cases above.
-          */
-         if ((output_format & PNG_FORMAT_FLAG_COLOR) == 0)
-         {
-            /* The color-map will be grayscale, so we may as well convert the
-             * input RGB values to a simple grayscale and use the grayscale
-             * code above.
-             *
-             * NOTE: calling this apparently damages the recognition of the
-             * transparent color in background color handling; call
-             * png_set_tRNS_to_alpha before png_set_background_fixed.
-             */
-            png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE, -1,
-               -1);
-            data_encoding = E_sRGB;
-
-            /* The output will now be one or two 8-bit gray or gray+alpha
-             * channels.  The more complex case arises when the input has alpha.
-             */
-            if ((png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-               png_ptr->num_trans > 0) &&
-               (output_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-            {
-               /* Both input and output have an alpha channel, so no background
-                * processing is required; just map the GA bytes to the right
-                * color-map entry.
-                */
-               expand_tRNS = 1;
-
-               if (PNG_GA_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "rgb[ga] color-map: too few entries");
-
-               cmap_entries = make_ga_colormap(display);
-               background_index = PNG_CMAP_GA_BACKGROUND;
-               output_processing = PNG_CMAP_GA;
-            }
-
-            else
-            {
-               /* Either the input or the output has no alpha channel, so there
-                * will be no non-opaque pixels in the color-map; it will just be
-                * grayscale.
-                */
-               if (PNG_GRAY_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "rgb[gray] color-map: too few entries");
-
-               /* Ideally this code would use libpng to do the gamma correction,
-                * but if an input alpha channel is to be removed we will hit the
-                * libpng bug in gamma+compose+rgb-to-gray (the double gamma
-                * correction bug).  Fix this by dropping the gamma correction in
-                * this case and doing it in the palette; this will result in
-                * duplicate palette entries, but that's better than the
-                * alternative of double gamma correction.
-                */
-               if ((png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-                  png_ptr->num_trans > 0) &&
-                  png_gamma_not_sRGB(png_ptr->colorspace.gamma))
-               {
-                  cmap_entries = make_gray_file_colormap(display);
-                  data_encoding = E_FILE;
-               }
-
-               else
-                  cmap_entries = make_gray_colormap(display);
-
-               /* But if the input has alpha or transparency it must be removed
-                */
-               if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-                  png_ptr->num_trans > 0)
-               {
-                  png_color_16 c;
-                  png_uint_32 gray = back_g;
-
-                  /* We need to ensure that the application background exists in
-                   * the colormap and that completely transparent pixels map to
-                   * it.  Achieve this simply by ensuring that the entry
-                   * selected for the background really is the background color.
-                   */
-                  if (data_encoding == E_FILE) /* from the fixup above */
-                  {
-                     /* The app supplied a gray which is in output_encoding, we
-                      * need to convert it to a value of the input (E_FILE)
-                      * encoding then set this palette entry to the required
-                      * output encoding.
-                      */
-                     if (output_encoding == E_sRGB)
-                        gray = png_sRGB_table[gray]; /* now E_LINEAR */
-
-                     gray = PNG_DIV257(png_gamma_16bit_correct(gray,
-                        png_ptr->colorspace.gamma)); /* now E_FILE */
-
-                     /* And make sure the corresponding palette entry contains
-                      * exactly the required sRGB value.
-                      */
-                     png_create_colormap_entry(display, gray, back_g, back_g,
-                        back_g, 0/*unused*/, output_encoding);
-                  }
-
-                  else if (output_encoding == E_LINEAR)
-                  {
-                     gray = PNG_sRGB_FROM_LINEAR(gray * 255);
-
-                     /* And make sure the corresponding palette entry matches.
-                      */
-                     png_create_colormap_entry(display, gray, back_g, back_g,
-                        back_g, 0/*unused*/, E_LINEAR);
-                  }
-
-                  /* The background passed to libpng, however, must be the
-                   * output (normally sRGB) value.
-                   */
-                  c.index = 0; /*unused*/
-                  c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
-
-                  /* NOTE: the following is apparently a bug in libpng. Without
-                   * it the transparent color recognition in
-                   * png_set_background_fixed seems to go wrong.
-                   */
-                  expand_tRNS = 1;
-                  png_set_background_fixed(png_ptr, &c,
-                     PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                     0/*gamma: not used*/);
-               }
-
-               output_processing = PNG_CMAP_NONE;
-            }
-         }
-
-         else /* output is color */
-         {
-            /* We could use png_quantize here so long as there is no transparent
-             * color or alpha; png_quantize ignores alpha.  Easier overall just
-             * to do it once and using PNG_DIV51 on the 6x6x6 reduced RGB cube.
-             * Consequently we always want libpng to produce sRGB data.
-             */
-            data_encoding = E_sRGB;
-
-            /* Is there any transparency or alpha? */
-            if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-               png_ptr->num_trans > 0)
-            {
-               /* Is there alpha in the output too?  If so all four channels are
-                * processed into a special RGB cube with alpha support.
-                */
-               if (output_format & PNG_FORMAT_FLAG_ALPHA)
-               {
-                  png_uint_32 r;
-
-                  if (PNG_RGB_COLORMAP_ENTRIES+1+27 > image->colormap_entries)
-                     png_error(png_ptr, "rgb+alpha color-map: too few entries");
-
-                  cmap_entries = make_rgb_colormap(display);
-
-                  /* Add a transparent entry. */
-                  png_create_colormap_entry(display, cmap_entries, 255, 255,
-                     255, 0, E_sRGB);
-
-                  /* This is stored as the background index for the processing
-                   * algorithm.
-                   */
-                  background_index = cmap_entries++;
-
-                  /* Add 27 r,g,b entries each with alpha 0.5. */
-                  for (r=0; r<256; r = (r << 1) | 0x7f)
-                  {
-                     png_uint_32 g;
-
-                     for (g=0; g<256; g = (g << 1) | 0x7f)
-                     {
-                        png_uint_32 b;
-
-                        /* This generates components with the values 0, 127 and
-                         * 255
-                         */
-                        for (b=0; b<256; b = (b << 1) | 0x7f)
-                           png_create_colormap_entry(display, cmap_entries++,
-                              r, g, b, 128, E_sRGB);
-                     }
-                  }
-
-                  expand_tRNS = 1;
-                  output_processing = PNG_CMAP_RGB_ALPHA;
-               }
-
-               else
-               {
-                  /* Alpha/transparency must be removed.  The background must
-                   * exist in the color map (achieved by setting adding it after
-                   * the 666 color-map).  If the standard processing code will
-                   * pick up this entry automatically that's all that is
-                   * required; libpng can be called to do the background
-                   * processing.
-                   */
-                  unsigned int sample_size =
-                     PNG_IMAGE_SAMPLE_SIZE(output_format);
-                  png_uint_32 r, g, b; /* sRGB background */
-
-                  if (PNG_RGB_COLORMAP_ENTRIES+1+27 > image->colormap_entries)
-                     png_error(png_ptr, "rgb-alpha color-map: too few entries");
-
-                  cmap_entries = make_rgb_colormap(display);
-
-                  png_create_colormap_entry(display, cmap_entries, back_r,
-                        back_g, back_b, 0/*unused*/, output_encoding);
-
-                  if (output_encoding == E_LINEAR)
-                  {
-                     r = PNG_sRGB_FROM_LINEAR(back_r * 255);
-                     g = PNG_sRGB_FROM_LINEAR(back_g * 255);
-                     b = PNG_sRGB_FROM_LINEAR(back_b * 255);
-                  }
-
-                  else
-                  {
-                     r = back_r;
-                     g = back_g;
-                     b = back_g;
-                  }
-
-                  /* Compare the newly-created color-map entry with the one the
-                   * PNG_CMAP_RGB algorithm will use.  If the two entries don't
-                   * match, add the new one and set this as the background
-                   * index.
-                   */
-                  if (memcmp((png_const_bytep)display->colormap +
-                        sample_size * cmap_entries,
-                     (png_const_bytep)display->colormap +
-                        sample_size * PNG_RGB_INDEX(r,g,b),
-                     sample_size) != 0)
-                  {
-                     /* The background color must be added. */
-                     background_index = cmap_entries++;
-
-                     /* Add 27 r,g,b entries each with created by composing with
-                      * the background at alpha 0.5.
-                      */
-                     for (r=0; r<256; r = (r << 1) | 0x7f)
-                     {
-                        for (g=0; g<256; g = (g << 1) | 0x7f)
-                        {
-                           /* This generates components with the values 0, 127
-                            * and 255
-                            */
-                           for (b=0; b<256; b = (b << 1) | 0x7f)
-                              png_create_colormap_entry(display, cmap_entries++,
-                                 png_colormap_compose(display, r, E_sRGB, 128,
-                                    back_r, output_encoding),
-                                 png_colormap_compose(display, g, E_sRGB, 128,
-                                    back_g, output_encoding),
-                                 png_colormap_compose(display, b, E_sRGB, 128,
-                                    back_b, output_encoding),
-                                 0/*unused*/, output_encoding);
-                        }
-                     }
-
-                     expand_tRNS = 1;
-                     output_processing = PNG_CMAP_RGB_ALPHA;
-                  }
-
-                  else /* background color is in the standard color-map */
-                  {
-                     png_color_16 c;
-
-                     c.index = 0; /*unused*/
-                     c.red = (png_uint_16)back_r;
-                     c.gray = c.green = (png_uint_16)back_g;
-                     c.blue = (png_uint_16)back_b;
-
-                     png_set_background_fixed(png_ptr, &c,
-                        PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                        0/*gamma: not used*/);
-
-                     output_processing = PNG_CMAP_RGB;
-                  }
-               }
-            }
-
-            else /* no alpha or transparency in the input */
-            {
-               /* Alpha in the output is irrelevant, simply map the opaque input
-                * pixels to the 6x6x6 color-map.
-                */
-               if (PNG_RGB_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "rgb color-map: too few entries");
-
-               cmap_entries = make_rgb_colormap(display);
-               output_processing = PNG_CMAP_RGB;
-            }
-         }
-         break;
-
-      case PNG_COLOR_TYPE_PALETTE:
-         /* It's already got a color-map.  It may be necessary to eliminate the
-          * tRNS entries though.
-          */
-         {
-            unsigned int num_trans = png_ptr->num_trans;
-            png_const_bytep trans = num_trans > 0 ? png_ptr->trans_alpha : NULL;
-            png_const_colorp colormap = png_ptr->palette;
-            const int do_background = trans != NULL &&
-               (output_format & PNG_FORMAT_FLAG_ALPHA) == 0;
-            unsigned int i;
-
-            /* Just in case: */
-            if (trans == NULL)
-               num_trans = 0;
-
-            output_processing = PNG_CMAP_NONE;
-            data_encoding = E_FILE; /* Don't change from color-map indicies */
-            cmap_entries = png_ptr->num_palette;
-            if (cmap_entries > 256)
-               cmap_entries = 256;
-
-            if (cmap_entries > image->colormap_entries)
-               png_error(png_ptr, "palette color-map: too few entries");
-
-            for (i=0; i < cmap_entries; ++i)
-            {
-               if (do_background && i < num_trans && trans[i] < 255)
-               {
-                  if (trans[i] == 0)
-                     png_create_colormap_entry(display, i, back_r, back_g,
-                        back_b, 0, output_encoding);
-
-                  else
-                  {
-                     /* Must compose the PNG file color in the color-map entry
-                      * on the sRGB color in 'back'.
-                      */
-                     png_create_colormap_entry(display, i,
-                        png_colormap_compose(display, colormap[i].red, E_FILE,
-                           trans[i], back_r, output_encoding),
-                        png_colormap_compose(display, colormap[i].green, E_FILE,
-                           trans[i], back_g, output_encoding),
-                        png_colormap_compose(display, colormap[i].blue, E_FILE,
-                           trans[i], back_b, output_encoding),
-                        output_encoding == E_LINEAR ? trans[i] * 257U :
-                           trans[i],
-                        output_encoding);
-                  }
-               }
-
-               else
-                  png_create_colormap_entry(display, i, colormap[i].red,
-                     colormap[i].green, colormap[i].blue,
-                     i < num_trans ? trans[i] : 255U, E_FILE/*8-bit*/);
-            }
-
-            /* The PNG data may have indicies packed in fewer than 8 bits, it
-             * must be expanded if so.
-             */
-            if (png_ptr->bit_depth < 8)
-               png_set_packing(png_ptr);
-         }
-         break;
-
-      default:
-         png_error(png_ptr, "invalid PNG color type");
-         /*NOT REACHED*/
-         break;
-   }
-
-   /* Now deal with the output processing */
-   if (expand_tRNS && png_ptr->num_trans > 0 &&
-      (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) == 0)
-      png_set_tRNS_to_alpha(png_ptr);
-
-   switch (data_encoding)
-   {
-      default:
-         png_error(png_ptr, "bad data option (internal error)");
-         break;
-
-      case E_sRGB:
-         /* Change to 8-bit sRGB */
-         png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, PNG_GAMMA_sRGB);
-         /* FALL THROUGH */
-
-      case E_FILE:
-         if (png_ptr->bit_depth > 8)
-            png_set_scale_16(png_ptr);
-         break;
-   }
-
-   if (cmap_entries > 256 || cmap_entries > image->colormap_entries)
-      png_error(png_ptr, "color map overflow (BAD internal error)");
-
-   image->colormap_entries = cmap_entries;
-
-   /* Double check using the recorded background index */
-   switch (output_processing)
-   {
-      case PNG_CMAP_NONE:
-         if (background_index != PNG_CMAP_NONE_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_GA:
-         if (background_index != PNG_CMAP_GA_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_TRANS:
-         if (background_index >= cmap_entries ||
-            background_index != PNG_CMAP_TRANS_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_RGB:
-         if (background_index != PNG_CMAP_RGB_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_RGB_ALPHA:
-         if (background_index != PNG_CMAP_RGB_ALPHA_BACKGROUND)
-            goto bad_background;
-         break;
-
-      default:
-         png_error(png_ptr, "bad processing option (internal error)");
-
-      bad_background:
-         png_error(png_ptr, "bad background index (internal error)");
-   }
-
-   display->colormap_processing = output_processing;
-
-   return 1/*ok*/;
-}
-
-/* The final part of the color-map read called from png_image_finish_read. */
-static int
-png_image_read_and_map(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   int passes;
-
-   /* Called when the libpng data must be transformed into the color-mapped
-    * form.  There is a local row buffer in display->local and this routine must
-    * do the interlace handling.
-    */
-   switch (png_ptr->interlaced)
-   {
-      case PNG_INTERLACE_NONE:
-         passes = 1;
-         break;
-
-      case PNG_INTERLACE_ADAM7:
-         passes = PNG_INTERLACE_ADAM7_PASSES;
-         break;
-
-      default:
-         passes = 0;
-         png_error(png_ptr, "unknown interlace type");
-   }
-
-   {
-      png_uint_32  height = image->height;
-      png_uint_32  width = image->width;
-      int          proc = display->colormap_processing;
-      png_bytep    first_row = png_voidcast(png_bytep, display->first_row);
-      ptrdiff_t    step_row = display->row_bytes;
-      int pass;
-
-      for (pass = 0; pass < passes; ++pass)
-      {
-         unsigned int     startx, stepx, stepy;
-         png_uint_32      y;
-
-         if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-         {
-            /* The row may be empty for a short image: */
-            if (PNG_PASS_COLS(width, pass) == 0)
-               continue;
-
-            startx = PNG_PASS_START_COL(pass);
-            stepx = PNG_PASS_COL_OFFSET(pass);
-            y = PNG_PASS_START_ROW(pass);
-            stepy = PNG_PASS_ROW_OFFSET(pass);
-         }
-
-         else
-         {
-            y = 0;
-            startx = 0;
-            stepx = stepy = 1;
-         }
-
-         for (; y<height; y += stepy)
-         {
-            png_bytep inrow = png_voidcast(png_bytep, display->local_row);
-            png_bytep outrow = first_row + y * step_row;
-            png_const_bytep end_row = outrow + width;
-
-            /* Read read the libpng data into the temporary buffer. */
-            png_read_row(png_ptr, inrow, NULL);
-
-            /* Now process the row according to the processing option, note
-             * that the caller verifies that the format of the libpng output
-             * data is as required.
-             */
-            outrow += startx;
-            switch (proc)
-            {
-               case PNG_CMAP_GA:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     /* The data is always in the PNG order */
-                     unsigned int gray = *inrow++;
-                     unsigned int alpha = *inrow++;
-                     unsigned int entry;
-
-                     /* NOTE: this code is copied as a comment in
-                      * make_ga_colormap above.  Please update the
-                      * comment if you change this code!
-                      */
-                     if (alpha > 229) /* opaque */
-                     {
-                        entry = (231 * gray + 128) >> 8;
-                     }
-                     else if (alpha < 26) /* transparent */
-                     {
-                        entry = 231;
-                     }
-                     else /* partially opaque */
-                     {
-                        entry = 226 + 6 * PNG_DIV51(alpha) + PNG_DIV51(gray);
-                     }
-
-                     *outrow = (png_byte)entry;
-                  }
-                  break;
-
-               case PNG_CMAP_TRANS:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     png_byte gray = *inrow++;
-                     png_byte alpha = *inrow++;
-
-                     if (alpha == 0)
-                        *outrow = PNG_CMAP_TRANS_BACKGROUND;
-
-                     else if (gray != PNG_CMAP_TRANS_BACKGROUND)
-                        *outrow = gray;
-
-                     else
-                        *outrow = (png_byte)(PNG_CMAP_TRANS_BACKGROUND+1);
-                  }
-                  break;
-
-               case PNG_CMAP_RGB:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     *outrow = PNG_RGB_INDEX(inrow[0], inrow[1], inrow[2]);
-                     inrow += 3;
-                  }
-                  break;
-
-               case PNG_CMAP_RGB_ALPHA:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     unsigned int alpha = inrow[3];
-
-                     /* Because the alpha entries only hold alpha==0.5 values
-                      * split the processing at alpha==0.25 (64) and 0.75
-                      * (196).
-                      */
-
-                     if (alpha >= 196)
-                        *outrow = PNG_RGB_INDEX(inrow[0], inrow[1],
-                           inrow[2]);
-
-                     else if (alpha < 64)
-                        *outrow = PNG_CMAP_RGB_ALPHA_BACKGROUND;
-
-                     else
-                     {
-                        /* Likewise there are three entries for each of r, g
-                         * and b.  We could select the entry by popcount on
-                         * the top two bits on those architectures that
-                         * support it, this is what the code below does,
-                         * crudely.
-                         */
-                        unsigned int back_i = PNG_CMAP_RGB_ALPHA_BACKGROUND+1;
-
-                        /* Here are how the values map:
-                         *
-                         * 0x00 .. 0x3f -> 0
-                         * 0x40 .. 0xbf -> 1
-                         * 0xc0 .. 0xff -> 2
-                         *
-                         * So, as above with the explicit alpha checks, the
-                         * breakpoints are at 64 and 196.
-                         */
-                        if (inrow[0] & 0x80) back_i += 9; /* red */
-                        if (inrow[0] & 0x40) back_i += 9;
-                        if (inrow[0] & 0x80) back_i += 3; /* green */
-                        if (inrow[0] & 0x40) back_i += 3;
-                        if (inrow[0] & 0x80) back_i += 1; /* blue */
-                        if (inrow[0] & 0x40) back_i += 1;
-
-                        *outrow = (png_byte)back_i;
-                     }
-
-                     inrow += 4;
-                  }
-                  break;
-
-               default:
-                  break;
-            }
-         }
-      }
-   }
-
-   return 1;
-}
-
-static int
-png_image_read_colormapped(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_controlp control = image->opaque;
-   png_structrp png_ptr = control->png_ptr;
-   png_inforp info_ptr = control->info_ptr;
-
-   int passes = 0; /* As a flag */
-
-   PNG_SKIP_CHUNKS(png_ptr);
-
-   /* Update the 'info' structure and make sure the result is as required; first
-    * make sure to turn on the interlace handling if it will be required
-    * (because it can't be turned on *after* the call to png_read_update_info!)
-    */
-   if (display->colormap_processing == PNG_CMAP_NONE)
-      passes = png_set_interlace_handling(png_ptr);
-
-   png_read_update_info(png_ptr, info_ptr);
-
-   /* The expected output can be deduced from the colormap_processing option. */
-   switch (display->colormap_processing)
-   {
-      case PNG_CMAP_NONE:
-         /* Output must be one channel and one byte per pixel, the output
-          * encoding can be anything.
-          */
-         if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
-            info_ptr->color_type == PNG_COLOR_TYPE_GRAY) &&
-            info_ptr->bit_depth == 8)
-            break;
-
-         goto bad_output;
-
-      case PNG_CMAP_TRANS:
-      case PNG_CMAP_GA:
-         /* Output must be two channels and the 'G' one must be sRGB, the latter
-          * can be checked with an exact number because it should have been set
-          * to this number above!
-          */
-         if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
-            info_ptr->bit_depth == 8 &&
-            png_ptr->screen_gamma == PNG_GAMMA_sRGB &&
-            image->colormap_entries == 256)
-            break;
-
-         goto bad_output;
-
-      case PNG_CMAP_RGB:
-         /* Output must be 8-bit sRGB encoded RGB */
-         if (info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
-            info_ptr->bit_depth == 8 &&
-            png_ptr->screen_gamma == PNG_GAMMA_sRGB &&
-            image->colormap_entries == 216)
-            break;
-
-         goto bad_output;
-
-      case PNG_CMAP_RGB_ALPHA:
-         /* Output must be 8-bit sRGB encoded RGBA */
-         if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
-            info_ptr->bit_depth == 8 &&
-            png_ptr->screen_gamma == PNG_GAMMA_sRGB &&
-            image->colormap_entries == 244 /* 216 + 1 + 27 */)
-            break;
-
-         /* goto bad_output; */
-         /* FALL THROUGH */
-
-      default:
-      bad_output:
-         png_error(png_ptr, "bad color-map processing (internal error)");
-   }
-
-   /* Now read the rows.  Do this here if it is possible to read directly into
-    * the output buffer, otherwise allocate a local row buffer of the maximum
-    * size libpng requires and call the relevant processing routine safely.
-    */
-   {
-      png_voidp first_row = display->buffer;
-      ptrdiff_t row_bytes = display->row_stride;
-
-      /* The following expression is designed to work correctly whether it gives
-       * a signed or an unsigned result.
-       */
-      if (row_bytes < 0)
-      {
-         char *ptr = png_voidcast(char*, first_row);
-         ptr += (image->height-1) * (-row_bytes);
-         first_row = png_voidcast(png_voidp, ptr);
-      }
-
-      display->first_row = first_row;
-      display->row_bytes = row_bytes;
-   }
-
-   if (passes == 0)
-   {
-      int result;
-      png_voidp row = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr));
-
-      display->local_row = row;
-      result = png_safe_execute(image, png_image_read_and_map, display);
-      display->local_row = NULL;
-      png_free(png_ptr, row);
-
-      return result;
-   }
-
-   else
-   {
-      png_alloc_size_t row_bytes = display->row_bytes;
-
-      while (--passes >= 0)
-      {
-         png_uint_32      y = image->height;
-         png_bytep        row = png_voidcast(png_bytep, display->first_row);
-
-         while (y-- > 0)
-         {
-            png_read_row(png_ptr, row, NULL);
-            row += row_bytes;
-         }
-      }
-
-      return 1;
-   }
-}
-
-/* Just the row reading part of png_image_read. */
-static int
-png_image_read_composite(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   int passes;
-
-   switch (png_ptr->interlaced)
-   {
-      case PNG_INTERLACE_NONE:
-         passes = 1;
-         break;
-
-      case PNG_INTERLACE_ADAM7:
-         passes = PNG_INTERLACE_ADAM7_PASSES;
-         break;
-
-      default:
-         passes = 0;
-         png_error(png_ptr, "unknown interlace type");
-   }
-
-   {
-      png_uint_32  height = image->height;
-      png_uint_32  width = image->width;
-      ptrdiff_t    step_row = display->row_bytes;
-      unsigned int channels = (image->format & PNG_FORMAT_FLAG_COLOR) ? 3 : 1;
-      int pass;
-
-      for (pass = 0; pass < passes; ++pass)
-      {
-         unsigned int     startx, stepx, stepy;
-         png_uint_32      y;
-
-         if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-         {
-            /* The row may be empty for a short image: */
-            if (PNG_PASS_COLS(width, pass) == 0)
-               continue;
-
-            startx = PNG_PASS_START_COL(pass) * channels;
-            stepx = PNG_PASS_COL_OFFSET(pass) * channels;
-            y = PNG_PASS_START_ROW(pass);
-            stepy = PNG_PASS_ROW_OFFSET(pass);
-         }
-
-         else
-         {
-            y = 0;
-            startx = 0;
-            stepx = channels;
-            stepy = 1;
-         }
-
-         for (; y<height; y += stepy)
-         {
-            png_bytep inrow = png_voidcast(png_bytep, display->local_row);
-            png_bytep outrow;
-            png_const_bytep end_row;
-
-            /* Read the row, which is packed: */
-            png_read_row(png_ptr, inrow, NULL);
-
-            outrow = png_voidcast(png_bytep, display->first_row);
-            outrow += y * step_row;
-            end_row = outrow + width * channels;
-
-            /* Now do the composition on each pixel in this row. */
-            outrow += startx;
-            for (; outrow < end_row; outrow += stepx)
-            {
-               png_byte alpha = inrow[channels];
-
-               if (alpha > 0) /* else no change to the output */
-               {
-                  unsigned int c;
-
-                  for (c=0; c<channels; ++c)
-                  {
-                     png_uint_32 component = inrow[c];
-
-                     if (alpha < 255) /* else just use component */
-                     {
-                        /* This is PNG_OPTIMIZED_ALPHA, the component value
-                         * is a linear 8-bit value.  Combine this with the
-                         * current outrow[c] value which is sRGB encoded.
-                         * Arithmetic here is 16-bits to preserve the output
-                         * values correctly.
-                         */
-                        component *= 257*255; /* =65535 */
-                        component += (255-alpha)*png_sRGB_table[outrow[c]];
-
-                        /* So 'component' is scaled by 255*65535 and is
-                         * therefore appropriate for the sRGB to linear
-                         * conversion table.
-                         */
-                        component = PNG_sRGB_FROM_LINEAR(component);
-                     }
-
-                     outrow[c] = (png_byte)component;
-                  }
-               }
-
-               inrow += channels+1; /* components and alpha channel */
-            }
-         }
-      }
-   }
-
-   return 1;
-}
-
-/* The do_local_background case; called when all the following transforms are to
- * be done:
- *
- * PNG_RGB_TO_GRAY
- * PNG_COMPOSITE
- * PNG_GAMMA
- *
- * This is a work-round for the fact that both the PNG_RGB_TO_GRAY and
- * PNG_COMPOSITE code performs gamma correction, so we get double gamma
- * correction.  The fix-up is to prevent the PNG_COMPOSITE operation happening
- * inside libpng, so this routine sees an 8 or 16-bit gray+alpha row and handles
- * the removal or pre-multiplication of the alpha channel.
- */
-static int
-png_image_read_background(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-   png_uint_32 height = image->height;
-   png_uint_32 width = image->width;
-   int pass, passes;
-
-   /* Double check the convoluted logic below.  We expect to get here with
-    * libpng doing rgb to gray and gamma correction but background processing
-    * left to the png_image_read_background function.  The rows libpng produce
-    * might be 8 or 16-bit but should always have two channels; gray plus alpha.
-    */
-   if ((png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)
-      png_error(png_ptr, "lost rgb to gray");
-
-   if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-      png_error(png_ptr, "unexpected compose");
-
-   if (png_get_channels(png_ptr, info_ptr) != 2)
-      png_error(png_ptr, "lost/gained channels");
-
-   /* Expect the 8-bit case to always remove the alpha channel */
-   if ((image->format & PNG_FORMAT_FLAG_LINEAR) == 0 &&
-      (image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
-      png_error(png_ptr, "unexpected 8-bit transformation");
-
-   switch (png_ptr->interlaced)
-   {
-      case PNG_INTERLACE_NONE:
-         passes = 1;
-         break;
-
-      case PNG_INTERLACE_ADAM7:
-         passes = PNG_INTERLACE_ADAM7_PASSES;
-         break;
-
-      default:
-         passes = 0;
-         png_error(png_ptr, "unknown interlace type");
-   }
-
-   switch (png_get_bit_depth(png_ptr, info_ptr))
-   {
-      default:
-         png_error(png_ptr, "unexpected bit depth");
-         break;
-
-      case 8:
-         /* 8-bit sRGB gray values with an alpha channel; the alpha channel is
-          * to be removed by composing on a backgroundi: either the row if
-          * display->background is NULL or display->background->green if not.
-          * Unlike the code above ALPHA_OPTIMIZED has *not* been done.
-          */
-         {
-            png_bytep first_row = png_voidcast(png_bytep, display->first_row);
-            ptrdiff_t step_row = display->row_bytes;
-
-            for (pass = 0; pass < passes; ++pass)
-            {
-               png_bytep        row = png_voidcast(png_bytep,
-                                                   display->first_row);
-               unsigned int     startx, stepx, stepy;
-               png_uint_32      y;
-
-               if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-               {
-                  /* The row may be empty for a short image: */
-                  if (PNG_PASS_COLS(width, pass) == 0)
-                     continue;
-
-                  startx = PNG_PASS_START_COL(pass);
-                  stepx = PNG_PASS_COL_OFFSET(pass);
-                  y = PNG_PASS_START_ROW(pass);
-                  stepy = PNG_PASS_ROW_OFFSET(pass);
-               }
-
-               else
-               {
-                  y = 0;
-                  startx = 0;
-                  stepx = stepy = 1;
-               }
-
-               if (display->background == NULL)
-               {
-                  for (; y<height; y += stepy)
-                  {
-                     png_bytep inrow = png_voidcast(png_bytep,
-                        display->local_row);
-                     png_bytep outrow = first_row + y * step_row;
-                     png_const_bytep end_row = outrow + width;
-
-                     /* Read the row, which is packed: */
-                     png_read_row(png_ptr, inrow, NULL);
-
-                     /* Now do the composition on each pixel in this row. */
-                     outrow += startx;
-                     for (; outrow < end_row; outrow += stepx)
-                     {
-                        png_byte alpha = inrow[1];
-
-                        if (alpha > 0) /* else no change to the output */
-                        {
-                           png_uint_32 component = inrow[0];
-
-                           if (alpha < 255) /* else just use component */
-                           {
-                              /* Since PNG_OPTIMIZED_ALPHA was not set it is
-                               * necessary to invert the sRGB transfer
-                               * function and multiply the alpha out.
-                               */
-                              component = png_sRGB_table[component] * alpha;
-                              component += png_sRGB_table[outrow[0]] *
-                                 (255-alpha);
-                              component = PNG_sRGB_FROM_LINEAR(component);
-                           }
-
-                           outrow[0] = (png_byte)component;
-                        }
-
-                        inrow += 2; /* gray and alpha channel */
-                     }
-                  }
-               }
-
-               else /* constant background value */
-               {
-                  png_byte background8 = display->background->green;
-                  png_uint_16 background = png_sRGB_table[background8];
-
-                  for (; y<height; y += stepy)
-                  {
-                     png_bytep inrow = png_voidcast(png_bytep,
-                        display->local_row);
-                     png_bytep outrow = first_row + y * step_row;
-                     png_const_bytep end_row = outrow + width;
-
-                     /* Read the row, which is packed: */
-                     png_read_row(png_ptr, inrow, NULL);
-
-                     /* Now do the composition on each pixel in this row. */
-                     outrow += startx;
-                     for (; outrow < end_row; outrow += stepx)
-                     {
-                        png_byte alpha = inrow[1];
-
-                        if (alpha > 0) /* else use background */
-                        {
-                           png_uint_32 component = inrow[0];
-
-                           if (alpha < 255) /* else just use component */
-                           {
-                              component = png_sRGB_table[component] * alpha;
-                              component += background * (255-alpha);
-                              component = PNG_sRGB_FROM_LINEAR(component);
-                           }
-
-                           outrow[0] = (png_byte)component;
-                        }
-
-                        else
-                           outrow[0] = background8;
-
-                        inrow += 2; /* gray and alpha channel */
-                     }
-
-                     row += display->row_bytes;
-                  }
-               }
-            }
-         }
-         break;
-
-      case 16:
-         /* 16-bit linear with pre-multiplied alpha; the pre-multiplication must
-          * still be done and, maybe, the alpha channel removed.  This code also
-          * handles the alpha-first option.
-          */
-         {
-            png_uint_16p first_row = png_voidcast(png_uint_16p,
-               display->first_row);
-            /* The division by two is safe because the caller passed in a
-             * stride which was multiplied by 2 (below) to get row_bytes.
-             */
-            ptrdiff_t    step_row = display->row_bytes / 2;
-            int preserve_alpha = (image->format & PNG_FORMAT_FLAG_ALPHA) != 0;
-            unsigned int outchannels = 1+preserve_alpha;
-            int swap_alpha = 0;
-
-            if (preserve_alpha && (image->format & PNG_FORMAT_FLAG_AFIRST))
-               swap_alpha = 1;
-
-            for (pass = 0; pass < passes; ++pass)
-            {
-               unsigned int     startx, stepx, stepy;
-               png_uint_32      y;
-
-               /* The 'x' start and step are adjusted to output components here.
-                */
-               if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-               {
-                  /* The row may be empty for a short image: */
-                  if (PNG_PASS_COLS(width, pass) == 0)
-                     continue;
-
-                  startx = PNG_PASS_START_COL(pass) * outchannels;
-                  stepx = PNG_PASS_COL_OFFSET(pass) * outchannels;
-                  y = PNG_PASS_START_ROW(pass);
-                  stepy = PNG_PASS_ROW_OFFSET(pass);
-               }
-
-               else
-               {
-                  y = 0;
-                  startx = 0;
-                  stepx = outchannels;
-                  stepy = 1;
-               }
-
-               for (; y<height; y += stepy)
-               {
-                  png_const_uint_16p inrow;
-                  png_uint_16p outrow = first_row + y*step_row;
-                  png_uint_16p end_row = outrow + width * outchannels;
-
-                  /* Read the row, which is packed: */
-                  png_read_row(png_ptr, png_voidcast(png_bytep,
-                     display->local_row), NULL);
-                  inrow = png_voidcast(png_const_uint_16p, display->local_row);
-
-                  /* Now do the pre-multiplication on each pixel in this row.
-                   */
-                  outrow += startx;
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     png_uint_32 component = inrow[0];
-                     png_uint_16 alpha = inrow[1];
-
-                     if (alpha > 0) /* else 0 */
-                     {
-                        if (alpha < 65535) /* else just use component */
-                        {
-                           component *= alpha;
-                           component += 32767;
-                           component /= 65535;
-                        }
-                     }
-
-                     else
-                        component = 0;
-
-                     outrow[swap_alpha] = (png_uint_16)component;
-                     if (preserve_alpha)
-                        outrow[1 ^ swap_alpha] = alpha;
-
-                     inrow += 2; /* components and alpha channel */
-                  }
-               }
-            }
-         }
-         break;
-   }
-
-   return 1;
-}
-
-/* The guts of png_image_finish_read as a png_safe_execute callback. */
-static int
-png_image_read_direct(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-
-   png_uint_32 format = image->format;
-   int linear = (format & PNG_FORMAT_FLAG_LINEAR) != 0;
-   int do_local_compose = 0;
-   int do_local_background = 0; /* to avoid double gamma correction bug */
-   int passes = 0;
-
-   /* Add transforms to ensure the correct output format is produced then check
-    * that the required implementation support is there.  Always expand; always
-    * need 8 bits minimum, no palette and expanded tRNS.
-    */
-   png_set_expand(png_ptr);
-
-   /* Now check the format to see if it was modified. */
-   {
-      png_uint_32 base_format = png_image_format(png_ptr) &
-         ~PNG_FORMAT_FLAG_COLORMAP /* removed by png_set_expand */;
-      png_uint_32 change = format ^ base_format;
-      png_fixed_point output_gamma;
-      int mode; /* alpha mode */
-
-      /* Do this first so that we have a record if rgb to gray is happening. */
-      if (change & PNG_FORMAT_FLAG_COLOR)
-      {
-         /* gray<->color transformation required. */
-         if (format & PNG_FORMAT_FLAG_COLOR)
-            png_set_gray_to_rgb(png_ptr);
-
-         else
-         {
-            /* libpng can't do both rgb to gray and
-             * background/pre-multiplication if there is also significant gamma
-             * correction, because both operations require linear colors and
-             * the code only supports one transform doing the gamma correction.
-             * Handle this by doing the pre-multiplication or background
-             * operation in this code, if necessary.
-             *
-             * TODO: fix this by rewriting pngrtran.c (!)
-             *
-             * For the moment (given that fixing this in pngrtran.c is an
-             * enormous change) 'do_local_background' is used to indicate that
-             * the problem exists.
-             */
-            if (base_format & PNG_FORMAT_FLAG_ALPHA)
-               do_local_background = 1/*maybe*/;
-
-            png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE,
-               PNG_RGB_TO_GRAY_DEFAULT, PNG_RGB_TO_GRAY_DEFAULT);
-         }
-
-         change &= ~PNG_FORMAT_FLAG_COLOR;
-      }
-
-      /* Set the gamma appropriately, linear for 16-bit input, sRGB otherwise.
-       */
-      {
-         png_fixed_point input_gamma_default;
-
-         if ((base_format & PNG_FORMAT_FLAG_LINEAR) &&
-            (image->flags & PNG_IMAGE_FLAG_16BIT_sRGB) == 0)
-            input_gamma_default = PNG_GAMMA_LINEAR;
-         else
-            input_gamma_default = PNG_DEFAULT_sRGB;
-
-         /* Call png_set_alpha_mode to set the default for the input gamma; the
-          * output gamma is set by a second call below.
-          */
-         png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, input_gamma_default);
-      }
-
-      if (linear)
-      {
-         /* If there *is* an alpha channel in the input it must be multiplied
-          * out; use PNG_ALPHA_STANDARD, otherwise just use PNG_ALPHA_PNG.
-          */
-         if (base_format & PNG_FORMAT_FLAG_ALPHA)
-            mode = PNG_ALPHA_STANDARD; /* associated alpha */
-
-         else
-            mode = PNG_ALPHA_PNG;
-
-         output_gamma = PNG_GAMMA_LINEAR;
-      }
-
-      else
-      {
-         mode = PNG_ALPHA_PNG;
-         output_gamma = PNG_DEFAULT_sRGB;
-      }
-
-      /* If 'do_local_background' is set check for the presence of gamma
-       * correction; this is part of the work-round for the libpng bug
-       * described above.
-       *
-       * TODO: fix libpng and remove this.
-       */
-      if (do_local_background)
-      {
-         png_fixed_point gtest;
-
-         /* This is 'png_gamma_threshold' from pngrtran.c; the test used for
-          * gamma correction, the screen gamma hasn't been set on png_struct
-          * yet; it's set below.  png_struct::gamma, however, is set to the
-          * final value.
-          */
-         if (png_muldiv(&gtest, output_gamma, png_ptr->colorspace.gamma,
-               PNG_FP_1) && !png_gamma_significant(gtest))
-            do_local_background = 0;
-
-         else if (mode == PNG_ALPHA_STANDARD)
-         {
-            do_local_background = 2/*required*/;
-            mode = PNG_ALPHA_PNG; /* prevent libpng doing it */
-         }
-
-         /* else leave as 1 for the checks below */
-      }
-
-      /* If the bit-depth changes then handle that here. */
-      if (change & PNG_FORMAT_FLAG_LINEAR)
-      {
-         if (linear /*16-bit output*/)
-            png_set_expand_16(png_ptr);
-
-         else /* 8-bit output */
-            png_set_scale_16(png_ptr);
-
-         change &= ~PNG_FORMAT_FLAG_LINEAR;
-      }
-
-      /* Now the background/alpha channel changes. */
-      if (change & PNG_FORMAT_FLAG_ALPHA)
-      {
-         /* Removing an alpha channel requires composition for the 8-bit
-          * formats; for the 16-bit it is already done, above, by the
-          * pre-multiplication and the channel just needs to be stripped.
-          */
-         if (base_format & PNG_FORMAT_FLAG_ALPHA)
-         {
-            /* If RGB->gray is happening the alpha channel must be left and the
-             * operation completed locally.
-             *
-             * TODO: fix libpng and remove this.
-             */
-            if (do_local_background)
-               do_local_background = 2/*required*/;
-
-            /* 16-bit output: just remove the channel */
-            else if (linear) /* compose on black (well, pre-multiply) */
-               png_set_strip_alpha(png_ptr);
-
-            /* 8-bit output: do an appropriate compose */
-            else if (display->background != NULL)
-            {
-               png_color_16 c;
-
-               c.index = 0; /*unused*/
-               c.red = display->background->red;
-               c.green = display->background->green;
-               c.blue = display->background->blue;
-               c.gray = display->background->green;
-
-               /* This is always an 8-bit sRGB value, using the 'green' channel
-                * for gray is much better than calculating the luminance here;
-                * we can get off-by-one errors in that calculation relative to
-                * the app expectations and that will show up in transparent
-                * pixels.
-                */
-               png_set_background_fixed(png_ptr, &c,
-                  PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                  0/*gamma: not used*/);
-            }
-
-            else /* compose on row: implemented below. */
-            {
-               do_local_compose = 1;
-               /* This leaves the alpha channel in the output, so it has to be
-                * removed by the code below.  Set the encoding to the 'OPTIMIZE'
-                * one so the code only has to hack on the pixels that require
-                * composition.
-                */
-               mode = PNG_ALPHA_OPTIMIZED;
-            }
-         }
-
-         else /* output needs an alpha channel */
-         {
-            /* This is tricky because it happens before the swap operation has
-             * been accomplished; however, the swap does *not* swap the added
-             * alpha channel (weird API), so it must be added in the correct
-             * place.
-             */
-            png_uint_32 filler; /* opaque filler */
-            int where;
-
-            if (linear)
-               filler = 65535;
-
-            else
-               filler = 255;
-
-#           ifdef PNG_FORMAT_AFIRST_SUPPORTED
-               if (format & PNG_FORMAT_FLAG_AFIRST)
-               {
-                  where = PNG_FILLER_BEFORE;
-                  change &= ~PNG_FORMAT_FLAG_AFIRST;
-               }
-
-               else
-#           endif
-               where = PNG_FILLER_AFTER;
-
-            png_set_add_alpha(png_ptr, filler, where);
-         }
-
-         /* This stops the (irrelevant) call to swap_alpha below. */
-         change &= ~PNG_FORMAT_FLAG_ALPHA;
-      }
-
-      /* Now set the alpha mode correctly; this is always done, even if there is
-       * no alpha channel in either the input or the output because it correctly
-       * sets the output gamma.
-       */
-      png_set_alpha_mode_fixed(png_ptr, mode, output_gamma);
-
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         if (change & PNG_FORMAT_FLAG_BGR)
-         {
-            /* Check only the output format; PNG is never BGR; don't do this if
-             * the output is gray, but fix up the 'format' value in that case.
-             */
-            if (format & PNG_FORMAT_FLAG_COLOR)
-               png_set_bgr(png_ptr);
-
-            else
-               format &= ~PNG_FORMAT_FLAG_BGR;
-
-            change &= ~PNG_FORMAT_FLAG_BGR;
-         }
-#     endif
-
-#     ifdef PNG_FORMAT_AFIRST_SUPPORTED
-         if (change & PNG_FORMAT_FLAG_AFIRST)
-         {
-            /* Only relevant if there is an alpha channel - it's particularly
-             * important to handle this correctly because do_local_compose may
-             * be set above and then libpng will keep the alpha channel for this
-             * code to remove.
-             */
-            if (format & PNG_FORMAT_FLAG_ALPHA)
-            {
-               /* Disable this if doing a local background,
-                * TODO: remove this when local background is no longer required.
-                */
-               if (do_local_background != 2)
-                  png_set_swap_alpha(png_ptr);
-            }
-
-            else
-               format &= ~PNG_FORMAT_FLAG_AFIRST;
-
-            change &= ~PNG_FORMAT_FLAG_AFIRST;
-         }
-#     endif
-
-      /* If the *output* is 16-bit then we need to check for a byte-swap on this
-       * architecture.
-       */
-      if (linear)
-      {
-         PNG_CONST png_uint_16 le = 0x0001;
-
-         if (*(png_const_bytep)&le)
-            png_set_swap(png_ptr);
-      }
-
-      /* If change is not now 0 some transformation is missing - error out. */
-      if (change)
-         png_error(png_ptr, "png_read_image: unsupported transformation");
-   }
-
-   PNG_SKIP_CHUNKS(png_ptr);
-
-   /* Update the 'info' structure and make sure the result is as required; first
-    * make sure to turn on the interlace handling if it will be required
-    * (because it can't be turned on *after* the call to png_read_update_info!)
-    *
-    * TODO: remove the do_local_background fixup below.
-    */
-   if (!do_local_compose && do_local_background != 2)
-      passes = png_set_interlace_handling(png_ptr);
-
-   png_read_update_info(png_ptr, info_ptr);
-
-   {
-      png_uint_32 info_format = 0;
-
-      if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
-         info_format |= PNG_FORMAT_FLAG_COLOR;
-
-      if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
-      {
-         /* do_local_compose removes this channel below. */
-         if (!do_local_compose)
-         {
-            /* do_local_background does the same if required. */
-            if (do_local_background != 2 ||
-               (format & PNG_FORMAT_FLAG_ALPHA) != 0)
-               info_format |= PNG_FORMAT_FLAG_ALPHA;
-         }
-      }
-
-      else if (do_local_compose) /* internal error */
-         png_error(png_ptr, "png_image_read: alpha channel lost");
-
-      if (info_ptr->bit_depth == 16)
-         info_format |= PNG_FORMAT_FLAG_LINEAR;
-
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         if (png_ptr->transformations & PNG_BGR)
-            info_format |= PNG_FORMAT_FLAG_BGR;
-#     endif
-
-#     ifdef PNG_FORMAT_AFIRST_SUPPORTED
-         if (do_local_background == 2)
-         {
-            if (format & PNG_FORMAT_FLAG_AFIRST)
-               info_format |= PNG_FORMAT_FLAG_AFIRST;
-         }
-
-         if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0 ||
-            ((png_ptr->transformations & PNG_ADD_ALPHA) != 0 &&
-            (png_ptr->flags & PNG_FLAG_FILLER_AFTER) == 0))
-         {
-            if (do_local_background == 2)
-               png_error(png_ptr, "unexpected alpha swap transformation");
-
-            info_format |= PNG_FORMAT_FLAG_AFIRST;
-         }
-#     endif
-
-      /* This is actually an internal error. */
-      if (info_format != format)
-         png_error(png_ptr, "png_read_image: invalid transformations");
-   }
-
-   /* Now read the rows.  If do_local_compose is set then it is necessary to use
-    * a local row buffer.  The output will be GA, RGBA or BGRA and must be
-    * converted to G, RGB or BGR as appropriate.  The 'local_row' member of the
-    * display acts as a flag.
-    */
-   {
-      png_voidp first_row = display->buffer;
-      ptrdiff_t row_bytes = display->row_stride;
-
-      if (linear)
-         row_bytes *= 2;
-
-      /* The following expression is designed to work correctly whether it gives
-       * a signed or an unsigned result.
-       */
-      if (row_bytes < 0)
-      {
-         char *ptr = png_voidcast(char*, first_row);
-         ptr += (image->height-1) * (-row_bytes);
-         first_row = png_voidcast(png_voidp, ptr);
-      }
-
-      display->first_row = first_row;
-      display->row_bytes = row_bytes;
-   }
-
-   if (do_local_compose)
-   {
-      int result;
-      png_voidp row = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr));
-
-      display->local_row = row;
-      result = png_safe_execute(image, png_image_read_composite, display);
-      display->local_row = NULL;
-      png_free(png_ptr, row);
-
-      return result;
-   }
-
-   else if (do_local_background == 2)
-   {
-      int result;
-      png_voidp row = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr));
-
-      display->local_row = row;
-      result = png_safe_execute(image, png_image_read_background, display);
-      display->local_row = NULL;
-      png_free(png_ptr, row);
-
-      return result;
-   }
-
-   else
-   {
-      png_alloc_size_t row_bytes = display->row_bytes;
-
-      while (--passes >= 0)
-      {
-         png_uint_32      y = image->height;
-         png_bytep        row = png_voidcast(png_bytep, display->first_row);
-
-         while (y-- > 0)
-         {
-            png_read_row(png_ptr, row, NULL);
-            row += row_bytes;
-         }
-      }
-
-      return 1;
-   }
-}
-
-int PNGAPI
-png_image_finish_read(png_imagep image, png_const_colorp background,
-   void *buffer, png_int_32 row_stride, void *colormap)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      png_uint_32 check;
-
-      if (row_stride == 0)
-         row_stride = PNG_IMAGE_ROW_STRIDE(*image);
-
-      if (row_stride < 0)
-         check = -row_stride;
-
-      else
-         check = row_stride;
-
-      if (image->opaque != NULL && buffer != NULL &&
-         check >= PNG_IMAGE_ROW_STRIDE(*image))
-      {
-         if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
-            (image->colormap_entries > 0 && colormap != NULL))
-         {
-            int result;
-            png_image_read_control display;
-
-            memset(&display, 0, (sizeof display));
-            display.image = image;
-            display.buffer = buffer;
-            display.row_stride = row_stride;
-            display.colormap = colormap;
-            display.background = background;
-            display.local_row = NULL;
-
-            /* Choose the correct 'end' routine; for the color-map case all the
-             * setup has already been done.
-             */
-            if (image->format & PNG_FORMAT_FLAG_COLORMAP)
-               result =
-                  png_safe_execute(image, png_image_read_colormap, &display) &&
-                  png_safe_execute(image, png_image_read_colormapped, &display);
-
-            else
-               result =
-                  png_safe_execute(image, png_image_read_direct, &display);
-
-            png_image_free(image);
-            return result;
-         }
-
-         else
-            return png_image_error(image,
-               "png_image_finish_read[color-map]: no color-map");
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_finish_read: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_finish_read: damaged PNG_IMAGE_VERSION");
-
-   return 0;
-}
-
-#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngrio.c b/modules/juce_graphics/image_formats/pnglib/pngrio.c
deleted file mode 100644
index 2b9c103..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngrio.c
+++ /dev/null
@@ -1,118 +0,0 @@
-
-/* pngrio.c - functions for data input
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all input.  Users who need
- * special handling are expected to write a function that has the same
- * arguments as this and performs a similar function, but that possibly
- * has a different input method.  Note that you shouldn't change this
- * function, but rather write a replacement function and then make
- * libpng use it at run time with png_set_read_fn(...).
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_READ_SUPPORTED
-
-/* Read the data from whatever input you are using.  The default routine
- * reads from a file pointer.  Note that this routine sometimes gets called
- * with very small lengths, so you should implement some kind of simple
- * buffering if you are using unbuffered reads.  This should never be asked
- * to read more then 64K on a 16 bit machine.
- */
-void /* PRIVATE */
-png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
-{
-   png_debug1(4, "reading %d bytes", (int)length);
-
-   if (png_ptr->read_data_fn != NULL)
-      (*(png_ptr->read_data_fn))(png_ptr, data, length);
-
-   else
-      png_error(png_ptr, "Call to NULL read function");
-}
-
-#ifdef PNG_STDIO_SUPPORTED
-/* This is the function that does the actual reading of data.  If you are
- * not reading from a standard C stream, you should create a replacement
- * read_data function and use it at run time with png_set_read_fn(), rather
- * than changing the library.
- */
-void PNGCBAPI
-png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
-   png_size_t check;
-
-   if (png_ptr == NULL)
-      return;
-
-   /* fread() returns 0 on error, so it is OK to store this in a png_size_t
-    * instead of an int, which is what fread() actually returns.
-    */
-   check = fread(data, 1, length, png_voidcast(png_FILE_p, png_ptr->io_ptr));
-
-   if (check != length)
-      png_error(png_ptr, "Read Error");
-}
-#endif
-
-/* This function allows the application to supply a new input function
- * for libpng if standard C streams aren't being used.
- *
- * This function takes as its arguments:
- *
- * png_ptr      - pointer to a png input data structure
- *
- * io_ptr       - pointer to user supplied structure containing info about
- *                the input functions.  May be NULL.
- *
- * read_data_fn - pointer to a new input function that takes as its
- *                arguments a pointer to a png_struct, a pointer to
- *                a location where input data can be stored, and a 32-bit
- *                unsigned int that is the number of bytes to be read.
- *                To exit and output any fatal error messages the new write
- *                function should call png_error(png_ptr, "Error msg").
- *                May be NULL, in which case libpng's default function will
- *                be used.
- */
-void PNGAPI
-png_set_read_fn(png_structrp png_ptr, png_voidp io_ptr,
-   png_rw_ptr read_data_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->io_ptr = io_ptr;
-
-#ifdef PNG_STDIO_SUPPORTED
-   if (read_data_fn != NULL)
-      png_ptr->read_data_fn = read_data_fn;
-
-   else
-      png_ptr->read_data_fn = png_default_read_data;
-#else
-   png_ptr->read_data_fn = read_data_fn;
-#endif
-
-   /* It is an error to write to a read device */
-   if (png_ptr->write_data_fn != NULL)
-   {
-      png_ptr->write_data_fn = NULL;
-      png_warning(png_ptr,
-          "Can't set both read_data_fn and write_data_fn in the"
-          " same structure");
-   }
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-   png_ptr->output_flush_fn = NULL;
-#endif
-}
-#endif /* PNG_READ_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngrtran.c b/modules/juce_graphics/image_formats/pnglib/pngrtran.c
deleted file mode 100644
index 034b9c3..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngrtran.c
+++ /dev/null
@@ -1,5102 +0,0 @@
-
-/* pngrtran.c - transforms the data in a row for PNG readers
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file contains functions optionally called by an application
- * in order to tell libpng how to handle data when reading a PNG.
- * Transformations that are used in both reading and writing are
- * in pngtrans.c.
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_READ_SUPPORTED
-
-/* Set the action on getting a CRC error for an ancillary or critical chunk. */
-void PNGAPI
-png_set_crc_action(png_structrp png_ptr, int crit_action, int ancil_action)
-{
-   png_debug(1, "in png_set_crc_action");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* Tell libpng how we react to CRC errors in critical chunks */
-   switch (crit_action)
-   {
-      case PNG_CRC_NO_CHANGE:                        /* Leave setting as is */
-         break;
-
-      case PNG_CRC_WARN_USE:                               /* Warn/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
-         break;
-
-      case PNG_CRC_QUIET_USE:                             /* Quiet/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
-                           PNG_FLAG_CRC_CRITICAL_IGNORE;
-         break;
-
-      case PNG_CRC_WARN_DISCARD:    /* Not a valid action for critical data */
-         png_warning(png_ptr,
-            "Can't discard critical data on CRC error");
-      case PNG_CRC_ERROR_QUIT:                                /* Error/quit */
-
-      case PNG_CRC_DEFAULT:
-      default:
-         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
-         break;
-   }
-
-   /* Tell libpng how we react to CRC errors in ancillary chunks */
-   switch (ancil_action)
-   {
-      case PNG_CRC_NO_CHANGE:                       /* Leave setting as is */
-         break;
-
-      case PNG_CRC_WARN_USE:                              /* Warn/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
-         break;
-
-      case PNG_CRC_QUIET_USE:                            /* Quiet/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
-                           PNG_FLAG_CRC_ANCILLARY_NOWARN;
-         break;
-
-      case PNG_CRC_ERROR_QUIT:                               /* Error/quit */
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
-         break;
-
-      case PNG_CRC_WARN_DISCARD:                      /* Warn/discard data */
-
-      case PNG_CRC_DEFAULT:
-      default:
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         break;
-   }
-}
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-/* Is it OK to set a transformation now?  Only if png_start_read_image or
- * png_read_update_info have not been called.  It is not necessary for the IHDR
- * to have been read in all cases, the parameter allows for this check too.
- */
-static int
-png_rtran_ok(png_structrp png_ptr, int need_IHDR)
-{
-   if (png_ptr != NULL)
-   {
-      if (png_ptr->flags & PNG_FLAG_ROW_INIT)
-         png_app_error(png_ptr,
-            "invalid after png_start_read_image or png_read_update_info");
-
-      else if (need_IHDR && (png_ptr->mode & PNG_HAVE_IHDR) == 0)
-         png_app_error(png_ptr, "invalid before the PNG header has been read");
-
-      else
-      {
-         /* Turn on failure to initialize correctly for all transforms. */
-         png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;
-
-         return 1; /* Ok */
-      }
-   }
-
-   return 0; /* no png_error possible! */
-}
-#endif
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-/* Handle alpha and tRNS via a background color */
-void PNGFAPI
-png_set_background_fixed(png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, png_fixed_point background_gamma)
-{
-   png_debug(1, "in png_set_background_fixed");
-
-   if (!png_rtran_ok(png_ptr, 0) || background_color == NULL)
-      return;
-
-   if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN)
-   {
-      png_warning(png_ptr, "Application must supply a known background gamma");
-      return;
-   }
-
-   png_ptr->transformations |= PNG_COMPOSE | PNG_STRIP_ALPHA;
-   png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-   png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-
-   png_ptr->background = *background_color;
-   png_ptr->background_gamma = background_gamma;
-   png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
-   if (need_expand)
-      png_ptr->transformations |= PNG_BACKGROUND_EXPAND;
-   else
-      png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_background(png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, double background_gamma)
-{
-   png_set_background_fixed(png_ptr, background_color, background_gamma_code,
-      need_expand, png_fixed(png_ptr, background_gamma, "png_set_background"));
-}
-#  endif  /* FLOATING_POINT */
-#endif /* READ_BACKGROUND */
-
-/* Scale 16-bit depth files to 8-bit depth.  If both of these are set then the
- * one that pngrtran does first (scale) happens.  This is necessary to allow the
- * TRANSFORM and API behavior to be somewhat consistent, and it's simpler.
- */
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-void PNGAPI
-png_set_scale_16(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_scale_16");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= PNG_SCALE_16_TO_8;
-}
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-/* Chop 16-bit depth files to 8-bit depth */
-void PNGAPI
-png_set_strip_16(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_strip_16");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= PNG_16_TO_8;
-}
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-void PNGAPI
-png_set_strip_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_strip_alpha");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= PNG_STRIP_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_ALPHA_MODE_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)
-static png_fixed_point
-translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
-   int is_screen)
-{
-   /* Check for flag values.  The main reason for having the old Mac value as a
-    * flag is that it is pretty near impossible to work out what the correct
-    * value is from Apple documentation - a working Mac system is needed to
-    * discover the value!
-    */
-   if (output_gamma == PNG_DEFAULT_sRGB ||
-      output_gamma == PNG_FP_1 / PNG_DEFAULT_sRGB)
-   {
-      /* If there is no sRGB support this just sets the gamma to the standard
-       * sRGB value.  (This is a side effect of using this function!)
-       */
-#     ifdef PNG_READ_sRGB_SUPPORTED
-         png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
-#     endif
-      if (is_screen)
-         output_gamma = PNG_GAMMA_sRGB;
-      else
-         output_gamma = PNG_GAMMA_sRGB_INVERSE;
-   }
-
-   else if (output_gamma == PNG_GAMMA_MAC_18 ||
-      output_gamma == PNG_FP_1 / PNG_GAMMA_MAC_18)
-   {
-      if (is_screen)
-         output_gamma = PNG_GAMMA_MAC_OLD;
-      else
-         output_gamma = PNG_GAMMA_MAC_INVERSE;
-   }
-
-   return output_gamma;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-static png_fixed_point
-convert_gamma_value(png_structrp png_ptr, double output_gamma)
-{
-   /* The following silently ignores cases where fixed point (times 100,000)
-    * gamma values are passed to the floating point API.  This is safe and it
-    * means the fixed point constants work just fine with the floating point
-    * API.  The alternative would just lead to undetected errors and spurious
-    * bug reports.  Negative values fail inside the _fixed API unless they
-    * correspond to the flag values.
-    */
-   if (output_gamma > 0 && output_gamma < 128)
-      output_gamma *= PNG_FP_1;
-
-   /* This preserves -1 and -2 exactly: */
-   output_gamma = floor(output_gamma + .5);
-
-   if (output_gamma > PNG_FP_MAX || output_gamma < PNG_FP_MIN)
-      png_fixed_error(png_ptr, "gamma value");
-
-   return (png_fixed_point)output_gamma;
-}
-#  endif
-#endif /* READ_ALPHA_MODE || READ_GAMMA */
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-void PNGFAPI
-png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
-   png_fixed_point output_gamma)
-{
-   int compose = 0;
-   png_fixed_point file_gamma;
-
-   png_debug(1, "in png_set_alpha_mode");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);
-
-   /* Validate the value to ensure it is in a reasonable range. The value
-    * is expected to be 1 or greater, but this range test allows for some
-    * viewing correction values.  The intent is to weed out users of this API
-    * who use the inverse of the gamma value accidentally!  Since some of these
-    * values are reasonable this may have to be changed.
-    */
-   if (output_gamma < 70000 || output_gamma > 300000)
-      png_error(png_ptr, "output gamma out of expected range");
-
-   /* The default file gamma is the inverse of the output gamma; the output
-    * gamma may be changed below so get the file value first:
-    */
-   file_gamma = png_reciprocal(output_gamma);
-
-   /* There are really 8 possibilities here, composed of any combination
-    * of:
-    *
-    *    premultiply the color channels
-    *    do not encode non-opaque pixels
-    *    encode the alpha as well as the color channels
-    *
-    * The differences disappear if the input/output ('screen') gamma is 1.0,
-    * because then the encoding is a no-op and there is only the choice of
-    * premultiplying the color channels or not.
-    *
-    * png_set_alpha_mode and png_set_background interact because both use
-    * png_compose to do the work.  Calling both is only useful when
-    * png_set_alpha_mode is used to set the default mode - PNG_ALPHA_PNG - along
-    * with a default gamma value.  Otherwise PNG_COMPOSE must not be set.
-    */
-   switch (mode)
-   {
-      case PNG_ALPHA_PNG:        /* default: png standard */
-         /* No compose, but it may be set by png_set_background! */
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-         break;
-
-      case PNG_ALPHA_ASSOCIATED: /* color channels premultiplied */
-         compose = 1;
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-         /* The output is linear: */
-         output_gamma = PNG_FP_1;
-         break;
-
-      case PNG_ALPHA_OPTIMIZED:  /* associated, non-opaque pixels linear */
-         compose = 1;
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags |= PNG_FLAG_OPTIMIZE_ALPHA;
-         /* output_gamma records the encoding of opaque pixels! */
-         break;
-
-      case PNG_ALPHA_BROKEN:     /* associated, non-linear, alpha encoded */
-         compose = 1;
-         png_ptr->transformations |= PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-         break;
-
-      default:
-         png_error(png_ptr, "invalid alpha mode");
-   }
-
-   /* Only set the default gamma if the file gamma has not been set (this has
-    * the side effect that the gamma in a second call to png_set_alpha_mode will
-    * be ignored.)
-    */
-   if (png_ptr->colorspace.gamma == 0)
-   {
-      png_ptr->colorspace.gamma = file_gamma;
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-   }
-
-   /* But always set the output gamma: */
-   png_ptr->screen_gamma = output_gamma;
-
-   /* Finally, if pre-multiplying, set the background fields to achieve the
-    * desired result.
-    */
-   if (compose)
-   {
-      /* And obtain alpha pre-multiplication by composing on black: */
-      memset(&png_ptr->background, 0, (sizeof png_ptr->background));
-      png_ptr->background_gamma = png_ptr->colorspace.gamma; /* just in case */
-      png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_FILE;
-      png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
-
-      if (png_ptr->transformations & PNG_COMPOSE)
-         png_error(png_ptr,
-            "conflicting calls to set alpha mode and background");
-
-      png_ptr->transformations |= PNG_COMPOSE;
-   }
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_alpha_mode(png_structrp png_ptr, int mode, double output_gamma)
-{
-   png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
-      output_gamma));
-}
-#  endif
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-/* Dither file to 8-bit.  Supply a palette, the current number
- * of elements in the palette, the maximum number of elements
- * allowed, and a histogram if possible.  If the current number
- * of colors is greater then the maximum number, the palette will be
- * modified to fit in the maximum number.  "full_quantize" indicates
- * whether we need a quantizing cube set up for RGB images, or if we
- * simply are reducing the number of colors in a paletted image.
- */
-
-typedef struct png_dsort_struct
-{
-   struct png_dsort_struct * next;
-   png_byte left;
-   png_byte right;
-} png_dsort;
-typedef png_dsort *   png_dsortp;
-typedef png_dsort * * png_dsortpp;
-
-void PNGAPI
-png_set_quantize(png_structrp png_ptr, png_colorp palette,
-    int num_palette, int maximum_colors, png_const_uint_16p histogram,
-    int full_quantize)
-{
-   png_debug(1, "in png_set_quantize");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= PNG_QUANTIZE;
-
-   if (!full_quantize)
-   {
-      int i;
-
-      png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,
-          (png_uint_32)(num_palette * (sizeof (png_byte))));
-      for (i = 0; i < num_palette; i++)
-         png_ptr->quantize_index[i] = (png_byte)i;
-   }
-
-   if (num_palette > maximum_colors)
-   {
-      if (histogram != NULL)
-      {
-         /* This is easy enough, just throw out the least used colors.
-          * Perhaps not the best solution, but good enough.
-          */
-
-         int i;
-
-         /* Initialize an array to sort colors */
-         png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)(num_palette * (sizeof (png_byte))));
-
-         /* Initialize the quantize_sort array */
-         for (i = 0; i < num_palette; i++)
-            png_ptr->quantize_sort[i] = (png_byte)i;
-
-         /* Find the least used palette entries by starting a
-          * bubble sort, and running it until we have sorted
-          * out enough colors.  Note that we don't care about
-          * sorting all the colors, just finding which are
-          * least used.
-          */
-
-         for (i = num_palette - 1; i >= maximum_colors; i--)
-         {
-            int done; /* To stop early if the list is pre-sorted */
-            int j;
-
-            done = 1;
-            for (j = 0; j < i; j++)
-            {
-               if (histogram[png_ptr->quantize_sort[j]]
-                   < histogram[png_ptr->quantize_sort[j + 1]])
-               {
-                  png_byte t;
-
-                  t = png_ptr->quantize_sort[j];
-                  png_ptr->quantize_sort[j] = png_ptr->quantize_sort[j + 1];
-                  png_ptr->quantize_sort[j + 1] = t;
-                  done = 0;
-               }
-            }
-
-            if (done)
-               break;
-         }
-
-         /* Swap the palette around, and set up a table, if necessary */
-         if (full_quantize)
-         {
-            int j = num_palette;
-
-            /* Put all the useful colors within the max, but don't
-             * move the others.
-             */
-            for (i = 0; i < maximum_colors; i++)
-            {
-               if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
-               {
-                  do
-                     j--;
-                  while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
-
-                  palette[i] = palette[j];
-               }
-            }
-         }
-         else
-         {
-            int j = num_palette;
-
-            /* Move all the used colors inside the max limit, and
-             * develop a translation table.
-             */
-            for (i = 0; i < maximum_colors; i++)
-            {
-               /* Only move the colors we need to */
-               if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
-               {
-                  png_color tmp_color;
-
-                  do
-                     j--;
-                  while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
-
-                  tmp_color = palette[j];
-                  palette[j] = palette[i];
-                  palette[i] = tmp_color;
-                  /* Indicate where the color went */
-                  png_ptr->quantize_index[j] = (png_byte)i;
-                  png_ptr->quantize_index[i] = (png_byte)j;
-               }
-            }
-
-            /* Find closest color for those colors we are not using */
-            for (i = 0; i < num_palette; i++)
-            {
-               if ((int)png_ptr->quantize_index[i] >= maximum_colors)
-               {
-                  int min_d, k, min_k, d_index;
-
-                  /* Find the closest color to one we threw out */
-                  d_index = png_ptr->quantize_index[i];
-                  min_d = PNG_COLOR_DIST(palette[d_index], palette[0]);
-                  for (k = 1, min_k = 0; k < maximum_colors; k++)
-                  {
-                     int d;
-
-                     d = PNG_COLOR_DIST(palette[d_index], palette[k]);
-
-                     if (d < min_d)
-                     {
-                        min_d = d;
-                        min_k = k;
-                     }
-                  }
-                  /* Point to closest color */
-                  png_ptr->quantize_index[i] = (png_byte)min_k;
-               }
-            }
-         }
-         png_free(png_ptr, png_ptr->quantize_sort);
-         png_ptr->quantize_sort = NULL;
-      }
-      else
-      {
-         /* This is much harder to do simply (and quickly).  Perhaps
-          * we need to go through a median cut routine, but those
-          * don't always behave themselves with only a few colors
-          * as input.  So we will just find the closest two colors,
-          * and throw out one of them (chosen somewhat randomly).
-          * [We don't understand this at all, so if someone wants to
-          *  work on improving it, be our guest - AED, GRP]
-          */
-         int i;
-         int max_d;
-         int num_new_palette;
-         png_dsortp t;
-         png_dsortpp hash;
-
-         t = NULL;
-
-         /* Initialize palette index arrays */
-         png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)(num_palette * (sizeof (png_byte))));
-         png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)(num_palette * (sizeof (png_byte))));
-
-         /* Initialize the sort array */
-         for (i = 0; i < num_palette; i++)
-         {
-            png_ptr->index_to_palette[i] = (png_byte)i;
-            png_ptr->palette_to_index[i] = (png_byte)i;
-         }
-
-         hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 *
-             (sizeof (png_dsortp))));
-
-         num_new_palette = num_palette;
-
-         /* Initial wild guess at how far apart the farthest pixel
-          * pair we will be eliminating will be.  Larger
-          * numbers mean more areas will be allocated, Smaller
-          * numbers run the risk of not saving enough data, and
-          * having to do this all over again.
-          *
-          * I have not done extensive checking on this number.
-          */
-         max_d = 96;
-
-         while (num_new_palette > maximum_colors)
-         {
-            for (i = 0; i < num_new_palette - 1; i++)
-            {
-               int j;
-
-               for (j = i + 1; j < num_new_palette; j++)
-               {
-                  int d;
-
-                  d = PNG_COLOR_DIST(palette[i], palette[j]);
-
-                  if (d <= max_d)
-                  {
-
-                     t = (png_dsortp)png_malloc_warn(png_ptr,
-                         (png_uint_32)(sizeof (png_dsort)));
-
-                     if (t == NULL)
-                         break;
-
-                     t->next = hash[d];
-                     t->left = (png_byte)i;
-                     t->right = (png_byte)j;
-                     hash[d] = t;
-                  }
-               }
-               if (t == NULL)
-                  break;
-            }
-
-            if (t != NULL)
-            for (i = 0; i <= max_d; i++)
-            {
-               if (hash[i] != NULL)
-               {
-                  png_dsortp p;
-
-                  for (p = hash[i]; p; p = p->next)
-                  {
-                     if ((int)png_ptr->index_to_palette[p->left]
-                         < num_new_palette &&
-                         (int)png_ptr->index_to_palette[p->right]
-                         < num_new_palette)
-                     {
-                        int j, next_j;
-
-                        if (num_new_palette & 0x01)
-                        {
-                           j = p->left;
-                           next_j = p->right;
-                        }
-                        else
-                        {
-                           j = p->right;
-                           next_j = p->left;
-                        }
-
-                        num_new_palette--;
-                        palette[png_ptr->index_to_palette[j]]
-                            = palette[num_new_palette];
-                        if (!full_quantize)
-                        {
-                           int k;
-
-                           for (k = 0; k < num_palette; k++)
-                           {
-                              if (png_ptr->quantize_index[k] ==
-                                  png_ptr->index_to_palette[j])
-                                 png_ptr->quantize_index[k] =
-                                     png_ptr->index_to_palette[next_j];
-
-                              if ((int)png_ptr->quantize_index[k] ==
-                                  num_new_palette)
-                                 png_ptr->quantize_index[k] =
-                                     png_ptr->index_to_palette[j];
-                           }
-                        }
-
-                        png_ptr->index_to_palette[png_ptr->palette_to_index
-                            [num_new_palette]] = png_ptr->index_to_palette[j];
-
-                        png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
-                            = png_ptr->palette_to_index[num_new_palette];
-
-                        png_ptr->index_to_palette[j] =
-                            (png_byte)num_new_palette;
-
-                        png_ptr->palette_to_index[num_new_palette] =
-                            (png_byte)j;
-                     }
-                     if (num_new_palette <= maximum_colors)
-                        break;
-                  }
-                  if (num_new_palette <= maximum_colors)
-                     break;
-               }
-            }
-
-            for (i = 0; i < 769; i++)
-            {
-               if (hash[i] != NULL)
-               {
-                  png_dsortp p = hash[i];
-                  while (p)
-                  {
-                     t = p->next;
-                     png_free(png_ptr, p);
-                     p = t;
-                  }
-               }
-               hash[i] = 0;
-            }
-            max_d += 96;
-         }
-         png_free(png_ptr, hash);
-         png_free(png_ptr, png_ptr->palette_to_index);
-         png_free(png_ptr, png_ptr->index_to_palette);
-         png_ptr->palette_to_index = NULL;
-         png_ptr->index_to_palette = NULL;
-      }
-      num_palette = maximum_colors;
-   }
-   if (png_ptr->palette == NULL)
-   {
-      png_ptr->palette = palette;
-   }
-   png_ptr->num_palette = (png_uint_16)num_palette;
-
-   if (full_quantize)
-   {
-      int i;
-      png_bytep distance;
-      int total_bits = PNG_QUANTIZE_RED_BITS + PNG_QUANTIZE_GREEN_BITS +
-          PNG_QUANTIZE_BLUE_BITS;
-      int num_red = (1 << PNG_QUANTIZE_RED_BITS);
-      int num_green = (1 << PNG_QUANTIZE_GREEN_BITS);
-      int num_blue = (1 << PNG_QUANTIZE_BLUE_BITS);
-      png_size_t num_entries = ((png_size_t)1 << total_bits);
-
-      png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
-          (png_uint_32)(num_entries * (sizeof (png_byte))));
-
-      distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
-          (sizeof (png_byte))));
-
-      memset(distance, 0xff, num_entries * (sizeof (png_byte)));
-
-      for (i = 0; i < num_palette; i++)
-      {
-         int ir, ig, ib;
-         int r = (palette[i].red >> (8 - PNG_QUANTIZE_RED_BITS));
-         int g = (palette[i].green >> (8 - PNG_QUANTIZE_GREEN_BITS));
-         int b = (palette[i].blue >> (8 - PNG_QUANTIZE_BLUE_BITS));
-
-         for (ir = 0; ir < num_red; ir++)
-         {
-            /* int dr = abs(ir - r); */
-            int dr = ((ir > r) ? ir - r : r - ir);
-            int index_r = (ir << (PNG_QUANTIZE_BLUE_BITS +
-                PNG_QUANTIZE_GREEN_BITS));
-
-            for (ig = 0; ig < num_green; ig++)
-            {
-               /* int dg = abs(ig - g); */
-               int dg = ((ig > g) ? ig - g : g - ig);
-               int dt = dr + dg;
-               int dm = ((dr > dg) ? dr : dg);
-               int index_g = index_r | (ig << PNG_QUANTIZE_BLUE_BITS);
-
-               for (ib = 0; ib < num_blue; ib++)
-               {
-                  int d_index = index_g | ib;
-                  /* int db = abs(ib - b); */
-                  int db = ((ib > b) ? ib - b : b - ib);
-                  int dmax = ((dm > db) ? dm : db);
-                  int d = dmax + dt + db;
-
-                  if (d < (int)distance[d_index])
-                  {
-                     distance[d_index] = (png_byte)d;
-                     png_ptr->palette_lookup[d_index] = (png_byte)i;
-                  }
-               }
-            }
-         }
-      }
-
-      png_free(png_ptr, distance);
-   }
-}
-#endif /* PNG_READ_QUANTIZE_SUPPORTED */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-void PNGFAPI
-png_set_gamma_fixed(png_structrp png_ptr, png_fixed_point scrn_gamma,
-   png_fixed_point file_gamma)
-{
-   png_debug(1, "in png_set_gamma_fixed");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   /* New in libpng-1.5.4 - reserve particular negative values as flags. */
-   scrn_gamma = translate_gamma_flags(png_ptr, scrn_gamma, 1/*screen*/);
-   file_gamma = translate_gamma_flags(png_ptr, file_gamma, 0/*file*/);
-
-   /* Checking the gamma values for being >0 was added in 1.5.4 along with the
-    * premultiplied alpha support; this actually hides an undocumented feature
-    * of the previous implementation which allowed gamma processing to be
-    * disabled in background handling.  There is no evidence (so far) that this
-    * was being used; however, png_set_background itself accepted and must still
-    * accept '0' for the gamma value it takes, because it isn't always used.
-    *
-    * Since this is an API change (albeit a very minor one that removes an
-    * undocumented API feature) the following checks were only enabled in
-    * libpng-1.6.0.
-    */
-   if (file_gamma <= 0)
-      png_error(png_ptr, "invalid file gamma in png_set_gamma");
-
-   if (scrn_gamma <= 0)
-      png_error(png_ptr, "invalid screen gamma in png_set_gamma");
-
-   /* Set the gamma values unconditionally - this overrides the value in the PNG
-    * file if a gAMA chunk was present.  png_set_alpha_mode provides a
-    * different, easier, way to default the file gamma.
-    */
-   png_ptr->colorspace.gamma = file_gamma;
-   png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-   png_ptr->screen_gamma = scrn_gamma;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_gamma(png_structrp png_ptr, double scrn_gamma, double file_gamma)
-{
-   png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
-      convert_gamma_value(png_ptr, file_gamma));
-}
-#  endif /* FLOATING_POINT_SUPPORTED */
-#endif /* READ_GAMMA */
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-/* Expand paletted images to RGB, expand grayscale images of
- * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
- * to alpha channels.
- */
-void PNGAPI
-png_set_expand(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_expand");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-
-/* GRR 19990627:  the following three functions currently are identical
- *  to png_set_expand().  However, it is entirely reasonable that someone
- *  might wish to expand an indexed image to RGB but *not* expand a single,
- *  fully transparent palette entry to a full alpha channel--perhaps instead
- *  convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace
- *  the transparent color with a particular RGB value, or drop tRNS entirely.
- *  IOW, a future version of the library may make the transformations flag
- *  a bit more fine-grained, with separate bits for each of these three
- *  functions.
- *
- *  More to the point, these functions make it obvious what libpng will be
- *  doing, whereas "expand" can (and does) mean any number of things.
- *
- *  GRP 20060307: In libpng-1.2.9, png_set_gray_1_2_4_to_8() was modified
- *  to expand only the sample depth but not to expand the tRNS to alpha
- *  and its name was changed to png_set_expand_gray_1_2_4_to_8().
- */
-
-/* Expand paletted images to RGB. */
-void PNGAPI
-png_set_palette_to_rgb(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_palette_to_rgb");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-
-/* Expand grayscale images of less than 8-bit depth to 8 bits. */
-void PNGAPI
-png_set_expand_gray_1_2_4_to_8(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_expand_gray_1_2_4_to_8");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= PNG_EXPAND;
-}
-
-/* Expand tRNS chunks to alpha channels. */
-void PNGAPI
-png_set_tRNS_to_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_tRNS_to_alpha");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-#endif /* defined(PNG_READ_EXPAND_SUPPORTED) */
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-/* Expand to 16-bit channels, expand the tRNS chunk too (because otherwise
- * it may not work correctly.)
- */
-void PNGAPI
-png_set_expand_16(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_expand_16");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND_16 | PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-void PNGAPI
-png_set_gray_to_rgb(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_gray_to_rgb");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-   /* Because rgb must be 8 bits or more: */
-   png_set_expand_gray_1_2_4_to_8(png_ptr);
-   png_ptr->transformations |= PNG_GRAY_TO_RGB;
-}
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-void PNGFAPI
-png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
-    png_fixed_point red, png_fixed_point green)
-{
-   png_debug(1, "in png_set_rgb_to_gray");
-
-   /* Need the IHDR here because of the check on color_type below. */
-   /* TODO: fix this */
-   if (!png_rtran_ok(png_ptr, 1))
-      return;
-
-   switch(error_action)
-   {
-      case PNG_ERROR_ACTION_NONE:
-         png_ptr->transformations |= PNG_RGB_TO_GRAY;
-         break;
-
-      case PNG_ERROR_ACTION_WARN:
-         png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
-         break;
-
-      case PNG_ERROR_ACTION_ERROR:
-         png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
-         break;
-
-      default:
-         png_error(png_ptr, "invalid error action to rgb_to_gray");
-         break;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-#ifdef PNG_READ_EXPAND_SUPPORTED
-      png_ptr->transformations |= PNG_EXPAND;
-#else
-   {
-      /* Make this an error in 1.6 because otherwise the application may assume
-       * that it just worked and get a memory overwrite.
-       */
-      png_error(png_ptr,
-        "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED");
-
-      /* png_ptr->transformations &= ~PNG_RGB_TO_GRAY; */
-   }
-#endif
-   {
-      if (red >= 0 && green >= 0 && red + green <= PNG_FP_1)
-      {
-         png_uint_16 red_int, green_int;
-
-         /* NOTE: this calculation does not round, but this behavior is retained
-          * for consistency, the inaccuracy is very small.  The code here always
-          * overwrites the coefficients, regardless of whether they have been
-          * defaulted or set already.
-          */
-         red_int = (png_uint_16)(((png_uint_32)red*32768)/100000);
-         green_int = (png_uint_16)(((png_uint_32)green*32768)/100000);
-
-         png_ptr->rgb_to_gray_red_coeff   = red_int;
-         png_ptr->rgb_to_gray_green_coeff = green_int;
-         png_ptr->rgb_to_gray_coefficients_set = 1;
-      }
-
-      else
-      {
-         if (red >= 0 && green >= 0)
-            png_app_warning(png_ptr,
-               "ignoring out of range rgb_to_gray coefficients");
-
-         /* Use the defaults, from the cHRM chunk if set, else the historical
-          * values which are close to the sRGB/HDTV/ITU-Rec 709 values.  See
-          * png_do_rgb_to_gray for more discussion of the values.  In this case
-          * the coefficients are not marked as 'set' and are not overwritten if
-          * something has already provided a default.
-          */
-         if (png_ptr->rgb_to_gray_red_coeff == 0 &&
-            png_ptr->rgb_to_gray_green_coeff == 0)
-         {
-            png_ptr->rgb_to_gray_red_coeff   = 6968;
-            png_ptr->rgb_to_gray_green_coeff = 23434;
-            /* png_ptr->rgb_to_gray_blue_coeff  = 2366; */
-         }
-      }
-   }
-}
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-/* Convert a RGB image to a grayscale of the same width.  This allows us,
- * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.
- */
-
-void PNGAPI
-png_set_rgb_to_gray(png_structrp png_ptr, int error_action, double red,
-   double green)
-{
-   png_set_rgb_to_gray_fixed(png_ptr, error_action,
-      png_fixed(png_ptr, red, "rgb to gray red coefficient"),
-      png_fixed(png_ptr, green, "rgb to gray green coefficient"));
-}
-#endif /* FLOATING POINT */
-
-#endif /* RGB_TO_GRAY */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-void PNGAPI
-png_set_read_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
-    read_user_transform_fn)
-{
-   png_debug(1, "in png_set_read_user_transform_fn");
-
-   if (!png_rtran_ok(png_ptr, 0))
-      return;
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   png_ptr->transformations |= PNG_USER_TRANSFORM;
-   png_ptr->read_user_transform_fn = read_user_transform_fn;
-#endif
-}
-#endif
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* In the case of gamma transformations only do transformations on images where
- * the [file] gamma and screen_gamma are not close reciprocals, otherwise it
- * slows things down slightly, and also needlessly introduces small errors.
- */
-static int /* PRIVATE */
-png_gamma_threshold(png_fixed_point screen_gamma, png_fixed_point file_gamma)
-{
-   /* PNG_GAMMA_THRESHOLD is the threshold for performing gamma
-    * correction as a difference of the overall transform from 1.0
-    *
-    * We want to compare the threshold with s*f - 1, if we get
-    * overflow here it is because of wacky gamma values so we
-    * turn on processing anyway.
-    */
-   png_fixed_point gtest;
-   return !png_muldiv(&gtest, screen_gamma, file_gamma, PNG_FP_1) ||
-       png_gamma_significant(gtest);
-}
-#endif
-
-/* Initialize everything needed for the read.  This includes modifying
- * the palette.
- */
-
-/*For the moment 'png_init_palette_transformations' and
- * 'png_init_rgb_transformations' only do some flag canceling optimizations.
- * The intent is that these two routines should have palette or rgb operations
- * extracted from 'png_init_read_transformations'.
- */
-static void /* PRIVATE */
-png_init_palette_transformations(png_structrp png_ptr)
-{
-   /* Called to handle the (input) palette case.  In png_do_read_transformations
-    * the first step is to expand the palette if requested, so this code must
-    * take care to only make changes that are invariant with respect to the
-    * palette expansion, or only do them if there is no expansion.
-    *
-    * STRIP_ALPHA has already been handled in the caller (by setting num_trans
-    * to 0.)
-    */
-   int input_has_alpha = 0;
-   int input_has_transparency = 0;
-
-   if (png_ptr->num_trans > 0)
-   {
-      int i;
-
-      /* Ignore if all the entries are opaque (unlikely!) */
-      for (i=0; i<png_ptr->num_trans; ++i)
-         if (png_ptr->trans_alpha[i] == 255)
-            continue;
-         else if (png_ptr->trans_alpha[i] == 0)
-            input_has_transparency = 1;
-         else
-            input_has_alpha = 1;
-   }
-
-   /* If no alpha we can optimize. */
-   if (!input_has_alpha)
-   {
-      /* Any alpha means background and associative alpha processing is
-       * required, however if the alpha is 0 or 1 throughout OPTIIMIZE_ALPHA
-       * and ENCODE_ALPHA are irrelevant.
-       */
-      png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-
-      if (!input_has_transparency)
-         png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
-   }
-
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* png_set_background handling - deals with the complexity of whether the
-    * background color is in the file format or the screen format in the case
-    * where an 'expand' will happen.
-    */
-
-   /* The following code cannot be entered in the alpha pre-multiplication case
-    * because PNG_BACKGROUND_EXPAND is cancelled below.
-    */
-   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
-       (png_ptr->transformations & PNG_EXPAND))
-   {
-      {
-         png_ptr->background.red   =
-             png_ptr->palette[png_ptr->background.index].red;
-         png_ptr->background.green =
-             png_ptr->palette[png_ptr->background.index].green;
-         png_ptr->background.blue  =
-             png_ptr->palette[png_ptr->background.index].blue;
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-        if (png_ptr->transformations & PNG_INVERT_ALPHA)
-        {
-           if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
-           {
-              /* Invert the alpha channel (in tRNS) unless the pixels are
-               * going to be expanded, in which case leave it for later
-               */
-              int i, istop = png_ptr->num_trans;
-
-              for (i=0; i<istop; i++)
-                 png_ptr->trans_alpha[i] = (png_byte)(255 -
-                    png_ptr->trans_alpha[i]);
-           }
-        }
-#endif /* PNG_READ_INVERT_ALPHA_SUPPORTED */
-      }
-   } /* background expand and (therefore) no alpha association. */
-#endif /* PNG_READ_EXPAND_SUPPORTED && PNG_READ_BACKGROUND_SUPPORTED */
-}
-
-static void /* PRIVATE */
-png_init_rgb_transformations(png_structrp png_ptr)
-{
-   /* Added to libpng-1.5.4: check the color type to determine whether there
-    * is any alpha or transparency in the image and simply cancel the
-    * background and alpha mode stuff if there isn't.
-    */
-   int input_has_alpha = (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0;
-   int input_has_transparency = png_ptr->num_trans > 0;
-
-   /* If no alpha we can optimize. */
-   if (!input_has_alpha)
-   {
-      /* Any alpha means background and associative alpha processing is
-       * required, however if the alpha is 0 or 1 throughout OPTIIMIZE_ALPHA
-       * and ENCODE_ALPHA are irrelevant.
-       */
-#     ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-#     endif
-
-      if (!input_has_transparency)
-         png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
-   }
-
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* png_set_background handling - deals with the complexity of whether the
-    * background color is in the file format or the screen format in the case
-    * where an 'expand' will happen.
-    */
-
-   /* The following code cannot be entered in the alpha pre-multiplication case
-    * because PNG_BACKGROUND_EXPAND is cancelled below.
-    */
-   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
-       (png_ptr->transformations & PNG_EXPAND) &&
-       !(png_ptr->color_type & PNG_COLOR_MASK_COLOR))
-       /* i.e., GRAY or GRAY_ALPHA */
-   {
-      {
-         /* Expand background and tRNS chunks */
-         int gray = png_ptr->background.gray;
-         int trans_gray = png_ptr->trans_color.gray;
-
-         switch (png_ptr->bit_depth)
-         {
-            case 1:
-               gray *= 0xff;
-               trans_gray *= 0xff;
-               break;
-
-            case 2:
-               gray *= 0x55;
-               trans_gray *= 0x55;
-               break;
-
-            case 4:
-               gray *= 0x11;
-               trans_gray *= 0x11;
-               break;
-
-            default:
-
-            case 8:
-               /* FALL THROUGH (Already 8 bits) */
-
-            case 16:
-               /* Already a full 16 bits */
-               break;
-         }
-
-         png_ptr->background.red = png_ptr->background.green =
-            png_ptr->background.blue = (png_uint_16)gray;
-
-         if (!(png_ptr->transformations & PNG_EXPAND_tRNS))
-         {
-            png_ptr->trans_color.red = png_ptr->trans_color.green =
-               png_ptr->trans_color.blue = (png_uint_16)trans_gray;
-         }
-      }
-   } /* background expand and (therefore) no alpha association. */
-#endif /* PNG_READ_EXPAND_SUPPORTED && PNG_READ_BACKGROUND_SUPPORTED */
-}
-
-void /* PRIVATE */
-png_init_read_transformations(png_structrp png_ptr)
-{
-   png_debug(1, "in png_init_read_transformations");
-
-   /* This internal function is called from png_read_start_row in pngrutil.c
-    * and it is called before the 'rowbytes' calculation is done, so the code
-    * in here can change or update the transformations flags.
-    *
-    * First do updates that do not depend on the details of the PNG image data
-    * being processed.
-    */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   /* Prior to 1.5.4 these tests were performed from png_set_gamma, 1.5.4 adds
-    * png_set_alpha_mode and this is another source for a default file gamma so
-    * the test needs to be performed later - here.  In addition prior to 1.5.4
-    * the tests were repeated for the PALETTE color type here - this is no
-    * longer necessary (and doesn't seem to have been necessary before.)
-    */
-   {
-      /* The following temporary indicates if overall gamma correction is
-       * required.
-       */
-      int gamma_correction = 0;
-
-      if (png_ptr->colorspace.gamma != 0) /* has been set */
-      {
-         if (png_ptr->screen_gamma != 0) /* screen set too */
-            gamma_correction = png_gamma_threshold(png_ptr->colorspace.gamma,
-               png_ptr->screen_gamma);
-
-         else
-            /* Assume the output matches the input; a long time default behavior
-             * of libpng, although the standard has nothing to say about this.
-             */
-            png_ptr->screen_gamma = png_reciprocal(png_ptr->colorspace.gamma);
-      }
-
-      else if (png_ptr->screen_gamma != 0)
-         /* The converse - assume the file matches the screen, note that this
-          * perhaps undesireable default can (from 1.5.4) be changed by calling
-          * png_set_alpha_mode (even if the alpha handling mode isn't required
-          * or isn't changed from the default.)
-          */
-         png_ptr->colorspace.gamma = png_reciprocal(png_ptr->screen_gamma);
-
-      else /* neither are set */
-         /* Just in case the following prevents any processing - file and screen
-          * are both assumed to be linear and there is no way to introduce a
-          * third gamma value other than png_set_background with 'UNIQUE', and,
-          * prior to 1.5.4
-          */
-         png_ptr->screen_gamma = png_ptr->colorspace.gamma = PNG_FP_1;
-
-      /* We have a gamma value now. */
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-
-      /* Now turn the gamma transformation on or off as appropriate.  Notice
-       * that PNG_GAMMA just refers to the file->screen correction.  Alpha
-       * composition may independently cause gamma correction because it needs
-       * linear data (e.g. if the file has a gAMA chunk but the screen gamma
-       * hasn't been specified.)  In any case this flag may get turned off in
-       * the code immediately below if the transform can be handled outside the
-       * row loop.
-       */
-      if (gamma_correction)
-         png_ptr->transformations |= PNG_GAMMA;
-
-      else
-         png_ptr->transformations &= ~PNG_GAMMA;
-   }
-#endif
-
-   /* Certain transformations have the effect of preventing other
-    * transformations that happen afterward in png_do_read_transformations,
-    * resolve the interdependencies here.  From the code of
-    * png_do_read_transformations the order is:
-    *
-    *  1) PNG_EXPAND (including PNG_EXPAND_tRNS)
-    *  2) PNG_STRIP_ALPHA (if no compose)
-    *  3) PNG_RGB_TO_GRAY
-    *  4) PNG_GRAY_TO_RGB iff !PNG_BACKGROUND_IS_GRAY
-    *  5) PNG_COMPOSE
-    *  6) PNG_GAMMA
-    *  7) PNG_STRIP_ALPHA (if compose)
-    *  8) PNG_ENCODE_ALPHA
-    *  9) PNG_SCALE_16_TO_8
-    * 10) PNG_16_TO_8
-    * 11) PNG_QUANTIZE (converts to palette)
-    * 12) PNG_EXPAND_16
-    * 13) PNG_GRAY_TO_RGB iff PNG_BACKGROUND_IS_GRAY
-    * 14) PNG_INVERT_MONO
-    * 15) PNG_SHIFT
-    * 16) PNG_PACK
-    * 17) PNG_BGR
-    * 18) PNG_PACKSWAP
-    * 19) PNG_FILLER (includes PNG_ADD_ALPHA)
-    * 20) PNG_INVERT_ALPHA
-    * 21) PNG_SWAP_ALPHA
-    * 22) PNG_SWAP_BYTES
-    * 23) PNG_USER_TRANSFORM [must be last]
-    */
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&
-      !(png_ptr->transformations & PNG_COMPOSE))
-   {
-      /* Stripping the alpha channel happens immediately after the 'expand'
-       * transformations, before all other transformation, so it cancels out
-       * the alpha handling.  It has the side effect negating the effect of
-       * PNG_EXPAND_tRNS too:
-       */
-      png_ptr->transformations &= ~(PNG_BACKGROUND_EXPAND | PNG_ENCODE_ALPHA |
-         PNG_EXPAND_tRNS);
-      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-
-      /* Kill the tRNS chunk itself too.  Prior to 1.5.4 this did not happen
-       * so transparency information would remain just so long as it wasn't
-       * expanded.  This produces unexpected API changes if the set of things
-       * that do PNG_EXPAND_tRNS changes (perfectly possible given the
-       * documentation - which says ask for what you want, accept what you
-       * get.)  This makes the behavior consistent from 1.5.4:
-       */
-      png_ptr->num_trans = 0;
-   }
-#endif /* STRIP_ALPHA supported, no COMPOSE */
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-   /* If the screen gamma is about 1.0 then the OPTIMIZE_ALPHA and ENCODE_ALPHA
-    * settings will have no effect.
-    */
-   if (!png_gamma_significant(png_ptr->screen_gamma))
-   {
-      png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-   }
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   /* Make sure the coefficients for the rgb to gray conversion are set
-    * appropriately.
-    */
-   if (png_ptr->transformations & PNG_RGB_TO_GRAY)
-      png_colorspace_set_rgb_coefficients(png_ptr);
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* Detect gray background and attempt to enable optimization for
-    * gray --> RGB case.
-    *
-    * Note:  if PNG_BACKGROUND_EXPAND is set and color_type is either RGB or
-    * RGB_ALPHA (in which case need_expand is superfluous anyway), the
-    * background color might actually be gray yet not be flagged as such.
-    * This is not a problem for the current code, which uses
-    * PNG_BACKGROUND_IS_GRAY only to decide when to do the
-    * png_do_gray_to_rgb() transformation.
-    *
-    * TODO: this code needs to be revised to avoid the complexity and
-    * interdependencies.  The color type of the background should be recorded in
-    * png_set_background, along with the bit depth, then the code has a record
-    * of exactly what color space the background is currently in.
-    */
-   if (png_ptr->transformations & PNG_BACKGROUND_EXPAND)
-   {
-      /* PNG_BACKGROUND_EXPAND: the background is in the file color space, so if
-       * the file was grayscale the background value is gray.
-       */
-      if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR))
-         png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
-   }
-
-   else if (png_ptr->transformations & PNG_COMPOSE)
-   {
-      /* PNG_COMPOSE: png_set_background was called with need_expand false,
-       * so the color is in the color space of the output or png_set_alpha_mode
-       * was called and the color is black.  Ignore RGB_TO_GRAY because that
-       * happens before GRAY_TO_RGB.
-       */
-      if (png_ptr->transformations & PNG_GRAY_TO_RGB)
-      {
-         if (png_ptr->background.red == png_ptr->background.green &&
-             png_ptr->background.red == png_ptr->background.blue)
-         {
-            png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
-            png_ptr->background.gray = png_ptr->background.red;
-         }
-      }
-   }
-#endif /* PNG_READ_EXPAND_SUPPORTED && PNG_READ_BACKGROUND_SUPPORTED */
-#endif /* PNG_READ_GRAY_TO_RGB_SUPPORTED */
-
-   /* For indexed PNG data (PNG_COLOR_TYPE_PALETTE) many of the transformations
-    * can be performed directly on the palette, and some (such as rgb to gray)
-    * can be optimized inside the palette.  This is particularly true of the
-    * composite (background and alpha) stuff, which can be pretty much all done
-    * in the palette even if the result is expanded to RGB or gray afterward.
-    *
-    * NOTE: this is Not Yet Implemented, the code behaves as in 1.5.1 and
-    * earlier and the palette stuff is actually handled on the first row.  This
-    * leads to the reported bug that the palette returned by png_get_PLTE is not
-    * updated.
-    */
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      png_init_palette_transformations(png_ptr);
-
-   else
-      png_init_rgb_transformations(png_ptr);
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
-   defined(PNG_READ_EXPAND_16_SUPPORTED)
-   if ((png_ptr->transformations & PNG_EXPAND_16) &&
-      (png_ptr->transformations & PNG_COMPOSE) &&
-      !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
-      png_ptr->bit_depth != 16)
-   {
-      /* TODO: fix this.  Because the expand_16 operation is after the compose
-       * handling the background color must be 8, not 16, bits deep, but the
-       * application will supply a 16-bit value so reduce it here.
-       *
-       * The PNG_BACKGROUND_EXPAND code above does not expand to 16 bits at
-       * present, so that case is ok (until do_expand_16 is moved.)
-       *
-       * NOTE: this discards the low 16 bits of the user supplied background
-       * color, but until expand_16 works properly there is no choice!
-       */
-#     define CHOP(x) (x)=((png_uint_16)PNG_DIV257(x))
-      CHOP(png_ptr->background.red);
-      CHOP(png_ptr->background.green);
-      CHOP(png_ptr->background.blue);
-      CHOP(png_ptr->background.gray);
-#     undef CHOP
-   }
-#endif /* PNG_READ_BACKGROUND_SUPPORTED && PNG_READ_EXPAND_16_SUPPORTED */
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
-   (defined(PNG_READ_SCALE_16_TO_8_SUPPORTED) || \
-   defined(PNG_READ_STRIP_16_TO_8_SUPPORTED))
-   if ((png_ptr->transformations & (PNG_16_TO_8|PNG_SCALE_16_TO_8)) &&
-      (png_ptr->transformations & PNG_COMPOSE) &&
-      !(png_ptr->transformations & PNG_BACKGROUND_EXPAND) &&
-      png_ptr->bit_depth == 16)
-   {
-      /* On the other hand, if a 16-bit file is to be reduced to 8-bits per
-       * component this will also happen after PNG_COMPOSE and so the background
-       * color must be pre-expanded here.
-       *
-       * TODO: fix this too.
-       */
-      png_ptr->background.red = (png_uint_16)(png_ptr->background.red * 257);
-      png_ptr->background.green =
-         (png_uint_16)(png_ptr->background.green * 257);
-      png_ptr->background.blue = (png_uint_16)(png_ptr->background.blue * 257);
-      png_ptr->background.gray = (png_uint_16)(png_ptr->background.gray * 257);
-   }
-#endif
-
-   /* NOTE: below 'PNG_READ_ALPHA_MODE_SUPPORTED' is presumed to also enable the
-    * background support (see the comments in scripts/pnglibconf.dfa), this
-    * allows pre-multiplication of the alpha channel to be implemented as
-    * compositing on black.  This is probably sub-optimal and has been done in
-    * 1.5.4 betas simply to enable external critique and testing (i.e. to
-    * implement the new API quickly, without lots of internal changes.)
-    */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-#  ifdef PNG_READ_BACKGROUND_SUPPORTED
-      /* Includes ALPHA_MODE */
-      png_ptr->background_1 = png_ptr->background;
-#  endif
-
-   /* This needs to change - in the palette image case a whole set of tables are
-    * built when it would be quicker to just calculate the correct value for
-    * each palette entry directly.  Also, the test is too tricky - why check
-    * PNG_RGB_TO_GRAY if PNG_GAMMA is not set?  The answer seems to be that
-    * PNG_GAMMA is cancelled even if the gamma is known?  The test excludes the
-    * PNG_COMPOSE case, so apparently if there is no *overall* gamma correction
-    * the gamma tables will not be built even if composition is required on a
-    * gamma encoded value.
-    *
-    * In 1.5.4 this is addressed below by an additional check on the individual
-    * file gamma - if it is not 1.0 both RGB_TO_GRAY and COMPOSE need the
-    * tables.
-    */
-   if ((png_ptr->transformations & PNG_GAMMA)
-      || ((png_ptr->transformations & PNG_RGB_TO_GRAY)
-         && (png_gamma_significant(png_ptr->colorspace.gamma) ||
-            png_gamma_significant(png_ptr->screen_gamma)))
-      || ((png_ptr->transformations & PNG_COMPOSE)
-         && (png_gamma_significant(png_ptr->colorspace.gamma)
-            || png_gamma_significant(png_ptr->screen_gamma)
-#  ifdef PNG_READ_BACKGROUND_SUPPORTED
-            || (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_UNIQUE
-               && png_gamma_significant(png_ptr->background_gamma))
-#  endif
-      )) || ((png_ptr->transformations & PNG_ENCODE_ALPHA)
-         && png_gamma_significant(png_ptr->screen_gamma))
-      )
-   {
-      png_build_gamma_table(png_ptr, png_ptr->bit_depth);
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-      if (png_ptr->transformations & PNG_COMPOSE)
-      {
-         /* Issue a warning about this combination: because RGB_TO_GRAY is
-          * optimized to do the gamma transform if present yet do_background has
-          * to do the same thing if both options are set a
-          * double-gamma-correction happens.  This is true in all versions of
-          * libpng to date.
-          */
-         if (png_ptr->transformations & PNG_RGB_TO_GRAY)
-            png_warning(png_ptr,
-               "libpng does not support gamma+background+rgb_to_gray");
-
-         if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-         {
-            /* We don't get to here unless there is a tRNS chunk with non-opaque
-             * entries - see the checking code at the start of this function.
-             */
-            png_color back, back_1;
-            png_colorp palette = png_ptr->palette;
-            int num_palette = png_ptr->num_palette;
-            int i;
-            if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
-            {
-
-               back.red = png_ptr->gamma_table[png_ptr->background.red];
-               back.green = png_ptr->gamma_table[png_ptr->background.green];
-               back.blue = png_ptr->gamma_table[png_ptr->background.blue];
-
-               back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
-               back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
-               back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
-            }
-            else
-            {
-               png_fixed_point g, gs;
-
-               switch (png_ptr->background_gamma_type)
-               {
-                  case PNG_BACKGROUND_GAMMA_SCREEN:
-                     g = (png_ptr->screen_gamma);
-                     gs = PNG_FP_1;
-                     break;
-
-                  case PNG_BACKGROUND_GAMMA_FILE:
-                     g = png_reciprocal(png_ptr->colorspace.gamma);
-                     gs = png_reciprocal2(png_ptr->colorspace.gamma,
-                        png_ptr->screen_gamma);
-                     break;
-
-                  case PNG_BACKGROUND_GAMMA_UNIQUE:
-                     g = png_reciprocal(png_ptr->background_gamma);
-                     gs = png_reciprocal2(png_ptr->background_gamma,
-                        png_ptr->screen_gamma);
-                     break;
-                  default:
-                     g = PNG_FP_1;    /* back_1 */
-                     gs = PNG_FP_1;   /* back */
-                     break;
-               }
-
-               if (png_gamma_significant(gs))
-               {
-                  back.red = png_gamma_8bit_correct(png_ptr->background.red,
-                      gs);
-                  back.green = png_gamma_8bit_correct(png_ptr->background.green,
-                      gs);
-                  back.blue = png_gamma_8bit_correct(png_ptr->background.blue,
-                      gs);
-               }
-
-               else
-               {
-                  back.red   = (png_byte)png_ptr->background.red;
-                  back.green = (png_byte)png_ptr->background.green;
-                  back.blue  = (png_byte)png_ptr->background.blue;
-               }
-
-               if (png_gamma_significant(g))
-               {
-                  back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
-                     g);
-                  back_1.green = png_gamma_8bit_correct(
-                     png_ptr->background.green, g);
-                  back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
-                     g);
-               }
-
-               else
-               {
-                  back_1.red   = (png_byte)png_ptr->background.red;
-                  back_1.green = (png_byte)png_ptr->background.green;
-                  back_1.blue  = (png_byte)png_ptr->background.blue;
-               }
-            }
-
-            for (i = 0; i < num_palette; i++)
-            {
-               if (i < (int)png_ptr->num_trans &&
-                   png_ptr->trans_alpha[i] != 0xff)
-               {
-                  if (png_ptr->trans_alpha[i] == 0)
-                  {
-                     palette[i] = back;
-                  }
-                  else /* if (png_ptr->trans_alpha[i] != 0xff) */
-                  {
-                     png_byte v, w;
-
-                     v = png_ptr->gamma_to_1[palette[i].red];
-                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.red);
-                     palette[i].red = png_ptr->gamma_from_1[w];
-
-                     v = png_ptr->gamma_to_1[palette[i].green];
-                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.green);
-                     palette[i].green = png_ptr->gamma_from_1[w];
-
-                     v = png_ptr->gamma_to_1[palette[i].blue];
-                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue);
-                     palette[i].blue = png_ptr->gamma_from_1[w];
-                  }
-               }
-               else
-               {
-                  palette[i].red = png_ptr->gamma_table[palette[i].red];
-                  palette[i].green = png_ptr->gamma_table[palette[i].green];
-                  palette[i].blue = png_ptr->gamma_table[palette[i].blue];
-               }
-            }
-
-            /* Prevent the transformations being done again.
-             *
-             * NOTE: this is highly dubious; it removes the transformations in
-             * place.  This seems inconsistent with the general treatment of the
-             * transformations elsewhere.
-             */
-            png_ptr->transformations &= ~(PNG_COMPOSE | PNG_GAMMA);
-         } /* color_type == PNG_COLOR_TYPE_PALETTE */
-
-         /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
-         else /* color_type != PNG_COLOR_TYPE_PALETTE */
-         {
-            int gs_sig, g_sig;
-            png_fixed_point g = PNG_FP_1;  /* Correction to linear */
-            png_fixed_point gs = PNG_FP_1; /* Correction to screen */
-
-            switch (png_ptr->background_gamma_type)
-            {
-               case PNG_BACKGROUND_GAMMA_SCREEN:
-                  g = png_ptr->screen_gamma;
-                  /* gs = PNG_FP_1; */
-                  break;
-
-               case PNG_BACKGROUND_GAMMA_FILE:
-                  g = png_reciprocal(png_ptr->colorspace.gamma);
-                  gs = png_reciprocal2(png_ptr->colorspace.gamma,
-                     png_ptr->screen_gamma);
-                  break;
-
-               case PNG_BACKGROUND_GAMMA_UNIQUE:
-                  g = png_reciprocal(png_ptr->background_gamma);
-                  gs = png_reciprocal2(png_ptr->background_gamma,
-                      png_ptr->screen_gamma);
-                  break;
-
-               default:
-                  png_error(png_ptr, "invalid background gamma type");
-            }
-
-            g_sig = png_gamma_significant(g);
-            gs_sig = png_gamma_significant(gs);
-
-            if (g_sig)
-               png_ptr->background_1.gray = png_gamma_correct(png_ptr,
-                   png_ptr->background.gray, g);
-
-            if (gs_sig)
-               png_ptr->background.gray = png_gamma_correct(png_ptr,
-                   png_ptr->background.gray, gs);
-
-            if ((png_ptr->background.red != png_ptr->background.green) ||
-                (png_ptr->background.red != png_ptr->background.blue) ||
-                (png_ptr->background.red != png_ptr->background.gray))
-            {
-               /* RGB or RGBA with color background */
-               if (g_sig)
-               {
-                  png_ptr->background_1.red = png_gamma_correct(png_ptr,
-                      png_ptr->background.red, g);
-
-                  png_ptr->background_1.green = png_gamma_correct(png_ptr,
-                      png_ptr->background.green, g);
-
-                  png_ptr->background_1.blue = png_gamma_correct(png_ptr,
-                      png_ptr->background.blue, g);
-               }
-
-               if (gs_sig)
-               {
-                  png_ptr->background.red = png_gamma_correct(png_ptr,
-                      png_ptr->background.red, gs);
-
-                  png_ptr->background.green = png_gamma_correct(png_ptr,
-                      png_ptr->background.green, gs);
-
-                  png_ptr->background.blue = png_gamma_correct(png_ptr,
-                      png_ptr->background.blue, gs);
-               }
-            }
-
-            else
-            {
-               /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */
-               png_ptr->background_1.red = png_ptr->background_1.green
-                   = png_ptr->background_1.blue = png_ptr->background_1.gray;
-
-               png_ptr->background.red = png_ptr->background.green
-                   = png_ptr->background.blue = png_ptr->background.gray;
-            }
-
-            /* The background is now in screen gamma: */
-            png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_SCREEN;
-         } /* color_type != PNG_COLOR_TYPE_PALETTE */
-      }/* png_ptr->transformations & PNG_BACKGROUND */
-
-      else
-      /* Transformation does not include PNG_BACKGROUND */
-#endif /* PNG_READ_BACKGROUND_SUPPORTED */
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-         /* RGB_TO_GRAY needs to have non-gamma-corrected values! */
-         && ((png_ptr->transformations & PNG_EXPAND) == 0 ||
-         (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)
-#endif
-         )
-      {
-         png_colorp palette = png_ptr->palette;
-         int num_palette = png_ptr->num_palette;
-         int i;
-
-         /* NOTE: there are other transformations that should probably be in
-          * here too.
-          */
-         for (i = 0; i < num_palette; i++)
-         {
-            palette[i].red = png_ptr->gamma_table[palette[i].red];
-            palette[i].green = png_ptr->gamma_table[palette[i].green];
-            palette[i].blue = png_ptr->gamma_table[palette[i].blue];
-         }
-
-         /* Done the gamma correction. */
-         png_ptr->transformations &= ~PNG_GAMMA;
-      } /* color_type == PALETTE && !PNG_BACKGROUND transformation */
-   }
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-   else
-#endif
-#endif /* PNG_READ_GAMMA_SUPPORTED */
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-   /* No GAMMA transformation (see the hanging else 4 lines above) */
-   if ((png_ptr->transformations & PNG_COMPOSE) &&
-       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
-   {
-      int i;
-      int istop = (int)png_ptr->num_trans;
-      png_color back;
-      png_colorp palette = png_ptr->palette;
-
-      back.red   = (png_byte)png_ptr->background.red;
-      back.green = (png_byte)png_ptr->background.green;
-      back.blue  = (png_byte)png_ptr->background.blue;
-
-      for (i = 0; i < istop; i++)
-      {
-         if (png_ptr->trans_alpha[i] == 0)
-         {
-            palette[i] = back;
-         }
-
-         else if (png_ptr->trans_alpha[i] != 0xff)
-         {
-            /* The png_composite() macro is defined in png.h */
-            png_composite(palette[i].red, palette[i].red,
-                png_ptr->trans_alpha[i], back.red);
-
-            png_composite(palette[i].green, palette[i].green,
-                png_ptr->trans_alpha[i], back.green);
-
-            png_composite(palette[i].blue, palette[i].blue,
-                png_ptr->trans_alpha[i], back.blue);
-         }
-      }
-
-      png_ptr->transformations &= ~PNG_COMPOSE;
-   }
-#endif /* PNG_READ_BACKGROUND_SUPPORTED */
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-   if ((png_ptr->transformations & PNG_SHIFT) &&
-      !(png_ptr->transformations & PNG_EXPAND) &&
-       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
-   {
-      int i;
-      int istop = png_ptr->num_palette;
-      int shift = 8 - png_ptr->sig_bit.red;
-
-      png_ptr->transformations &= ~PNG_SHIFT;
-
-      /* significant bits can be in the range 1 to 7 for a meaninful result, if
-       * the number of significant bits is 0 then no shift is done (this is an
-       * error condition which is silently ignored.)
-       */
-      if (shift > 0 && shift < 8) for (i=0; i<istop; ++i)
-      {
-         int component = png_ptr->palette[i].red;
-
-         component >>= shift;
-         png_ptr->palette[i].red = (png_byte)component;
-      }
-
-      shift = 8 - png_ptr->sig_bit.green;
-      if (shift > 0 && shift < 8) for (i=0; i<istop; ++i)
-      {
-         int component = png_ptr->palette[i].green;
-
-         component >>= shift;
-         png_ptr->palette[i].green = (png_byte)component;
-      }
-
-      shift = 8 - png_ptr->sig_bit.blue;
-      if (shift > 0 && shift < 8) for (i=0; i<istop; ++i)
-      {
-         int component = png_ptr->palette[i].blue;
-
-         component >>= shift;
-         png_ptr->palette[i].blue = (png_byte)component;
-      }
-   }
-#endif  /* PNG_READ_SHIFT_SUPPORTED */
-}
-
-/* Modify the info structure to reflect the transformations.  The
- * info should be updated so a PNG file could be written with it,
- * assuming the transformations result in valid PNG data.
- */
-void /* PRIVATE */
-png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_debug(1, "in png_read_transform_info");
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   if (png_ptr->transformations & PNG_EXPAND)
-   {
-      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         /* This check must match what actually happens in
-          * png_do_expand_palette; if it ever checks the tRNS chunk to see if
-          * it is all opaque we must do the same (at present it does not.)
-          */
-         if (png_ptr->num_trans > 0)
-            info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-
-         else
-            info_ptr->color_type = PNG_COLOR_TYPE_RGB;
-
-         info_ptr->bit_depth = 8;
-         info_ptr->num_trans = 0;
-      }
-      else
-      {
-         if (png_ptr->num_trans)
-         {
-            if (png_ptr->transformations & PNG_EXPAND_tRNS)
-               info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
-         }
-         if (info_ptr->bit_depth < 8)
-            info_ptr->bit_depth = 8;
-
-         info_ptr->num_trans = 0;
-      }
-   }
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-   /* The following is almost certainly wrong unless the background value is in
-    * the screen space!
-    */
-   if (png_ptr->transformations & PNG_COMPOSE)
-      info_ptr->background = png_ptr->background;
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   /* The following used to be conditional on PNG_GAMMA (prior to 1.5.4),
-    * however it seems that the code in png_init_read_transformations, which has
-    * been called before this from png_read_update_info->png_read_start_row
-    * sometimes does the gamma transform and cancels the flag.
-    *
-    * TODO: this looks wrong; the info_ptr should end up with a gamma equal to
-    * the screen_gamma value.  The following probably results in weirdness if
-    * the info_ptr is used by the app after the rows have been read.
-    */
-   info_ptr->colorspace.gamma = png_ptr->colorspace.gamma;
-#endif
-
-   if (info_ptr->bit_depth == 16)
-   {
-#  ifdef PNG_READ_16BIT_SUPPORTED
-#     ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-         if (png_ptr->transformations & PNG_SCALE_16_TO_8)
-            info_ptr->bit_depth = 8;
-#     endif
-
-#     ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-         if (png_ptr->transformations & PNG_16_TO_8)
-            info_ptr->bit_depth = 8;
-#     endif
-
-#  else
-      /* No 16 bit support: force chopping 16-bit input down to 8, in this case
-       * the app program can chose if both APIs are available by setting the
-       * correct scaling to use.
-       */
-#     ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-         /* For compatibility with previous versions use the strip method by
-          * default.  This code works because if PNG_SCALE_16_TO_8 is already
-          * set the code below will do that in preference to the chop.
-          */
-         png_ptr->transformations |= PNG_16_TO_8;
-         info_ptr->bit_depth = 8;
-#     else
-
-#        ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-            png_ptr->transformations |= PNG_SCALE_16_TO_8;
-            info_ptr->bit_depth = 8;
-#        else
-
-            CONFIGURATION ERROR: you must enable at least one 16 to 8 method
-#        endif
-#    endif
-#endif /* !READ_16BIT_SUPPORTED */
-   }
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   if (png_ptr->transformations & PNG_GRAY_TO_RGB)
-      info_ptr->color_type = (png_byte)(info_ptr->color_type |
-         PNG_COLOR_MASK_COLOR);
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   if (png_ptr->transformations & PNG_RGB_TO_GRAY)
-      info_ptr->color_type = (png_byte)(info_ptr->color_type &
-         ~PNG_COLOR_MASK_COLOR);
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   if (png_ptr->transformations & PNG_QUANTIZE)
-   {
-      if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
-          (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) &&
-          png_ptr->palette_lookup && info_ptr->bit_depth == 8)
-      {
-         info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
-      }
-   }
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   if (png_ptr->transformations & PNG_EXPAND_16 && info_ptr->bit_depth == 8 &&
-      info_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      info_ptr->bit_depth = 16;
-   }
-#endif
-
-#ifdef PNG_READ_PACK_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACK) && (info_ptr->bit_depth < 8))
-      info_ptr->bit_depth = 8;
-#endif
-
-   if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      info_ptr->channels = 1;
-
-   else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
-      info_ptr->channels = 3;
-
-   else
-      info_ptr->channels = 1;
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if (png_ptr->transformations & PNG_STRIP_ALPHA)
-   {
-      info_ptr->color_type = (png_byte)(info_ptr->color_type &
-         ~PNG_COLOR_MASK_ALPHA);
-      info_ptr->num_trans = 0;
-   }
-#endif
-
-   if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
-      info_ptr->channels++;
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-   /* STRIP_ALPHA and FILLER allowed:  MASK_ALPHA bit stripped above */
-   if ((png_ptr->transformations & PNG_FILLER) &&
-       ((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
-       (info_ptr->color_type == PNG_COLOR_TYPE_GRAY)))
-   {
-      info_ptr->channels++;
-      /* If adding a true alpha channel not just filler */
-      if (png_ptr->transformations & PNG_ADD_ALPHA)
-         info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
-   }
-#endif
-
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \
-defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
-   if (png_ptr->transformations & PNG_USER_TRANSFORM)
-   {
-      if (info_ptr->bit_depth < png_ptr->user_transform_depth)
-         info_ptr->bit_depth = png_ptr->user_transform_depth;
-
-      if (info_ptr->channels < png_ptr->user_transform_channels)
-         info_ptr->channels = png_ptr->user_transform_channels;
-   }
-#endif
-
-   info_ptr->pixel_depth = (png_byte)(info_ptr->channels *
-       info_ptr->bit_depth);
-
-   info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, info_ptr->width);
-
-   /* Adding in 1.5.4: cache the above value in png_struct so that we can later
-    * check in png_rowbytes that the user buffer won't get overwritten.  Note
-    * that the field is not always set - if png_read_update_info isn't called
-    * the application has to either not do any transforms or get the calculation
-    * right itself.
-    */
-   png_ptr->info_rowbytes = info_ptr->rowbytes;
-
-#ifndef PNG_READ_EXPAND_SUPPORTED
-   if (png_ptr)
-      return;
-#endif
-}
-
-/* Transform the row.  The order of transformations is significant,
- * and is very touchy.  If you add a transformation, take care to
- * decide how it fits in with the other transformations here.
- */
-void /* PRIVATE */
-png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
-{
-   png_debug(1, "in png_do_read_transformations");
-
-   if (png_ptr->row_buf == NULL)
-   {
-      /* Prior to 1.5.4 this output row/pass where the NULL pointer is, but this
-       * error is incredibly rare and incredibly easy to debug without this
-       * information.
-       */
-      png_error(png_ptr, "NULL row buffer");
-   }
-
-   /* The following is debugging; prior to 1.5.4 the code was never compiled in;
-    * in 1.5.4 PNG_FLAG_DETECT_UNINITIALIZED was added and the macro
-    * PNG_WARN_UNINITIALIZED_ROW removed.  In 1.6 the new flag is set only for
-    * all transformations, however in practice the ROW_INIT always gets done on
-    * demand, if necessary.
-    */
-   if ((png_ptr->flags & PNG_FLAG_DETECT_UNINITIALIZED) != 0 &&
-      !(png_ptr->flags & PNG_FLAG_ROW_INIT))
-   {
-      /* Application has failed to call either png_read_start_image() or
-       * png_read_update_info() after setting transforms that expand pixels.
-       * This check added to libpng-1.2.19 (but not enabled until 1.5.4).
-       */
-      png_error(png_ptr, "Uninitialized row");
-   }
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   if (png_ptr->transformations & PNG_EXPAND)
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         png_do_expand_palette(row_info, png_ptr->row_buf + 1,
-             png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
-      }
-
-      else
-      {
-         if (png_ptr->num_trans &&
-             (png_ptr->transformations & PNG_EXPAND_tRNS))
-            png_do_expand(row_info, png_ptr->row_buf + 1,
-                &(png_ptr->trans_color));
-
-         else
-            png_do_expand(row_info, png_ptr->row_buf + 1,
-                NULL);
-      }
-   }
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&
-      !(png_ptr->transformations & PNG_COMPOSE) &&
-      (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-      row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
-      png_do_strip_channel(row_info, png_ptr->row_buf + 1,
-         0 /* at_start == false, because SWAP_ALPHA happens later */);
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   if (png_ptr->transformations & PNG_RGB_TO_GRAY)
-   {
-      int rgb_error =
-          png_do_rgb_to_gray(png_ptr, row_info,
-              png_ptr->row_buf + 1);
-
-      if (rgb_error)
-      {
-         png_ptr->rgb_to_gray_status=1;
-         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
-             PNG_RGB_TO_GRAY_WARN)
-            png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
-
-         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
-             PNG_RGB_TO_GRAY_ERR)
-            png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
-      }
-   }
-#endif
-
-/* From Andreas Dilger e-mail to png-implement, 26 March 1998:
- *
- *   In most cases, the "simple transparency" should be done prior to doing
- *   gray-to-RGB, or you will have to test 3x as many bytes to check if a
- *   pixel is transparent.  You would also need to make sure that the
- *   transparency information is upgraded to RGB.
- *
- *   To summarize, the current flow is:
- *   - Gray + simple transparency -> compare 1 or 2 gray bytes and composite
- *                                   with background "in place" if transparent,
- *                                   convert to RGB if necessary
- *   - Gray + alpha -> composite with gray background and remove alpha bytes,
- *                                   convert to RGB if necessary
- *
- *   To support RGB backgrounds for gray images we need:
- *   - Gray + simple transparency -> convert to RGB + simple transparency,
- *                                   compare 3 or 6 bytes and composite with
- *                                   background "in place" if transparent
- *                                   (3x compare/pixel compared to doing
- *                                   composite with gray bkgrnd)
- *   - Gray + alpha -> convert to RGB + alpha, composite with background and
- *                                   remove alpha bytes (3x float
- *                                   operations/pixel compared with composite
- *                                   on gray background)
- *
- *  Greg's change will do this.  The reason it wasn't done before is for
- *  performance, as this increases the per-pixel operations.  If we would check
- *  in advance if the background was gray or RGB, and position the gray-to-RGB
- *  transform appropriately, then it would save a lot of work/time.
- */
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   /* If gray -> RGB, do so now only if background is non-gray; else do later
-    * for performance reasons
-    */
-   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
-       !(png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
-      png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-   if (png_ptr->transformations & PNG_COMPOSE)
-      png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   if ((png_ptr->transformations & PNG_GAMMA) &&
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-      /* Because RGB_TO_GRAY does the gamma transform. */
-      !(png_ptr->transformations & PNG_RGB_TO_GRAY) &&
-#endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-      /* Because PNG_COMPOSE does the gamma transform if there is something to
-       * do (if there is an alpha channel or transparency.)
-       */
-       !((png_ptr->transformations & PNG_COMPOSE) &&
-       ((png_ptr->num_trans != 0) ||
-       (png_ptr->color_type & PNG_COLOR_MASK_ALPHA))) &&
-#endif
-      /* Because png_init_read_transformations transforms the palette, unless
-       * RGB_TO_GRAY will do the transform.
-       */
-       (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
-      png_do_gamma(row_info, png_ptr->row_buf + 1, png_ptr);
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) &&
-      (png_ptr->transformations & PNG_COMPOSE) &&
-      (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-      row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
-      png_do_strip_channel(row_info, png_ptr->row_buf + 1,
-         0 /* at_start == false, because SWAP_ALPHA happens later */);
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-   if ((png_ptr->transformations & PNG_ENCODE_ALPHA) &&
-      (row_info->color_type & PNG_COLOR_MASK_ALPHA))
-      png_do_encode_alpha(row_info, png_ptr->row_buf + 1, png_ptr);
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-   if (png_ptr->transformations & PNG_SCALE_16_TO_8)
-      png_do_scale_16_to_8(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-   /* There is no harm in doing both of these because only one has any effect,
-    * by putting the 'scale' option first if the app asks for scale (either by
-    * calling the API or in a TRANSFORM flag) this is what happens.
-    */
-   if (png_ptr->transformations & PNG_16_TO_8)
-      png_do_chop(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   if (png_ptr->transformations & PNG_QUANTIZE)
-   {
-      png_do_quantize(row_info, png_ptr->row_buf + 1,
-          png_ptr->palette_lookup, png_ptr->quantize_index);
-
-      if (row_info->rowbytes == 0)
-         png_error(png_ptr, "png_do_quantize returned rowbytes=0");
-   }
-#endif /* PNG_READ_QUANTIZE_SUPPORTED */
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   /* Do the expansion now, after all the arithmetic has been done.  Notice
-    * that previous transformations can handle the PNG_EXPAND_16 flag if this
-    * is efficient (particularly true in the case of gamma correction, where
-    * better accuracy results faster!)
-    */
-   if (png_ptr->transformations & PNG_EXPAND_16)
-      png_do_expand_16(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   /* NOTE: moved here in 1.5.4 (from much later in this list.) */
-   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) &&
-       (png_ptr->mode & PNG_BACKGROUND_IS_GRAY))
-      png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_INVERT_SUPPORTED
-   if (png_ptr->transformations & PNG_INVERT_MONO)
-      png_do_invert(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-   if (png_ptr->transformations & PNG_SHIFT)
-      png_do_unshift(row_info, png_ptr->row_buf + 1,
-          &(png_ptr->shift));
-#endif
-
-#ifdef PNG_READ_PACK_SUPPORTED
-   if (png_ptr->transformations & PNG_PACK)
-      png_do_unpack(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Added at libpng-1.5.10 */
-   if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&
-       png_ptr->num_palette_max >= 0)
-      png_do_check_palette_indexes(png_ptr, row_info);
-#endif
-
-#ifdef PNG_READ_BGR_SUPPORTED
-   if (png_ptr->transformations & PNG_BGR)
-      png_do_bgr(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-   if (png_ptr->transformations & PNG_PACKSWAP)
-      png_do_packswap(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-   if (png_ptr->transformations & PNG_FILLER)
-      png_do_read_filler(row_info, png_ptr->row_buf + 1,
-          (png_uint_32)png_ptr->filler, png_ptr->flags);
-#endif
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-   if (png_ptr->transformations & PNG_INVERT_ALPHA)
-      png_do_read_invert_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-   if (png_ptr->transformations & PNG_SWAP_ALPHA)
-      png_do_read_swap_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-#ifdef PNG_READ_SWAP_SUPPORTED
-   if (png_ptr->transformations & PNG_SWAP_BYTES)
-      png_do_swap(row_info, png_ptr->row_buf + 1);
-#endif
-#endif
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   if (png_ptr->transformations & PNG_USER_TRANSFORM)
-    {
-      if (png_ptr->read_user_transform_fn != NULL)
-         (*(png_ptr->read_user_transform_fn)) /* User read transform function */
-             (png_ptr,     /* png_ptr */
-             row_info,     /* row_info: */
-                /*  png_uint_32 width;       width of row */
-                /*  png_size_t rowbytes;     number of bytes in row */
-                /*  png_byte color_type;     color type of pixels */
-                /*  png_byte bit_depth;      bit depth of samples */
-                /*  png_byte channels;       number of channels (1-4) */
-                /*  png_byte pixel_depth;    bits per pixel (depth*channels) */
-             png_ptr->row_buf + 1);    /* start of pixel data for row */
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-      if (png_ptr->user_transform_depth)
-         row_info->bit_depth = png_ptr->user_transform_depth;
-
-      if (png_ptr->user_transform_channels)
-         row_info->channels = png_ptr->user_transform_channels;
-#endif
-      row_info->pixel_depth = (png_byte)(row_info->bit_depth *
-          row_info->channels);
-
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_info->width);
-   }
-#endif
-}
-
-#ifdef PNG_READ_PACK_SUPPORTED
-/* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel,
- * without changing the actual values.  Thus, if you had a row with
- * a bit depth of 1, you would end up with bytes that only contained
- * the numbers 0 or 1.  If you would rather they contain 0 and 255, use
- * png_do_shift() after this.
- */
-void /* PRIVATE */
-png_do_unpack(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_unpack");
-
-   if (row_info->bit_depth < 8)
-   {
-      png_uint_32 i;
-      png_uint_32 row_width=row_info->width;
-
-      switch (row_info->bit_depth)
-      {
-         case 1:
-         {
-            png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);
-            png_bytep dp = row + (png_size_t)row_width - 1;
-            png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07);
-            for (i = 0; i < row_width; i++)
-            {
-               *dp = (png_byte)((*sp >> shift) & 0x01);
-
-               if (shift == 7)
-               {
-                  shift = 0;
-                  sp--;
-               }
-
-               else
-                  shift++;
-
-               dp--;
-            }
-            break;
-         }
-
-         case 2:
-         {
-
-            png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);
-            png_bytep dp = row + (png_size_t)row_width - 1;
-            png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
-            for (i = 0; i < row_width; i++)
-            {
-               *dp = (png_byte)((*sp >> shift) & 0x03);
-
-               if (shift == 6)
-               {
-                  shift = 0;
-                  sp--;
-               }
-
-               else
-                  shift += 2;
-
-               dp--;
-            }
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);
-            png_bytep dp = row + (png_size_t)row_width - 1;
-            png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
-            for (i = 0; i < row_width; i++)
-            {
-               *dp = (png_byte)((*sp >> shift) & 0x0f);
-
-               if (shift == 4)
-               {
-                  shift = 0;
-                  sp--;
-               }
-
-               else
-                  shift = 4;
-
-               dp--;
-            }
-            break;
-         }
-
-         default:
-            break;
-      }
-      row_info->bit_depth = 8;
-      row_info->pixel_depth = (png_byte)(8 * row_info->channels);
-      row_info->rowbytes = row_width * row_info->channels;
-   }
-}
-#endif
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-/* Reverse the effects of png_do_shift.  This routine merely shifts the
- * pixels back to their significant bits values.  Thus, if you have
- * a row of bit depth 8, but only 5 are significant, this will shift
- * the values back to 0 through 31.
- */
-void /* PRIVATE */
-png_do_unshift(png_row_infop row_info, png_bytep row,
-    png_const_color_8p sig_bits)
-{
-   int color_type;
-
-   png_debug(1, "in png_do_unshift");
-
-   /* The palette case has already been handled in the _init routine. */
-   color_type = row_info->color_type;
-
-   if (color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      int shift[4];
-      int channels = 0;
-      int bit_depth = row_info->bit_depth;
-
-      if (color_type & PNG_COLOR_MASK_COLOR)
-      {
-         shift[channels++] = bit_depth - sig_bits->red;
-         shift[channels++] = bit_depth - sig_bits->green;
-         shift[channels++] = bit_depth - sig_bits->blue;
-      }
-
-      else
-      {
-         shift[channels++] = bit_depth - sig_bits->gray;
-      }
-
-      if (color_type & PNG_COLOR_MASK_ALPHA)
-      {
-         shift[channels++] = bit_depth - sig_bits->alpha;
-      }
-
-      {
-         int c, have_shift;
-
-         for (c = have_shift = 0; c < channels; ++c)
-         {
-            /* A shift of more than the bit depth is an error condition but it
-             * gets ignored here.
-             */
-            if (shift[c] <= 0 || shift[c] >= bit_depth)
-               shift[c] = 0;
-
-            else
-               have_shift = 1;
-         }
-
-         if (!have_shift)
-            return;
-      }
-
-      switch (bit_depth)
-      {
-         default:
-         /* Must be 1bpp gray: should not be here! */
-            /* NOTREACHED */
-            break;
-
-         case 2:
-         /* Must be 2bpp gray */
-         /* assert(channels == 1 && shift[0] == 1) */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-
-            while (bp < bp_end)
-            {
-               int b = (*bp >> 1) & 0x55;
-               *bp++ = (png_byte)b;
-            }
-            break;
-         }
-
-         case 4:
-         /* Must be 4bpp gray */
-         /* assert(channels == 1) */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-            int gray_shift = shift[0];
-            int mask =  0xf >> gray_shift;
-
-            mask |= mask << 4;
-
-            while (bp < bp_end)
-            {
-               int b = (*bp >> gray_shift) & mask;
-               *bp++ = (png_byte)b;
-            }
-            break;
-         }
-
-         case 8:
-         /* Single byte components, G, GA, RGB, RGBA */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-            int channel = 0;
-
-            while (bp < bp_end)
-            {
-               int b = *bp >> shift[channel];
-               if (++channel >= channels)
-                  channel = 0;
-               *bp++ = (png_byte)b;
-            }
-            break;
-         }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-         case 16:
-         /* Double byte components, G, GA, RGB, RGBA */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-            int channel = 0;
-
-            while (bp < bp_end)
-            {
-               int value = (bp[0] << 8) + bp[1];
-
-               value >>= shift[channel];
-               if (++channel >= channels)
-                  channel = 0;
-               *bp++ = (png_byte)(value >> 8);
-               *bp++ = (png_byte)(value & 0xff);
-            }
-            break;
-         }
-#endif
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-/* Scale rows of bit depth 16 down to 8 accurately */
-void /* PRIVATE */
-png_do_scale_16_to_8(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_scale_16_to_8");
-
-   if (row_info->bit_depth == 16)
-   {
-      png_bytep sp = row; /* source */
-      png_bytep dp = row; /* destination */
-      png_bytep ep = sp + row_info->rowbytes; /* end+1 */
-
-      while (sp < ep)
-      {
-         /* The input is an array of 16 bit components, these must be scaled to
-          * 8 bits each.  For a 16 bit value V the required value (from the PNG
-          * specification) is:
-          *
-          *    (V * 255) / 65535
-          *
-          * This reduces to round(V / 257), or floor((V + 128.5)/257)
-          *
-          * Represent V as the two byte value vhi.vlo.  Make a guess that the
-          * result is the top byte of V, vhi, then the correction to this value
-          * is:
-          *
-          *    error = floor(((V-vhi.vhi) + 128.5) / 257)
-          *          = floor(((vlo-vhi) + 128.5) / 257)
-          *
-          * This can be approximated using integer arithmetic (and a signed
-          * shift):
-          *
-          *    error = (vlo-vhi+128) >> 8;
-          *
-          * The approximate differs from the exact answer only when (vlo-vhi) is
-          * 128; it then gives a correction of +1 when the exact correction is
-          * 0.  This gives 128 errors.  The exact answer (correct for all 16 bit
-          * input values) is:
-          *
-          *    error = (vlo-vhi+128)*65535 >> 24;
-          *
-          * An alternative arithmetic calculation which also gives no errors is:
-          *
-          *    (V * 255 + 32895) >> 16
-          */
-
-         png_int_32 tmp = *sp++; /* must be signed! */
-         tmp += (((int)*sp++ - tmp + 128) * 65535) >> 24;
-         *dp++ = (png_byte)tmp;
-      }
-
-      row_info->bit_depth = 8;
-      row_info->pixel_depth = (png_byte)(8 * row_info->channels);
-      row_info->rowbytes = row_info->width * row_info->channels;
-   }
-}
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-void /* PRIVATE */
-/* Simply discard the low byte.  This was the default behavior prior
- * to libpng-1.5.4.
- */
-png_do_chop(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_chop");
-
-   if (row_info->bit_depth == 16)
-   {
-      png_bytep sp = row; /* source */
-      png_bytep dp = row; /* destination */
-      png_bytep ep = sp + row_info->rowbytes; /* end+1 */
-
-      while (sp < ep)
-      {
-         *dp++ = *sp;
-         sp += 2; /* skip low byte */
-      }
-
-      row_info->bit_depth = 8;
-      row_info->pixel_depth = (png_byte)(8 * row_info->channels);
-      row_info->rowbytes = row_info->width * row_info->channels;
-   }
-}
-#endif
-
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-void /* PRIVATE */
-png_do_read_swap_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_read_swap_alpha");
-
-   {
-      png_uint_32 row_width = row_info->width;
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-      {
-         /* This converts from RGBA to ARGB */
-         if (row_info->bit_depth == 8)
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save;
-            }
-         }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-         /* This converts from RRGGBBAA to AARRGGBB */
-         else
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save[2];
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save[0] = *(--sp);
-               save[1] = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save[0];
-               *(--dp) = save[1];
-            }
-         }
-#endif
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         /* This converts from GA to AG */
-         if (row_info->bit_depth == 8)
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save;
-            }
-         }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-         /* This converts from GGAA to AAGG */
-         else
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save[2];
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save[0] = *(--sp);
-               save[1] = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save[0];
-               *(--dp) = save[1];
-            }
-         }
-#endif
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-void /* PRIVATE */
-png_do_read_invert_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_uint_32 row_width;
-   png_debug(1, "in png_do_read_invert_alpha");
-
-   row_width = row_info->width;
-   if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         /* This inverts the alpha channel in RGBA */
-         png_bytep sp = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-
-/*          This does nothing:
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            We can replace it with:
-*/
-            sp-=3;
-            dp=sp;
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      /* This inverts the alpha channel in RRGGBBAA */
-      else
-      {
-         png_bytep sp = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-            *(--dp) = (png_byte)(255 - *(--sp));
-
-/*          This does nothing:
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            We can replace it with:
-*/
-            sp-=6;
-            dp=sp;
-         }
-      }
-#endif
-   }
-   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         /* This inverts the alpha channel in GA */
-         png_bytep sp = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-            *(--dp) = *(--sp);
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      else
-      {
-         /* This inverts the alpha channel in GGAA */
-         png_bytep sp  = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-            *(--dp) = (png_byte)(255 - *(--sp));
-/*
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-*/
-            sp-=2;
-            dp=sp;
-         }
-      }
-#endif
-   }
-}
-#endif
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-/* Add filler channel if we have RGB color */
-void /* PRIVATE */
-png_do_read_filler(png_row_infop row_info, png_bytep row,
-    png_uint_32 filler, png_uint_32 flags)
-{
-   png_uint_32 i;
-   png_uint_32 row_width = row_info->width;
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-   png_byte hi_filler = (png_byte)((filler>>8) & 0xff);
-#endif
-   png_byte lo_filler = (png_byte)(filler & 0xff);
-
-   png_debug(1, "in png_do_read_filler");
-
-   if (
-       row_info->color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if (flags & PNG_FLAG_FILLER_AFTER)
-         {
-            /* This changes the data from G to GX */
-            png_bytep sp = row + (png_size_t)row_width;
-            png_bytep dp =  sp + (png_size_t)row_width;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = lo_filler;
-            row_info->channels = 2;
-            row_info->pixel_depth = 16;
-            row_info->rowbytes = row_width * 2;
-         }
-
-         else
-         {
-            /* This changes the data from G to XG */
-            png_bytep sp = row + (png_size_t)row_width;
-            png_bytep dp = sp  + (png_size_t)row_width;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = lo_filler;
-            }
-            row_info->channels = 2;
-            row_info->pixel_depth = 16;
-            row_info->rowbytes = row_width * 2;
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         if (flags & PNG_FLAG_FILLER_AFTER)
-         {
-            /* This changes the data from GG to GGXX */
-            png_bytep sp = row + (png_size_t)row_width * 2;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = hi_filler;
-            *(--dp) = lo_filler;
-            row_info->channels = 2;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-
-         else
-         {
-            /* This changes the data from GG to XXGG */
-            png_bytep sp = row + (png_size_t)row_width * 2;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-            }
-            row_info->channels = 2;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-      }
-#endif
-   } /* COLOR_TYPE == GRAY */
-   else if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if (flags & PNG_FLAG_FILLER_AFTER)
-         {
-            /* This changes the data from RGB to RGBX */
-            png_bytep sp = row + (png_size_t)row_width * 3;
-            png_bytep dp = sp  + (png_size_t)row_width;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = lo_filler;
-            row_info->channels = 4;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-
-         else
-         {
-            /* This changes the data from RGB to XRGB */
-            png_bytep sp = row + (png_size_t)row_width * 3;
-            png_bytep dp = sp + (png_size_t)row_width;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = lo_filler;
-            }
-            row_info->channels = 4;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         if (flags & PNG_FLAG_FILLER_AFTER)
-         {
-            /* This changes the data from RRGGBB to RRGGBBXX */
-            png_bytep sp = row + (png_size_t)row_width * 6;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = hi_filler;
-            *(--dp) = lo_filler;
-            row_info->channels = 4;
-            row_info->pixel_depth = 64;
-            row_info->rowbytes = row_width * 8;
-         }
-
-         else
-         {
-            /* This changes the data from RRGGBB to XXRRGGBB */
-            png_bytep sp = row + (png_size_t)row_width * 6;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-            }
-
-            row_info->channels = 4;
-            row_info->pixel_depth = 64;
-            row_info->rowbytes = row_width * 8;
-         }
-      }
-#endif
-   } /* COLOR_TYPE == RGB */
-}
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-/* Expand grayscale files to RGB, with or without alpha */
-void /* PRIVATE */
-png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
-{
-   png_uint_32 i;
-   png_uint_32 row_width = row_info->width;
-
-   png_debug(1, "in png_do_gray_to_rgb");
-
-   if (row_info->bit_depth >= 8 &&
-       !(row_info->color_type & PNG_COLOR_MASK_COLOR))
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This changes G to RGB */
-            png_bytep sp = row + (png_size_t)row_width - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *sp;
-               *(dp--) = *sp;
-               *(dp--) = *(sp--);
-            }
-         }
-
-         else
-         {
-            /* This changes GG to RRGGBB */
-            png_bytep sp = row + (png_size_t)row_width * 2 - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 4;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *(sp--);
-               *(dp--) = *(sp--);
-            }
-         }
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This changes GA to RGBA */
-            png_bytep sp = row + (png_size_t)row_width * 2 - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *(sp--);
-               *(dp--) = *sp;
-               *(dp--) = *sp;
-               *(dp--) = *(sp--);
-            }
-         }
-
-         else
-         {
-            /* This changes GGAA to RRGGBBAA */
-            png_bytep sp = row + (png_size_t)row_width * 4 - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 4;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *(sp--);
-               *(dp--) = *(sp--);
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *(sp--);
-               *(dp--) = *(sp--);
-            }
-         }
-      }
-      row_info->channels = (png_byte)(row_info->channels + 2);
-      row_info->color_type |= PNG_COLOR_MASK_COLOR;
-      row_info->pixel_depth = (png_byte)(row_info->channels *
-          row_info->bit_depth);
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-   }
-}
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-/* Reduce RGB files to grayscale, with or without alpha
- * using the equation given in Poynton's ColorFAQ of 1998-01-04 at
- * <http://www.inforamp.net/~poynton/>  (THIS LINK IS DEAD June 2008 but
- * versions dated 1998 through November 2002 have been archived at
- * http://web.archive.org/web/20000816232553/http://www.inforamp.net/
- * ~poynton/notes/colour_and_gamma/ColorFAQ.txt )
- * Charles Poynton poynton at poynton.com
- *
- *     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
- *
- *  which can be expressed with integers as
- *
- *     Y = (6969 * R + 23434 * G + 2365 * B)/32768
- *
- * Poynton's current link (as of January 2003 through July 2011):
- * <http://www.poynton.com/notes/colour_and_gamma/>
- * has changed the numbers slightly:
- *
- *     Y = 0.2126*R + 0.7152*G + 0.0722*B
- *
- *  which can be expressed with integers as
- *
- *     Y = (6966 * R + 23436 * G + 2366 * B)/32768
- *
- *  Historically, however, libpng uses numbers derived from the ITU-R Rec 709
- *  end point chromaticities and the D65 white point.  Depending on the
- *  precision used for the D65 white point this produces a variety of different
- *  numbers, however if the four decimal place value used in ITU-R Rec 709 is
- *  used (0.3127,0.3290) the Y calculation would be:
- *
- *     Y = (6968 * R + 23435 * G + 2366 * B)/32768
- *
- *  While this is correct the rounding results in an overflow for white, because
- *  the sum of the rounded coefficients is 32769, not 32768.  Consequently
- *  libpng uses, instead, the closest non-overflowing approximation:
- *
- *     Y = (6968 * R + 23434 * G + 2366 * B)/32768
- *
- *  Starting with libpng-1.5.5, if the image being converted has a cHRM chunk
- *  (including an sRGB chunk) then the chromaticities are used to calculate the
- *  coefficients.  See the chunk handling in pngrutil.c for more information.
- *
- *  In all cases the calculation is to be done in a linear colorspace.  If no
- *  gamma information is available to correct the encoding of the original RGB
- *  values this results in an implicit assumption that the original PNG RGB
- *  values were linear.
- *
- *  Other integer coefficents can be used via png_set_rgb_to_gray().  Because
- *  the API takes just red and green coefficients the blue coefficient is
- *  calculated to make the sum 32768.  This will result in different rounding
- *  to that used above.
- */
-int /* PRIVATE */
-png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
-
-{
-   int rgb_error = 0;
-
-   png_debug(1, "in png_do_rgb_to_gray");
-
-   if (!(row_info->color_type & PNG_COLOR_MASK_PALETTE) &&
-       (row_info->color_type & PNG_COLOR_MASK_COLOR))
-   {
-      PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
-      PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
-      PNG_CONST png_uint_32 bc = 32768 - rc - gc;
-      PNG_CONST png_uint_32 row_width = row_info->width;
-      PNG_CONST int have_alpha =
-         (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;
-
-      if (row_info->bit_depth == 8)
-      {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-         /* Notice that gamma to/from 1 are not necessarily inverses (if
-          * there is an overall gamma correction).  Prior to 1.5.5 this code
-          * checked the linearized values for equality; this doesn't match
-          * the documentation, the original values must be checked.
-          */
-         if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte red   = *(sp++);
-               png_byte green = *(sp++);
-               png_byte blue  = *(sp++);
-
-               if (red != green || red != blue)
-               {
-                  red = png_ptr->gamma_to_1[red];
-                  green = png_ptr->gamma_to_1[green];
-                  blue = png_ptr->gamma_to_1[blue];
-
-                  rgb_error |= 1;
-                  *(dp++) = png_ptr->gamma_from_1[
-                      (rc*red + gc*green + bc*blue + 16384)>>15];
-               }
-
-               else
-               {
-                  /* If there is no overall correction the table will not be
-                   * set.
-                   */
-                  if (png_ptr->gamma_table != NULL)
-                     red = png_ptr->gamma_table[red];
-
-                  *(dp++) = red;
-               }
-
-               if (have_alpha)
-                  *(dp++) = *(sp++);
-            }
-         }
-         else
-#endif
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte red   = *(sp++);
-               png_byte green = *(sp++);
-               png_byte blue  = *(sp++);
-
-               if (red != green || red != blue)
-               {
-                  rgb_error |= 1;
-                  /* NOTE: this is the historical approach which simply
-                   * truncates the results.
-                   */
-                  *(dp++) = (png_byte)((rc*red + gc*green + bc*blue)>>15);
-               }
-
-               else
-                  *(dp++) = red;
-
-               if (have_alpha)
-                  *(dp++) = *(sp++);
-            }
-         }
-      }
-
-      else /* RGB bit_depth == 16 */
-      {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-         if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL)
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_uint_16 red, green, blue, w;
-
-               red   = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;
-               green = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;
-               blue  = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;
-
-               if (red == green && red == blue)
-               {
-                  if (png_ptr->gamma_16_table != NULL)
-                     w = png_ptr->gamma_16_table[(red&0xff)
-                         >> png_ptr->gamma_shift][red>>8];
-
-                  else
-                     w = red;
-               }
-
-               else
-               {
-                  png_uint_16 red_1   = png_ptr->gamma_16_to_1[(red&0xff)
-                      >> png_ptr->gamma_shift][red>>8];
-                  png_uint_16 green_1 =
-                      png_ptr->gamma_16_to_1[(green&0xff) >>
-                      png_ptr->gamma_shift][green>>8];
-                  png_uint_16 blue_1  = png_ptr->gamma_16_to_1[(blue&0xff)
-                      >> png_ptr->gamma_shift][blue>>8];
-                  png_uint_16 gray16  = (png_uint_16)((rc*red_1 + gc*green_1
-                      + bc*blue_1 + 16384)>>15);
-                  w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
-                      png_ptr->gamma_shift][gray16 >> 8];
-                  rgb_error |= 1;
-               }
-
-               *(dp++) = (png_byte)((w>>8) & 0xff);
-               *(dp++) = (png_byte)(w & 0xff);
-
-               if (have_alpha)
-               {
-                  *(dp++) = *(sp++);
-                  *(dp++) = *(sp++);
-               }
-            }
-         }
-         else
-#endif
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_uint_16 red, green, blue, gray16;
-
-               red   = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;
-               green = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;
-               blue  = (png_uint_16)(((*(sp))<<8) | *(sp + 1)); sp += 2;
-
-               if (red != green || red != blue)
-                  rgb_error |= 1;
-
-               /* From 1.5.5 in the 16 bit case do the accurate conversion even
-                * in the 'fast' case - this is because this is where the code
-                * ends up when handling linear 16 bit data.
-                */
-               gray16  = (png_uint_16)((rc*red + gc*green + bc*blue + 16384) >>
-                  15);
-               *(dp++) = (png_byte)((gray16>>8) & 0xff);
-               *(dp++) = (png_byte)(gray16 & 0xff);
-
-               if (have_alpha)
-               {
-                  *(dp++) = *(sp++);
-                  *(dp++) = *(sp++);
-               }
-            }
-         }
-      }
-
-      row_info->channels = (png_byte)(row_info->channels - 2);
-      row_info->color_type = (png_byte)(row_info->color_type &
-          ~PNG_COLOR_MASK_COLOR);
-      row_info->pixel_depth = (png_byte)(row_info->channels *
-          row_info->bit_depth);
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-   }
-   return rgb_error;
-}
-#endif
-#endif /* PNG_READ_TRANSFORMS_SUPPORTED */
-
-#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
-/* Build a grayscale palette.  Palette is assumed to be 1 << bit_depth
- * large of png_color.  This lets grayscale images be treated as
- * paletted.  Most useful for gamma correction and simplification
- * of code.  This API is not used internally.
- */
-void PNGAPI
-png_build_grayscale_palette(int bit_depth, png_colorp palette)
-{
-   int num_palette;
-   int color_inc;
-   int i;
-   int v;
-
-   png_debug(1, "in png_do_build_grayscale_palette");
-
-   if (palette == NULL)
-      return;
-
-   switch (bit_depth)
-   {
-      case 1:
-         num_palette = 2;
-         color_inc = 0xff;
-         break;
-
-      case 2:
-         num_palette = 4;
-         color_inc = 0x55;
-         break;
-
-      case 4:
-         num_palette = 16;
-         color_inc = 0x11;
-         break;
-
-      case 8:
-         num_palette = 256;
-         color_inc = 1;
-         break;
-
-      default:
-         num_palette = 0;
-         color_inc = 0;
-         break;
-   }
-
-   for (i = 0, v = 0; i < num_palette; i++, v += color_inc)
-   {
-      palette[i].red = (png_byte)v;
-      palette[i].green = (png_byte)v;
-      palette[i].blue = (png_byte)v;
-   }
-}
-#endif
-
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-/* Replace any alpha or transparency with the supplied background color.
- * "background" is already in the screen gamma, while "background_1" is
- * at a gamma of 1.0.  Paletted files have already been taken care of.
- */
-void /* PRIVATE */
-png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
-{
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   png_const_bytep gamma_table = png_ptr->gamma_table;
-   png_const_bytep gamma_from_1 = png_ptr->gamma_from_1;
-   png_const_bytep gamma_to_1 = png_ptr->gamma_to_1;
-   png_const_uint_16pp gamma_16 = png_ptr->gamma_16_table;
-   png_const_uint_16pp gamma_16_from_1 = png_ptr->gamma_16_from_1;
-   png_const_uint_16pp gamma_16_to_1 = png_ptr->gamma_16_to_1;
-   int gamma_shift = png_ptr->gamma_shift;
-   int optimize = (png_ptr->flags & PNG_FLAG_OPTIMIZE_ALPHA) != 0;
-#endif
-
-   png_bytep sp;
-   png_uint_32 i;
-   png_uint_32 row_width = row_info->width;
-   int shift;
-
-   png_debug(1, "in png_do_compose");
-
-   {
-      switch (row_info->color_type)
-      {
-         case PNG_COLOR_TYPE_GRAY:
-         {
-            switch (row_info->bit_depth)
-            {
-               case 1:
-               {
-                  sp = row;
-                  shift = 7;
-                  for (i = 0; i < row_width; i++)
-                  {
-                     if ((png_uint_16)((*sp >> shift) & 0x01)
-                        == png_ptr->trans_color.gray)
-                     {
-                        unsigned int tmp = *sp & (0x7f7f >> (7 - shift));
-                        tmp |= png_ptr->background.gray << shift;
-                        *sp = (png_byte)(tmp & 0xff);
-                     }
-
-                     if (!shift)
-                     {
-                        shift = 7;
-                        sp++;
-                     }
-
-                     else
-                        shift--;
-                  }
-                  break;
-               }
-
-               case 2:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_table != NULL)
-                  {
-                     sp = row;
-                     shift = 6;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x03)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        else
-                        {
-                           unsigned int p = (*sp >> shift) & 0x03;
-                           unsigned int g = (gamma_table [p | (p << 2) |
-                               (p << 4) | (p << 6)] >> 6) & 0x03;
-                           unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
-                           tmp |= g << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (!shift)
-                        {
-                           shift = 6;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 2;
-                     }
-                  }
-
-                  else
-#endif
-                  {
-                     sp = row;
-                     shift = 6;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x03)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (!shift)
-                        {
-                           shift = 6;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 2;
-                     }
-                  }
-                  break;
-               }
-
-               case 4:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_table != NULL)
-                  {
-                     sp = row;
-                     shift = 4;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x0f)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0xf0f >> (4 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        else
-                        {
-                           unsigned int p = (*sp >> shift) & 0x0f;
-                           unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
-                              0x0f;
-                           unsigned int tmp = *sp & (0xf0f >> (4 - shift));
-                           tmp |= g << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (!shift)
-                        {
-                           shift = 4;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 4;
-                     }
-                  }
-
-                  else
-#endif
-                  {
-                     sp = row;
-                     shift = 4;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x0f)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0xf0f >> (4 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (!shift)
-                        {
-                           shift = 4;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 4;
-                     }
-                  }
-                  break;
-               }
-
-               case 8:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_table != NULL)
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp++)
-                     {
-                        if (*sp == png_ptr->trans_color.gray)
-                           *sp = (png_byte)png_ptr->background.gray;
-
-                        else
-                           *sp = gamma_table[*sp];
-                     }
-                  }
-                  else
-#endif
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp++)
-                     {
-                        if (*sp == png_ptr->trans_color.gray)
-                           *sp = (png_byte)png_ptr->background.gray;
-                     }
-                  }
-                  break;
-               }
-
-               case 16:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_16 != NULL)
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp += 2)
-                     {
-                        png_uint_16 v;
-
-                        v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                        if (v == png_ptr->trans_color.gray)
-                        {
-                           /* Background is already in screen gamma */
-                           *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                           *(sp + 1) = (png_byte)(png_ptr->background.gray
-                                & 0xff);
-                        }
-
-                        else
-                        {
-                           v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                           *sp = (png_byte)((v >> 8) & 0xff);
-                           *(sp + 1) = (png_byte)(v & 0xff);
-                        }
-                     }
-                  }
-                  else
-#endif
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp += 2)
-                     {
-                        png_uint_16 v;
-
-                        v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                        if (v == png_ptr->trans_color.gray)
-                        {
-                           *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                           *(sp + 1) = (png_byte)(png_ptr->background.gray
-                                & 0xff);
-                        }
-                     }
-                  }
-                  break;
-               }
-
-               default:
-                  break;
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_RGB:
-         {
-            if (row_info->bit_depth == 8)
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_table != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 3)
-                  {
-                     if (*sp == png_ptr->trans_color.red &&
-                         *(sp + 1) == png_ptr->trans_color.green &&
-                         *(sp + 2) == png_ptr->trans_color.blue)
-                     {
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-
-                     else
-                     {
-                        *sp = gamma_table[*sp];
-                        *(sp + 1) = gamma_table[*(sp + 1)];
-                        *(sp + 2) = gamma_table[*(sp + 2)];
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 3)
-                  {
-                     if (*sp == png_ptr->trans_color.red &&
-                         *(sp + 1) == png_ptr->trans_color.green &&
-                         *(sp + 2) == png_ptr->trans_color.blue)
-                     {
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-                  }
-               }
-            }
-            else /* if (row_info->bit_depth == 16) */
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_16 != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 6)
-                  {
-                     png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                     png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
-                         + *(sp + 5));
-
-                     if (r == png_ptr->trans_color.red &&
-                         g == png_ptr->trans_color.green &&
-                         b == png_ptr->trans_color.blue)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-
-                     else
-                     {
-                        png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];
-                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
-                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(v & 0xff);
-                     }
-                  }
-               }
-
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 6)
-                  {
-                     png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                     png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
-                         + *(sp + 5));
-
-                     if (r == png_ptr->trans_color.red &&
-                         g == png_ptr->trans_color.green &&
-                         b == png_ptr->trans_color.blue)
-                     {
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-                  }
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_GRAY_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
-                   gamma_table != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 2)
-                  {
-                     png_uint_16 a = *(sp + 1);
-
-                     if (a == 0xff)
-                        *sp = gamma_table[*sp];
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)png_ptr->background.gray;
-                     }
-
-                     else
-                     {
-                        png_byte v, w;
-
-                        v = gamma_to_1[*sp];
-                        png_composite(w, v, a, png_ptr->background_1.gray);
-                        if (!optimize)
-                           w = gamma_from_1[w];
-                        *sp = w;
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 2)
-                  {
-                     png_byte a = *(sp + 1);
-
-                     if (a == 0)
-                        *sp = (png_byte)png_ptr->background.gray;
-
-                     else if (a < 0xff)
-                        png_composite(*sp, *sp, a, png_ptr->background.gray);
-                  }
-               }
-            }
-            else /* if (png_ptr->bit_depth == 16) */
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
-                   gamma_16_to_1 != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     if (a == (png_uint_16)0xffff)
-                     {
-                        png_uint_16 v;
-
-                        v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-                     }
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
-                     }
-
-                     else
-                     {
-                        png_uint_16 g, v, w;
-
-                        g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
-                        png_composite_16(v, g, a, png_ptr->background_1.gray);
-                        if (optimize)
-                           w = v;
-                        else
-                           w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8];
-                        *sp = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(w & 0xff);
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     if (a == 0)
-                     {
-                        *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
-                     }
-
-                     else if (a < 0xffff)
-                     {
-                        png_uint_16 g, v;
-
-                        g = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-                        png_composite_16(v, g, a, png_ptr->background.gray);
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-                     }
-                  }
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_RGB_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
-                   gamma_table != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_byte a = *(sp + 3);
-
-                     if (a == 0xff)
-                     {
-                        *sp = gamma_table[*sp];
-                        *(sp + 1) = gamma_table[*(sp + 1)];
-                        *(sp + 2) = gamma_table[*(sp + 2)];
-                     }
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-
-                     else
-                     {
-                        png_byte v, w;
-
-                        v = gamma_to_1[*sp];
-                        png_composite(w, v, a, png_ptr->background_1.red);
-                        if (!optimize) w = gamma_from_1[w];
-                        *sp = w;
-
-                        v = gamma_to_1[*(sp + 1)];
-                        png_composite(w, v, a, png_ptr->background_1.green);
-                        if (!optimize) w = gamma_from_1[w];
-                        *(sp + 1) = w;
-
-                        v = gamma_to_1[*(sp + 2)];
-                        png_composite(w, v, a, png_ptr->background_1.blue);
-                        if (!optimize) w = gamma_from_1[w];
-                        *(sp + 2) = w;
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_byte a = *(sp + 3);
-
-                     if (a == 0)
-                     {
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-
-                     else if (a < 0xff)
-                     {
-                        png_composite(*sp, *sp, a, png_ptr->background.red);
-
-                        png_composite(*(sp + 1), *(sp + 1), a,
-                            png_ptr->background.green);
-
-                        png_composite(*(sp + 2), *(sp + 2), a,
-                            png_ptr->background.blue);
-                     }
-                  }
-               }
-            }
-            else /* if (row_info->bit_depth == 16) */
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
-                   gamma_16_to_1 != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 8)
-                  {
-                     png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
-                         << 8) + (png_uint_16)(*(sp + 7)));
-
-                     if (a == (png_uint_16)0xffff)
-                     {
-                        png_uint_16 v;
-
-                        v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];
-                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
-                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(v & 0xff);
-                     }
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-
-                     else
-                     {
-                        png_uint_16 v, w;
-
-                        v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
-                        png_composite_16(w, v, a, png_ptr->background_1.red);
-                        if (!optimize)
-                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >>
-                                8];
-                        *sp = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(w & 0xff);
-
-                        v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)];
-                        png_composite_16(w, v, a, png_ptr->background_1.green);
-                        if (!optimize)
-                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >>
-                                8];
-
-                        *(sp + 2) = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(w & 0xff);
-
-                        v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)];
-                        png_composite_16(w, v, a, png_ptr->background_1.blue);
-                        if (!optimize)
-                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >>
-                                8];
-
-                        *(sp + 4) = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(w & 0xff);
-                     }
-                  }
-               }
-
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 8)
-                  {
-                     png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
-                         << 8) + (png_uint_16)(*(sp + 7)));
-
-                     if (a == 0)
-                     {
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-
-                     else if (a < 0xffff)
-                     {
-                        png_uint_16 v;
-
-                        png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-                        png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
-                            + *(sp + 3));
-                        png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
-                            + *(sp + 5));
-
-                        png_composite_16(v, r, a, png_ptr->background.red);
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-
-                        png_composite_16(v, g, a, png_ptr->background.green);
-                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(v & 0xff);
-
-                        png_composite_16(v, b, a, png_ptr->background.blue);
-                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(v & 0xff);
-                     }
-                  }
-               }
-            }
-            break;
-         }
-
-         default:
-            break;
-      }
-   }
-}
-#endif /* PNG_READ_BACKGROUND_SUPPORTED || PNG_READ_ALPHA_MODE_SUPPORTED */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* Gamma correct the image, avoiding the alpha channel.  Make sure
- * you do this after you deal with the transparency issue on grayscale
- * or RGB images. If your bit depth is 8, use gamma_table, if it
- * is 16, use gamma_16_table and gamma_shift.  Build these with
- * build_gamma_table().
- */
-void /* PRIVATE */
-png_do_gamma(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
-{
-   png_const_bytep gamma_table = png_ptr->gamma_table;
-   png_const_uint_16pp gamma_16_table = png_ptr->gamma_16_table;
-   int gamma_shift = png_ptr->gamma_shift;
-
-   png_bytep sp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_gamma");
-
-   if (((row_info->bit_depth <= 8 && gamma_table != NULL) ||
-       (row_info->bit_depth == 16 && gamma_16_table != NULL)))
-   {
-      switch (row_info->color_type)
-      {
-         case PNG_COLOR_TYPE_RGB:
-         {
-            if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp++;
-                  *sp = gamma_table[*sp];
-                  sp++;
-                  *sp = gamma_table[*sp];
-                  sp++;
-               }
-            }
-
-            else /* if (row_info->bit_depth == 16) */
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_RGB_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp++;
-
-                  *sp = gamma_table[*sp];
-                  sp++;
-
-                  *sp = gamma_table[*sp];
-                  sp++;
-
-                  sp++;
-               }
-            }
-
-            else /* if (row_info->bit_depth == 16) */
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 4;
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_GRAY_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp += 2;
-               }
-            }
-
-            else /* if (row_info->bit_depth == 16) */
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 4;
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_GRAY:
-         {
-            if (row_info->bit_depth == 2)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i += 4)
-               {
-                  int a = *sp & 0xc0;
-                  int b = *sp & 0x30;
-                  int c = *sp & 0x0c;
-                  int d = *sp & 0x03;
-
-                  *sp = (png_byte)(
-                      ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)])   ) & 0xc0)|
-                      ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) & 0x30)|
-                      ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) & 0x0c)|
-                      ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) ));
-                  sp++;
-               }
-            }
-
-            if (row_info->bit_depth == 4)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i += 2)
-               {
-                  int msb = *sp & 0xf0;
-                  int lsb = *sp & 0x0f;
-
-                  *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0)
-                      | (((int)gamma_table[(lsb << 4) | lsb]) >> 4));
-                  sp++;
-               }
-            }
-
-            else if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp++;
-               }
-            }
-
-            else if (row_info->bit_depth == 16)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-               }
-            }
-            break;
-         }
-
-         default:
-            break;
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-/* Encode the alpha channel to the output gamma (the input channel is always
- * linear.)  Called only with color types that have an alpha channel.  Needs the
- * from_1 tables.
- */
-void /* PRIVATE */
-png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
-{
-   png_uint_32 row_width = row_info->width;
-
-   png_debug(1, "in png_do_encode_alpha");
-
-   if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         PNG_CONST png_bytep table = png_ptr->gamma_from_1;
-
-         if (table != NULL)
-         {
-            PNG_CONST int step =
-               (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;
-
-            /* The alpha channel is the last component: */
-            row += step - 1;
-
-            for (; row_width > 0; --row_width, row += step)
-               *row = table[*row];
-
-            return;
-         }
-      }
-
-      else if (row_info->bit_depth == 16)
-      {
-         PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
-         PNG_CONST int gamma_shift = png_ptr->gamma_shift;
-
-         if (table != NULL)
-         {
-            PNG_CONST int step =
-               (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;
-
-            /* The alpha channel is the last component: */
-            row += step - 2;
-
-            for (; row_width > 0; --row_width, row += step)
-            {
-               png_uint_16 v;
-
-               v = table[*(row + 1) >> gamma_shift][*row];
-               *row = (png_byte)((v >> 8) & 0xff);
-               *(row + 1) = (png_byte)(v & 0xff);
-            }
-
-            return;
-         }
-      }
-   }
-
-   /* Only get to here if called with a weird row_info; no harm has been done,
-    * so just issue a warning.
-    */
-   png_warning(png_ptr, "png_do_encode_alpha: unexpected call");
-}
-#endif
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-/* Expands a palette row to an RGB or RGBA row depending
- * upon whether you supply trans and num_trans.
- */
-void /* PRIVATE */
-png_do_expand_palette(png_row_infop row_info, png_bytep row,
-   png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)
-{
-   int shift, value;
-   png_bytep sp, dp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_expand_palette");
-
-   if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (row_info->bit_depth < 8)
-      {
-         switch (row_info->bit_depth)
-         {
-            case 1:
-            {
-               sp = row + (png_size_t)((row_width - 1) >> 3);
-               dp = row + (png_size_t)row_width - 1;
-               shift = 7 - (int)((row_width + 7) & 0x07);
-               for (i = 0; i < row_width; i++)
-               {
-                  if ((*sp >> shift) & 0x01)
-                     *dp = 1;
-
-                  else
-                     *dp = 0;
-
-                  if (shift == 7)
-                  {
-                     shift = 0;
-                     sp--;
-                  }
-
-                  else
-                     shift++;
-
-                  dp--;
-               }
-               break;
-            }
-
-            case 2:
-            {
-               sp = row + (png_size_t)((row_width - 1) >> 2);
-               dp = row + (png_size_t)row_width - 1;
-               shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
-               for (i = 0; i < row_width; i++)
-               {
-                  value = (*sp >> shift) & 0x03;
-                  *dp = (png_byte)value;
-                  if (shift == 6)
-                  {
-                     shift = 0;
-                     sp--;
-                  }
-
-                  else
-                     shift += 2;
-
-                  dp--;
-               }
-               break;
-            }
-
-            case 4:
-            {
-               sp = row + (png_size_t)((row_width - 1) >> 1);
-               dp = row + (png_size_t)row_width - 1;
-               shift = (int)((row_width & 0x01) << 2);
-               for (i = 0; i < row_width; i++)
-               {
-                  value = (*sp >> shift) & 0x0f;
-                  *dp = (png_byte)value;
-                  if (shift == 4)
-                  {
-                     shift = 0;
-                     sp--;
-                  }
-
-                  else
-                     shift += 4;
-
-                  dp--;
-               }
-               break;
-            }
-
-            default:
-               break;
-         }
-         row_info->bit_depth = 8;
-         row_info->pixel_depth = 8;
-         row_info->rowbytes = row_width;
-      }
-
-      if (row_info->bit_depth == 8)
-      {
-         {
-            if (num_trans > 0)
-            {
-               sp = row + (png_size_t)row_width - 1;
-               dp = row + (png_size_t)(row_width << 2) - 1;
-
-               for (i = 0; i < row_width; i++)
-               {
-                  if ((int)(*sp) >= num_trans)
-                     *dp-- = 0xff;
-
-                  else
-                     *dp-- = trans_alpha[*sp];
-
-                  *dp-- = palette[*sp].blue;
-                  *dp-- = palette[*sp].green;
-                  *dp-- = palette[*sp].red;
-                  sp--;
-               }
-               row_info->bit_depth = 8;
-               row_info->pixel_depth = 32;
-               row_info->rowbytes = row_width * 4;
-               row_info->color_type = 6;
-               row_info->channels = 4;
-            }
-
-            else
-            {
-               sp = row + (png_size_t)row_width - 1;
-               dp = row + (png_size_t)(row_width * 3) - 1;
-
-               for (i = 0; i < row_width; i++)
-               {
-                  *dp-- = palette[*sp].blue;
-                  *dp-- = palette[*sp].green;
-                  *dp-- = palette[*sp].red;
-                  sp--;
-               }
-
-               row_info->bit_depth = 8;
-               row_info->pixel_depth = 24;
-               row_info->rowbytes = row_width * 3;
-               row_info->color_type = 2;
-               row_info->channels = 3;
-            }
-         }
-      }
-   }
-}
-
-/* If the bit depth < 8, it is expanded to 8.  Also, if the already
- * expanded transparency value is supplied, an alpha channel is built.
- */
-void /* PRIVATE */
-png_do_expand(png_row_infop row_info, png_bytep row,
-    png_const_color_16p trans_color)
-{
-   int shift, value;
-   png_bytep sp, dp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_expand");
-
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         unsigned int gray = trans_color ? trans_color->gray : 0;
-
-         if (row_info->bit_depth < 8)
-         {
-            switch (row_info->bit_depth)
-            {
-               case 1:
-               {
-                  gray = (gray & 0x01) * 0xff;
-                  sp = row + (png_size_t)((row_width - 1) >> 3);
-                  dp = row + (png_size_t)row_width - 1;
-                  shift = 7 - (int)((row_width + 7) & 0x07);
-                  for (i = 0; i < row_width; i++)
-                  {
-                     if ((*sp >> shift) & 0x01)
-                        *dp = 0xff;
-
-                     else
-                        *dp = 0;
-
-                     if (shift == 7)
-                     {
-                        shift = 0;
-                        sp--;
-                     }
-
-                     else
-                        shift++;
-
-                     dp--;
-                  }
-                  break;
-               }
-
-               case 2:
-               {
-                  gray = (gray & 0x03) * 0x55;
-                  sp = row + (png_size_t)((row_width - 1) >> 2);
-                  dp = row + (png_size_t)row_width - 1;
-                  shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
-                  for (i = 0; i < row_width; i++)
-                  {
-                     value = (*sp >> shift) & 0x03;
-                     *dp = (png_byte)(value | (value << 2) | (value << 4) |
-                        (value << 6));
-                     if (shift == 6)
-                     {
-                        shift = 0;
-                        sp--;
-                     }
-
-                     else
-                        shift += 2;
-
-                     dp--;
-                  }
-                  break;
-               }
-
-               case 4:
-               {
-                  gray = (gray & 0x0f) * 0x11;
-                  sp = row + (png_size_t)((row_width - 1) >> 1);
-                  dp = row + (png_size_t)row_width - 1;
-                  shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
-                  for (i = 0; i < row_width; i++)
-                  {
-                     value = (*sp >> shift) & 0x0f;
-                     *dp = (png_byte)(value | (value << 4));
-                     if (shift == 4)
-                     {
-                        shift = 0;
-                        sp--;
-                     }
-
-                     else
-                        shift = 4;
-
-                     dp--;
-                  }
-                  break;
-               }
-
-               default:
-                  break;
-            }
-
-            row_info->bit_depth = 8;
-            row_info->pixel_depth = 8;
-            row_info->rowbytes = row_width;
-         }
-
-         if (trans_color != NULL)
-         {
-            if (row_info->bit_depth == 8)
-            {
-               gray = gray & 0xff;
-               sp = row + (png_size_t)row_width - 1;
-               dp = row + (png_size_t)(row_width << 1) - 1;
-
-               for (i = 0; i < row_width; i++)
-               {
-                  if (*sp == gray)
-                     *dp-- = 0;
-
-                  else
-                     *dp-- = 0xff;
-
-                  *dp-- = *sp--;
-               }
-            }
-
-            else if (row_info->bit_depth == 16)
-            {
-               unsigned int gray_high = (gray >> 8) & 0xff;
-               unsigned int gray_low = gray & 0xff;
-               sp = row + row_info->rowbytes - 1;
-               dp = row + (row_info->rowbytes << 1) - 1;
-               for (i = 0; i < row_width; i++)
-               {
-                  if (*(sp - 1) == gray_high && *(sp) == gray_low)
-                  {
-                     *dp-- = 0;
-                     *dp-- = 0;
-                  }
-
-                  else
-                  {
-                     *dp-- = 0xff;
-                     *dp-- = 0xff;
-                  }
-
-                  *dp-- = *sp--;
-                  *dp-- = *sp--;
-               }
-            }
-
-            row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
-            row_info->channels = 2;
-            row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);
-            row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
-               row_width);
-         }
-      }
-      else if (row_info->color_type == PNG_COLOR_TYPE_RGB && trans_color)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            png_byte red = (png_byte)(trans_color->red & 0xff);
-            png_byte green = (png_byte)(trans_color->green & 0xff);
-            png_byte blue = (png_byte)(trans_color->blue & 0xff);
-            sp = row + (png_size_t)row_info->rowbytes - 1;
-            dp = row + (png_size_t)(row_width << 2) - 1;
-            for (i = 0; i < row_width; i++)
-            {
-               if (*(sp - 2) == red && *(sp - 1) == green && *(sp) == blue)
-                  *dp-- = 0;
-
-               else
-                  *dp-- = 0xff;
-
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-            }
-         }
-         else if (row_info->bit_depth == 16)
-         {
-            png_byte red_high = (png_byte)((trans_color->red >> 8) & 0xff);
-            png_byte green_high = (png_byte)((trans_color->green >> 8) & 0xff);
-            png_byte blue_high = (png_byte)((trans_color->blue >> 8) & 0xff);
-            png_byte red_low = (png_byte)(trans_color->red & 0xff);
-            png_byte green_low = (png_byte)(trans_color->green & 0xff);
-            png_byte blue_low = (png_byte)(trans_color->blue & 0xff);
-            sp = row + row_info->rowbytes - 1;
-            dp = row + (png_size_t)(row_width << 3) - 1;
-            for (i = 0; i < row_width; i++)
-            {
-               if (*(sp - 5) == red_high &&
-                   *(sp - 4) == red_low &&
-                   *(sp - 3) == green_high &&
-                   *(sp - 2) == green_low &&
-                   *(sp - 1) == blue_high &&
-                   *(sp    ) == blue_low)
-               {
-                  *dp-- = 0;
-                  *dp-- = 0;
-               }
-
-               else
-               {
-                  *dp-- = 0xff;
-                  *dp-- = 0xff;
-               }
-
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-            }
-         }
-         row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-         row_info->channels = 4;
-         row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2);
-         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-/* If the bit depth is 8 and the color type is not a palette type expand the
- * whole row to 16 bits.  Has no effect otherwise.
- */
-void /* PRIVATE */
-png_do_expand_16(png_row_infop row_info, png_bytep row)
-{
-   if (row_info->bit_depth == 8 &&
-      row_info->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      /* The row have a sequence of bytes containing [0..255] and we need
-       * to turn it into another row containing [0..65535], to do this we
-       * calculate:
-       *
-       *  (input / 255) * 65535
-       *
-       *  Which happens to be exactly input * 257 and this can be achieved
-       *  simply by byte replication in place (copying backwards).
-       */
-      png_byte *sp = row + row_info->rowbytes; /* source, last byte + 1 */
-      png_byte *dp = sp + row_info->rowbytes;  /* destination, end + 1 */
-      while (dp > sp)
-         dp[-2] = dp[-1] = *--sp, dp -= 2;
-
-      row_info->rowbytes *= 2;
-      row_info->bit_depth = 16;
-      row_info->pixel_depth = (png_byte)(row_info->channels * 16);
-   }
-}
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-void /* PRIVATE */
-png_do_quantize(png_row_infop row_info, png_bytep row,
-    png_const_bytep palette_lookup, png_const_bytep quantize_lookup)
-{
-   png_bytep sp, dp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_quantize");
-
-   if (row_info->bit_depth == 8)
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB && palette_lookup)
-      {
-         int r, g, b, p;
-         sp = row;
-         dp = row;
-         for (i = 0; i < row_width; i++)
-         {
-            r = *sp++;
-            g = *sp++;
-            b = *sp++;
-
-            /* This looks real messy, but the compiler will reduce
-             * it down to a reasonable formula.  For example, with
-             * 5 bits per color, we get:
-             * p = (((r >> 3) & 0x1f) << 10) |
-             *    (((g >> 3) & 0x1f) << 5) |
-             *    ((b >> 3) & 0x1f);
-             */
-            p = (((r >> (8 - PNG_QUANTIZE_RED_BITS)) &
-                ((1 << PNG_QUANTIZE_RED_BITS) - 1)) <<
-                (PNG_QUANTIZE_GREEN_BITS + PNG_QUANTIZE_BLUE_BITS)) |
-                (((g >> (8 - PNG_QUANTIZE_GREEN_BITS)) &
-                ((1 << PNG_QUANTIZE_GREEN_BITS) - 1)) <<
-                (PNG_QUANTIZE_BLUE_BITS)) |
-                ((b >> (8 - PNG_QUANTIZE_BLUE_BITS)) &
-                ((1 << PNG_QUANTIZE_BLUE_BITS) - 1));
-
-            *dp++ = palette_lookup[p];
-         }
-
-         row_info->color_type = PNG_COLOR_TYPE_PALETTE;
-         row_info->channels = 1;
-         row_info->pixel_depth = row_info->bit_depth;
-         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
-         palette_lookup != NULL)
-      {
-         int r, g, b, p;
-         sp = row;
-         dp = row;
-         for (i = 0; i < row_width; i++)
-         {
-            r = *sp++;
-            g = *sp++;
-            b = *sp++;
-            sp++;
-
-            p = (((r >> (8 - PNG_QUANTIZE_RED_BITS)) &
-                ((1 << PNG_QUANTIZE_RED_BITS) - 1)) <<
-                (PNG_QUANTIZE_GREEN_BITS + PNG_QUANTIZE_BLUE_BITS)) |
-                (((g >> (8 - PNG_QUANTIZE_GREEN_BITS)) &
-                ((1 << PNG_QUANTIZE_GREEN_BITS) - 1)) <<
-                (PNG_QUANTIZE_BLUE_BITS)) |
-                ((b >> (8 - PNG_QUANTIZE_BLUE_BITS)) &
-                ((1 << PNG_QUANTIZE_BLUE_BITS) - 1));
-
-            *dp++ = palette_lookup[p];
-         }
-
-         row_info->color_type = PNG_COLOR_TYPE_PALETTE;
-         row_info->channels = 1;
-         row_info->pixel_depth = row_info->bit_depth;
-         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&
-         quantize_lookup)
-      {
-         sp = row;
-
-         for (i = 0; i < row_width; i++, sp++)
-         {
-            *sp = quantize_lookup[*sp];
-         }
-      }
-   }
-}
-#endif /* PNG_READ_QUANTIZE_SUPPORTED */
-#endif /* PNG_READ_TRANSFORMS_SUPPORTED */
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-/* Undoes intrapixel differencing  */
-void /* PRIVATE */
-png_do_read_intrapixel(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_read_intrapixel");
-
-   if (
-       (row_info->color_type & PNG_COLOR_MASK_COLOR))
-   {
-      int bytes_per_pixel;
-      png_uint_32 row_width = row_info->width;
-
-      if (row_info->bit_depth == 8)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 3;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 4;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            *(rp) = (png_byte)((256 + *rp + *(rp + 1)) & 0xff);
-            *(rp+2) = (png_byte)((256 + *(rp + 2) + *(rp + 1)) & 0xff);
-         }
-      }
-      else if (row_info->bit_depth == 16)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 6;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 8;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            png_uint_32 s0   = (*(rp    ) << 8) | *(rp + 1);
-            png_uint_32 s1   = (*(rp + 2) << 8) | *(rp + 3);
-            png_uint_32 s2   = (*(rp + 4) << 8) | *(rp + 5);
-            png_uint_32 red  = (s0 + s1 + 65536) & 0xffff;
-            png_uint_32 blue = (s2 + s1 + 65536) & 0xffff;
-            *(rp    ) = (png_byte)((red >> 8) & 0xff);
-            *(rp + 1) = (png_byte)(red & 0xff);
-            *(rp + 4) = (png_byte)((blue >> 8) & 0xff);
-            *(rp + 5) = (png_byte)(blue & 0xff);
-         }
-      }
-   }
-}
-#endif /* PNG_MNG_FEATURES_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngrutil.c b/modules/juce_graphics/image_formats/pnglib/pngrutil.c
deleted file mode 100644
index b998fe6..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngrutil.c
+++ /dev/null
@@ -1,4459 +0,0 @@
-
-/* pngrutil.c - utilities to read a PNG file
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file contains routines that are only called from within
- * libpng itself during the course of reading an image.
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_READ_SUPPORTED
-
-#define png_strtod(p,a,b) strtod(a,b)
-
-png_uint_32 PNGAPI
-png_get_uint_31(png_const_structrp png_ptr, png_const_bytep buf)
-{
-   png_uint_32 uval = png_get_uint_32(buf);
-
-   if (uval > PNG_UINT_31_MAX)
-      png_error(png_ptr, "PNG unsigned integer out of range");
-
-   return (uval);
-}
-
-#if defined(PNG_READ_gAMA_SUPPORTED) || defined(PNG_READ_cHRM_SUPPORTED)
-/* The following is a variation on the above for use with the fixed
- * point values used for gAMA and cHRM.  Instead of png_error it
- * issues a warning and returns (-1) - an invalid value because both
- * gAMA and cHRM use *unsigned* integers for fixed point values.
- */
-#define PNG_FIXED_ERROR (-1)
-
-static png_fixed_point /* PRIVATE */
-png_get_fixed_point(png_structrp png_ptr, png_const_bytep buf)
-{
-   png_uint_32 uval = png_get_uint_32(buf);
-
-   if (uval <= PNG_UINT_31_MAX)
-      return (png_fixed_point)uval; /* known to be in range */
-
-   /* The caller can turn off the warning by passing NULL. */
-   if (png_ptr != NULL)
-      png_warning(png_ptr, "PNG fixed point integer out of range");
-
-   return PNG_FIXED_ERROR;
-}
-#endif
-
-#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
-/* NOTE: the read macros will obscure these definitions, so that if
- * PNG_USE_READ_MACROS is set the library will not use them internally,
- * but the APIs will still be available externally.
- *
- * The parentheses around "PNGAPI function_name" in the following three
- * functions are necessary because they allow the macros to co-exist with
- * these (unused but exported) functions.
- */
-
-/* Grab an unsigned 32-bit integer from a buffer in big-endian format. */
-png_uint_32 (PNGAPI
-png_get_uint_32)(png_const_bytep buf)
-{
-   png_uint_32 uval =
-       ((png_uint_32)(*(buf    )) << 24) +
-       ((png_uint_32)(*(buf + 1)) << 16) +
-       ((png_uint_32)(*(buf + 2)) <<  8) +
-       ((png_uint_32)(*(buf + 3))      ) ;
-
-   return uval;
-}
-
-/* Grab a signed 32-bit integer from a buffer in big-endian format.  The
- * data is stored in the PNG file in two's complement format and there
- * is no guarantee that a 'png_int_32' is exactly 32 bits, therefore
- * the following code does a two's complement to native conversion.
- */
-png_int_32 (PNGAPI
-png_get_int_32)(png_const_bytep buf)
-{
-   png_uint_32 uval = png_get_uint_32(buf);
-   if ((uval & 0x80000000) == 0) /* non-negative */
-      return uval;
-
-   uval = (uval ^ 0xffffffff) + 1;  /* 2's complement: -x = ~x+1 */
-   return -(png_int_32)uval;
-}
-
-/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */
-png_uint_16 (PNGAPI
-png_get_uint_16)(png_const_bytep buf)
-{
-   /* ANSI-C requires an int value to accomodate at least 16 bits so this
-    * works and allows the compiler not to worry about possible narrowing
-    * on 32 bit systems.  (Pre-ANSI systems did not make integers smaller
-    * than 16 bits either.)
-    */
-   unsigned int val =
-       ((unsigned int)(*buf) << 8) +
-       ((unsigned int)(*(buf + 1)));
-
-   return (png_uint_16)val;
-}
-
-#endif /* PNG_READ_INT_FUNCTIONS_SUPPORTED */
-
-/* Read and check the PNG file signature */
-void /* PRIVATE */
-png_read_sig(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_size_t num_checked, num_to_check;
-
-   /* Exit if the user application does not expect a signature. */
-   if (png_ptr->sig_bytes >= 8)
-      return;
-
-   num_checked = png_ptr->sig_bytes;
-   num_to_check = 8 - num_checked;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_SIGNATURE;
-#endif
-
-   /* The signature must be serialized in a single I/O call. */
-   png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check);
-   png_ptr->sig_bytes = 8;
-
-   if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
-   {
-      if (num_checked < 4 &&
-          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
-         png_error(png_ptr, "Not a PNG file");
-      else
-         png_error(png_ptr, "PNG file corrupted by ASCII conversion");
-   }
-   if (num_checked < 3)
-      png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
-}
-
-/* Read the chunk header (length + type name).
- * Put the type name into png_ptr->chunk_name, and return the length.
- */
-png_uint_32 /* PRIVATE */
-png_read_chunk_header(png_structrp png_ptr)
-{
-   png_byte buf[8];
-   png_uint_32 length;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_CHUNK_HDR;
-#endif
-
-   /* Read the length and the chunk name.
-    * This must be performed in a single I/O call.
-    */
-   png_read_data(png_ptr, buf, 8);
-   length = png_get_uint_31(png_ptr, buf);
-
-   /* Put the chunk name into png_ptr->chunk_name. */
-   png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(buf+4);
-
-   png_debug2(0, "Reading %lx chunk, length = %lu",
-       (unsigned long)png_ptr->chunk_name, (unsigned long)length);
-
-   /* Reset the crc and run it over the chunk name. */
-   png_reset_crc(png_ptr);
-   png_calculate_crc(png_ptr, buf + 4, 4);
-
-   /* Check to see if chunk name is valid. */
-   png_check_chunk_name(png_ptr, png_ptr->chunk_name);
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_CHUNK_DATA;
-#endif
-
-   return length;
-}
-
-/* Read data, and (optionally) run it through the CRC. */
-void /* PRIVATE */
-png_crc_read(png_structrp png_ptr, png_bytep buf, png_uint_32 length)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_read_data(png_ptr, buf, length);
-   png_calculate_crc(png_ptr, buf, length);
-}
-
-/* Optionally skip data and then check the CRC.  Depending on whether we
- * are reading an ancillary or critical chunk, and how the program has set
- * things up, we may calculate the CRC on the data and print a message.
- * Returns '1' if there was a CRC error, '0' otherwise.
- */
-int /* PRIVATE */
-png_crc_finish(png_structrp png_ptr, png_uint_32 skip)
-{
-   /* The size of the local buffer for inflate is a good guess as to a
-    * reasonable size to use for buffering reads from the application.
-    */
-   while (skip > 0)
-   {
-      png_uint_32 len;
-      png_byte tmpbuf[PNG_INFLATE_BUF_SIZE];
-
-      len = (sizeof tmpbuf);
-      if (len > skip)
-         len = skip;
-      skip -= len;
-
-      png_crc_read(png_ptr, tmpbuf, len);
-   }
-
-   if (png_crc_error(png_ptr))
-   {
-      if (PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name) ?
-          !(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) :
-          (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE))
-      {
-         png_chunk_warning(png_ptr, "CRC error");
-      }
-
-      else
-      {
-         png_chunk_benign_error(png_ptr, "CRC error");
-         return (0);
-      }
-
-      return (1);
-   }
-
-   return (0);
-}
-
-/* Compare the CRC stored in the PNG file with that calculated by libpng from
- * the data it has read thus far.
- */
-int /* PRIVATE */
-png_crc_error(png_structrp png_ptr)
-{
-   png_byte crc_bytes[4];
-   png_uint_32 crc;
-   int need_crc = 1;
-
-   if (PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name))
-   {
-      if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
-          (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
-         need_crc = 0;
-   }
-
-   else /* critical */
-   {
-      if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
-         need_crc = 0;
-   }
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_CHUNK_CRC;
-#endif
-
-   /* The chunk CRC must be serialized in a single I/O call. */
-   png_read_data(png_ptr, crc_bytes, 4);
-
-   if (need_crc)
-   {
-      crc = png_get_uint_32(crc_bytes);
-      return ((int)(crc != png_ptr->crc));
-   }
-
-   else
-      return (0);
-}
-
-/* Manage the read buffer; this simply reallocates the buffer if it is not small
- * enough (or if it is not allocated).  The routine returns a pointer to the
- * buffer; if an error occurs and 'warn' is set the routine returns NULL, else
- * it will call png_error (via png_malloc) on failure.  (warn == 2 means
- * 'silent').
- */
-static png_bytep
-png_read_buffer(png_structrp png_ptr, png_alloc_size_t new_size, int warn)
-{
-   png_bytep buffer = png_ptr->read_buffer;
-
-   if (buffer != NULL && new_size > png_ptr->read_buffer_size)
-   {
-      png_ptr->read_buffer = NULL;
-      png_ptr->read_buffer = NULL;
-      png_ptr->read_buffer_size = 0;
-      png_free(png_ptr, buffer);
-      buffer = NULL;
-   }
-
-   if (buffer == NULL)
-   {
-      buffer = png_voidcast(png_bytep, png_malloc_base(png_ptr, new_size));
-
-      if (buffer != NULL)
-      {
-         png_ptr->read_buffer = buffer;
-         png_ptr->read_buffer_size = new_size;
-      }
-
-      else if (warn < 2) /* else silent */
-      {
-#ifdef PNG_WARNINGS_SUPPORTED
-         if (warn)
-             png_chunk_warning(png_ptr, "insufficient memory to read chunk");
-         else
-#endif
-         {
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-             png_chunk_error(png_ptr, "insufficient memory to read chunk");
-#endif
-         }
-      }
-   }
-
-   return buffer;
-}
-
-/* png_inflate_claim: claim the zstream for some nefarious purpose that involves
- * decompression.  Returns Z_OK on success, else a zlib error code.  It checks
- * the owner but, in final release builds, just issues a warning if some other
- * chunk apparently owns the stream.  Prior to release it does a png_error.
- */
-static int
-png_inflate_claim(png_structrp png_ptr, png_uint_32 owner, int window_bits)
-{
-   if (png_ptr->zowner != 0)
-   {
-      char msg[64];
-
-      PNG_STRING_FROM_CHUNK(msg, png_ptr->zowner);
-      /* So the message that results is "<chunk> using zstream"; this is an
-       * internal error, but is very useful for debugging.  i18n requirements
-       * are minimal.
-       */
-      (void)png_safecat(msg, (sizeof msg), 4, " using zstream");
-#     if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-         png_chunk_warning(png_ptr, msg);
-         png_ptr->zowner = 0;
-#     else
-         png_chunk_error(png_ptr, msg);
-#     endif
-   }
-
-   /* Implementation note: unlike 'png_deflate_claim' this internal function
-    * does not take the size of the data as an argument.  Some efficiency could
-    * be gained by using this when it is known *if* the zlib stream itself does
-    * not record the number; however, this is an illusion: the original writer
-    * of the PNG may have selected a lower window size, and we really must
-    * follow that because, for systems with with limited capabilities, we
-    * would otherwise reject the application's attempts to use a smaller window
-    * size (zlib doesn't have an interface to say "this or lower"!).
-    *
-    * inflateReset2 was added to zlib 1.2.4; before this the window could not be
-    * reset, therefore it is necessary to always allocate the maximum window
-    * size with earlier zlibs just in case later compressed chunks need it.
-    */
-   {
-      int ret; /* zlib return code */
-
-      /* Set this for safety, just in case the previous owner left pointers to
-       * memory allocations.
-       */
-      png_ptr->zstream.next_in = NULL;
-      png_ptr->zstream.avail_in = 0;
-      png_ptr->zstream.next_out = NULL;
-      png_ptr->zstream.avail_out = 0;
-
-      if (png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED)
-      {
-#        if ZLIB_VERNUM < 0x1240
-            PNG_UNUSED(window_bits)
-            ret = inflateReset(&png_ptr->zstream);
-#        else
-            ret = inflateReset2(&png_ptr->zstream, window_bits);
-#        endif
-      }
-
-      else
-      {
-#        if ZLIB_VERNUM < 0x1240
-            ret = inflateInit(&png_ptr->zstream);
-#        else
-            ret = inflateInit2(&png_ptr->zstream, window_bits);
-#        endif
-
-         if (ret == Z_OK)
-            png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
-      }
-
-      if (ret == Z_OK)
-         png_ptr->zowner = owner;
-
-      else
-         png_zstream_error(png_ptr, ret);
-
-      return ret;
-   }
-}
-
-#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
-/* png_inflate now returns zlib error codes including Z_OK and Z_STREAM_END to
- * allow the caller to do multiple calls if required.  If the 'finish' flag is
- * set Z_FINISH will be passed to the final inflate() call and Z_STREAM_END must
- * be returned or there has been a problem, otherwise Z_SYNC_FLUSH is used and
- * Z_OK or Z_STREAM_END will be returned on success.
- *
- * The input and output sizes are updated to the actual amounts of data consumed
- * or written, not the amount available (as in a z_stream).  The data pointers
- * are not changed, so the next input is (data+input_size) and the next
- * available output is (output+output_size).
- */
-static int
-png_inflate(png_structrp png_ptr, png_uint_32 owner, int finish,
-    /* INPUT: */ png_const_bytep input, png_uint_32p input_size_ptr,
-    /* OUTPUT: */ png_bytep output, png_alloc_size_t *output_size_ptr)
-{
-   if (png_ptr->zowner == owner) /* Else not claimed */
-   {
-      int ret;
-      png_alloc_size_t avail_out = *output_size_ptr;
-      png_uint_32 avail_in = *input_size_ptr;
-
-      /* zlib can't necessarily handle more than 65535 bytes at once (i.e. it
-       * can't even necessarily handle 65536 bytes) because the type uInt is
-       * "16 bits or more".  Consequently it is necessary to chunk the input to
-       * zlib.  This code uses ZLIB_IO_MAX, from pngpriv.h, as the maximum (the
-       * maximum value that can be stored in a uInt.)  It is possible to set
-       * ZLIB_IO_MAX to a lower value in pngpriv.h and this may sometimes have
-       * a performance advantage, because it reduces the amount of data accessed
-       * at each step and that may give the OS more time to page it in.
-       */
-      png_ptr->zstream.next_in = PNGZ_INPUT_CAST(input);
-      /* avail_in and avail_out are set below from 'size' */
-      png_ptr->zstream.avail_in = 0;
-      png_ptr->zstream.avail_out = 0;
-
-      /* Read directly into the output if it is available (this is set to
-       * a local buffer below if output is NULL).
-       */
-      if (output != NULL)
-         png_ptr->zstream.next_out = output;
-
-      do
-      {
-         uInt avail;
-         unsigned char local_buffer[PNG_INFLATE_BUF_SIZE];
-
-         /* zlib INPUT BUFFER */
-         /* The setting of 'avail_in' used to be outside the loop; by setting it
-          * inside it is possible to chunk the input to zlib and simply rely on
-          * zlib to advance the 'next_in' pointer.  This allows arbitrary
-          * amounts of data to be passed through zlib at the unavoidable cost of
-          * requiring a window save (memcpy of up to 32768 output bytes)
-          * every ZLIB_IO_MAX input bytes.
-          */
-         avail_in += png_ptr->zstream.avail_in; /* not consumed last time */
-
-         avail = ZLIB_IO_MAX;
-
-         if (avail_in < avail)
-            avail = (uInt)avail_in; /* safe: < than ZLIB_IO_MAX */
-
-         avail_in -= avail;
-         png_ptr->zstream.avail_in = avail;
-
-         /* zlib OUTPUT BUFFER */
-         avail_out += png_ptr->zstream.avail_out; /* not written last time */
-
-         avail = ZLIB_IO_MAX; /* maximum zlib can process */
-
-         if (output == NULL)
-         {
-            /* Reset the output buffer each time round if output is NULL and
-             * make available the full buffer, up to 'remaining_space'
-             */
-            png_ptr->zstream.next_out = local_buffer;
-            if ((sizeof local_buffer) < avail)
-               avail = (sizeof local_buffer);
-         }
-
-         if (avail_out < avail)
-            avail = (uInt)avail_out; /* safe: < ZLIB_IO_MAX */
-
-         png_ptr->zstream.avail_out = avail;
-         avail_out -= avail;
-
-         /* zlib inflate call */
-         /* In fact 'avail_out' may be 0 at this point, that happens at the end
-          * of the read when the final LZ end code was not passed at the end of
-          * the previous chunk of input data.  Tell zlib if we have reached the
-          * end of the output buffer.
-          */
-         ret = inflate(&png_ptr->zstream, avail_out > 0 ? Z_NO_FLUSH :
-            (finish ? Z_FINISH : Z_SYNC_FLUSH));
-      } while (ret == Z_OK);
-
-      /* For safety kill the local buffer pointer now */
-      if (output == NULL)
-         png_ptr->zstream.next_out = NULL;
-
-      /* Claw back the 'size' and 'remaining_space' byte counts. */
-      avail_in += png_ptr->zstream.avail_in;
-      avail_out += png_ptr->zstream.avail_out;
-
-      /* Update the input and output sizes; the updated values are the amount
-       * consumed or written, effectively the inverse of what zlib uses.
-       */
-      if (avail_out > 0)
-         *output_size_ptr -= avail_out;
-
-      if (avail_in > 0)
-         *input_size_ptr -= avail_in;
-
-      /* Ensure png_ptr->zstream.msg is set (even in the success case!) */
-      png_zstream_error(png_ptr, ret);
-      return ret;
-   }
-
-   else
-   {
-      /* This is a bad internal error.  The recovery assigns to the zstream msg
-       * pointer, which is not owned by the caller, but this is safe; it's only
-       * used on errors!
-       */
-      png_ptr->zstream.msg = PNGZ_MSG_CAST("zstream unclaimed");
-      return Z_STREAM_ERROR;
-   }
-}
-
-/*
- * Decompress trailing data in a chunk.  The assumption is that read_buffer
- * points at an allocated area holding the contents of a chunk with a
- * trailing compressed part.  What we get back is an allocated area
- * holding the original prefix part and an uncompressed version of the
- * trailing part (the malloc area passed in is freed).
- */
-static int
-png_decompress_chunk(png_structrp png_ptr,
-   png_uint_32 chunklength, png_uint_32 prefix_size,
-   png_alloc_size_t *newlength /* must be initialized to the maximum! */,
-   int terminate /*add a '\0' to the end of the uncompressed data*/)
-{
-   /* TODO: implement different limits for different types of chunk.
-    *
-    * The caller supplies *newlength set to the maximum length of the
-    * uncompressed data, but this routine allocates space for the prefix and
-    * maybe a '\0' terminator too.  We have to assume that 'prefix_size' is
-    * limited only by the maximum chunk size.
-    */
-   png_alloc_size_t limit = PNG_SIZE_MAX;
-
-#  ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-      if (png_ptr->user_chunk_malloc_max > 0 &&
-         png_ptr->user_chunk_malloc_max < limit)
-         limit = png_ptr->user_chunk_malloc_max;
-#  elif PNG_USER_CHUNK_MALLOC_MAX > 0
-      if (PNG_USER_CHUNK_MALLOC_MAX < limit)
-         limit = PNG_USER_CHUNK_MALLOC_MAX;
-#  endif
-
-   if (limit >= prefix_size + (terminate != 0))
-   {
-      int ret;
-
-      limit -= prefix_size + (terminate != 0);
-
-      if (limit < *newlength)
-         *newlength = limit;
-
-      /* Now try to claim the stream; the 'warn' setting causes zlib to be told
-       * to use the maximum window size during inflate; this hides errors in the
-       * deflate header window bits value which is used if '0' is passed.  In
-       * fact this only has an effect with zlib versions 1.2.4 and later - see
-       * the comments in png_inflate_claim above.
-       */
-      ret = png_inflate_claim(png_ptr, png_ptr->chunk_name,
-         png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN ? 15 : 0);
-
-      if (ret == Z_OK)
-      {
-         png_uint_32 lzsize = chunklength - prefix_size;
-
-         ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
-            /* input: */ png_ptr->read_buffer + prefix_size, &lzsize,
-            /* output: */ NULL, newlength);
-
-         if (ret == Z_STREAM_END)
-         {
-            /* Use 'inflateReset' here, not 'inflateReset2' because this
-             * preserves the previously decided window size (otherwise it would
-             * be necessary to store the previous window size.)  In practice
-             * this doesn't matter anyway, because png_inflate will call inflate
-             * with Z_FINISH in almost all cases, so the window will not be
-             * maintained.
-             */
-            if (inflateReset(&png_ptr->zstream) == Z_OK)
-            {
-               /* Because of the limit checks above we know that the new,
-                * expanded, size will fit in a size_t (let alone an
-                * png_alloc_size_t).  Use png_malloc_base here to avoid an
-                * extra OOM message.
-                */
-               png_alloc_size_t new_size = *newlength;
-               png_alloc_size_t buffer_size = prefix_size + new_size +
-                  (terminate != 0);
-               png_bytep text = png_voidcast(png_bytep, png_malloc_base(png_ptr,
-                  buffer_size));
-
-               if (text != NULL)
-               {
-                  ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
-                     png_ptr->read_buffer + prefix_size, &lzsize,
-                     text + prefix_size, newlength);
-
-                  if (ret == Z_STREAM_END)
-                  {
-                     if (new_size == *newlength)
-                     {
-                        if (terminate)
-                           text[prefix_size + *newlength] = 0;
-
-                        if (prefix_size > 0)
-                           memcpy(text, png_ptr->read_buffer, prefix_size);
-
-                        {
-                           png_bytep old_ptr = png_ptr->read_buffer;
-
-                           png_ptr->read_buffer = text;
-                           png_ptr->read_buffer_size = buffer_size;
-                           text = old_ptr; /* freed below */
-                        }
-                     }
-
-                     else
-                     {
-                        /* The size changed on the second read, there can be no
-                         * guarantee that anything is correct at this point.
-                         * The 'msg' pointer has been set to "unexpected end of
-                         * LZ stream", which is fine, but return an error code
-                         * that the caller won't accept.
-                         */
-                        ret = PNG_UNEXPECTED_ZLIB_RETURN;
-                     }
-                  }
-
-                  else if (ret == Z_OK)
-                     ret = PNG_UNEXPECTED_ZLIB_RETURN; /* for safety */
-
-                  /* Free the text pointer (this is the old read_buffer on
-                   * success)
-                   */
-                  png_free(png_ptr, text);
-
-                  /* This really is very benign, but it's still an error because
-                   * the extra space may otherwise be used as a Trojan Horse.
-                   */
-                  if (ret == Z_STREAM_END &&
-                     chunklength - prefix_size != lzsize)
-                     png_chunk_benign_error(png_ptr, "extra compressed data");
-               }
-
-               else
-               {
-                  /* Out of memory allocating the buffer */
-                  ret = Z_MEM_ERROR;
-                  png_zstream_error(png_ptr, Z_MEM_ERROR);
-               }
-            }
-
-            else
-            {
-               /* inflateReset failed, store the error message */
-               png_zstream_error(png_ptr, ret);
-
-               if (ret == Z_STREAM_END)
-                  ret = PNG_UNEXPECTED_ZLIB_RETURN;
-            }
-         }
-
-         else if (ret == Z_OK)
-            ret = PNG_UNEXPECTED_ZLIB_RETURN;
-
-         /* Release the claimed stream */
-         png_ptr->zowner = 0;
-      }
-
-      else /* the claim failed */ if (ret == Z_STREAM_END) /* impossible! */
-         ret = PNG_UNEXPECTED_ZLIB_RETURN;
-
-      return ret;
-   }
-
-   else
-   {
-      /* Application/configuration limits exceeded */
-      png_zstream_error(png_ptr, Z_MEM_ERROR);
-      return Z_MEM_ERROR;
-   }
-}
-#endif /* PNG_READ_COMPRESSED_TEXT_SUPPORTED */
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-/* Perform a partial read and decompress, producing 'avail_out' bytes and
- * reading from the current chunk as required.
- */
-static int
-png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
-   png_uint_32p chunk_bytes, png_bytep next_out, png_alloc_size_t *out_size,
-   int finish)
-{
-   if (png_ptr->zowner == png_ptr->chunk_name)
-   {
-      int ret;
-
-      /* next_in and avail_in must have been initialized by the caller. */
-      png_ptr->zstream.next_out = next_out;
-      png_ptr->zstream.avail_out = 0; /* set in the loop */
-
-      do
-      {
-         if (png_ptr->zstream.avail_in == 0)
-         {
-            if (read_size > *chunk_bytes)
-               read_size = (uInt)*chunk_bytes;
-            *chunk_bytes -= read_size;
-
-            if (read_size > 0)
-               png_crc_read(png_ptr, read_buffer, read_size);
-
-            png_ptr->zstream.next_in = read_buffer;
-            png_ptr->zstream.avail_in = read_size;
-         }
-
-         if (png_ptr->zstream.avail_out == 0)
-         {
-            uInt avail = ZLIB_IO_MAX;
-            if (avail > *out_size)
-               avail = (uInt)*out_size;
-            *out_size -= avail;
-
-            png_ptr->zstream.avail_out = avail;
-         }
-
-         /* Use Z_SYNC_FLUSH when there is no more chunk data to ensure that all
-          * the available output is produced; this allows reading of truncated
-          * streams.
-          */
-         ret = inflate(&png_ptr->zstream,
-            *chunk_bytes > 0 ? Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
-      }
-      while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
-
-      *out_size += png_ptr->zstream.avail_out;
-      png_ptr->zstream.avail_out = 0; /* Should not be required, but is safe */
-
-      /* Ensure the error message pointer is always set: */
-      png_zstream_error(png_ptr, ret);
-      return ret;
-   }
-
-   else
-   {
-      png_ptr->zstream.msg = PNGZ_MSG_CAST("zstream unclaimed");
-      return Z_STREAM_ERROR;
-   }
-}
-#endif
-
-/* Read and check the IDHR chunk */
-void /* PRIVATE */
-png_handle_IHDR(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[13];
-   png_uint_32 width, height;
-   int bit_depth, color_type, compression_type, filter_type;
-   int interlace_type;
-
-   png_debug(1, "in png_handle_IHDR");
-
-   if (png_ptr->mode & PNG_HAVE_IHDR)
-      png_chunk_error(png_ptr, "out of place");
-
-   /* Check the length */
-   if (length != 13)
-      png_chunk_error(png_ptr, "invalid");
-
-   png_ptr->mode |= PNG_HAVE_IHDR;
-
-   png_crc_read(png_ptr, buf, 13);
-   png_crc_finish(png_ptr, 0);
-
-   width = png_get_uint_31(png_ptr, buf);
-   height = png_get_uint_31(png_ptr, buf + 4);
-   bit_depth = buf[8];
-   color_type = buf[9];
-   compression_type = buf[10];
-   filter_type = buf[11];
-   interlace_type = buf[12];
-
-   /* Set internal variables */
-   png_ptr->width = width;
-   png_ptr->height = height;
-   png_ptr->bit_depth = (png_byte)bit_depth;
-   png_ptr->interlaced = (png_byte)interlace_type;
-   png_ptr->color_type = (png_byte)color_type;
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   png_ptr->filter_type = (png_byte)filter_type;
-#endif
-   png_ptr->compression_type = (png_byte)compression_type;
-
-   /* Find number of channels */
-   switch (png_ptr->color_type)
-   {
-      default: /* invalid, png_set_IHDR calls png_error */
-      case PNG_COLOR_TYPE_GRAY:
-      case PNG_COLOR_TYPE_PALETTE:
-         png_ptr->channels = 1;
-         break;
-
-      case PNG_COLOR_TYPE_RGB:
-         png_ptr->channels = 3;
-         break;
-
-      case PNG_COLOR_TYPE_GRAY_ALPHA:
-         png_ptr->channels = 2;
-         break;
-
-      case PNG_COLOR_TYPE_RGB_ALPHA:
-         png_ptr->channels = 4;
-         break;
-   }
-
-   /* Set up other useful info */
-   png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth *
-   png_ptr->channels);
-   png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->width);
-   png_debug1(3, "bit_depth = %d", png_ptr->bit_depth);
-   png_debug1(3, "channels = %d", png_ptr->channels);
-   png_debug1(3, "rowbytes = %lu", (unsigned long)png_ptr->rowbytes);
-   png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
-       color_type, interlace_type, compression_type, filter_type);
-}
-
-/* Read and check the palette */
-void /* PRIVATE */
-png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_color palette[PNG_MAX_PALETTE_LENGTH];
-   int num, i;
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   png_colorp pal_ptr;
-#endif
-
-   png_debug(1, "in png_handle_PLTE");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   /* Moved to before the 'after IDAT' check below because otherwise duplicate
-    * PLTE chunks are potentially ignored (the spec says there shall not be more
-    * than one PLTE, the error is not treated as benign, so this check trumps
-    * the requirement that PLTE appears before IDAT.)
-    */
-   else if (png_ptr->mode & PNG_HAVE_PLTE)
-      png_chunk_error(png_ptr, "duplicate");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      /* This is benign because the non-benign error happened before, when an
-       * IDAT was encountered in a color-mapped image with no PLTE.
-       */
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   png_ptr->mode |= PNG_HAVE_PLTE;
-
-   if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "ignored in grayscale PNG");
-      return;
-   }
-
-#ifndef PNG_READ_OPT_PLTE_SUPPORTED
-   if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-#endif
-
-   if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3)
-   {
-      png_crc_finish(png_ptr, length);
-
-      if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
-         png_chunk_benign_error(png_ptr, "invalid");
-
-      else
-         png_chunk_error(png_ptr, "invalid");
-
-      return;
-   }
-
-   /* The cast is safe because 'length' is less than 3*PNG_MAX_PALETTE_LENGTH */
-   num = (int)length / 3;
-
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
-   {
-      png_byte buf[3];
-
-      png_crc_read(png_ptr, buf, 3);
-      pal_ptr->red = buf[0];
-      pal_ptr->green = buf[1];
-      pal_ptr->blue = buf[2];
-   }
-#else
-   for (i = 0; i < num; i++)
-   {
-      png_byte buf[3];
-
-      png_crc_read(png_ptr, buf, 3);
-      /* Don't depend upon png_color being any order */
-      palette[i].red = buf[0];
-      palette[i].green = buf[1];
-      palette[i].blue = buf[2];
-   }
-#endif
-
-   /* If we actually need the PLTE chunk (ie for a paletted image), we do
-    * whatever the normal CRC configuration tells us.  However, if we
-    * have an RGB image, the PLTE can be considered ancillary, so
-    * we will act as though it is.
-    */
-#ifndef PNG_READ_OPT_PLTE_SUPPORTED
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-#endif
-   {
-      png_crc_finish(png_ptr, 0);
-   }
-
-#ifndef PNG_READ_OPT_PLTE_SUPPORTED
-   else if (png_crc_error(png_ptr))  /* Only if we have a CRC error */
-   {
-      /* If we don't want to use the data from an ancillary chunk,
-       * we have two options: an error abort, or a warning and we
-       * ignore the data in this chunk (which should be OK, since
-       * it's considered ancillary for a RGB or RGBA image).
-       *
-       * IMPLEMENTATION NOTE: this is only here because png_crc_finish uses the
-       * chunk type to determine whether to check the ancillary or the critical
-       * flags.
-       */
-      if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_USE))
-      {
-         if (png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN)
-         {
-            png_chunk_benign_error(png_ptr, "CRC error");
-         }
-
-         else
-         {
-            png_chunk_warning(png_ptr, "CRC error");
-            return;
-         }
-      }
-
-      /* Otherwise, we (optionally) emit a warning and use the chunk. */
-      else if (!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN))
-      {
-         png_chunk_warning(png_ptr, "CRC error");
-      }
-   }
-#endif
-
-   /* TODO: png_set_PLTE has the side effect of setting png_ptr->palette to its
-    * own copy of the palette.  This has the side effect that when png_start_row
-    * is called (this happens after any call to png_read_update_info) the
-    * info_ptr palette gets changed.  This is extremely unexpected and
-    * confusing.
-    *
-    * Fix this by not sharing the palette in this way.
-    */
-   png_set_PLTE(png_ptr, info_ptr, palette, num);
-
-   /* The three chunks, bKGD, hIST and tRNS *must* appear after PLTE and before
-    * IDAT.  Prior to 1.6.0 this was not checked; instead the code merely
-    * checked the apparent validity of a tRNS chunk inserted before PLTE on a
-    * palette PNG.  1.6.0 attempts to rigorously follow the standard and
-    * therefore does a benign error if the erroneous condition is detected *and*
-    * cancels the tRNS if the benign error returns.  The alternative is to
-    * amend the standard since it would be rather hypocritical of the standards
-    * maintainers to ignore it.
-    */
-#ifdef PNG_READ_tRNS_SUPPORTED
-   if (png_ptr->num_trans > 0 ||
-      (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS) != 0))
-   {
-      /* Cancel this because otherwise it would be used if the transforms
-       * require it.  Don't cancel the 'valid' flag because this would prevent
-       * detection of duplicate chunks.
-       */
-      png_ptr->num_trans = 0;
-
-      if (info_ptr != NULL)
-         info_ptr->num_trans = 0;
-
-      png_chunk_benign_error(png_ptr, "tRNS must be after");
-   }
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-   if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) != 0)
-      png_chunk_benign_error(png_ptr, "hIST must be after");
-#endif
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-   if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) != 0)
-      png_chunk_benign_error(png_ptr, "bKGD must be after");
-#endif
-}
-
-void /* PRIVATE */
-png_handle_IEND(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_debug(1, "in png_handle_IEND");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR) || !(png_ptr->mode & PNG_HAVE_IDAT))
-      png_chunk_error(png_ptr, "out of place");
-
-   png_ptr->mode |= (PNG_AFTER_IDAT | PNG_HAVE_IEND);
-
-   png_crc_finish(png_ptr, length);
-
-   if (length != 0)
-      png_chunk_benign_error(png_ptr, "invalid");
-
-   PNG_UNUSED(info_ptr)
-}
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-void /* PRIVATE */
-png_handle_gAMA(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_fixed_point igamma;
-   png_byte buf[4];
-
-   png_debug(1, "in png_handle_gAMA");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (length != 4)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 4);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   igamma = png_get_fixed_point(NULL, buf);
-
-   png_colorspace_set_gamma(png_ptr, &png_ptr->colorspace, igamma);
-   png_colorspace_sync(png_ptr, info_ptr);
-}
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-void /* PRIVATE */
-png_handle_sBIT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   unsigned int truelen;
-   png_byte buf[4];
-
-   png_debug(1, "in png_handle_sBIT");
-
-   buf[0] = buf[1] = buf[2] = buf[3] = 0;
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      truelen = 3;
-
-   else
-      truelen = png_ptr->channels;
-
-   if (length != truelen || length > 4)
-   {
-      png_chunk_benign_error(png_ptr, "invalid");
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, truelen);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
-   {
-      png_ptr->sig_bit.red = buf[0];
-      png_ptr->sig_bit.green = buf[1];
-      png_ptr->sig_bit.blue = buf[2];
-      png_ptr->sig_bit.alpha = buf[3];
-   }
-
-   else
-   {
-      png_ptr->sig_bit.gray = buf[0];
-      png_ptr->sig_bit.red = buf[0];
-      png_ptr->sig_bit.green = buf[0];
-      png_ptr->sig_bit.blue = buf[0];
-      png_ptr->sig_bit.alpha = buf[1];
-   }
-
-   png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit));
-}
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-void /* PRIVATE */
-png_handle_cHRM(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[32];
-   png_xy xy;
-
-   png_debug(1, "in png_handle_cHRM");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (length != 32)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 32);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   xy.whitex = png_get_fixed_point(NULL, buf);
-   xy.whitey = png_get_fixed_point(NULL, buf + 4);
-   xy.redx   = png_get_fixed_point(NULL, buf + 8);
-   xy.redy   = png_get_fixed_point(NULL, buf + 12);
-   xy.greenx = png_get_fixed_point(NULL, buf + 16);
-   xy.greeny = png_get_fixed_point(NULL, buf + 20);
-   xy.bluex  = png_get_fixed_point(NULL, buf + 24);
-   xy.bluey  = png_get_fixed_point(NULL, buf + 28);
-
-   if (xy.whitex == PNG_FIXED_ERROR ||
-       xy.whitey == PNG_FIXED_ERROR ||
-       xy.redx   == PNG_FIXED_ERROR ||
-       xy.redy   == PNG_FIXED_ERROR ||
-       xy.greenx == PNG_FIXED_ERROR ||
-       xy.greeny == PNG_FIXED_ERROR ||
-       xy.bluex  == PNG_FIXED_ERROR ||
-       xy.bluey  == PNG_FIXED_ERROR)
-   {
-      png_chunk_benign_error(png_ptr, "invalid values");
-      return;
-   }
-
-   /* If a colorspace error has already been output skip this chunk */
-   if (png_ptr->colorspace.flags & PNG_COLORSPACE_INVALID)
-      return;
-
-   if (png_ptr->colorspace.flags & PNG_COLORSPACE_FROM_cHRM)
-   {
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_INVALID;
-      png_colorspace_sync(png_ptr, info_ptr);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   png_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
-   (void)png_colorspace_set_chromaticities(png_ptr, &png_ptr->colorspace, &xy,
-      1/*prefer cHRM values*/);
-   png_colorspace_sync(png_ptr, info_ptr);
-}
-#endif
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-void /* PRIVATE */
-png_handle_sRGB(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte intent;
-
-   png_debug(1, "in png_handle_sRGB");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (length != 1)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, &intent, 1);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   /* If a colorspace error has already been output skip this chunk */
-   if (png_ptr->colorspace.flags & PNG_COLORSPACE_INVALID)
-      return;
-
-   /* Only one sRGB or iCCP chunk is allowed, use the HAVE_INTENT flag to detect
-    * this.
-    */
-   if (png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_INTENT)
-   {
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_INVALID;
-      png_colorspace_sync(png_ptr, info_ptr);
-      png_chunk_benign_error(png_ptr, "too many profiles");
-      return;
-   }
-
-   (void)png_colorspace_set_sRGB(png_ptr, &png_ptr->colorspace, intent);
-   png_colorspace_sync(png_ptr, info_ptr);
-}
-#endif /* PNG_READ_sRGB_SUPPORTED */
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-void /* PRIVATE */
-png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-/* Note: this does not properly handle profiles that are > 64K under DOS */
-{
-   png_const_charp errmsg = NULL; /* error message output, or no error */
-   int finished = 0; /* crc checked */
-
-   png_debug(1, "in png_handle_iCCP");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   /* Consistent with all the above colorspace handling an obviously *invalid*
-    * chunk is just ignored, so does not invalidate the color space.  An
-    * alternative is to set the 'invalid' flags at the start of this routine
-    * and only clear them in they were not set before and all the tests pass.
-    * The minimum 'deflate' stream is assumed to be just the 2 byte header and 4
-    * byte checksum.  The keyword must be one character and there is a
-    * terminator (0) byte and the compression method.
-    */
-   if (length < 9)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "too short");
-      return;
-   }
-
-   /* If a colorspace error has already been output skip this chunk */
-   if (png_ptr->colorspace.flags & PNG_COLORSPACE_INVALID)
-   {
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-
-   /* Only one sRGB or iCCP chunk is allowed, use the HAVE_INTENT flag to detect
-    * this.
-    */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_INTENT) == 0)
-   {
-      uInt read_length, keyword_length;
-      char keyword[81];
-
-      /* Find the keyword; the keyword plus separator and compression method
-       * bytes can be at most 81 characters long.
-       */
-      read_length = 81; /* maximum */
-      if (read_length > length)
-         read_length = (uInt)length;
-
-      png_crc_read(png_ptr, (png_bytep)keyword, read_length);
-      length -= read_length;
-
-      keyword_length = 0;
-      while (keyword_length < 80 && keyword_length < read_length &&
-         keyword[keyword_length] != 0)
-         ++keyword_length;
-
-      /* TODO: make the keyword checking common */
-      if (keyword_length >= 1 && keyword_length <= 79)
-      {
-         /* We only understand '0' compression - deflate - so if we get a
-          * different value we can't safely decode the chunk.
-          */
-         if (keyword_length+1 < read_length &&
-            keyword[keyword_length+1] == PNG_COMPRESSION_TYPE_BASE)
-         {
-            read_length -= keyword_length+2;
-
-            if (png_inflate_claim(png_ptr, png_iCCP,
-               png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN ? 15 : 0) == Z_OK)
-            {
-               unsigned char profile_header[132];
-               unsigned char local_buffer[PNG_INFLATE_BUF_SIZE];
-               png_alloc_size_t size = (sizeof profile_header);
-
-               png_ptr->zstream.next_in = (Bytef*)keyword + (keyword_length+2);
-               png_ptr->zstream.avail_in = read_length;
-               (void)png_inflate_read(png_ptr, local_buffer,
-                  (sizeof local_buffer), &length, profile_header, &size,
-                  0/*finish: don't, because the output is too small*/);
-
-               if (size == 0)
-               {
-                  /* We have the ICC profile header; do the basic header checks.
-                   */
-                  const png_uint_32 profile_length =
-                     png_get_uint_32(profile_header);
-
-                  if (png_icc_check_length(png_ptr, &png_ptr->colorspace,
-                     keyword, profile_length))
-                  {
-                     /* The length is apparently ok, so we can check the 132
-                      * byte header.
-                      */
-                     if (png_icc_check_header(png_ptr, &png_ptr->colorspace,
-                        keyword, profile_length, profile_header,
-                        png_ptr->color_type))
-                     {
-                        /* Now read the tag table; a variable size buffer is
-                         * needed at this point, allocate one for the whole
-                         * profile.  The header check has already validated
-                         * that none of these stuff will overflow.
-                         */
-                        const png_uint_32 tag_count = png_get_uint_32(
-                           profile_header+128);
-                        png_bytep profile = png_read_buffer(png_ptr,
-                           profile_length, 2/*silent*/);
-
-                        if (profile != NULL)
-                        {
-                           memcpy(profile, profile_header,
-                              (sizeof profile_header));
-
-                           size = 12 * tag_count;
-
-                           (void)png_inflate_read(png_ptr, local_buffer,
-                              (sizeof local_buffer), &length,
-                              profile + (sizeof profile_header), &size, 0);
-
-                           /* Still expect a a buffer error because we expect
-                            * there to be some tag data!
-                            */
-                           if (size == 0)
-                           {
-                              if (png_icc_check_tag_table(png_ptr,
-                                 &png_ptr->colorspace, keyword, profile_length,
-                                 profile))
-                              {
-                                 /* The profile has been validated for basic
-                                  * security issues, so read the whole thing in.
-                                  */
-                                 size = profile_length - (sizeof profile_header)
-                                    - 12 * tag_count;
-
-                                 (void)png_inflate_read(png_ptr, local_buffer,
-                                    (sizeof local_buffer), &length,
-                                    profile + (sizeof profile_header) +
-                                    12 * tag_count, &size, 1/*finish*/);
-
-                                 if (length > 0 && !(png_ptr->flags &
-                                       PNG_FLAG_BENIGN_ERRORS_WARN))
-                                    errmsg = "extra compressed data";
-
-                                 /* But otherwise allow extra data: */
-                                 else if (size == 0)
-                                 {
-                                    if (length > 0)
-                                    {
-                                       /* This can be handled completely, so
-                                        * keep going.
-                                        */
-                                       png_chunk_warning(png_ptr,
-                                          "extra compressed data");
-                                    }
-
-                                    png_crc_finish(png_ptr, length);
-                                    finished = 1;
-
-#                                   ifdef PNG_sRGB_SUPPORTED
-                                       /* Check for a match against sRGB */
-                                       png_icc_set_sRGB(png_ptr,
-                                          &png_ptr->colorspace, profile,
-                                          png_ptr->zstream.adler);
-#                                   endif
-
-                                    /* Steal the profile for info_ptr. */
-                                    if (info_ptr != NULL)
-                                    {
-                                       png_free_data(png_ptr, info_ptr,
-                                          PNG_FREE_ICCP, 0);
-
-                                       info_ptr->iccp_name = png_voidcast(char*,
-                                          png_malloc_base(png_ptr,
-                                          keyword_length+1));
-                                       if (info_ptr->iccp_name != NULL)
-                                       {
-                                          memcpy(info_ptr->iccp_name, keyword,
-                                             keyword_length+1);
-                                          info_ptr->iccp_proflen =
-                                             profile_length;
-                                          info_ptr->iccp_profile = profile;
-                                          png_ptr->read_buffer = NULL; /*steal*/
-                                          info_ptr->free_me |= PNG_FREE_ICCP;
-                                          info_ptr->valid |= PNG_INFO_iCCP;
-                                       }
-
-                                       else
-                                       {
-                                          png_ptr->colorspace.flags |=
-                                             PNG_COLORSPACE_INVALID;
-                                          errmsg = "out of memory";
-                                       }
-                                    }
-
-                                    /* else the profile remains in the read
-                                     * buffer which gets reused for subsequent
-                                     * chunks.
-                                     */
-
-                                    if (info_ptr != NULL)
-                                       png_colorspace_sync(png_ptr, info_ptr);
-
-                                    if (errmsg == NULL)
-                                    {
-                                       png_ptr->zowner = 0;
-                                       return;
-                                    }
-                                 }
-
-                                 else if (size > 0)
-                                    errmsg = "truncated";
-
-                                 else
-                                    errmsg = png_ptr->zstream.msg;
-                              }
-
-                              /* else png_icc_check_tag_table output an error */
-                           }
-
-                           else /* profile truncated */
-                              errmsg = png_ptr->zstream.msg;
-                        }
-
-                        else
-                           errmsg = "out of memory";
-                     }
-
-                     /* else png_icc_check_header output an error */
-                  }
-
-                  /* else png_icc_check_length output an error */
-               }
-
-               else /* profile truncated */
-                  errmsg = png_ptr->zstream.msg;
-
-               /* Release the stream */
-               png_ptr->zowner = 0;
-            }
-
-            else /* png_inflate_claim failed */
-               errmsg = png_ptr->zstream.msg;
-         }
-
-         else
-            errmsg = "bad compression method"; /* or missing */
-      }
-
-      else
-         errmsg = "bad keyword";
-   }
-
-   else
-      errmsg = "too many profiles";
-
-   /* Failure: the reason is in 'errmsg' */
-   if (!finished)
-      png_crc_finish(png_ptr, length);
-
-   png_ptr->colorspace.flags |= PNG_COLORSPACE_INVALID;
-   png_colorspace_sync(png_ptr, info_ptr);
-   if (errmsg != NULL) /* else already output */
-      png_chunk_benign_error(png_ptr, errmsg);
-}
-#endif /* PNG_READ_iCCP_SUPPORTED */
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-void /* PRIVATE */
-png_handle_sPLT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-{
-   png_bytep entry_start, buffer;
-   png_sPLT_t new_palette;
-   png_sPLT_entryp pp;
-   png_uint_32 data_length;
-   int entry_size, i;
-   png_uint_32 skip = 0;
-   png_uint_32 dl;
-   png_size_t max_dl;
-
-   png_debug(1, "in png_handle_sPLT");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_warning(png_ptr, "No space in chunk cache for sPLT");
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-   }
-#endif
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (length > 65535U)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "too large to fit in memory");
-      return;
-   }
-#endif
-
-   buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-
-   /* WARNING: this may break if size_t is less than 32 bits; it is assumed
-    * that the PNG_MAX_MALLOC_64K test is enabled in this case, but this is a
-    * potential breakage point if the types in pngconf.h aren't exactly right.
-    */
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, skip))
-      return;
-
-   buffer[length] = 0;
-
-   for (entry_start = buffer; *entry_start; entry_start++)
-      /* Empty loop to find end of name */ ;
-
-   ++entry_start;
-
-   /* A sample depth should follow the separator, and we should be on it  */
-   if (entry_start > buffer + length - 2)
-   {
-      png_warning(png_ptr, "malformed sPLT chunk");
-      return;
-   }
-
-   new_palette.depth = *entry_start++;
-   entry_size = (new_palette.depth == 8 ? 6 : 10);
-   /* This must fit in a png_uint_32 because it is derived from the original
-    * chunk data length.
-    */
-   data_length = length - (png_uint_32)(entry_start - buffer);
-
-   /* Integrity-check the data length */
-   if (data_length % entry_size)
-   {
-      png_warning(png_ptr, "sPLT chunk has bad length");
-      return;
-   }
-
-   dl = (png_int_32)(data_length / entry_size);
-   max_dl = PNG_SIZE_MAX / (sizeof (png_sPLT_entry));
-
-   if (dl > max_dl)
-   {
-       png_warning(png_ptr, "sPLT chunk too long");
-       return;
-   }
-
-   new_palette.nentries = (png_int_32)(data_length / entry_size);
-
-   new_palette.entries = (png_sPLT_entryp)png_malloc_warn(
-       png_ptr, new_palette.nentries * (sizeof (png_sPLT_entry)));
-
-   if (new_palette.entries == NULL)
-   {
-       png_warning(png_ptr, "sPLT chunk requires too much memory");
-       return;
-   }
-
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   for (i = 0; i < new_palette.nentries; i++)
-   {
-      pp = new_palette.entries + i;
-
-      if (new_palette.depth == 8)
-      {
-         pp->red = *entry_start++;
-         pp->green = *entry_start++;
-         pp->blue = *entry_start++;
-         pp->alpha = *entry_start++;
-      }
-
-      else
-      {
-         pp->red   = png_get_uint_16(entry_start); entry_start += 2;
-         pp->green = png_get_uint_16(entry_start); entry_start += 2;
-         pp->blue  = png_get_uint_16(entry_start); entry_start += 2;
-         pp->alpha = png_get_uint_16(entry_start); entry_start += 2;
-      }
-
-      pp->frequency = png_get_uint_16(entry_start); entry_start += 2;
-   }
-#else
-   pp = new_palette.entries;
-
-   for (i = 0; i < new_palette.nentries; i++)
-   {
-
-      if (new_palette.depth == 8)
-      {
-         pp[i].red   = *entry_start++;
-         pp[i].green = *entry_start++;
-         pp[i].blue  = *entry_start++;
-         pp[i].alpha = *entry_start++;
-      }
-
-      else
-      {
-         pp[i].red   = png_get_uint_16(entry_start); entry_start += 2;
-         pp[i].green = png_get_uint_16(entry_start); entry_start += 2;
-         pp[i].blue  = png_get_uint_16(entry_start); entry_start += 2;
-         pp[i].alpha = png_get_uint_16(entry_start); entry_start += 2;
-      }
-
-      pp[i].frequency = png_get_uint_16(entry_start); entry_start += 2;
-   }
-#endif
-
-   /* Discard all chunk data except the name and stash that */
-   new_palette.name = (png_charp)buffer;
-
-   png_set_sPLT(png_ptr, info_ptr, &new_palette, 1);
-
-   png_free(png_ptr, new_palette.entries);
-}
-#endif /* PNG_READ_sPLT_SUPPORTED */
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-void /* PRIVATE */
-png_handle_tRNS(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte readbuf[PNG_MAX_PALETTE_LENGTH];
-
-   png_debug(1, "in png_handle_tRNS");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      png_byte buf[2];
-
-      if (length != 2)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-      png_crc_read(png_ptr, buf, 2);
-      png_ptr->num_trans = 1;
-      png_ptr->trans_color.gray = png_get_uint_16(buf);
-   }
-
-   else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
-   {
-      png_byte buf[6];
-
-      if (length != 6)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-      png_crc_read(png_ptr, buf, length);
-      png_ptr->num_trans = 1;
-      png_ptr->trans_color.red = png_get_uint_16(buf);
-      png_ptr->trans_color.green = png_get_uint_16(buf + 2);
-      png_ptr->trans_color.blue = png_get_uint_16(buf + 4);
-   }
-
-   else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (!(png_ptr->mode & PNG_HAVE_PLTE))
-      {
-         /* TODO: is this actually an error in the ISO spec? */
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "out of place");
-         return;
-      }
-
-      if (length > png_ptr->num_palette || length > PNG_MAX_PALETTE_LENGTH ||
-         length == 0)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-      png_crc_read(png_ptr, readbuf, length);
-      png_ptr->num_trans = (png_uint_16)length;
-   }
-
-   else
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid with alpha channel");
-      return;
-   }
-
-   if (png_crc_finish(png_ptr, 0))
-   {
-      png_ptr->num_trans = 0;
-      return;
-   }
-
-   /* TODO: this is a horrible side effect in the palette case because the
-    * png_struct ends up with a pointer to the tRNS buffer owned by the
-    * png_info.  Fix this.
-    */
-   png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans,
-       &(png_ptr->trans_color));
-}
-#endif
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-void /* PRIVATE */
-png_handle_bKGD(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   unsigned int truelen;
-   png_byte buf[6];
-   png_color_16 background;
-
-   png_debug(1, "in png_handle_bKGD");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) ||
-      (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-       !(png_ptr->mode & PNG_HAVE_PLTE)))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      truelen = 1;
-
-   else if (png_ptr->color_type & PNG_COLOR_MASK_COLOR)
-      truelen = 6;
-
-   else
-      truelen = 2;
-
-   if (length != truelen)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, truelen);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   /* We convert the index value into RGB components so that we can allow
-    * arbitrary RGB values for background when we have transparency, and
-    * so it is easy to determine the RGB values of the background color
-    * from the info_ptr struct.
-    */
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      background.index = buf[0];
-
-      if (info_ptr && info_ptr->num_palette)
-      {
-         if (buf[0] >= info_ptr->num_palette)
-         {
-            png_chunk_benign_error(png_ptr, "invalid index");
-            return;
-         }
-
-         background.red = (png_uint_16)png_ptr->palette[buf[0]].red;
-         background.green = (png_uint_16)png_ptr->palette[buf[0]].green;
-         background.blue = (png_uint_16)png_ptr->palette[buf[0]].blue;
-      }
-
-      else
-         background.red = background.green = background.blue = 0;
-
-      background.gray = 0;
-   }
-
-   else if (!(png_ptr->color_type & PNG_COLOR_MASK_COLOR)) /* GRAY */
-   {
-      background.index = 0;
-      background.red =
-      background.green =
-      background.blue =
-      background.gray = png_get_uint_16(buf);
-   }
-
-   else
-   {
-      background.index = 0;
-      background.red = png_get_uint_16(buf);
-      background.green = png_get_uint_16(buf + 2);
-      background.blue = png_get_uint_16(buf + 4);
-      background.gray = 0;
-   }
-
-   png_set_bKGD(png_ptr, info_ptr, &background);
-}
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-void /* PRIVATE */
-png_handle_hIST(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   unsigned int num, i;
-   png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH];
-
-   png_debug(1, "in png_handle_hIST");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) || !(png_ptr->mode & PNG_HAVE_PLTE))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   num = length / 2 ;
-
-   if (num != png_ptr->num_palette || num > PNG_MAX_PALETTE_LENGTH)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   for (i = 0; i < num; i++)
-   {
-      png_byte buf[2];
-
-      png_crc_read(png_ptr, buf, 2);
-      readbuf[i] = png_get_uint_16(buf);
-   }
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   png_set_hIST(png_ptr, info_ptr, readbuf);
-}
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-void /* PRIVATE */
-png_handle_pHYs(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[9];
-   png_uint_32 res_x, res_y;
-   int unit_type;
-
-   png_debug(1, "in png_handle_pHYs");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (length != 9)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 9);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   res_x = png_get_uint_32(buf);
-   res_y = png_get_uint_32(buf + 4);
-   unit_type = buf[8];
-   png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type);
-}
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-void /* PRIVATE */
-png_handle_oFFs(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[9];
-   png_int_32 offset_x, offset_y;
-   int unit_type;
-
-   png_debug(1, "in png_handle_oFFs");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (length != 9)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 9);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   offset_x = png_get_int_32(buf);
-   offset_y = png_get_int_32(buf + 4);
-   unit_type = buf[8];
-   png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type);
-}
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-/* Read the pCAL chunk (described in the PNG Extensions document) */
-void /* PRIVATE */
-png_handle_pCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_int_32 X0, X1;
-   png_byte type, nparams;
-   png_bytep buffer, buf, units, endptr;
-   png_charpp params;
-   int i;
-
-   png_debug(1, "in png_handle_pCAL");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   png_debug1(2, "Allocating and reading pCAL chunk data (%u bytes)",
-       length + 1);
-
-   buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
-
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   buffer[length] = 0; /* Null terminate the last string */
-
-   png_debug(3, "Finding end of pCAL purpose string");
-   for (buf = buffer; *buf; buf++)
-      /* Empty loop */ ;
-
-   endptr = buffer + length;
-
-   /* We need to have at least 12 bytes after the purpose string
-    * in order to get the parameter information.
-    */
-   if (endptr <= buf + 12)
-   {
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_debug(3, "Reading pCAL X0, X1, type, nparams, and units");
-   X0 = png_get_int_32((png_bytep)buf+1);
-   X1 = png_get_int_32((png_bytep)buf+5);
-   type = buf[9];
-   nparams = buf[10];
-   units = buf + 11;
-
-   png_debug(3, "Checking pCAL equation type and number of parameters");
-   /* Check that we have the right number of parameters for known
-    * equation types.
-    */
-   if ((type == PNG_EQUATION_LINEAR && nparams != 2) ||
-       (type == PNG_EQUATION_BASE_E && nparams != 3) ||
-       (type == PNG_EQUATION_ARBITRARY && nparams != 3) ||
-       (type == PNG_EQUATION_HYPERBOLIC && nparams != 4))
-   {
-      png_chunk_benign_error(png_ptr, "invalid parameter count");
-      return;
-   }
-
-   else if (type >= PNG_EQUATION_LAST)
-   {
-      png_chunk_benign_error(png_ptr, "unrecognized equation type");
-   }
-
-   for (buf = units; *buf; buf++)
-      /* Empty loop to move past the units string. */ ;
-
-   png_debug(3, "Allocating pCAL parameters array");
-
-   params = png_voidcast(png_charpp, png_malloc_warn(png_ptr,
-       nparams * (sizeof (png_charp))));
-
-   if (params == NULL)
-   {
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   /* Get pointers to the start of each parameter string. */
-   for (i = 0; i < nparams; i++)
-   {
-      buf++; /* Skip the null string terminator from previous parameter. */
-
-      png_debug1(3, "Reading pCAL parameter %d", i);
-
-      for (params[i] = (png_charp)buf; buf <= endptr && *buf != 0; buf++)
-         /* Empty loop to move past each parameter string */ ;
-
-      /* Make sure we haven't run out of data yet */
-      if (buf > endptr)
-      {
-         png_free(png_ptr, params);
-         png_chunk_benign_error(png_ptr, "invalid data");
-         return;
-      }
-   }
-
-   png_set_pCAL(png_ptr, info_ptr, (png_charp)buffer, X0, X1, type, nparams,
-      (png_charp)units, params);
-
-   png_free(png_ptr, params);
-}
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-/* Read the sCAL chunk */
-void /* PRIVATE */
-png_handle_sCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_bytep buffer;
-   png_size_t i;
-   int state;
-
-   png_debug(1, "in png_handle_sCAL");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (png_ptr->mode & PNG_HAVE_IDAT)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   /* Need unit type, width, \0, height: minimum 4 bytes */
-   else if (length < 4)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_debug1(2, "Allocating and reading sCAL chunk data (%u bytes)",
-      length + 1);
-
-   buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
-
-   if (buffer == NULL)
-   {
-      png_chunk_benign_error(png_ptr, "out of memory");
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-   buffer[length] = 0; /* Null terminate the last string */
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   /* Validate the unit. */
-   if (buffer[0] != 1 && buffer[0] != 2)
-   {
-      png_chunk_benign_error(png_ptr, "invalid unit");
-      return;
-   }
-
-   /* Validate the ASCII numbers, need two ASCII numbers separated by
-    * a '\0' and they need to fit exactly in the chunk data.
-    */
-   i = 1;
-   state = 0;
-
-   if (!png_check_fp_number((png_const_charp)buffer, length, &state, &i) ||
-       i >= length || buffer[i++] != 0)
-      png_chunk_benign_error(png_ptr, "bad width format");
-
-   else if (!PNG_FP_IS_POSITIVE(state))
-      png_chunk_benign_error(png_ptr, "non-positive width");
-
-   else
-   {
-      png_size_t heighti = i;
-
-      state = 0;
-      if (!png_check_fp_number((png_const_charp)buffer, length, &state, &i) ||
-         i != length)
-         png_chunk_benign_error(png_ptr, "bad height format");
-
-      else if (!PNG_FP_IS_POSITIVE(state))
-         png_chunk_benign_error(png_ptr, "non-positive height");
-
-      else
-         /* This is the (only) success case. */
-         png_set_sCAL_s(png_ptr, info_ptr, buffer[0],
-            (png_charp)buffer+1, (png_charp)buffer+heighti);
-   }
-}
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-void /* PRIVATE */
-png_handle_tIME(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[7];
-   png_time mod_time;
-
-   png_debug(1, "in png_handle_tIME");
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->mode & PNG_HAVE_IDAT)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-   if (length != 7)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 7);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   mod_time.second = buf[6];
-   mod_time.minute = buf[5];
-   mod_time.hour = buf[4];
-   mod_time.day = buf[3];
-   mod_time.month = buf[2];
-   mod_time.year = png_get_uint_16(buf);
-
-   png_set_tIME(png_ptr, info_ptr, &mod_time);
-}
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_tEXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_text  text_info;
-   png_bytep buffer;
-   png_charp key;
-   png_charp text;
-   png_uint_32 skip = 0;
-
-   png_debug(1, "in png_handle_tEXt");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "no space in chunk cache");
-         return;
-      }
-   }
-#endif
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   if (png_ptr->mode & PNG_HAVE_IDAT)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (length > 65535U)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "too large to fit in memory");
-      return;
-   }
-#endif
-
-   buffer = png_read_buffer(png_ptr, length+1, 1/*warn*/);
-
-   if (buffer == NULL)
-   {
-     png_chunk_benign_error(png_ptr, "out of memory");
-     return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, skip))
-      return;
-
-   key = (png_charp)buffer;
-   key[length] = 0;
-
-   for (text = key; *text; text++)
-      /* Empty loop to find end of key */ ;
-
-   if (text != key + length)
-      text++;
-
-   text_info.compression = PNG_TEXT_COMPRESSION_NONE;
-   text_info.key = key;
-   text_info.lang = NULL;
-   text_info.lang_key = NULL;
-   text_info.itxt_length = 0;
-   text_info.text = text;
-   text_info.text_length = strlen(text);
-
-   if (png_set_text_2(png_ptr, info_ptr, &text_info, 1))
-      png_warning(png_ptr, "Insufficient memory to process text chunk");
-}
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-/* Note: this does not correctly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_zTXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_const_charp errmsg = NULL;
-   png_bytep       buffer;
-   png_uint_32     keyword_length;
-
-   png_debug(1, "in png_handle_zTXt");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "no space in chunk cache");
-         return;
-      }
-   }
-#endif
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   if (png_ptr->mode & PNG_HAVE_IDAT)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-   buffer = png_read_buffer(png_ptr, length, 2/*silent*/);
-
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   /* TODO: also check that the keyword contents match the spec! */
-   for (keyword_length = 0;
-      keyword_length < length && buffer[keyword_length] != 0;
-      ++keyword_length)
-      /* Empty loop to find end of name */ ;
-
-   if (keyword_length > 79 || keyword_length < 1)
-      errmsg = "bad keyword";
-
-   /* zTXt must have some LZ data after the keyword, although it may expand to
-    * zero bytes; we need a '\0' at the end of the keyword, the compression type
-    * then the LZ data:
-    */
-   else if (keyword_length + 3 > length)
-      errmsg = "truncated";
-
-   else if (buffer[keyword_length+1] != PNG_COMPRESSION_TYPE_BASE)
-      errmsg = "unknown compression type";
-
-   else
-   {
-      png_alloc_size_t uncompressed_length = PNG_SIZE_MAX;
-
-      /* TODO: at present png_decompress_chunk imposes a single application
-       * level memory limit, this should be split to different values for iCCP
-       * and text chunks.
-       */
-      if (png_decompress_chunk(png_ptr, length, keyword_length+2,
-         &uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
-      {
-         png_text text;
-
-         /* It worked; png_ptr->read_buffer now looks like a tEXt chunk except
-          * for the extra compression type byte and the fact that it isn't
-          * necessarily '\0' terminated.
-          */
-         buffer = png_ptr->read_buffer;
-         buffer[uncompressed_length+(keyword_length+2)] = 0;
-
-         text.compression = PNG_TEXT_COMPRESSION_zTXt;
-         text.key = (png_charp)buffer;
-         text.text = (png_charp)(buffer + keyword_length+2);
-         text.text_length = uncompressed_length;
-         text.itxt_length = 0;
-         text.lang = NULL;
-         text.lang_key = NULL;
-
-         if (png_set_text_2(png_ptr, info_ptr, &text, 1))
-            errmsg = "insufficient memory";
-      }
-
-      else
-         errmsg = png_ptr->zstream.msg;
-   }
-
-   if (errmsg != NULL)
-      png_chunk_benign_error(png_ptr, errmsg);
-}
-#endif
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-/* Note: this does not correctly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_iTXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_const_charp errmsg = NULL;
-   png_bytep buffer;
-   png_uint_32 prefix_length;
-
-   png_debug(1, "in png_handle_iTXt");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "no space in chunk cache");
-         return;
-      }
-   }
-#endif
-
-   if (!(png_ptr->mode & PNG_HAVE_IHDR))
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   if (png_ptr->mode & PNG_HAVE_IDAT)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-   buffer = png_read_buffer(png_ptr, length+1, 1/*warn*/);
-
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, 0))
-      return;
-
-   /* First the keyword. */
-   for (prefix_length=0;
-      prefix_length < length && buffer[prefix_length] != 0;
-      ++prefix_length)
-      /* Empty loop */ ;
-
-   /* Perform a basic check on the keyword length here. */
-   if (prefix_length > 79 || prefix_length < 1)
-      errmsg = "bad keyword";
-
-   /* Expect keyword, compression flag, compression type, language, translated
-    * keyword (both may be empty but are 0 terminated) then the text, which may
-    * be empty.
-    */
-   else if (prefix_length + 5 > length)
-      errmsg = "truncated";
-
-   else if (buffer[prefix_length+1] == 0 ||
-      (buffer[prefix_length+1] == 1 &&
-      buffer[prefix_length+2] == PNG_COMPRESSION_TYPE_BASE))
-   {
-      int compressed = buffer[prefix_length+1] != 0;
-      png_uint_32 language_offset, translated_keyword_offset;
-      png_alloc_size_t uncompressed_length = 0;
-
-      /* Now the language tag */
-      prefix_length += 3;
-      language_offset = prefix_length;
-
-      for (; prefix_length < length && buffer[prefix_length] != 0;
-         ++prefix_length)
-         /* Empty loop */ ;
-
-      /* WARNING: the length may be invalid here, this is checked below. */
-      translated_keyword_offset = ++prefix_length;
-
-      for (; prefix_length < length && buffer[prefix_length] != 0;
-         ++prefix_length)
-         /* Empty loop */ ;
-
-      /* prefix_length should now be at the trailing '\0' of the translated
-       * keyword, but it may already be over the end.  None of this arithmetic
-       * can overflow because chunks are at most 2^31 bytes long, but on 16-bit
-       * systems the available allocaton may overflow.
-       */
-      ++prefix_length;
-
-      if (!compressed && prefix_length <= length)
-         uncompressed_length = length - prefix_length;
-
-      else if (compressed && prefix_length < length)
-      {
-         uncompressed_length = PNG_SIZE_MAX;
-
-         /* TODO: at present png_decompress_chunk imposes a single application
-          * level memory limit, this should be split to different values for
-          * iCCP and text chunks.
-          */
-         if (png_decompress_chunk(png_ptr, length, prefix_length,
-            &uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
-            buffer = png_ptr->read_buffer;
-
-         else
-            errmsg = png_ptr->zstream.msg;
-      }
-
-      else
-         errmsg = "truncated";
-
-      if (errmsg == NULL)
-      {
-         png_text text;
-
-         buffer[uncompressed_length+prefix_length] = 0;
-
-         if (compressed)
-            text.compression = PNG_ITXT_COMPRESSION_NONE;
-
-         else
-            text.compression = PNG_ITXT_COMPRESSION_zTXt;
-
-         text.key = (png_charp)buffer;
-         text.lang = (png_charp)buffer + language_offset;
-         text.lang_key = (png_charp)buffer + translated_keyword_offset;
-         text.text = (png_charp)buffer + prefix_length;
-         text.text_length = 0;
-         text.itxt_length = uncompressed_length;
-
-         if (png_set_text_2(png_ptr, info_ptr, &text, 1))
-            errmsg = "insufficient memory";
-      }
-   }
-
-   else
-      errmsg = "bad compression info";
-
-   if (errmsg != NULL)
-      png_chunk_benign_error(png_ptr, errmsg);
-}
-#endif
-
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-/* Utility function for png_handle_unknown; set up png_ptr::unknown_chunk */
-static int
-png_cache_unknown_chunk(png_structrp png_ptr, png_uint_32 length)
-{
-   png_alloc_size_t limit = PNG_SIZE_MAX;
-
-   if (png_ptr->unknown_chunk.data != NULL)
-   {
-      png_free(png_ptr, png_ptr->unknown_chunk.data);
-      png_ptr->unknown_chunk.data = NULL;
-   }
-
-#  ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-      if (png_ptr->user_chunk_malloc_max > 0 &&
-         png_ptr->user_chunk_malloc_max < limit)
-         limit = png_ptr->user_chunk_malloc_max;
-
-#  elif PNG_USER_CHUNK_MALLOC_MAX > 0
-      if (PNG_USER_CHUNK_MALLOC_MAX < limit)
-         limit = PNG_USER_CHUNK_MALLOC_MAX;
-#  endif
-
-   if (length <= limit)
-   {
-      PNG_CSTRING_FROM_CHUNK(png_ptr->unknown_chunk.name, png_ptr->chunk_name);
-      /* The following is safe because of the PNG_SIZE_MAX init above */
-      png_ptr->unknown_chunk.size = (png_size_t)length/*SAFE*/;
-      /* 'mode' is a flag array, only the bottom four bits matter here */
-      png_ptr->unknown_chunk.location = (png_byte)png_ptr->mode/*SAFE*/;
-
-      if (length == 0)
-         png_ptr->unknown_chunk.data = NULL;
-
-      else
-      {
-         /* Do a 'warn' here - it is handled below. */
-         png_ptr->unknown_chunk.data = png_voidcast(png_bytep,
-            png_malloc_warn(png_ptr, length));
-      }
-   }
-
-   if (png_ptr->unknown_chunk.data == NULL && length > 0)
-   {
-      /* This is benign because we clean up correctly */
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "unknown chunk exceeds memory limits");
-      return 0;
-   }
-
-   else
-   {
-      if (length > 0)
-         png_crc_read(png_ptr, png_ptr->unknown_chunk.data, length);
-      png_crc_finish(png_ptr, 0);
-      return 1;
-   }
-}
-#endif /* PNG_READ_UNKNOWN_CHUNKS_SUPPORTED */
-
-/* Handle an unknown, or known but disabled, chunk */
-void /* PRIVATE */
-png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
-   png_uint_32 length, int keep)
-{
-   int handled = 0; /* the chunk was handled */
-
-   png_debug(1, "in png_handle_unknown");
-
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-   /* NOTE: this code is based on the code in libpng-1.4.12 except for fixing
-    * the bug which meant that setting a non-default behavior for a specific
-    * chunk would be ignored (the default was always used unless a user
-    * callback was installed).
-    *
-    * 'keep' is the value from the png_chunk_unknown_handling, the setting for
-    * this specific chunk_name, if PNG_HANDLE_AS_UNKNOWN_SUPPORTED, if not it
-    * will always be PNG_HANDLE_CHUNK_AS_DEFAULT and it needs to be set here.
-    * This is just an optimization to avoid multiple calls to the lookup
-    * function.
-    */
-#  ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-#     ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-         keep = png_chunk_unknown_handling(png_ptr, png_ptr->chunk_name);
-#     endif
-#  endif
-
-   /* One of the following methods will read the chunk or skip it (at least one
-    * of these is always defined because this is the only way to switch on
-    * PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-    */
-#  ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-      /* The user callback takes precedence over the chunk keep value, but the
-       * keep value is still required to validate a save of a critical chunk.
-       */
-      if (png_ptr->read_user_chunk_fn != NULL)
-      {
-         if (png_cache_unknown_chunk(png_ptr, length))
-         {
-            /* Callback to user unknown chunk handler */
-            int ret = (*(png_ptr->read_user_chunk_fn))(png_ptr,
-               &png_ptr->unknown_chunk);
-
-            /* ret is:
-             * negative: An error occured, png_chunk_error will be called.
-             *     zero: The chunk was not handled, the chunk will be discarded
-             *           unless png_set_keep_unknown_chunks has been used to set
-             *           a 'keep' behavior for this particular chunk, in which
-             *           case that will be used.  A critical chunk will cause an
-             *           error at this point unless it is to be saved.
-             * positive: The chunk was handled, libpng will ignore/discard it.
-             */
-            if (ret < 0)
-               png_chunk_error(png_ptr, "error in user chunk");
-
-            else if (ret == 0)
-            {
-               /* If the keep value is 'default' or 'never' override it, but
-                * still error out on critical chunks unless the keep value is
-                * 'always'  While this is weird it is the behavior in 1.4.12.
-                * A possible improvement would be to obey the value set for the
-                * chunk, but this would be an API change that would probably
-                * damage some applications.
-                *
-                * The png_app_warning below catches the case that matters, where
-                * the application has not set specific save or ignore for this
-                * chunk or global save or ignore.
-                */
-               if (keep < PNG_HANDLE_CHUNK_IF_SAFE)
-               {
-#                 ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-                     if (png_ptr->unknown_default < PNG_HANDLE_CHUNK_IF_SAFE)
-                     {
-                        png_chunk_warning(png_ptr, "Saving unknown chunk:");
-                        png_app_warning(png_ptr,
-                           "forcing save of an unhandled chunk;"
-                           " please call png_set_keep_unknown_chunks");
-                           /* with keep = PNG_HANDLE_CHUNK_IF_SAFE */
-                     }
-#                 endif
-                  keep = PNG_HANDLE_CHUNK_IF_SAFE;
-               }
-            }
-
-            else /* chunk was handled */
-            {
-               handled = 1;
-               /* Critical chunks can be safely discarded at this point. */
-               keep = PNG_HANDLE_CHUNK_NEVER;
-            }
-         }
-
-         else
-            keep = PNG_HANDLE_CHUNK_NEVER; /* insufficient memory */
-      }
-
-      else
-         /* Use the SAVE_UNKNOWN_CHUNKS code or skip the chunk */
-#  endif /* PNG_READ_USER_CHUNKS_SUPPORTED */
-
-#  ifdef PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
-      {
-         /* keep is currently just the per-chunk setting, if there was no
-          * setting change it to the global default now (not that this may
-          * still be AS_DEFAULT) then obtain the cache of the chunk if required,
-          * if not simply skip the chunk.
-          */
-         if (keep == PNG_HANDLE_CHUNK_AS_DEFAULT)
-            keep = png_ptr->unknown_default;
-
-         if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
-            (keep == PNG_HANDLE_CHUNK_IF_SAFE &&
-             PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name)))
-         {
-            if (!png_cache_unknown_chunk(png_ptr, length))
-               keep = PNG_HANDLE_CHUNK_NEVER;
-         }
-
-         else
-            png_crc_finish(png_ptr, length);
-      }
-#  else
-#     ifndef PNG_READ_USER_CHUNKS_SUPPORTED
-#        error no method to support READ_UNKNOWN_CHUNKS
-#     endif
-
-      {
-         /* If here there is no read callback pointer set and no support is
-          * compiled in to just save the unknown chunks, so simply skip this
-          * chunk.  If 'keep' is something other than AS_DEFAULT or NEVER then
-          * the app has erroneously asked for unknown chunk saving when there
-          * is no support.
-          */
-         if (keep > PNG_HANDLE_CHUNK_NEVER)
-            png_app_error(png_ptr, "no unknown chunk support available");
-
-         png_crc_finish(png_ptr, length);
-      }
-#  endif
-
-#  ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-      /* Now store the chunk in the chunk list if appropriate, and if the limits
-       * permit it.
-       */
-      if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
-         (keep == PNG_HANDLE_CHUNK_IF_SAFE &&
-          PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name)))
-      {
-#     ifdef PNG_USER_LIMITS_SUPPORTED
-         switch (png_ptr->user_chunk_cache_max)
-         {
-            case 2:
-               png_ptr->user_chunk_cache_max = 1;
-               png_chunk_benign_error(png_ptr, "no space in chunk cache");
-               /* FALL THROUGH */
-            case 1:
-               /* NOTE: prior to 1.6.0 this case resulted in an unknown critical
-                * chunk being skipped, now there will be a hard error below.
-                */
-               break;
-
-            default: /* not at limit */
-               --(png_ptr->user_chunk_cache_max);
-               /* FALL THROUGH */
-            case 0: /* no limit */
-#     endif /* PNG_USER_LIMITS_SUPPORTED */
-               /* Here when the limit isn't reached or when limits are compiled
-                * out; store the chunk.
-                */
-               png_set_unknown_chunks(png_ptr, info_ptr,
-                  &png_ptr->unknown_chunk, 1);
-               handled = 1;
-#     ifdef PNG_USER_LIMITS_SUPPORTED
-               break;
-         }
-#     endif
-      }
-#  else /* no store support! */
-      PNG_UNUSED(info_ptr)
-#     error untested code (reading unknown chunks with no store support)
-#  endif
-
-   /* Regardless of the error handling below the cached data (if any) can be
-    * freed now.  Notice that the data is not freed if there is a png_error, but
-    * it will be freed by destroy_read_struct.
-    */
-   if (png_ptr->unknown_chunk.data != NULL)
-      png_free(png_ptr, png_ptr->unknown_chunk.data);
-   png_ptr->unknown_chunk.data = NULL;
-
-#else /* !PNG_READ_UNKNOWN_CHUNKS_SUPPORTED */
-   /* There is no support to read an unknown chunk, so just skip it. */
-   png_crc_finish(png_ptr, length);
-   PNG_UNUSED(info_ptr)
-   PNG_UNUSED(keep)
-#endif /* !PNG_READ_UNKNOWN_CHUNKS_SUPPORTED */
-
-   /* Check for unhandled critical chunks */
-   if (!handled && PNG_CHUNK_CRITICAL(png_ptr->chunk_name))
-      png_chunk_error(png_ptr, "unhandled critical chunk");
-}
-
-/* This function is called to verify that a chunk name is valid.
- * This function can't have the "critical chunk check" incorporated
- * into it, since in the future we will need to be able to call user
- * functions to handle unknown critical chunks after we check that
- * the chunk name itself is valid.
- */
-
-/* Bit hacking: the test for an invalid byte in the 4 byte chunk name is:
- *
- * ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
- */
-
-void /* PRIVATE */
-png_check_chunk_name(png_structrp png_ptr, png_uint_32 chunk_name)
-{
-   int i;
-
-   png_debug(1, "in png_check_chunk_name");
-
-   for (i=1; i<=4; ++i)
-   {
-      int c = chunk_name & 0xff;
-
-      if (c < 65 || c > 122 || (c > 90 && c < 97))
-         png_chunk_error(png_ptr, "invalid chunk type");
-
-      chunk_name >>= 8;
-   }
-}
-
-/* Combines the row recently read in with the existing pixels in the row.  This
- * routine takes care of alpha and transparency if requested.  This routine also
- * handles the two methods of progressive display of interlaced images,
- * depending on the 'display' value; if 'display' is true then the whole row
- * (dp) is filled from the start by replicating the available pixels.  If
- * 'display' is false only those pixels present in the pass are filled in.
- */
-void /* PRIVATE */
-png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
-{
-   unsigned int pixel_depth = png_ptr->transformed_pixel_depth;
-   png_const_bytep sp = png_ptr->row_buf + 1;
-   png_uint_32 row_width = png_ptr->width;
-   unsigned int pass = png_ptr->pass;
-   png_bytep end_ptr = 0;
-   png_byte end_byte = 0;
-   unsigned int end_mask;
-
-   png_debug(1, "in png_combine_row");
-
-   /* Added in 1.5.6: it should not be possible to enter this routine until at
-    * least one row has been read from the PNG data and transformed.
-    */
-   if (pixel_depth == 0)
-      png_error(png_ptr, "internal row logic error");
-
-   /* Added in 1.5.4: the pixel depth should match the information returned by
-    * any call to png_read_update_info at this point.  Do not continue if we got
-    * this wrong.
-    */
-   if (png_ptr->info_rowbytes != 0 && png_ptr->info_rowbytes !=
-          PNG_ROWBYTES(pixel_depth, row_width))
-      png_error(png_ptr, "internal row size calculation error");
-
-   /* Don't expect this to ever happen: */
-   if (row_width == 0)
-      png_error(png_ptr, "internal row width error");
-
-   /* Preserve the last byte in cases where only part of it will be overwritten,
-    * the multiply below may overflow, we don't care because ANSI-C guarantees
-    * we get the low bits.
-    */
-   end_mask = (pixel_depth * row_width) & 7;
-   if (end_mask != 0)
-   {
-      /* end_ptr == NULL is a flag to say do nothing */
-      end_ptr = dp + PNG_ROWBYTES(pixel_depth, row_width) - 1;
-      end_byte = *end_ptr;
-#     ifdef PNG_READ_PACKSWAP_SUPPORTED
-         if (png_ptr->transformations & PNG_PACKSWAP) /* little-endian byte */
-            end_mask = 0xff << end_mask;
-
-         else /* big-endian byte */
-#     endif
-         end_mask = 0xff >> end_mask;
-      /* end_mask is now the bits to *keep* from the destination row */
-   }
-
-   /* For non-interlaced images this reduces to a memcpy(). A memcpy()
-    * will also happen if interlacing isn't supported or if the application
-    * does not call png_set_interlace_handling().  In the latter cases the
-    * caller just gets a sequence of the unexpanded rows from each interlace
-    * pass.
-    */
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE) &&
-      pass < 6 && (display == 0 ||
-      /* The following copies everything for 'display' on passes 0, 2 and 4. */
-      (display == 1 && (pass & 1) != 0)))
-   {
-      /* Narrow images may have no bits in a pass; the caller should handle
-       * this, but this test is cheap:
-       */
-      if (row_width <= PNG_PASS_START_COL(pass))
-         return;
-
-      if (pixel_depth < 8)
-      {
-         /* For pixel depths up to 4 bpp the 8-pixel mask can be expanded to fit
-          * into 32 bits, then a single loop over the bytes using the four byte
-          * values in the 32-bit mask can be used.  For the 'display' option the
-          * expanded mask may also not require any masking within a byte.  To
-          * make this work the PACKSWAP option must be taken into account - it
-          * simply requires the pixels to be reversed in each byte.
-          *
-          * The 'regular' case requires a mask for each of the first 6 passes,
-          * the 'display' case does a copy for the even passes in the range
-          * 0..6.  This has already been handled in the test above.
-          *
-          * The masks are arranged as four bytes with the first byte to use in
-          * the lowest bits (little-endian) regardless of the order (PACKSWAP or
-          * not) of the pixels in each byte.
-          *
-          * NOTE: the whole of this logic depends on the caller of this function
-          * only calling it on rows appropriate to the pass.  This function only
-          * understands the 'x' logic; the 'y' logic is handled by the caller.
-          *
-          * The following defines allow generation of compile time constant bit
-          * masks for each pixel depth and each possibility of swapped or not
-          * swapped bytes.  Pass 'p' is in the range 0..6; 'x', a pixel index,
-          * is in the range 0..7; and the result is 1 if the pixel is to be
-          * copied in the pass, 0 if not.  'S' is for the sparkle method, 'B'
-          * for the block method.
-          *
-          * With some compilers a compile time expression of the general form:
-          *
-          *    (shift >= 32) ? (a >> (shift-32)) : (b >> shift)
-          *
-          * Produces warnings with values of 'shift' in the range 33 to 63
-          * because the right hand side of the ?: expression is evaluated by
-          * the compiler even though it isn't used.  Microsoft Visual C (various
-          * versions) and the Intel C compiler are known to do this.  To avoid
-          * this the following macros are used in 1.5.6.  This is a temporary
-          * solution to avoid destabilizing the code during the release process.
-          */
-#        if PNG_USE_COMPILE_TIME_MASKS
-#           define PNG_LSR(x,s) ((x)>>((s) & 0x1f))
-#           define PNG_LSL(x,s) ((x)<<((s) & 0x1f))
-#        else
-#           define PNG_LSR(x,s) ((x)>>(s))
-#           define PNG_LSL(x,s) ((x)<<(s))
-#        endif
-#        define S_COPY(p,x) (((p)<4 ? PNG_LSR(0x80088822,(3-(p))*8+(7-(x))) :\
-           PNG_LSR(0xaa55ff00,(7-(p))*8+(7-(x)))) & 1)
-#        define B_COPY(p,x) (((p)<4 ? PNG_LSR(0xff0fff33,(3-(p))*8+(7-(x))) :\
-           PNG_LSR(0xff55ff00,(7-(p))*8+(7-(x)))) & 1)
-
-         /* Return a mask for pass 'p' pixel 'x' at depth 'd'.  The mask is
-          * little endian - the first pixel is at bit 0 - however the extra
-          * parameter 's' can be set to cause the mask position to be swapped
-          * within each byte, to match the PNG format.  This is done by XOR of
-          * the shift with 7, 6 or 4 for bit depths 1, 2 and 4.
-          */
-#        define PIXEL_MASK(p,x,d,s) \
-            (PNG_LSL(((PNG_LSL(1U,(d)))-1),(((x)*(d))^((s)?8-(d):0))))
-
-         /* Hence generate the appropriate 'block' or 'sparkle' pixel copy mask.
-          */
-#        define S_MASKx(p,x,d,s) (S_COPY(p,x)?PIXEL_MASK(p,x,d,s):0)
-#        define B_MASKx(p,x,d,s) (B_COPY(p,x)?PIXEL_MASK(p,x,d,s):0)
-
-         /* Combine 8 of these to get the full mask.  For the 1-bpp and 2-bpp
-          * cases the result needs replicating, for the 4-bpp case the above
-          * generates a full 32 bits.
-          */
-#        define MASK_EXPAND(m,d) ((m)*((d)==1?0x01010101:((d)==2?0x00010001:1)))
-
-#        define S_MASK(p,d,s) MASK_EXPAND(S_MASKx(p,0,d,s) + S_MASKx(p,1,d,s) +\
-            S_MASKx(p,2,d,s) + S_MASKx(p,3,d,s) + S_MASKx(p,4,d,s) +\
-            S_MASKx(p,5,d,s) + S_MASKx(p,6,d,s) + S_MASKx(p,7,d,s), d)
-
-#        define B_MASK(p,d,s) MASK_EXPAND(B_MASKx(p,0,d,s) + B_MASKx(p,1,d,s) +\
-            B_MASKx(p,2,d,s) + B_MASKx(p,3,d,s) + B_MASKx(p,4,d,s) +\
-            B_MASKx(p,5,d,s) + B_MASKx(p,6,d,s) + B_MASKx(p,7,d,s), d)
-
-#if PNG_USE_COMPILE_TIME_MASKS
-         /* Utility macros to construct all the masks for a depth/swap
-          * combination.  The 's' parameter says whether the format is PNG
-          * (big endian bytes) or not.  Only the three odd-numbered passes are
-          * required for the display/block algorithm.
-          */
-#        define S_MASKS(d,s) { S_MASK(0,d,s), S_MASK(1,d,s), S_MASK(2,d,s),\
-            S_MASK(3,d,s), S_MASK(4,d,s), S_MASK(5,d,s) }
-
-#        define B_MASKS(d,s) { B_MASK(1,d,s), S_MASK(3,d,s), S_MASK(5,d,s) }
-
-#        define DEPTH_INDEX(d) ((d)==1?0:((d)==2?1:2))
-
-         /* Hence the pre-compiled masks indexed by PACKSWAP (or not), depth and
-          * then pass:
-          */
-         static PNG_CONST png_uint_32 row_mask[2/*PACKSWAP*/][3/*depth*/][6] =
-         {
-            /* Little-endian byte masks for PACKSWAP */
-            { S_MASKS(1,0), S_MASKS(2,0), S_MASKS(4,0) },
-            /* Normal (big-endian byte) masks - PNG format */
-            { S_MASKS(1,1), S_MASKS(2,1), S_MASKS(4,1) }
-         };
-
-         /* display_mask has only three entries for the odd passes, so index by
-          * pass>>1.
-          */
-         static PNG_CONST png_uint_32 display_mask[2][3][3] =
-         {
-            /* Little-endian byte masks for PACKSWAP */
-            { B_MASKS(1,0), B_MASKS(2,0), B_MASKS(4,0) },
-            /* Normal (big-endian byte) masks - PNG format */
-            { B_MASKS(1,1), B_MASKS(2,1), B_MASKS(4,1) }
-         };
-
-#        define MASK(pass,depth,display,png)\
-            ((display)?display_mask[png][DEPTH_INDEX(depth)][pass>>1]:\
-               row_mask[png][DEPTH_INDEX(depth)][pass])
-
-#else /* !PNG_USE_COMPILE_TIME_MASKS */
-         /* This is the runtime alternative: it seems unlikely that this will
-          * ever be either smaller or faster than the compile time approach.
-          */
-#        define MASK(pass,depth,display,png)\
-            ((display)?B_MASK(pass,depth,png):S_MASK(pass,depth,png))
-#endif /* !PNG_USE_COMPILE_TIME_MASKS */
-
-         /* Use the appropriate mask to copy the required bits.  In some cases
-          * the byte mask will be 0 or 0xff, optimize these cases.  row_width is
-          * the number of pixels, but the code copies bytes, so it is necessary
-          * to special case the end.
-          */
-         png_uint_32 pixels_per_byte = 8 / pixel_depth;
-         png_uint_32 mask;
-
-#        ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if (png_ptr->transformations & PNG_PACKSWAP)
-               mask = MASK(pass, pixel_depth, display, 0);
-
-            else
-#        endif
-            mask = MASK(pass, pixel_depth, display, 1);
-
-         for (;;)
-         {
-            png_uint_32 m;
-
-            /* It doesn't matter in the following if png_uint_32 has more than
-             * 32 bits because the high bits always match those in m<<24; it is,
-             * however, essential to use OR here, not +, because of this.
-             */
-            m = mask;
-            mask = (m >> 8) | (m << 24); /* rotate right to good compilers */
-            m &= 0xff;
-
-            if (m != 0) /* something to copy */
-            {
-               if (m != 0xff)
-                  *dp = (png_byte)((*dp & ~m) | (*sp & m));
-               else
-                  *dp = *sp;
-            }
-
-            /* NOTE: this may overwrite the last byte with garbage if the image
-             * is not an exact number of bytes wide; libpng has always done
-             * this.
-             */
-            if (row_width <= pixels_per_byte)
-               break; /* May need to restore part of the last byte */
-
-            row_width -= pixels_per_byte;
-            ++dp;
-            ++sp;
-         }
-      }
-
-      else /* pixel_depth >= 8 */
-      {
-         unsigned int bytes_to_copy, bytes_to_jump;
-
-         /* Validate the depth - it must be a multiple of 8 */
-         if (pixel_depth & 7)
-            png_error(png_ptr, "invalid user transform pixel depth");
-
-         pixel_depth >>= 3; /* now in bytes */
-         row_width *= pixel_depth;
-
-         /* Regardless of pass number the Adam 7 interlace always results in a
-          * fixed number of pixels to copy then to skip.  There may be a
-          * different number of pixels to skip at the start though.
-          */
-         {
-            unsigned int offset = PNG_PASS_START_COL(pass) * pixel_depth;
-
-            row_width -= offset;
-            dp += offset;
-            sp += offset;
-         }
-
-         /* Work out the bytes to copy. */
-         if (display)
-         {
-            /* When doing the 'block' algorithm the pixel in the pass gets
-             * replicated to adjacent pixels.  This is why the even (0,2,4,6)
-             * passes are skipped above - the entire expanded row is copied.
-             */
-            bytes_to_copy = (1<<((6-pass)>>1)) * pixel_depth;
-
-            /* But don't allow this number to exceed the actual row width. */
-            if (bytes_to_copy > row_width)
-               bytes_to_copy = row_width;
-         }
-
-         else /* normal row; Adam7 only ever gives us one pixel to copy. */
-            bytes_to_copy = pixel_depth;
-
-         /* In Adam7 there is a constant offset between where the pixels go. */
-         bytes_to_jump = PNG_PASS_COL_OFFSET(pass) * pixel_depth;
-
-         /* And simply copy these bytes.  Some optimization is possible here,
-          * depending on the value of 'bytes_to_copy'.  Special case the low
-          * byte counts, which we know to be frequent.
-          *
-          * Notice that these cases all 'return' rather than 'break' - this
-          * avoids an unnecessary test on whether to restore the last byte
-          * below.
-          */
-         switch (bytes_to_copy)
-         {
-            case 1:
-               for (;;)
-               {
-                  *dp = *sp;
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  dp += bytes_to_jump;
-                  sp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-               }
-
-            case 2:
-               /* There is a possibility of a partial copy at the end here; this
-                * slows the code down somewhat.
-                */
-               do
-               {
-                  dp[0] = sp[0], dp[1] = sp[1];
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  sp += bytes_to_jump;
-                  dp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-               }
-               while (row_width > 1);
-
-               /* And there can only be one byte left at this point: */
-               *dp = *sp;
-               return;
-
-            case 3:
-               /* This can only be the RGB case, so each copy is exactly one
-                * pixel and it is not necessary to check for a partial copy.
-                */
-               for(;;)
-               {
-                  dp[0] = sp[0], dp[1] = sp[1], dp[2] = sp[2];
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  sp += bytes_to_jump;
-                  dp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-               }
-
-            default:
-#if PNG_ALIGN_TYPE != PNG_ALIGN_NONE
-               /* Check for double byte alignment and, if possible, use a
-                * 16-bit copy.  Don't attempt this for narrow images - ones that
-                * are less than an interlace panel wide.  Don't attempt it for
-                * wide bytes_to_copy either - use the memcpy there.
-                */
-               if (bytes_to_copy < 16 /*else use memcpy*/ &&
-                  png_isaligned(dp, png_uint_16) &&
-                  png_isaligned(sp, png_uint_16) &&
-                  bytes_to_copy % (sizeof (png_uint_16)) == 0 &&
-                  bytes_to_jump % (sizeof (png_uint_16)) == 0)
-               {
-                  /* Everything is aligned for png_uint_16 copies, but try for
-                   * png_uint_32 first.
-                   */
-                  if (png_isaligned(dp, png_uint_32) &&
-                     png_isaligned(sp, png_uint_32) &&
-                     bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
-                     bytes_to_jump % (sizeof (png_uint_32)) == 0)
-                  {
-                     png_uint_32p dp32 = png_aligncast(png_uint_32p,dp);
-                     png_const_uint_32p sp32 = png_aligncastconst(
-                        png_const_uint_32p, sp);
-                     size_t skip = (bytes_to_jump-bytes_to_copy) /
-                        (sizeof (png_uint_32));
-
-                     do
-                     {
-                        size_t c = bytes_to_copy;
-                        do
-                        {
-                           *dp32++ = *sp32++;
-                           c -= (sizeof (png_uint_32));
-                        }
-                        while (c > 0);
-
-                        if (row_width <= bytes_to_jump)
-                           return;
-
-                        dp32 += skip;
-                        sp32 += skip;
-                        row_width -= bytes_to_jump;
-                     }
-                     while (bytes_to_copy <= row_width);
-
-                     /* Get to here when the row_width truncates the final copy.
-                      * There will be 1-3 bytes left to copy, so don't try the
-                      * 16-bit loop below.
-                      */
-                     dp = (png_bytep)dp32;
-                     sp = (png_const_bytep)sp32;
-                     do
-                        *dp++ = *sp++;
-                     while (--row_width > 0);
-                     return;
-                  }
-
-                  /* Else do it in 16-bit quantities, but only if the size is
-                   * not too large.
-                   */
-                  else
-                  {
-                     png_uint_16p dp16 = png_aligncast(png_uint_16p, dp);
-                     png_const_uint_16p sp16 = png_aligncastconst(
-                        png_const_uint_16p, sp);
-                     size_t skip = (bytes_to_jump-bytes_to_copy) /
-                        (sizeof (png_uint_16));
-
-                     do
-                     {
-                        size_t c = bytes_to_copy;
-                        do
-                        {
-                           *dp16++ = *sp16++;
-                           c -= (sizeof (png_uint_16));
-                        }
-                        while (c > 0);
-
-                        if (row_width <= bytes_to_jump)
-                           return;
-
-                        dp16 += skip;
-                        sp16 += skip;
-                        row_width -= bytes_to_jump;
-                     }
-                     while (bytes_to_copy <= row_width);
-
-                     /* End of row - 1 byte left, bytes_to_copy > row_width: */
-                     dp = (png_bytep)dp16;
-                     sp = (png_const_bytep)sp16;
-                     do
-                        *dp++ = *sp++;
-                     while (--row_width > 0);
-                     return;
-                  }
-               }
-#endif /* PNG_ALIGN_ code */
-
-               /* The true default - use a memcpy: */
-               for (;;)
-               {
-                  memcpy(dp, sp, bytes_to_copy);
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  sp += bytes_to_jump;
-                  dp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-                  if (bytes_to_copy > row_width)
-                     bytes_to_copy = row_width;
-               }
-         }
-
-         /* NOT REACHED*/
-      } /* pixel_depth >= 8 */
-
-      /* Here if pixel_depth < 8 to check 'end_ptr' below. */
-   }
-   else
-#endif
-
-   /* If here then the switch above wasn't used so just memcpy the whole row
-    * from the temporary row buffer (notice that this overwrites the end of the
-    * destination row if it is a partial byte.)
-    */
-   memcpy(dp, sp, PNG_ROWBYTES(pixel_depth, row_width));
-
-   /* Restore the overwritten bits from the last byte if necessary. */
-   if (end_ptr != NULL)
-      *end_ptr = (png_byte)((end_byte & end_mask) | (*end_ptr & ~end_mask));
-}
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-void /* PRIVATE */
-png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
-   png_uint_32 transformations /* Because these may affect the byte layout */)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-   /* Offset to next interlace block */
-   static PNG_CONST int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   png_debug(1, "in png_do_read_interlace");
-   if (row != NULL && row_info != NULL)
-   {
-      png_uint_32 final_width;
-
-      final_width = row_info->width * png_pass_inc[pass];
-
-      switch (row_info->pixel_depth)
-      {
-         case 1:
-         {
-            png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3);
-            png_bytep dp = row + (png_size_t)((final_width - 1) >> 3);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            int jstop = png_pass_inc[pass];
-            png_byte v;
-            png_uint_32 i;
-            int j;
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if (transformations & PNG_PACKSWAP)
-            {
-                sshift = (int)((row_info->width + 7) & 0x07);
-                dshift = (int)((final_width + 7) & 0x07);
-                s_start = 7;
-                s_end = 0;
-                s_inc = -1;
-            }
-
-            else
-#endif
-            {
-                sshift = 7 - (int)((row_info->width + 7) & 0x07);
-                dshift = 7 - (int)((final_width + 7) & 0x07);
-                s_start = 0;
-                s_end = 7;
-                s_inc = 1;
-            }
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               v = (png_byte)((*sp >> sshift) & 0x01);
-               for (j = 0; j < jstop; j++)
-               {
-                  unsigned int tmp = *dp & (0x7f7f >> (7 - dshift));
-                  tmp |= v << dshift;
-                  *dp = (png_byte)(tmp & 0xff);
-
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-
-                  else
-                     dshift += s_inc;
-               }
-
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
-                  sp--;
-               }
-
-               else
-                  sshift += s_inc;
-            }
-            break;
-         }
-
-         case 2:
-         {
-            png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2);
-            png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            int jstop = png_pass_inc[pass];
-            png_uint_32 i;
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if (transformations & PNG_PACKSWAP)
-            {
-               sshift = (int)(((row_info->width + 3) & 0x03) << 1);
-               dshift = (int)(((final_width + 3) & 0x03) << 1);
-               s_start = 6;
-               s_end = 0;
-               s_inc = -2;
-            }
-
-            else
-#endif
-            {
-               sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
-               dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1);
-               s_start = 0;
-               s_end = 6;
-               s_inc = 2;
-            }
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v;
-               int j;
-
-               v = (png_byte)((*sp >> sshift) & 0x03);
-               for (j = 0; j < jstop; j++)
-               {
-                  unsigned int tmp = *dp & (0x3f3f >> (6 - dshift));
-                  tmp |= v << dshift;
-                  *dp = (png_byte)(tmp & 0xff);
-
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-
-                  else
-                     dshift += s_inc;
-               }
-
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
-                  sp--;
-               }
-
-               else
-                  sshift += s_inc;
-            }
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1);
-            png_bytep dp = row + (png_size_t)((final_width - 1) >> 1);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            png_uint_32 i;
-            int jstop = png_pass_inc[pass];
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if (transformations & PNG_PACKSWAP)
-            {
-               sshift = (int)(((row_info->width + 1) & 0x01) << 2);
-               dshift = (int)(((final_width + 1) & 0x01) << 2);
-               s_start = 4;
-               s_end = 0;
-               s_inc = -4;
-            }
-
-            else
-#endif
-            {
-               sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
-               dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2);
-               s_start = 0;
-               s_end = 4;
-               s_inc = 4;
-            }
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v = (png_byte)((*sp >> sshift) & 0x0f);
-               int j;
-
-               for (j = 0; j < jstop; j++)
-               {
-                  unsigned int tmp = *dp & (0xf0f >> (4 - dshift));
-                  tmp |= v << dshift;
-                  *dp = (png_byte)(tmp & 0xff);
-
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-
-                  else
-                     dshift += s_inc;
-               }
-
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
-                  sp--;
-               }
-
-               else
-                  sshift += s_inc;
-            }
-            break;
-         }
-
-         default:
-         {
-            png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
-
-            png_bytep sp = row + (png_size_t)(row_info->width - 1)
-                * pixel_bytes;
-
-            png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
-
-            int jstop = png_pass_inc[pass];
-            png_uint_32 i;
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v[8];
-               int j;
-
-               memcpy(v, sp, pixel_bytes);
-
-               for (j = 0; j < jstop; j++)
-               {
-                  memcpy(dp, v, pixel_bytes);
-                  dp -= pixel_bytes;
-               }
-
-               sp -= pixel_bytes;
-            }
-            break;
-         }
-      }
-
-      row_info->width = final_width;
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, final_width);
-   }
-#ifndef PNG_READ_PACKSWAP_SUPPORTED
-   PNG_UNUSED(transformations)  /* Silence compiler warning */
-#endif
-}
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-
-static void
-png_read_filter_row_sub(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_size_t i;
-   png_size_t istop = row_info->rowbytes;
-   unsigned int bpp = (row_info->pixel_depth + 7) >> 3;
-   png_bytep rp = row + bpp;
-
-   PNG_UNUSED(prev_row)
-
-   for (i = bpp; i < istop; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
-      rp++;
-   }
-}
-
-static void
-png_read_filter_row_up(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_size_t i;
-   png_size_t istop = row_info->rowbytes;
-   png_bytep rp = row;
-   png_const_bytep pp = prev_row;
-
-   for (i = 0; i < istop; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
-      rp++;
-   }
-}
-
-static void
-png_read_filter_row_avg(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_size_t i;
-   png_bytep rp = row;
-   png_const_bytep pp = prev_row;
-   unsigned int bpp = (row_info->pixel_depth + 7) >> 3;
-   png_size_t istop = row_info->rowbytes - bpp;
-
-   for (i = 0; i < bpp; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) +
-         ((int)(*pp++) / 2 )) & 0xff);
-
-      rp++;
-   }
-
-   for (i = 0; i < istop; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) +
-         (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
-
-      rp++;
-   }
-}
-
-static void
-png_read_filter_row_paeth_1byte_pixel(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_bytep rp_end = row + row_info->rowbytes;
-   int a, c;
-
-   /* First pixel/byte */
-   c = *prev_row++;
-   a = *row + c;
-   *row++ = (png_byte)a;
-
-   /* Remainder */
-   while (row < rp_end)
-   {
-      int b, pa, pb, pc, p;
-
-      a &= 0xff; /* From previous iteration or start */
-      b = *prev_row++;
-
-      p = b - c;
-      pc = a - c;
-
-#     ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#     else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#     endif
-
-      /* Find the best predictor, the least of pa, pb, pc favoring the earlier
-       * ones in the case of a tie.
-       */
-      if (pb < pa) pa = pb, a = b;
-      if (pc < pa) a = c;
-
-      /* Calculate the current pixel in a, and move the previous row pixel to c
-       * for the next time round the loop
-       */
-      c = b;
-      a += *row;
-      *row++ = (png_byte)a;
-   }
-}
-
-static void
-png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   int bpp = (row_info->pixel_depth + 7) >> 3;
-   png_bytep rp_end = row + bpp;
-
-   /* Process the first pixel in the row completely (this is the same as 'up'
-    * because there is only one candidate predictor for the first row).
-    */
-   while (row < rp_end)
-   {
-      int a = *row + *prev_row++;
-      *row++ = (png_byte)a;
-   }
-
-   /* Remainder */
-   rp_end += row_info->rowbytes - bpp;
-
-   while (row < rp_end)
-   {
-      int a, b, c, pa, pb, pc, p;
-
-      c = *(prev_row - bpp);
-      a = *(row - bpp);
-      b = *prev_row++;
-
-      p = b - c;
-      pc = a - c;
-
-#     ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#     else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#     endif
-
-      if (pb < pa) pa = pb, a = b;
-      if (pc < pa) a = c;
-
-      //c = b;
-      a += *row;
-      *row++ = (png_byte)a;
-   }
-}
-
-static void
-png_init_filter_functions(png_structrp pp)
-   /* This function is called once for every PNG image to set the
-    * implementations required to reverse the filtering of PNG rows.  Reversing
-    * the filter is the first transformation performed on the row data.  It is
-    * performed in place, therefore an implementation can be selected based on
-    * the image pixel format.  If the implementation depends on image width then
-    * take care to ensure that it works corretly if the image is interlaced -
-    * interlacing causes the actual row width to vary.
-    */
-{
-   unsigned int bpp = (pp->pixel_depth + 7) >> 3;
-
-   pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub;
-   pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up;
-   pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg;
-   if (bpp == 1)
-      pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
-         png_read_filter_row_paeth_1byte_pixel;
-   else
-      pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
-         png_read_filter_row_paeth_multibyte_pixel;
-
-#ifdef PNG_FILTER_OPTIMIZATIONS
-   /* To use this define PNG_FILTER_OPTIMIZATIONS as the name of a function to
-    * call to install hardware optimizations for the above functions; simply
-    * replace whatever elements of the pp->read_filter[] array with a hardware
-    * specific (or, for that matter, generic) optimization.
-    *
-    * To see an example of this examine what configure.ac does when
-    * --enable-arm-neon is specified on the command line.
-    */
-   PNG_FILTER_OPTIMIZATIONS(pp, bpp);
-#endif
-}
-
-void /* PRIVATE */
-png_read_filter_row(png_structrp pp, png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row, int filter)
-{
-   /* OPTIMIZATION: DO NOT MODIFY THIS FUNCTION, instead #define
-    * PNG_FILTER_OPTIMIZATIONS to a function that overrides the generic
-    * implementations.  See png_init_filter_functions above.
-    */
-   if (pp->read_filter[0] == NULL)
-      png_init_filter_functions(pp);
-   if (filter > PNG_FILTER_VALUE_NONE && filter < PNG_FILTER_VALUE_LAST)
-      pp->read_filter[filter-1](row_info, row, prev_row);
-}
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-void /* PRIVATE */
-png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
-   png_alloc_size_t avail_out)
-{
-   /* Loop reading IDATs and decompressing the result into output[avail_out] */
-   png_ptr->zstream.next_out = output;
-   png_ptr->zstream.avail_out = 0; /* safety: set below */
-
-   if (output == NULL)
-      avail_out = 0;
-
-   do
-   {
-      int ret;
-      png_byte tmpbuf[PNG_INFLATE_BUF_SIZE];
-
-      if (png_ptr->zstream.avail_in == 0)
-      {
-         uInt avail_in;
-         png_bytep buffer;
-
-         while (png_ptr->idat_size == 0)
-         {
-            png_crc_finish(png_ptr, 0);
-
-            png_ptr->idat_size = png_read_chunk_header(png_ptr);
-            /* This is an error even in the 'check' case because the code just
-             * consumed a non-IDAT header.
-             */
-            if (png_ptr->chunk_name != png_IDAT)
-               png_error(png_ptr, "Not enough image data");
-         }
-
-         avail_in = png_ptr->IDAT_read_size;
-
-         if (avail_in > png_ptr->idat_size)
-            avail_in = (uInt)png_ptr->idat_size;
-
-         /* A PNG with a gradually increasing IDAT size will defeat this attempt
-          * to minimize memory usage by causing lots of re-allocs, but
-          * realistically doing IDAT_read_size re-allocs is not likely to be a
-          * big problem.
-          */
-         buffer = png_read_buffer(png_ptr, avail_in, 0/*error*/);
-
-         png_crc_read(png_ptr, buffer, avail_in);
-         png_ptr->idat_size -= avail_in;
-
-         png_ptr->zstream.next_in = buffer;
-         png_ptr->zstream.avail_in = avail_in;
-      }
-
-      /* And set up the output side. */
-      if (output != NULL) /* standard read */
-      {
-         uInt out = ZLIB_IO_MAX;
-
-         if (out > avail_out)
-            out = (uInt)avail_out;
-
-         avail_out -= out;
-         png_ptr->zstream.avail_out = out;
-      }
-
-      else /* check for end */
-      {
-         png_ptr->zstream.next_out = tmpbuf;
-         png_ptr->zstream.avail_out = (sizeof tmpbuf);
-      }
-
-      /* Use NO_FLUSH; this gives zlib the maximum opportunity to optimize the
-       * process.  If the LZ stream is truncated the sequential reader will
-       * terminally damage the stream, above, by reading the chunk header of the
-       * following chunk (it then exits with png_error).
-       *
-       * TODO: deal more elegantly with truncated IDAT lists.
-       */
-      ret = inflate(&png_ptr->zstream, Z_NO_FLUSH);
-
-      /* Take the unconsumed output back (so, in the 'check' case this just
-       * counts up).
-       */
-      avail_out += png_ptr->zstream.avail_out;
-      png_ptr->zstream.avail_out = 0;
-
-      if (ret == Z_STREAM_END)
-      {
-         /* Do this for safety; we won't read any more into this row. */
-         png_ptr->zstream.next_out = NULL;
-
-         png_ptr->mode |= PNG_AFTER_IDAT;
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-
-         if (png_ptr->zstream.avail_in > 0 || png_ptr->idat_size > 0)
-            png_chunk_benign_error(png_ptr, "Extra compressed data");
-         break;
-      }
-
-      if (ret != Z_OK)
-      {
-         png_zstream_error(png_ptr, ret);
-
-         if (output != NULL)
-            png_chunk_error(png_ptr, png_ptr->zstream.msg);
-
-         else /* checking */
-         {
-            png_chunk_benign_error(png_ptr, png_ptr->zstream.msg);
-            return;
-         }
-      }
-   } while (avail_out > 0);
-
-   if (avail_out > 0)
-   {
-      /* The stream ended before the image; this is the same as too few IDATs so
-       * should be handled the same way.
-       */
-      if (output != NULL)
-         png_error(png_ptr, "Not enough image data");
-
-      else /* checking */
-         png_chunk_benign_error(png_ptr, "Too much image data");
-   }
-}
-
-void /* PRIVATE */
-png_read_finish_IDAT(png_structrp png_ptr)
-{
-   /* We don't need any more data and the stream should have ended, however the
-    * LZ end code may actually not have been processed.  In this case we must
-    * read it otherwise stray unread IDAT data or, more likely, an IDAT chunk
-    * may still remain to be consumed.
-    */
-   if (!(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
-   {
-      /* The NULL causes png_read_IDAT_data to swallow any remaining bytes in
-       * the compressed stream, but the stream may be damaged too, so even after
-       * this call we may need to terminate the zstream ownership.
-       */
-      png_read_IDAT_data(png_ptr, NULL, 0);
-      png_ptr->zstream.next_out = NULL; /* safety */
-
-      /* Now clear everything out for safety; the following may not have been
-       * done.
-       */
-      if (!(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
-      {
-         png_ptr->mode |= PNG_AFTER_IDAT;
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-      }
-   }
-
-   /* If the zstream has not been released do it now *and* terminate the reading
-    * of the final IDAT chunk.
-    */
-   if (png_ptr->zowner == png_IDAT)
-   {
-      /* Always do this; the pointers otherwise point into the read buffer. */
-      png_ptr->zstream.next_in = NULL;
-      png_ptr->zstream.avail_in = 0;
-
-      /* Now we no longer own the zstream. */
-      png_ptr->zowner = 0;
-
-      /* The slightly weird semantics of the sequential IDAT reading is that we
-       * are always in or at the end of an IDAT chunk, so we always need to do a
-       * crc_finish here.  If idat_size is non-zero we also need to read the
-       * spurious bytes at the end of the chunk now.
-       */
-      (void)png_crc_finish(png_ptr, png_ptr->idat_size);
-   }
-}
-
-void /* PRIVATE */
-png_read_finish_row(png_structrp png_ptr)
-{
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-
-   png_debug(1, "in png_read_finish_row");
-   png_ptr->row_number++;
-   if (png_ptr->row_number < png_ptr->num_rows)
-      return;
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if (png_ptr->interlaced)
-   {
-      png_ptr->row_number = 0;
-
-      /* TO DO: don't do this if prev_row isn't needed (requires
-       * read-ahead of the next row's filter byte.
-       */
-      memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
-      do
-      {
-         png_ptr->pass++;
-
-         if (png_ptr->pass >= 7)
-            break;
-
-         png_ptr->iwidth = (png_ptr->width +
-            png_pass_inc[png_ptr->pass] - 1 -
-            png_pass_start[png_ptr->pass]) /
-            png_pass_inc[png_ptr->pass];
-
-         if (!(png_ptr->transformations & PNG_INTERLACE))
-         {
-            png_ptr->num_rows = (png_ptr->height +
-                png_pass_yinc[png_ptr->pass] - 1 -
-                png_pass_ystart[png_ptr->pass]) /
-                png_pass_yinc[png_ptr->pass];
-         }
-
-         else  /* if (png_ptr->transformations & PNG_INTERLACE) */
-            break; /* libpng deinterlacing sees every row */
-
-      } while (png_ptr->num_rows == 0 || png_ptr->iwidth == 0);
-
-      if (png_ptr->pass < 7)
-         return;
-   }
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-
-   /* Here after at the end of the last row of the last pass. */
-   png_read_finish_IDAT(png_ptr);
-}
-#endif /* PNG_SEQUENTIAL_READ_SUPPORTED */
-
-void /* PRIVATE */
-png_read_start_row(png_structrp png_ptr)
-{
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-
-   int max_pixel_depth;
-   png_size_t row_bytes;
-
-   png_debug(1, "in png_read_start_row");
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   png_init_read_transformations(png_ptr);
-#endif
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if (png_ptr->interlaced)
-   {
-      if (!(png_ptr->transformations & PNG_INTERLACE))
-         png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
-             png_pass_ystart[0]) / png_pass_yinc[0];
-
-      else
-         png_ptr->num_rows = png_ptr->height;
-
-      png_ptr->iwidth = (png_ptr->width +
-          png_pass_inc[png_ptr->pass] - 1 -
-          png_pass_start[png_ptr->pass]) /
-          png_pass_inc[png_ptr->pass];
-   }
-
-   else
-#endif /* PNG_READ_INTERLACING_SUPPORTED */
-   {
-      png_ptr->num_rows = png_ptr->height;
-      png_ptr->iwidth = png_ptr->width;
-   }
-
-   max_pixel_depth = png_ptr->pixel_depth;
-
-   /* WARNING: * png_read_transform_info (pngrtran.c) performs a simpliar set of
-    * calculations to calculate the final pixel depth, then
-    * png_do_read_transforms actually does the transforms.  This means that the
-    * code which effectively calculates this value is actually repeated in three
-    * separate places.  They must all match.  Innocent changes to the order of
-    * transformations can and will break libpng in a way that causes memory
-    * overwrites.
-    *
-    * TODO: fix this.
-    */
-#ifdef PNG_READ_PACK_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACK) && png_ptr->bit_depth < 8)
-      max_pixel_depth = 8;
-#endif
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   if (png_ptr->transformations & PNG_EXPAND)
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         if (png_ptr->num_trans)
-            max_pixel_depth = 32;
-
-         else
-            max_pixel_depth = 24;
-      }
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         if (max_pixel_depth < 8)
-            max_pixel_depth = 8;
-
-         if (png_ptr->num_trans)
-            max_pixel_depth *= 2;
-      }
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
-      {
-         if (png_ptr->num_trans)
-         {
-            max_pixel_depth *= 4;
-            max_pixel_depth /= 3;
-         }
-      }
-   }
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   if (png_ptr->transformations & PNG_EXPAND_16)
-   {
-#     ifdef PNG_READ_EXPAND_SUPPORTED
-         /* In fact it is an error if it isn't supported, but checking is
-          * the safe way.
-          */
-         if (png_ptr->transformations & PNG_EXPAND)
-         {
-            if (png_ptr->bit_depth < 16)
-               max_pixel_depth *= 2;
-         }
-         else
-#     endif
-         png_ptr->transformations &= ~PNG_EXPAND_16;
-   }
-#endif
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-   if (png_ptr->transformations & (PNG_FILLER))
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         if (max_pixel_depth <= 8)
-            max_pixel_depth = 16;
-
-         else
-            max_pixel_depth = 32;
-      }
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB ||
-         png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         if (max_pixel_depth <= 32)
-            max_pixel_depth = 32;
-
-         else
-            max_pixel_depth = 64;
-      }
-   }
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   if (png_ptr->transformations & PNG_GRAY_TO_RGB)
-   {
-      if (
-#ifdef PNG_READ_EXPAND_SUPPORTED
-          (png_ptr->num_trans && (png_ptr->transformations & PNG_EXPAND)) ||
-#endif
-#ifdef PNG_READ_FILLER_SUPPORTED
-          (png_ptr->transformations & (PNG_FILLER)) ||
-#endif
-          png_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (max_pixel_depth <= 16)
-            max_pixel_depth = 32;
-
-         else
-            max_pixel_depth = 64;
-      }
-
-      else
-      {
-         if (max_pixel_depth <= 8)
-         {
-            if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-               max_pixel_depth = 32;
-
-            else
-               max_pixel_depth = 24;
-         }
-
-         else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            max_pixel_depth = 64;
-
-         else
-            max_pixel_depth = 48;
-      }
-   }
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) && \
-defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
-   if (png_ptr->transformations & PNG_USER_TRANSFORM)
-   {
-      int user_pixel_depth = png_ptr->user_transform_depth *
-         png_ptr->user_transform_channels;
-
-      if (user_pixel_depth > max_pixel_depth)
-         max_pixel_depth = user_pixel_depth;
-   }
-#endif
-
-   /* This value is stored in png_struct and double checked in the row read
-    * code.
-    */
-   png_ptr->maximum_pixel_depth = (png_byte)max_pixel_depth;
-   png_ptr->transformed_pixel_depth = 0; /* calculated on demand */
-
-   /* Align the width on the next larger 8 pixels.  Mainly used
-    * for interlacing
-    */
-   row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7));
-   /* Calculate the maximum bytes needed, adding a byte and a pixel
-    * for safety's sake
-    */
-   row_bytes = PNG_ROWBYTES(max_pixel_depth, row_bytes) +
-       1 + ((max_pixel_depth + 7) >> 3);
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (row_bytes > (png_uint_32)65536L)
-      png_error(png_ptr, "This image requires a row greater than 64KB");
-#endif
-
-   if (row_bytes + 48 > png_ptr->old_big_row_buf_size)
-   {
-     png_free(png_ptr, png_ptr->big_row_buf);
-     png_free(png_ptr, png_ptr->big_prev_row);
-
-     if (png_ptr->interlaced)
-        png_ptr->big_row_buf = (png_bytep)png_calloc(png_ptr,
-            row_bytes + 48);
-
-     else
-        png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
-
-     png_ptr->big_prev_row = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
-
-#ifdef PNG_ALIGNED_MEMORY_SUPPORTED
-     /* Use 16-byte aligned memory for row_buf with at least 16 bytes
-      * of padding before and after row_buf; treat prev_row similarly.
-      * NOTE: the alignment is to the start of the pixels, one beyond the start
-      * of the buffer, because of the filter byte.  Prior to libpng 1.5.6 this
-      * was incorrect; the filter byte was aligned, which had the exact
-      * opposite effect of that intended.
-      */
-     {
-        png_bytep temp = png_ptr->big_row_buf + 32;
-        int extra = (int)((temp - (png_bytep)0) & 0x0f);
-        png_ptr->row_buf = temp - extra - 1/*filter byte*/;
-
-        temp = png_ptr->big_prev_row + 32;
-        extra = (int)((temp - (png_bytep)0) & 0x0f);
-        png_ptr->prev_row = temp - extra - 1/*filter byte*/;
-     }
-
-#else
-     /* Use 31 bytes of padding before and 17 bytes after row_buf. */
-     png_ptr->row_buf = png_ptr->big_row_buf + 31;
-     png_ptr->prev_row = png_ptr->big_prev_row + 31;
-#endif
-     png_ptr->old_big_row_buf_size = row_bytes + 48;
-   }
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (png_ptr->rowbytes > 65535)
-      png_error(png_ptr, "This image requires a row greater than 64KB");
-
-#endif
-   if (png_ptr->rowbytes > (PNG_SIZE_MAX - 1))
-      png_error(png_ptr, "Row has too many bytes to allocate in memory");
-
-   memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
-   png_debug1(3, "width = %u,", png_ptr->width);
-   png_debug1(3, "height = %u,", png_ptr->height);
-   png_debug1(3, "iwidth = %u,", png_ptr->iwidth);
-   png_debug1(3, "num_rows = %u,", png_ptr->num_rows);
-   png_debug1(3, "rowbytes = %lu,", (unsigned long)png_ptr->rowbytes);
-   png_debug1(3, "irowbytes = %lu",
-       (unsigned long)PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->iwidth) + 1);
-
-   /* The sequential reader needs a buffer for IDAT, but the progressive reader
-    * does not, so free the read buffer now regardless; the sequential reader
-    * reallocates it on demand.
-    */
-   if (png_ptr->read_buffer)
-   {
-      png_bytep buffer = png_ptr->read_buffer;
-
-      png_ptr->read_buffer_size = 0;
-      png_ptr->read_buffer = NULL;
-      png_free(png_ptr, buffer);
-   }
-
-   /* Finally claim the zstream for the inflate of the IDAT data, use the bits
-    * value from the stream (note that this will result in a fatal error if the
-    * IDAT stream has a bogus deflate header window_bits value, but this should
-    * not be happening any longer!)
-    */
-   if (png_inflate_claim(png_ptr, png_IDAT, 0) != Z_OK)
-      png_error(png_ptr, png_ptr->zstream.msg);
-
-   png_ptr->flags |= PNG_FLAG_ROW_INIT;
-}
-#endif /* PNG_READ_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngset.c b/modules/juce_graphics/image_formats/pnglib/pngset.c
deleted file mode 100644
index a1b9d49..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngset.c
+++ /dev/null
@@ -1,1606 +0,0 @@
-
-/* pngset.c - storage of image information into info struct
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * The functions here are used during reads to store data from the file
- * into the info struct, and during writes to store application data
- * into the info struct for writing into the file.  This abstracts the
- * info struct and allows us to change the structure in the future.
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-#ifdef PNG_bKGD_SUPPORTED
-void PNGAPI
-png_set_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_color_16p background)
-{
-   png_debug1(1, "in %s storage function", "bKGD");
-
-   if (png_ptr == NULL || info_ptr == NULL || background == NULL)
-      return;
-
-   info_ptr->background = *background;
-   info_ptr->valid |= PNG_INFO_bKGD;
-}
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-void PNGFAPI
-png_set_cHRM_fixed(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x,
-    png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y,
-    png_fixed_point blue_x, png_fixed_point blue_y)
-{
-   png_xy xy;
-
-   png_debug1(1, "in %s storage function", "cHRM fixed");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   xy.redx = red_x;
-   xy.redy = red_y;
-   xy.greenx = green_x;
-   xy.greeny = green_y;
-   xy.bluex = blue_x;
-   xy.bluey = blue_y;
-   xy.whitex = white_x;
-   xy.whitey = white_y;
-
-   if (png_colorspace_set_chromaticities(png_ptr, &info_ptr->colorspace, &xy,
-      2/* override with app values*/))
-      info_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
-
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-void PNGFAPI
-png_set_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_fixed_point int_red_X, png_fixed_point int_red_Y,
-    png_fixed_point int_red_Z, png_fixed_point int_green_X,
-    png_fixed_point int_green_Y, png_fixed_point int_green_Z,
-    png_fixed_point int_blue_X, png_fixed_point int_blue_Y,
-    png_fixed_point int_blue_Z)
-{
-   png_XYZ XYZ;
-
-   png_debug1(1, "in %s storage function", "cHRM XYZ fixed");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   XYZ.red_X = int_red_X;
-   XYZ.red_Y = int_red_Y;
-   XYZ.red_Z = int_red_Z;
-   XYZ.green_X = int_green_X;
-   XYZ.green_Y = int_green_Y;
-   XYZ.green_Z = int_green_Z;
-   XYZ.blue_X = int_blue_X;
-   XYZ.blue_Y = int_blue_Y;
-   XYZ.blue_Z = int_blue_Z;
-
-   if (png_colorspace_set_endpoints(png_ptr, &info_ptr->colorspace, &XYZ, 2))
-      info_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
-
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_cHRM(png_const_structrp png_ptr, png_inforp info_ptr,
-    double white_x, double white_y, double red_x, double red_y,
-    double green_x, double green_y, double blue_x, double blue_y)
-{
-   png_set_cHRM_fixed(png_ptr, info_ptr,
-      png_fixed(png_ptr, white_x, "cHRM White X"),
-      png_fixed(png_ptr, white_y, "cHRM White Y"),
-      png_fixed(png_ptr, red_x, "cHRM Red X"),
-      png_fixed(png_ptr, red_y, "cHRM Red Y"),
-      png_fixed(png_ptr, green_x, "cHRM Green X"),
-      png_fixed(png_ptr, green_y, "cHRM Green Y"),
-      png_fixed(png_ptr, blue_x, "cHRM Blue X"),
-      png_fixed(png_ptr, blue_y, "cHRM Blue Y"));
-}
-
-void PNGAPI
-png_set_cHRM_XYZ(png_const_structrp png_ptr, png_inforp info_ptr, double red_X,
-    double red_Y, double red_Z, double green_X, double green_Y, double green_Z,
-    double blue_X, double blue_Y, double blue_Z)
-{
-   png_set_cHRM_XYZ_fixed(png_ptr, info_ptr,
-      png_fixed(png_ptr, red_X, "cHRM Red X"),
-      png_fixed(png_ptr, red_Y, "cHRM Red Y"),
-      png_fixed(png_ptr, red_Z, "cHRM Red Z"),
-      png_fixed(png_ptr, green_X, "cHRM Red X"),
-      png_fixed(png_ptr, green_Y, "cHRM Red Y"),
-      png_fixed(png_ptr, green_Z, "cHRM Red Z"),
-      png_fixed(png_ptr, blue_X, "cHRM Red X"),
-      png_fixed(png_ptr, blue_Y, "cHRM Red Y"),
-      png_fixed(png_ptr, blue_Z, "cHRM Red Z"));
-}
-#  endif /* PNG_FLOATING_POINT_SUPPORTED */
-
-#endif /* PNG_cHRM_SUPPORTED */
-
-#ifdef PNG_gAMA_SUPPORTED
-void PNGFAPI
-png_set_gAMA_fixed(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_fixed_point file_gamma)
-{
-   png_debug1(1, "in %s storage function", "gAMA");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   png_colorspace_set_gamma(png_ptr, &info_ptr->colorspace, file_gamma);
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_gAMA(png_const_structrp png_ptr, png_inforp info_ptr, double file_gamma)
-{
-   png_set_gAMA_fixed(png_ptr, info_ptr, png_fixed(png_ptr, file_gamma,
-       "png_set_gAMA"));
-}
-#  endif
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-void PNGAPI
-png_set_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_uint_16p hist)
-{
-   int i;
-
-   png_debug1(1, "in %s storage function", "hIST");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (info_ptr->num_palette == 0 || info_ptr->num_palette
-       > PNG_MAX_PALETTE_LENGTH)
-   {
-      png_warning(png_ptr,
-          "Invalid palette size, hIST allocation skipped");
-
-      return;
-   }
-
-   png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0);
-
-   /* Changed from info->num_palette to PNG_MAX_PALETTE_LENGTH in
-    * version 1.2.1
-    */
-   info_ptr->hist = png_voidcast(png_uint_16p, png_malloc_warn(png_ptr,
-       PNG_MAX_PALETTE_LENGTH * (sizeof (png_uint_16))));
-
-   if (info_ptr->hist == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for hIST chunk data");
-      return;
-   }
-
-   info_ptr->free_me |= PNG_FREE_HIST;
-
-   for (i = 0; i < info_ptr->num_palette; i++)
-      info_ptr->hist[i] = hist[i];
-
-   info_ptr->valid |= PNG_INFO_hIST;
-}
-#endif
-
-void PNGAPI
-png_set_IHDR(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_uint_32 width, png_uint_32 height, int bit_depth,
-    int color_type, int interlace_type, int compression_type,
-    int filter_type)
-{
-   png_debug1(1, "in %s storage function", "IHDR");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   info_ptr->width = width;
-   info_ptr->height = height;
-   info_ptr->bit_depth = (png_byte)bit_depth;
-   info_ptr->color_type = (png_byte)color_type;
-   info_ptr->compression_type = (png_byte)compression_type;
-   info_ptr->filter_type = (png_byte)filter_type;
-   info_ptr->interlace_type = (png_byte)interlace_type;
-
-   png_check_IHDR (png_ptr, info_ptr->width, info_ptr->height,
-       info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
-       info_ptr->compression_type, info_ptr->filter_type);
-
-   if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      info_ptr->channels = 1;
-
-   else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
-      info_ptr->channels = 3;
-
-   else
-      info_ptr->channels = 1;
-
-   if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
-      info_ptr->channels++;
-
-   info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
-
-   /* Check for potential overflow */
-   if (width >
-       (PNG_UINT_32_MAX >> 3)      /* 8-byte RRGGBBAA pixels */
-       - 48       /* bigrowbuf hack */
-       - 1        /* filter byte */
-       - 7*8      /* rounding of width to multiple of 8 pixels */
-       - 8)       /* extra max_pixel_depth pad */
-      info_ptr->rowbytes = 0;
-   else
-      info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
-}
-
-#ifdef PNG_oFFs_SUPPORTED
-void PNGAPI
-png_set_oFFs(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_int_32 offset_x, png_int_32 offset_y, int unit_type)
-{
-   png_debug1(1, "in %s storage function", "oFFs");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   info_ptr->x_offset = offset_x;
-   info_ptr->y_offset = offset_y;
-   info_ptr->offset_unit_type = (png_byte)unit_type;
-   info_ptr->valid |= PNG_INFO_oFFs;
-}
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-void PNGAPI
-png_set_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type,
-    int nparams, png_const_charp units, png_charpp params)
-{
-   png_size_t length;
-   int i;
-
-   png_debug1(1, "in %s storage function", "pCAL");
-
-   if (png_ptr == NULL || info_ptr == NULL || purpose == NULL || units == NULL
-      || (nparams > 0 && params == NULL))
-      return;
-
-   length = strlen(purpose) + 1;
-   png_debug1(3, "allocating purpose for info (%lu bytes)",
-       (unsigned long)length);
-
-   /* TODO: validate format of calibration name and unit name */
-
-   /* Check that the type matches the specification. */
-   if (type < 0 || type > 3)
-      png_error(png_ptr, "Invalid pCAL equation type");
-
-   if (nparams < 0 || nparams > 255)
-      png_error(png_ptr, "Invalid pCAL parameter count");
-
-   /* Validate params[nparams] */
-   for (i=0; i<nparams; ++i)
-      if (params[i] == NULL ||
-         !png_check_fp_string(params[i], strlen(params[i])))
-         png_error(png_ptr, "Invalid format for pCAL parameter");
-
-   info_ptr->pcal_purpose = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, length));
-
-   if (info_ptr->pcal_purpose == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for pCAL purpose");
-      return;
-   }
-
-   memcpy(info_ptr->pcal_purpose, purpose, length);
-
-   png_debug(3, "storing X0, X1, type, and nparams in info");
-   info_ptr->pcal_X0 = X0;
-   info_ptr->pcal_X1 = X1;
-   info_ptr->pcal_type = (png_byte)type;
-   info_ptr->pcal_nparams = (png_byte)nparams;
-
-   length = strlen(units) + 1;
-   png_debug1(3, "allocating units for info (%lu bytes)",
-     (unsigned long)length);
-
-   info_ptr->pcal_units = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, length));
-
-   if (info_ptr->pcal_units == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for pCAL units");
-      return;
-   }
-
-   memcpy(info_ptr->pcal_units, units, length);
-
-   info_ptr->pcal_params = png_voidcast(png_charpp, png_malloc_warn(png_ptr,
-       (png_size_t)((nparams + 1) * (sizeof (png_charp)))));
-
-   if (info_ptr->pcal_params == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for pCAL params");
-      return;
-   }
-
-   memset(info_ptr->pcal_params, 0, (nparams + 1) * (sizeof (png_charp)));
-
-   for (i = 0; i < nparams; i++)
-   {
-      length = strlen(params[i]) + 1;
-      png_debug2(3, "allocating parameter %d for info (%lu bytes)", i,
-          (unsigned long)length);
-
-      info_ptr->pcal_params[i] = (png_charp)png_malloc_warn(png_ptr, length);
-
-      if (info_ptr->pcal_params[i] == NULL)
-      {
-         png_warning(png_ptr, "Insufficient memory for pCAL parameter");
-         return;
-      }
-
-      memcpy(info_ptr->pcal_params[i], params[i], length);
-   }
-
-   info_ptr->valid |= PNG_INFO_pCAL;
-   info_ptr->free_me |= PNG_FREE_PCAL;
-}
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-void PNGAPI
-png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
-    int unit, png_const_charp swidth, png_const_charp sheight)
-{
-   png_size_t lengthw = 0, lengthh = 0;
-
-   png_debug1(1, "in %s storage function", "sCAL");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* Double check the unit (should never get here with an invalid
-    * unit unless this is an API call.)
-    */
-   if (unit != 1 && unit != 2)
-      png_error(png_ptr, "Invalid sCAL unit");
-
-   if (swidth == NULL || (lengthw = strlen(swidth)) == 0 ||
-       swidth[0] == 45 /* '-' */ || !png_check_fp_string(swidth, lengthw))
-      png_error(png_ptr, "Invalid sCAL width");
-
-   if (sheight == NULL || (lengthh = strlen(sheight)) == 0 ||
-       sheight[0] == 45 /* '-' */ || !png_check_fp_string(sheight, lengthh))
-      png_error(png_ptr, "Invalid sCAL height");
-
-   info_ptr->scal_unit = (png_byte)unit;
-
-   ++lengthw;
-
-   png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthw);
-
-   info_ptr->scal_s_width = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, lengthw));
-
-   if (info_ptr->scal_s_width == NULL)
-   {
-      png_warning(png_ptr, "Memory allocation failed while processing sCAL");
-      return;
-   }
-
-   memcpy(info_ptr->scal_s_width, swidth, lengthw);
-
-   ++lengthh;
-
-   png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthh);
-
-   info_ptr->scal_s_height = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, lengthh));
-
-   if (info_ptr->scal_s_height == NULL)
-   {
-      png_free (png_ptr, info_ptr->scal_s_width);
-      info_ptr->scal_s_width = NULL;
-
-      png_warning(png_ptr, "Memory allocation failed while processing sCAL");
-      return;
-   }
-
-   memcpy(info_ptr->scal_s_height, sheight, lengthh);
-
-   info_ptr->valid |= PNG_INFO_sCAL;
-   info_ptr->free_me |= PNG_FREE_SCAL;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_sCAL(png_const_structrp png_ptr, png_inforp info_ptr, int unit,
-    double width, double height)
-{
-   png_debug1(1, "in %s storage function", "sCAL");
-
-   /* Check the arguments. */
-   if (width <= 0)
-      png_warning(png_ptr, "Invalid sCAL width ignored");
-
-   else if (height <= 0)
-      png_warning(png_ptr, "Invalid sCAL height ignored");
-
-   else
-   {
-      /* Convert 'width' and 'height' to ASCII. */
-      char swidth[PNG_sCAL_MAX_DIGITS+1];
-      char sheight[PNG_sCAL_MAX_DIGITS+1];
-
-      png_ascii_from_fp(png_ptr, swidth, (sizeof swidth), width,
-         PNG_sCAL_PRECISION);
-      png_ascii_from_fp(png_ptr, sheight, (sizeof sheight), height,
-         PNG_sCAL_PRECISION);
-
-      png_set_sCAL_s(png_ptr, info_ptr, unit, swidth, sheight);
-   }
-}
-#  endif
-
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-void PNGAPI
-png_set_sCAL_fixed(png_const_structrp png_ptr, png_inforp info_ptr, int unit,
-    png_fixed_point width, png_fixed_point height)
-{
-   png_debug1(1, "in %s storage function", "sCAL");
-
-   /* Check the arguments. */
-   if (width <= 0)
-      png_warning(png_ptr, "Invalid sCAL width ignored");
-
-   else if (height <= 0)
-      png_warning(png_ptr, "Invalid sCAL height ignored");
-
-   else
-   {
-      /* Convert 'width' and 'height' to ASCII. */
-      char swidth[PNG_sCAL_MAX_DIGITS+1];
-      char sheight[PNG_sCAL_MAX_DIGITS+1];
-
-      png_ascii_from_fixed(png_ptr, swidth, (sizeof swidth), width);
-      png_ascii_from_fixed(png_ptr, sheight, (sizeof sheight), height);
-
-      png_set_sCAL_s(png_ptr, info_ptr, unit, swidth, sheight);
-   }
-}
-#  endif
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-void PNGAPI
-png_set_pHYs(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_uint_32 res_x, png_uint_32 res_y, int unit_type)
-{
-   png_debug1(1, "in %s storage function", "pHYs");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   info_ptr->x_pixels_per_unit = res_x;
-   info_ptr->y_pixels_per_unit = res_y;
-   info_ptr->phys_unit_type = (png_byte)unit_type;
-   info_ptr->valid |= PNG_INFO_pHYs;
-}
-#endif
-
-void PNGAPI
-png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
-    png_const_colorp palette, int num_palette)
-{
-
-   png_debug1(1, "in %s storage function", "PLTE");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
-   {
-      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-         png_error(png_ptr, "Invalid palette length");
-
-      else
-      {
-         png_warning(png_ptr, "Invalid palette length");
-         return;
-      }
-   }
-
-   if ((num_palette > 0 && palette == NULL) ||
-      (num_palette == 0
-#        ifdef PNG_MNG_FEATURES_SUPPORTED
-            && (png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0
-#        endif
-      ))
-   {
-      png_chunk_report(png_ptr, "Invalid palette", PNG_CHUNK_ERROR);
-      return;
-   }
-
-   /* It may not actually be necessary to set png_ptr->palette here;
-    * we do it for backward compatibility with the way the png_handle_tRNS
-    * function used to do the allocation.
-    *
-    * 1.6.0: the above statement appears to be incorrect; something has to set
-    * the palette inside png_struct on read.
-    */
-   png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
-
-   /* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
-    * of num_palette entries, in case of an invalid PNG file that has
-    * too-large sample values.
-    */
-   png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
-       PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
-
-   if (num_palette > 0)
-      memcpy(png_ptr->palette, palette, num_palette * (sizeof (png_color)));
-   info_ptr->palette = png_ptr->palette;
-   info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
-
-   info_ptr->free_me |= PNG_FREE_PLTE;
-
-   info_ptr->valid |= PNG_INFO_PLTE;
-}
-
-#ifdef PNG_sBIT_SUPPORTED
-void PNGAPI
-png_set_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_color_8p sig_bit)
-{
-   png_debug1(1, "in %s storage function", "sBIT");
-
-   if (png_ptr == NULL || info_ptr == NULL || sig_bit == NULL)
-      return;
-
-   info_ptr->sig_bit = *sig_bit;
-   info_ptr->valid |= PNG_INFO_sBIT;
-}
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-void PNGAPI
-png_set_sRGB(png_const_structrp png_ptr, png_inforp info_ptr, int srgb_intent)
-{
-   png_debug1(1, "in %s storage function", "sRGB");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   (void)png_colorspace_set_sRGB(png_ptr, &info_ptr->colorspace, srgb_intent);
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-void PNGAPI
-png_set_sRGB_gAMA_and_cHRM(png_const_structrp png_ptr, png_inforp info_ptr,
-    int srgb_intent)
-{
-   png_debug1(1, "in %s storage function", "sRGB_gAMA_and_cHRM");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (png_colorspace_set_sRGB(png_ptr, &info_ptr->colorspace, srgb_intent))
-   {
-      /* This causes the gAMA and cHRM to be written too */
-      info_ptr->colorspace.flags |=
-         PNG_COLORSPACE_FROM_gAMA|PNG_COLORSPACE_FROM_cHRM;
-   }
-
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-#endif /* sRGB */
-
-
-#ifdef PNG_iCCP_SUPPORTED
-void PNGAPI
-png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_charp name, int compression_type,
-    png_const_bytep profile, png_uint_32 proflen)
-{
-   png_charp new_iccp_name;
-   png_bytep new_iccp_profile;
-   png_size_t length;
-
-   png_debug1(1, "in %s storage function", "iCCP");
-
-   if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL)
-      return;
-
-   if (compression_type != PNG_COMPRESSION_TYPE_BASE)
-      png_app_error(png_ptr, "Invalid iCCP compression method");
-
-   /* Set the colorspace first because this validates the profile; do not
-    * override previously set app cHRM or gAMA here (because likely as not the
-    * application knows better than libpng what the correct values are.)  Pass
-    * the info_ptr color_type field to png_colorspace_set_ICC because in the
-    * write case it has not yet been stored in png_ptr.
-    */
-   {
-      int result = png_colorspace_set_ICC(png_ptr, &info_ptr->colorspace, name,
-         proflen, profile, info_ptr->color_type);
-
-      png_colorspace_sync_info(png_ptr, info_ptr);
-
-      /* Don't do any of the copying if the profile was bad, or inconsistent. */
-      if (!result)
-         return;
-
-      /* But do write the gAMA and cHRM chunks from the profile. */
-      info_ptr->colorspace.flags |=
-         PNG_COLORSPACE_FROM_gAMA|PNG_COLORSPACE_FROM_cHRM;
-   }
-
-   length = strlen(name)+1;
-   new_iccp_name = png_voidcast(png_charp, png_malloc_warn(png_ptr, length));
-
-   if (new_iccp_name == NULL)
-   {
-      png_benign_error(png_ptr, "Insufficient memory to process iCCP chunk");
-      return;
-   }
-
-   memcpy(new_iccp_name, name, length);
-   new_iccp_profile = png_voidcast(png_bytep,
-      png_malloc_warn(png_ptr, proflen));
-
-   if (new_iccp_profile == NULL)
-   {
-      png_free(png_ptr, new_iccp_name);
-      png_benign_error(png_ptr,
-          "Insufficient memory to process iCCP profile");
-      return;
-   }
-
-   memcpy(new_iccp_profile, profile, proflen);
-
-   png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0);
-
-   info_ptr->iccp_proflen = proflen;
-   info_ptr->iccp_name = new_iccp_name;
-   info_ptr->iccp_profile = new_iccp_profile;
-   info_ptr->free_me |= PNG_FREE_ICCP;
-   info_ptr->valid |= PNG_INFO_iCCP;
-}
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-void PNGAPI
-png_set_text(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_textp text_ptr, int num_text)
-{
-   int ret;
-   ret = png_set_text_2(png_ptr, info_ptr, text_ptr, num_text);
-
-   if (ret)
-      png_error(png_ptr, "Insufficient memory to store text");
-}
-
-int /* PRIVATE */
-png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_textp text_ptr, int num_text)
-{
-   int i;
-
-   png_debug1(1, "in %lx storage function", png_ptr == NULL ? "unexpected" :
-      (unsigned long)png_ptr->chunk_name);
-
-   if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
-      return(0);
-
-   /* Make sure we have enough space in the "text" array in info_struct
-    * to hold all of the incoming text_ptr objects.  This compare can't overflow
-    * because max_text >= num_text (anyway, subtract of two positive integers
-    * can't overflow in any case.)
-    */
-   if (num_text > info_ptr->max_text - info_ptr->num_text)
-   {
-      int old_num_text = info_ptr->num_text;
-      int max_text;
-      png_textp new_text = NULL;
-
-      /* Calculate an appropriate max_text, checking for overflow. */
-      max_text = old_num_text;
-      if (num_text <= INT_MAX - max_text)
-      {
-         max_text += num_text;
-
-         /* Round up to a multiple of 8 */
-         if (max_text < INT_MAX-8)
-            max_text = (max_text + 8) & ~0x7;
-
-         else
-            max_text = INT_MAX;
-
-         /* Now allocate a new array and copy the old members in, this does all
-          * the overflow checks.
-          */
-         new_text = png_voidcast(png_textp,png_realloc_array(png_ptr,
-            info_ptr->text, old_num_text, max_text-old_num_text,
-            sizeof *new_text));
-      }
-
-      if (new_text == NULL)
-      {
-         png_chunk_report(png_ptr, "too many text chunks",
-            PNG_CHUNK_WRITE_ERROR);
-         return 1;
-      }
-
-      png_free(png_ptr, info_ptr->text);
-
-      info_ptr->text = new_text;
-      info_ptr->free_me |= PNG_FREE_TEXT;
-      info_ptr->max_text = max_text;
-      /* num_text is adjusted below as the entries are copied in */
-
-      png_debug1(3, "allocated %d entries for info_ptr->text", max_text);
-   }
-
-   for (i = 0; i < num_text; i++)
-   {
-      size_t text_length, key_len;
-      size_t lang_len, lang_key_len;
-      png_textp textp = &(info_ptr->text[info_ptr->num_text]);
-
-      if (text_ptr[i].key == NULL)
-          continue;
-
-      if (text_ptr[i].compression < PNG_TEXT_COMPRESSION_NONE ||
-          text_ptr[i].compression >= PNG_TEXT_COMPRESSION_LAST)
-      {
-         png_chunk_report(png_ptr, "text compression mode is out of range",
-            PNG_CHUNK_WRITE_ERROR);
-         continue;
-      }
-
-      key_len = strlen(text_ptr[i].key);
-
-      if (text_ptr[i].compression <= 0)
-      {
-         lang_len = 0;
-         lang_key_len = 0;
-      }
-
-      else
-#  ifdef PNG_iTXt_SUPPORTED
-      {
-         /* Set iTXt data */
-
-         if (text_ptr[i].lang != NULL)
-            lang_len = strlen(text_ptr[i].lang);
-
-         else
-            lang_len = 0;
-
-         if (text_ptr[i].lang_key != NULL)
-            lang_key_len = strlen(text_ptr[i].lang_key);
-
-         else
-            lang_key_len = 0;
-      }
-#  else /* PNG_iTXt_SUPPORTED */
-      {
-         png_chunk_report(png_ptr, "iTXt chunk not supported",
-            PNG_CHUNK_WRITE_ERROR);
-         continue;
-      }
-#  endif
-
-      if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0')
-      {
-         text_length = 0;
-#  ifdef PNG_iTXt_SUPPORTED
-         if (text_ptr[i].compression > 0)
-            textp->compression = PNG_ITXT_COMPRESSION_NONE;
-
-         else
-#  endif
-            textp->compression = PNG_TEXT_COMPRESSION_NONE;
-      }
-
-      else
-      {
-         text_length = strlen(text_ptr[i].text);
-         textp->compression = text_ptr[i].compression;
-      }
-
-      textp->key = png_voidcast(png_charp,png_malloc_base(png_ptr,
-          key_len + text_length + lang_len + lang_key_len + 4));
-
-      if (textp->key == NULL)
-      {
-         png_chunk_report(png_ptr, "text chunk: out of memory",
-               PNG_CHUNK_WRITE_ERROR);
-         return 1;
-      }
-
-      png_debug2(2, "Allocated %lu bytes at %p in png_set_text",
-          (unsigned long)(png_uint_32)
-          (key_len + lang_len + lang_key_len + text_length + 4),
-          textp->key);
-
-      memcpy(textp->key, text_ptr[i].key, key_len);
-      *(textp->key + key_len) = '\0';
-
-      if (text_ptr[i].compression > 0)
-      {
-         textp->lang = textp->key + key_len + 1;
-         memcpy(textp->lang, text_ptr[i].lang, lang_len);
-         *(textp->lang + lang_len) = '\0';
-         textp->lang_key = textp->lang + lang_len + 1;
-         memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len);
-         *(textp->lang_key + lang_key_len) = '\0';
-         textp->text = textp->lang_key + lang_key_len + 1;
-      }
-
-      else
-      {
-         textp->lang=NULL;
-         textp->lang_key=NULL;
-         textp->text = textp->key + key_len + 1;
-      }
-
-      if (text_length)
-         memcpy(textp->text, text_ptr[i].text, text_length);
-
-      *(textp->text + text_length) = '\0';
-
-#  ifdef PNG_iTXt_SUPPORTED
-      if (textp->compression > 0)
-      {
-         textp->text_length = 0;
-         textp->itxt_length = text_length;
-      }
-
-      else
-#  endif
-      {
-         textp->text_length = text_length;
-         textp->itxt_length = 0;
-      }
-
-      info_ptr->num_text++;
-      png_debug1(3, "transferred text chunk %d", info_ptr->num_text);
-   }
-
-   return(0);
-}
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-void PNGAPI
-png_set_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_timep mod_time)
-{
-   png_debug1(1, "in %s storage function", "tIME");
-
-   if (png_ptr == NULL || info_ptr == NULL || mod_time == NULL ||
-       (png_ptr->mode & PNG_WROTE_tIME))
-      return;
-
-   if (mod_time->month == 0   || mod_time->month > 12  ||
-       mod_time->day   == 0   || mod_time->day   > 31  ||
-       mod_time->hour  > 23   || mod_time->minute > 59 ||
-       mod_time->second > 60)
-   {
-      png_warning(png_ptr, "Ignoring invalid time value");
-      return;
-   }
-
-   info_ptr->mod_time = *mod_time;
-   info_ptr->valid |= PNG_INFO_tIME;
-}
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-void PNGAPI
-png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
-    png_const_bytep trans_alpha, int num_trans, png_const_color_16p trans_color)
-{
-   png_debug1(1, "in %s storage function", "tRNS");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (trans_alpha != NULL)
-   {
-       /* It may not actually be necessary to set png_ptr->trans_alpha here;
-        * we do it for backward compatibility with the way the png_handle_tRNS
-        * function used to do the allocation.
-        *
-        * 1.6.0: The above statement is incorrect; png_handle_tRNS effectively
-        * relies on png_set_tRNS storing the information in png_struct
-        * (otherwise it won't be there for the code in pngrtran.c).
-        */
-
-       png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
-
-       /* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
-       png_ptr->trans_alpha = info_ptr->trans_alpha = png_voidcast(png_bytep,
-         png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
-
-       if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
-          memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
-   }
-
-   if (trans_color != NULL)
-   {
-      int sample_max = (1 << info_ptr->bit_depth);
-
-      if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY &&
-          trans_color->gray > sample_max) ||
-          (info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
-          (trans_color->red > sample_max ||
-          trans_color->green > sample_max ||
-          trans_color->blue > sample_max)))
-         png_warning(png_ptr,
-            "tRNS chunk has out-of-range samples for bit_depth");
-
-      info_ptr->trans_color = *trans_color;
-
-      if (num_trans == 0)
-         num_trans = 1;
-   }
-
-   info_ptr->num_trans = (png_uint_16)num_trans;
-
-   if (num_trans != 0)
-   {
-      info_ptr->valid |= PNG_INFO_tRNS;
-      info_ptr->free_me |= PNG_FREE_TRNS;
-   }
-}
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-void PNGAPI
-png_set_sPLT(png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)
-/*
- *  entries        - array of png_sPLT_t structures
- *                   to be added to the list of palettes
- *                   in the info structure.
- *
- *  nentries       - number of palette structures to be
- *                   added.
- */
-{
-   png_sPLT_tp np;
-
-   if (png_ptr == NULL || info_ptr == NULL || nentries <= 0 || entries == NULL)
-      return;
-
-   /* Use the internal realloc function, which checks for all the possible
-    * overflows.  Notice that the parameters are (int) and (size_t)
-    */
-   np = png_voidcast(png_sPLT_tp,png_realloc_array(png_ptr,
-      info_ptr->splt_palettes, info_ptr->splt_palettes_num, nentries,
-      sizeof *np));
-
-   if (np == NULL)
-   {
-      /* Out of memory or too many chunks */
-      png_chunk_report(png_ptr, "too many sPLT chunks", PNG_CHUNK_WRITE_ERROR);
-      return;
-   }
-
-   png_free(png_ptr, info_ptr->splt_palettes);
-   info_ptr->splt_palettes = np;
-   info_ptr->free_me |= PNG_FREE_SPLT;
-
-   np += info_ptr->splt_palettes_num;
-
-   do
-   {
-      png_size_t length;
-
-      /* Skip invalid input entries */
-      if (entries->name == NULL || entries->entries == NULL)
-      {
-         /* png_handle_sPLT doesn't do this, so this is an app error */
-         png_app_error(png_ptr, "png_set_sPLT: invalid sPLT");
-         /* Just skip the invalid entry */
-         continue;
-      }
-
-      np->depth = entries->depth;
-
-      /* In the even of out-of-memory just return - there's no point keeping on
-       * trying to add sPLT chunks.
-       */
-      length = strlen(entries->name) + 1;
-      np->name = png_voidcast(png_charp, png_malloc_base(png_ptr, length));
-
-      if (np->name == NULL)
-         break;
-
-      memcpy(np->name, entries->name, length);
-
-      /* IMPORTANT: we have memory now that won't get freed if something else
-       * goes wrong, this code must free it.  png_malloc_array produces no
-       * warnings, use a png_chunk_report (below) if there is an error.
-       */
-      np->entries = png_voidcast(png_sPLT_entryp, png_malloc_array(png_ptr,
-          entries->nentries, sizeof (png_sPLT_entry)));
-
-      if (np->entries == NULL)
-      {
-         png_free(png_ptr, np->name);
-         break;
-      }
-
-      np->nentries = entries->nentries;
-      /* This multiply can't overflow because png_malloc_array has already
-       * checked it when doing the allocation.
-       */
-      memcpy(np->entries, entries->entries,
-         entries->nentries * sizeof (png_sPLT_entry));
-
-      /* Note that 'continue' skips the advance of the out pointer and out
-       * count, so an invalid entry is not added.
-       */
-      info_ptr->valid |= PNG_INFO_sPLT;
-      ++(info_ptr->splt_palettes_num);
-      ++np;
-   }
-   while (++entries, --nentries);
-
-   if (nentries > 0)
-      png_chunk_report(png_ptr, "sPLT out of memory", PNG_CHUNK_WRITE_ERROR);
-}
-#endif /* PNG_sPLT_SUPPORTED */
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-static png_byte
-check_location(png_const_structrp png_ptr, int location)
-{
-   location &= (PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT);
-
-   /* New in 1.6.0; copy the location and check it.  This is an API
-    * change, previously the app had to use the
-    * png_set_unknown_chunk_location API below for each chunk.
-    */
-   if (location == 0 && !(png_ptr->mode & PNG_IS_READ_STRUCT))
-   {
-      /* Write struct, so unknown chunks come from the app */
-      png_app_warning(png_ptr,
-         "png_set_unknown_chunks now expects a valid location");
-      /* Use the old behavior */
-      location = (png_byte)(png_ptr->mode &
-         (PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT));
-   }
-
-   /* This need not be an internal error - if the app calls
-    * png_set_unknown_chunks on a read pointer it must get the location right.
-    */
-   if (location == 0)
-      png_error(png_ptr, "invalid location in png_set_unknown_chunks");
-
-   /* Now reduce the location to the top-most set bit by removing each least
-    * significant bit in turn.
-    */
-   while (location != (location & -location))
-      location &= ~(location & -location);
-
-   /* The cast is safe because 'location' is a bit mask and only the low four
-    * bits are significant.
-    */
-   return (png_byte)location;
-}
-
-void PNGAPI
-png_set_unknown_chunks(png_const_structrp png_ptr,
-   png_inforp info_ptr, png_const_unknown_chunkp unknowns, int num_unknowns)
-{
-   png_unknown_chunkp np;
-
-   if (png_ptr == NULL || info_ptr == NULL || num_unknowns <= 0 ||
-      unknowns == NULL)
-      return;
-
-   /* Check for the failure cases where support has been disabled at compile
-    * time.  This code is hardly ever compiled - it's here because
-    * STORE_UNKNOWN_CHUNKS is set by both read and write code (compiling in this
-    * code) but may be meaningless if the read or write handling of unknown
-    * chunks is not compiled in.
-    */
-#  if !defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) && \
-      defined(PNG_READ_SUPPORTED)
-      if (png_ptr->mode & PNG_IS_READ_STRUCT)
-      {
-         png_app_error(png_ptr, "no unknown chunk support on read");
-         return;
-      }
-#  endif
-#  if !defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) && \
-      defined(PNG_WRITE_SUPPORTED)
-      if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
-      {
-         png_app_error(png_ptr, "no unknown chunk support on write");
-         return;
-      }
-#  endif
-
-   /* Prior to 1.6.0 this code used png_malloc_warn; however, this meant that
-    * unknown critical chunks could be lost with just a warning resulting in
-    * undefined behavior.  Now png_chunk_report is used to provide behavior
-    * appropriate to read or write.
-    */
-   np = png_voidcast(png_unknown_chunkp, png_realloc_array(png_ptr,
-         info_ptr->unknown_chunks, info_ptr->unknown_chunks_num, num_unknowns,
-         sizeof *np));
-
-   if (np == NULL)
-   {
-      png_chunk_report(png_ptr, "too many unknown chunks",
-         PNG_CHUNK_WRITE_ERROR);
-      return;
-   }
-
-   png_free(png_ptr, info_ptr->unknown_chunks);
-   info_ptr->unknown_chunks = np; /* safe because it is initialized */
-   info_ptr->free_me |= PNG_FREE_UNKN;
-
-   np += info_ptr->unknown_chunks_num;
-
-   /* Increment unknown_chunks_num each time round the loop to protect the
-    * just-allocated chunk data.
-    */
-   for (; num_unknowns > 0; --num_unknowns, ++unknowns)
-   {
-      memcpy(np->name, unknowns->name, (sizeof np->name));
-      np->name[(sizeof np->name)-1] = '\0';
-      np->location = check_location(png_ptr, unknowns->location);
-
-      if (unknowns->size == 0)
-      {
-         np->data = NULL;
-         np->size = 0;
-      }
-
-      else
-      {
-         np->data = png_voidcast(png_bytep,
-            png_malloc_base(png_ptr, unknowns->size));
-
-         if (np->data == NULL)
-         {
-            png_chunk_report(png_ptr, "unknown chunk: out of memory",
-               PNG_CHUNK_WRITE_ERROR);
-            /* But just skip storing the unknown chunk */
-            continue;
-         }
-
-         memcpy(np->data, unknowns->data, unknowns->size);
-         np->size = unknowns->size;
-      }
-
-      /* These increments are skipped on out-of-memory for the data - the
-       * unknown chunk entry gets overwritten if the png_chunk_report returns.
-       * This is correct in the read case (the chunk is just dropped.)
-       */
-      ++np;
-      ++(info_ptr->unknown_chunks_num);
-   }
-}
-
-void PNGAPI
-png_set_unknown_chunk_location(png_const_structrp png_ptr, png_inforp info_ptr,
-    int chunk, int location)
-{
-   /* This API is pretty pointless in 1.6.0 because the location can be set
-    * before the call to png_set_unknown_chunks.
-    *
-    * TODO: add a png_app_warning in 1.7
-    */
-   if (png_ptr != NULL && info_ptr != NULL && chunk >= 0 &&
-      chunk < info_ptr->unknown_chunks_num)
-   {
-      if ((location & (PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT)) == 0)
-      {
-         png_app_error(png_ptr, "invalid unknown chunk location");
-         /* Fake out the pre 1.6.0 behavior: */
-         if ((location & PNG_HAVE_IDAT)) /* undocumented! */
-            location = PNG_AFTER_IDAT;
-
-         else
-            location = PNG_HAVE_IHDR; /* also undocumented */
-      }
-
-      info_ptr->unknown_chunks[chunk].location =
-         check_location(png_ptr, location);
-   }
-}
-#endif
-
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-png_uint_32 PNGAPI
-png_permit_mng_features (png_structrp png_ptr, png_uint_32 mng_features)
-{
-   png_debug(1, "in png_permit_mng_features");
-
-   if (png_ptr == NULL)
-      return 0;
-
-   png_ptr->mng_features_permitted = mng_features & PNG_ALL_MNG_FEATURES;
-
-   return png_ptr->mng_features_permitted;
-}
-#endif
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-static unsigned int
-add_one_chunk(png_bytep list, unsigned int count, png_const_bytep add, int keep)
-{
-   unsigned int i;
-
-   /* Utility function: update the 'keep' state of a chunk if it is already in
-    * the list, otherwise add it to the list.
-    */
-   for (i=0; i<count; ++i, list += 5) if (memcmp(list, add, 4) == 0)
-   {
-      list[4] = (png_byte)keep;
-      return count;
-   }
-
-   if (keep != PNG_HANDLE_CHUNK_AS_DEFAULT)
-   {
-      ++count;
-      memcpy(list, add, 4);
-      list[4] = (png_byte)keep;
-   }
-
-   return count;
-}
-
-void PNGAPI
-png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
-    png_const_bytep chunk_list, int num_chunks_in)
-{
-   png_bytep new_list;
-   unsigned int num_chunks, old_num_chunks;
-
-   if (png_ptr == NULL)
-      return;
-
-   if (keep < 0 || keep >= PNG_HANDLE_CHUNK_LAST)
-   {
-      png_app_error(png_ptr, "png_set_keep_unknown_chunks: invalid keep");
-      return;
-   }
-
-   if (num_chunks_in <= 0)
-   {
-      png_ptr->unknown_default = keep;
-
-      /* '0' means just set the flags, so stop here */
-      if (num_chunks_in == 0)
-        return;
-   }
-
-   if (num_chunks_in < 0)
-   {
-      /* Ignore all unknown chunks and all chunks recognized by
-       * libpng except for IHDR, PLTE, tRNS, IDAT, and IEND
-       */
-      static PNG_CONST png_byte chunks_to_ignore[] = {
-         98,  75,  71,  68, '\0',  /* bKGD */
-         99,  72,  82,  77, '\0',  /* cHRM */
-        103,  65,  77,  65, '\0',  /* gAMA */
-        104,  73,  83,  84, '\0',  /* hIST */
-        105,  67,  67,  80, '\0',  /* iCCP */
-        105,  84,  88, 116, '\0',  /* iTXt */
-        111,  70,  70, 115, '\0',  /* oFFs */
-        112,  67,  65,  76, '\0',  /* pCAL */
-        112,  72,  89, 115, '\0',  /* pHYs */
-        115,  66,  73,  84, '\0',  /* sBIT */
-        115,  67,  65,  76, '\0',  /* sCAL */
-        115,  80,  76,  84, '\0',  /* sPLT */
-        115,  84,  69,  82, '\0',  /* sTER */
-        115,  82,  71,  66, '\0',  /* sRGB */
-        116,  69,  88, 116, '\0',  /* tEXt */
-        116,  73,  77,  69, '\0',  /* tIME */
-        122,  84,  88, 116, '\0'   /* zTXt */
-      };
-
-      chunk_list = chunks_to_ignore;
-      num_chunks = (sizeof chunks_to_ignore)/5;
-   }
-
-   else /* num_chunks_in > 0 */
-   {
-      if (chunk_list == NULL)
-      {
-         /* Prior to 1.6.0 this was silently ignored, now it is an app_error
-          * which can be switched off.
-          */
-         png_app_error(png_ptr, "png_set_keep_unknown_chunks: no chunk list");
-         return;
-      }
-
-      num_chunks = num_chunks_in;
-   }
-
-   old_num_chunks = png_ptr->num_chunk_list;
-   if (png_ptr->chunk_list == NULL)
-      old_num_chunks = 0;
-
-   /* Since num_chunks is always restricted to UINT_MAX/5 this can't overflow.
-    */
-   if (num_chunks + old_num_chunks > UINT_MAX/5)
-   {
-      png_app_error(png_ptr, "png_set_keep_unknown_chunks: too many chunks");
-      return;
-   }
-
-   /* If these chunks are being reset to the default then no more memory is
-    * required because add_one_chunk above doesn't extend the list if the 'keep'
-    * parameter is the default.
-    */
-   if (keep)
-   {
-      new_list = png_voidcast(png_bytep, png_malloc(png_ptr,
-          5 * (num_chunks + old_num_chunks)));
-
-      if (old_num_chunks > 0)
-         memcpy(new_list, png_ptr->chunk_list, 5*old_num_chunks);
-   }
-
-   else if (old_num_chunks > 0)
-      new_list = png_ptr->chunk_list;
-
-   else
-      new_list = NULL;
-
-   /* Add the new chunks together with each one's handling code.  If the chunk
-    * already exists the code is updated, otherwise the chunk is added to the
-    * end.  (In libpng 1.6.0 order no longer matters because this code enforces
-    * the earlier convention that the last setting is the one that is used.)
-    */
-   if (new_list != NULL)
-   {
-      png_const_bytep inlist;
-      png_bytep outlist;
-      unsigned int i;
-
-      for (i=0; i<num_chunks; ++i)
-         old_num_chunks = add_one_chunk(new_list, old_num_chunks,
-            chunk_list+5*i, keep);
-
-      /* Now remove any spurious 'default' entries. */
-      num_chunks = 0;
-      for (i=0, inlist=outlist=new_list; i<old_num_chunks; ++i, inlist += 5)
-         if (inlist[4])
-         {
-            if (outlist != inlist)
-               memcpy(outlist, inlist, 5);
-            outlist += 5;
-            ++num_chunks;
-         }
-
-      /* This means the application has removed all the specialized handling. */
-      if (num_chunks == 0)
-      {
-         if (png_ptr->chunk_list != new_list)
-            png_free(png_ptr, new_list);
-
-         new_list = NULL;
-      }
-   }
-
-   else
-      num_chunks = 0;
-
-   png_ptr->num_chunk_list = num_chunks;
-
-   if (png_ptr->chunk_list != new_list)
-   {
-      if (png_ptr->chunk_list != NULL)
-         png_free(png_ptr, png_ptr->chunk_list);
-
-      png_ptr->chunk_list = new_list;
-   }
-}
-#endif
-
-#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-void PNGAPI
-png_set_read_user_chunk_fn(png_structrp png_ptr, png_voidp user_chunk_ptr,
-    png_user_chunk_ptr read_user_chunk_fn)
-{
-   png_debug(1, "in png_set_read_user_chunk_fn");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->read_user_chunk_fn = read_user_chunk_fn;
-   png_ptr->user_chunk_ptr = user_chunk_ptr;
-}
-#endif
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-void PNGAPI
-png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_bytepp row_pointers)
-{
-   png_debug1(1, "in %s storage function", "rows");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (info_ptr->row_pointers && (info_ptr->row_pointers != row_pointers))
-      png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
-
-   info_ptr->row_pointers = row_pointers;
-
-   if (row_pointers)
-      info_ptr->valid |= PNG_INFO_IDAT;
-}
-#endif
-
-void PNGAPI
-png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
-{
-    if (png_ptr == NULL)
-       return;
-
-    if (size == 0 || size > PNG_UINT_31_MAX)
-       png_error(png_ptr, "invalid compression buffer size");
-
-#  ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-      if (png_ptr->mode & PNG_IS_READ_STRUCT)
-      {
-         png_ptr->IDAT_read_size = (png_uint_32)size; /* checked above */
-         return;
-      }
-#  endif
-
-#  ifdef PNG_WRITE_SUPPORTED
-      if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
-      {
-         if (png_ptr->zowner != 0)
-         {
-            png_warning(png_ptr,
-              "Compression buffer size cannot be changed because it is in use");
-            return;
-         }
-
-         if (size > ZLIB_IO_MAX)
-         {
-            png_warning(png_ptr,
-               "Compression buffer size limited to system maximum");
-            size = ZLIB_IO_MAX; /* must fit */
-         }
-
-         else if (size < 6)
-         {
-            /* Deflate will potentially go into an infinite loop on a SYNC_FLUSH
-             * if this is permitted.
-             */
-            png_warning(png_ptr,
-               "Compression buffer size cannot be reduced below 6");
-            return;
-         }
-
-         if (png_ptr->zbuffer_size != size)
-         {
-            png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
-            png_ptr->zbuffer_size = (uInt)size;
-         }
-      }
-#  endif
-}
-
-void PNGAPI
-png_set_invalid(png_const_structrp png_ptr, png_inforp info_ptr, int mask)
-{
-   if (png_ptr && info_ptr)
-      info_ptr->valid &= ~mask;
-}
-
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-/* This function was added to libpng 1.2.6 */
-void PNGAPI
-png_set_user_limits (png_structrp png_ptr, png_uint_32 user_width_max,
-    png_uint_32 user_height_max)
-{
-   /* Images with dimensions larger than these limits will be
-    * rejected by png_set_IHDR().  To accept any PNG datastream
-    * regardless of dimensions, set both limits to 0x7ffffffL.
-    */
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->user_width_max = user_width_max;
-   png_ptr->user_height_max = user_height_max;
-}
-
-/* This function was added to libpng 1.4.0 */
-void PNGAPI
-png_set_chunk_cache_max (png_structrp png_ptr, png_uint_32 user_chunk_cache_max)
-{
-    if (png_ptr)
-       png_ptr->user_chunk_cache_max = user_chunk_cache_max;
-}
-
-/* This function was added to libpng 1.4.1 */
-void PNGAPI
-png_set_chunk_malloc_max (png_structrp png_ptr,
-    png_alloc_size_t user_chunk_malloc_max)
-{
-   if (png_ptr)
-      png_ptr->user_chunk_malloc_max = user_chunk_malloc_max;
-}
-#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
-
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-void PNGAPI
-png_set_benign_errors(png_structrp png_ptr, int allowed)
-{
-   png_debug(1, "in png_set_benign_errors");
-
-   /* If allowed is 1, png_benign_error() is treated as a warning.
-    *
-    * If allowed is 0, png_benign_error() is treated as an error (which
-    * is the default behavior if png_set_benign_errors() is not called).
-    */
-
-   if (allowed)
-      png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN |
-         PNG_FLAG_APP_WARNINGS_WARN | PNG_FLAG_APP_ERRORS_WARN;
-
-   else
-      png_ptr->flags &= ~(PNG_FLAG_BENIGN_ERRORS_WARN |
-         PNG_FLAG_APP_WARNINGS_WARN | PNG_FLAG_APP_ERRORS_WARN);
-}
-#endif /* PNG_BENIGN_ERRORS_SUPPORTED */
-
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Whether to report invalid palette index; added at libng-1.5.10.
-    * It is possible for an indexed (color-type==3) PNG file to contain
-    * pixels with invalid (out-of-range) indexes if the PLTE chunk has
-    * fewer entries than the image's bit-depth would allow. We recover
-    * from this gracefully by filling any incomplete palette with zeroes
-    * (opaque black).  By default, when this occurs libpng will issue
-    * a benign error.  This API can be used to override that behavior.
-    */
-void PNGAPI
-png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
-{
-   png_debug(1, "in png_set_check_for_invalid_index");
-
-   if (allowed > 0)
-      png_ptr->num_palette_max = 0;
-
-   else
-      png_ptr->num_palette_max = -1;
-}
-#endif
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngstruct.h b/modules/juce_graphics/image_formats/pnglib/pngstruct.h
deleted file mode 100644
index 89605b1..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngstruct.h
+++ /dev/null
@@ -1,489 +0,0 @@
-
-/* pngstruct.h - header file for PNG reference library
- *
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-/* The structure that holds the information to read and write PNG files.
- * The only people who need to care about what is inside of this are the
- * people who will be modifying the library for their own special needs.
- * It should NOT be accessed directly by an application.
- */
-
-#ifndef PNGSTRUCT_H
-#define PNGSTRUCT_H
-/* zlib.h defines the structure z_stream, an instance of which is included
- * in this structure and is required for decompressing the LZ compressed
- * data in PNG files.
- */
-#ifndef ZLIB_CONST
-   /* We must ensure that zlib uses 'const' in declarations. */
-#  define ZLIB_CONST
-#endif
-#include "../../../juce_core/zip/zlib/zlib.h"
-#ifdef const
-   /* zlib.h sometimes #defines const to nothing, undo this. */
-#  undef const
-#endif
-
-/* zlib.h has mediocre z_const use before 1.2.6, this stuff is for compatibility
- * with older builds.
- */
-#if ZLIB_VERNUM < 0x1260
-#  define PNGZ_MSG_CAST(s) png_constcast(char*,s)
-#  define PNGZ_INPUT_CAST(b) png_constcast(png_bytep,b)
-#else
-#  define PNGZ_MSG_CAST(s) (s)
-#  define PNGZ_INPUT_CAST(b) (b)
-#endif
-
-/* zlib.h declares a magic type 'uInt' that limits the amount of data that zlib
- * can handle at once.  This type need be no larger than 16 bits (so maximum of
- * 65535), this define allows us to discover how big it is, but limited by the
- * maximuum for png_size_t.  The value can be overriden in a library build
- * (pngusr.h, or set it in CPPFLAGS) and it works to set it to a considerably
- * lower value (e.g. 255 works).  A lower value may help memory usage (slightly)
- * and may even improve performance on some systems (and degrade it on others.)
- */
-#ifndef ZLIB_IO_MAX
-#  define ZLIB_IO_MAX ((uInt)-1)
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-/* The type of a compression buffer list used by the write code. */
-typedef struct png_compression_buffer
-{
-   struct png_compression_buffer *next;
-   png_byte                       output[1]; /* actually zbuf_size */
-} png_compression_buffer, *png_compression_bufferp;
-
-#define PNG_COMPRESSION_BUFFER_SIZE(pp)\
-   (offsetof(png_compression_buffer, output) + (pp)->zbuffer_size)
-#endif
-
-/* Colorspace support; structures used in png_struct, png_info and in internal
- * functions to hold and communicate information about the color space.
- *
- * PNG_COLORSPACE_SUPPORTED is only required if the application will perform
- * colorspace corrections, otherwise all the colorspace information can be
- * skipped and the size of libpng can be reduced (significantly) by compiling
- * out the colorspace support.
- */
-#ifdef PNG_COLORSPACE_SUPPORTED
-/* The chromaticities of the red, green and blue colorants and the chromaticity
- * of the corresponding white point (i.e. of rgb(1.0,1.0,1.0)).
- */
-typedef struct png_xy
-{
-   png_fixed_point redx, redy;
-   png_fixed_point greenx, greeny;
-   png_fixed_point bluex, bluey;
-   png_fixed_point whitex, whitey;
-} png_xy;
-
-/* The same data as above but encoded as CIE XYZ values.  When this data comes
- * from chromaticities the sum of the Y values is assumed to be 1.0
- */
-typedef struct png_XYZ
-{
-   png_fixed_point red_X, red_Y, red_Z;
-   png_fixed_point green_X, green_Y, green_Z;
-   png_fixed_point blue_X, blue_Y, blue_Z;
-} png_XYZ;
-#endif /* COLORSPACE */
-
-#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
-/* A colorspace is all the above plus, potentially, profile information,
- * however at present libpng does not use the profile internally so it is only
- * stored in the png_info struct (if iCCP is supported.)  The rendering intent
- * is retained here and is checked.
- *
- * The file gamma encoding information is also stored here and gamma correction
- * is done by libpng, whereas color correction must currently be done by the
- * application.
- */
-typedef struct png_colorspace
-{
-#ifdef PNG_GAMMA_SUPPORTED
-   png_fixed_point gamma;        /* File gamma */
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-   png_xy      end_points_xy;    /* End points as chromaticities */
-   png_XYZ     end_points_XYZ;   /* End points as CIE XYZ colorant values */
-   png_uint_16 rendering_intent; /* Rendering intent of a profile */
-#endif
-
-   /* Flags are always defined to simplify the code. */
-   png_uint_16 flags;            /* As defined below */
-} png_colorspace, * PNG_RESTRICT png_colorspacerp;
-
-typedef const png_colorspace * PNG_RESTRICT png_const_colorspacerp;
-
-/* General flags for the 'flags' field */
-#define PNG_COLORSPACE_HAVE_GAMMA           0x0001
-#define PNG_COLORSPACE_HAVE_ENDPOINTS       0x0002
-#define PNG_COLORSPACE_HAVE_INTENT          0x0004
-#define PNG_COLORSPACE_FROM_gAMA            0x0008
-#define PNG_COLORSPACE_FROM_cHRM            0x0010
-#define PNG_COLORSPACE_FROM_sRGB            0x0020
-#define PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB 0x0040
-#define PNG_COLORSPACE_MATCHES_sRGB         0x0080 /* exact match on profile */
-#define PNG_COLORSPACE_INVALID              0x8000
-#define PNG_COLORSPACE_CANCEL(flags)        (0xffff ^ (flags))
-#endif /* COLORSPACE || GAMMA */
-
-struct png_struct_def
-{
-#ifdef PNG_SETJMP_SUPPORTED
-   jmp_buf jmp_buf_local;     /* New name in 1.6.0 for jmp_buf in png_struct */
-   png_longjmp_ptr longjmp_fn;/* setjmp non-local goto function. */
-   jmp_buf *jmp_buf_ptr;      /* passed to longjmp_fn */
-   size_t jmp_buf_size;       /* size of the above, if allocated */
-#endif
-   png_error_ptr error_fn;    /* function for printing errors and aborting */
-#ifdef PNG_WARNINGS_SUPPORTED
-   png_error_ptr warning_fn;  /* function for printing warnings */
-#endif
-   png_voidp error_ptr;       /* user supplied struct for error functions */
-   png_rw_ptr write_data_fn;  /* function for writing output data */
-   png_rw_ptr read_data_fn;   /* function for reading input data */
-   png_voidp io_ptr;          /* ptr to application struct for I/O functions */
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   png_user_transform_ptr read_user_transform_fn; /* user read transform */
-#endif
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-   png_user_transform_ptr write_user_transform_fn; /* user write transform */
-#endif
-
-/* These were added in libpng-1.0.2 */
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-   png_voidp user_transform_ptr; /* user supplied struct for user transform */
-   png_byte user_transform_depth;    /* bit depth of user transformed pixels */
-   png_byte user_transform_channels; /* channels in user transformed pixels */
-#endif
-#endif
-
-   png_uint_32 mode;          /* tells us where we are in the PNG file */
-   png_uint_32 flags;         /* flags indicating various things to libpng */
-   png_uint_32 transformations; /* which transformations to perform */
-
-   png_uint_32 zowner;        /* ID (chunk type) of zstream owner, 0 if none */
-   z_stream    zstream;       /* decompression structure */
-
-#ifdef PNG_WRITE_SUPPORTED
-   png_compression_bufferp zbuffer_list; /* Created on demand during write */
-   uInt                    zbuffer_size; /* size of the actual buffer */
-
-   int zlib_level;            /* holds zlib compression level */
-   int zlib_method;           /* holds zlib compression method */
-   int zlib_window_bits;      /* holds zlib compression window bits */
-   int zlib_mem_level;        /* holds zlib compression memory level */
-   int zlib_strategy;         /* holds zlib compression strategy */
-#endif
-/* Added at libpng 1.5.4 */
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-   int zlib_text_level;            /* holds zlib compression level */
-   int zlib_text_method;           /* holds zlib compression method */
-   int zlib_text_window_bits;      /* holds zlib compression window bits */
-   int zlib_text_mem_level;        /* holds zlib compression memory level */
-   int zlib_text_strategy;         /* holds zlib compression strategy */
-#endif
-/* End of material added at libpng 1.5.4 */
-/* Added at libpng 1.6.0 */
-#ifdef PNG_WRITE_SUPPORTED
-   int zlib_set_level;        /* Actual values set into the zstream on write */
-   int zlib_set_method;
-   int zlib_set_window_bits;
-   int zlib_set_mem_level;
-   int zlib_set_strategy;
-#endif
-
-   png_uint_32 width;         /* width of image in pixels */
-   png_uint_32 height;        /* height of image in pixels */
-   png_uint_32 num_rows;      /* number of rows in current pass */
-   png_uint_32 usr_width;     /* width of row at start of write */
-   png_size_t rowbytes;       /* size of row in bytes */
-   png_uint_32 iwidth;        /* width of current interlaced row in pixels */
-   png_uint_32 row_number;    /* current row in interlace pass */
-   png_uint_32 chunk_name;    /* PNG_CHUNK() id of current chunk */
-   png_bytep prev_row;        /* buffer to save previous (unfiltered) row.
-                               * This is a pointer into big_prev_row
-                               */
-   png_bytep row_buf;         /* buffer to save current (unfiltered) row.
-                               * This is a pointer into big_row_buf
-                               */
-#ifdef PNG_WRITE_SUPPORTED
-   png_bytep sub_row;         /* buffer to save "sub" row when filtering */
-   png_bytep up_row;          /* buffer to save "up" row when filtering */
-   png_bytep avg_row;         /* buffer to save "avg" row when filtering */
-   png_bytep paeth_row;       /* buffer to save "Paeth" row when filtering */
-#endif
-   png_size_t info_rowbytes;  /* Added in 1.5.4: cache of updated row bytes */
-
-   png_uint_32 idat_size;     /* current IDAT size for read */
-   png_uint_32 crc;           /* current chunk CRC value */
-   png_colorp palette;        /* palette from the input file */
-   png_uint_16 num_palette;   /* number of color entries in palette */
-
-/* Added at libpng-1.5.10 */
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   int num_palette_max;       /* maximum palette index found in IDAT */
-#endif
-
-   png_uint_16 num_trans;     /* number of transparency values */
-   png_byte compression;      /* file compression type (always 0) */
-   png_byte filter;           /* file filter type (always 0) */
-   png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
-   png_byte pass;             /* current interlace pass (0 - 6) */
-   png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */
-   png_byte color_type;       /* color type of file */
-   png_byte bit_depth;        /* bit depth of file */
-   png_byte usr_bit_depth;    /* bit depth of users row: write only */
-   png_byte pixel_depth;      /* number of bits per pixel */
-   png_byte channels;         /* number of channels in file */
-#ifdef PNG_WRITE_SUPPORTED
-   png_byte usr_channels;     /* channels at start of write: write only */
-#endif
-   png_byte sig_bytes;        /* magic bytes read/written from start of file */
-   png_byte maximum_pixel_depth;
-                              /* pixel depth used for the row buffers */
-   png_byte transformed_pixel_depth;
-                              /* pixel depth after read/write transforms */
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-   png_uint_16 filler;           /* filler bytes for pixel expansion */
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-   png_byte background_gamma_type;
-   png_fixed_point background_gamma;
-   png_color_16 background;   /* background color in screen gamma space */
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   png_color_16 background_1; /* background normalized to gamma 1.0 */
-#endif
-#endif /* PNG_bKGD_SUPPORTED */
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-   png_flush_ptr output_flush_fn; /* Function for flushing output */
-   png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */
-   png_uint_32 flush_rows;    /* number of rows written since last flush */
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   int gamma_shift;      /* number of "insignificant" bits in 16-bit gamma */
-   png_fixed_point screen_gamma; /* screen gamma value (display_exponent) */
-
-   png_bytep gamma_table;     /* gamma table for 8-bit depth files */
-   png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-   png_bytep gamma_from_1;    /* converts from 1.0 to screen */
-   png_bytep gamma_to_1;      /* converts from file to 1.0 */
-   png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
-   png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
-   png_color_8 sig_bit;       /* significant bits in each available channel */
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-   png_color_8 shift;         /* shift for significant bit tranformation */
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
- || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   png_bytep trans_alpha;           /* alpha values for paletted files */
-   png_color_16 trans_color;  /* transparent color for non-paletted files */
-#endif
-
-   png_read_status_ptr read_row_fn;   /* called after each row is decoded */
-   png_write_status_ptr write_row_fn; /* called after each row is encoded */
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-   png_progressive_info_ptr info_fn; /* called after header data fully read */
-   png_progressive_row_ptr row_fn;   /* called after a prog. row is decoded */
-   png_progressive_end_ptr end_fn;   /* called after image is complete */
-   png_bytep save_buffer_ptr;        /* current location in save_buffer */
-   png_bytep save_buffer;            /* buffer for previously read data */
-   png_bytep current_buffer_ptr;     /* current location in current_buffer */
-   png_bytep current_buffer;         /* buffer for recently used data */
-   png_uint_32 push_length;          /* size of current input chunk */
-   png_uint_32 skip_length;          /* bytes to skip in input data */
-   png_size_t save_buffer_size;      /* amount of data now in save_buffer */
-   png_size_t save_buffer_max;       /* total size of save_buffer */
-   png_size_t buffer_size;           /* total amount of available input data */
-   png_size_t current_buffer_size;   /* amount of data now in current_buffer */
-   int process_mode;                 /* what push library is currently doing */
-   int cur_palette;                  /* current push library palette index */
-
-#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-
-#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
-/* For the Borland special 64K segment handler */
-   png_bytepp offset_table_ptr;
-   png_bytep offset_table;
-   png_uint_16 offset_table_number;
-   png_uint_16 offset_table_count;
-   png_uint_16 offset_table_count_free;
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   png_bytep palette_lookup; /* lookup table for quantizing */
-   png_bytep quantize_index; /* index translation for palette files */
-#endif
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   png_byte heuristic_method;        /* heuristic for row filter selection */
-   png_byte num_prev_filters;        /* number of weights for previous rows */
-   png_bytep prev_filters;           /* filter type(s) of previous row(s) */
-   png_uint_16p filter_weights;      /* weight(s) for previous line(s) */
-   png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */
-   png_uint_16p filter_costs;        /* relative filter calculation cost */
-   png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */
-#endif
-
-   /* Options */
-#ifdef PNG_SET_OPTION_SUPPORTED
-   png_byte options;           /* On/off state (up to 4 options) */
-#endif
-
-#if PNG_LIBPNG_VER < 10700
-/* To do: remove this from libpng-1.7 */
-#ifdef PNG_TIME_RFC1123_SUPPORTED
-   char time_buffer[29]; /* String to hold RFC 1123 time text */
-#endif
-#endif
-
-/* New members added in libpng-1.0.6 */
-
-   png_uint_32 free_me;    /* flags items libpng is responsible for freeing */
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-   png_voidp user_chunk_ptr;
-#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-   png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
-#endif
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-   int          unknown_default; /* As PNG_HANDLE_* */
-   unsigned int num_chunk_list;  /* Number of entries in the list */
-   png_bytep    chunk_list;      /* List of png_byte[5]; the textual chunk name
-                                  * followed by a PNG_HANDLE_* byte */
-#endif
-
-/* New members added in libpng-1.0.3 */
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   png_byte rgb_to_gray_status;
-   /* Added in libpng 1.5.5 to record setting of coefficients: */
-   png_byte rgb_to_gray_coefficients_set;
-   /* These were changed from png_byte in libpng-1.0.6 */
-   png_uint_16 rgb_to_gray_red_coeff;
-   png_uint_16 rgb_to_gray_green_coeff;
-   /* deleted in 1.5.5: rgb_to_gray_blue_coeff; */
-#endif
-
-/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
-/* Changed from png_byte to png_uint_32 at version 1.2.0 */
-   png_uint_32 mng_features_permitted;
-#endif
-
-/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   png_byte filter_type;
-#endif
-
-/* New members added in libpng-1.2.0 */
-
-/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
-#ifdef PNG_USER_MEM_SUPPORTED
-   png_voidp mem_ptr;             /* user supplied struct for mem functions */
-   png_malloc_ptr malloc_fn;      /* function for allocating memory */
-   png_free_ptr free_fn;          /* function for freeing memory */
-#endif
-
-/* New member added in libpng-1.0.13 and 1.2.0 */
-   png_bytep big_row_buf;         /* buffer to save current (unfiltered) row */
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-/* The following three members were added at version 1.0.14 and 1.2.4 */
-   png_bytep quantize_sort;          /* working sort array */
-   png_bytep index_to_palette;       /* where the original index currently is
-                                        in the palette */
-   png_bytep palette_to_index;       /* which original index points to this
-                                         palette color */
-#endif
-
-/* New members added in libpng-1.0.16 and 1.2.6 */
-   png_byte compression_type;
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   png_uint_32 user_width_max;
-   png_uint_32 user_height_max;
-
-   /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown
-    * chunks that can be stored (0 means unlimited).
-    */
-   png_uint_32 user_chunk_cache_max;
-
-   /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk
-    * can occupy when decompressed.  0 means unlimited.
-    */
-   png_alloc_size_t user_chunk_malloc_max;
-#endif
-
-/* New member added in libpng-1.0.25 and 1.2.17 */
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-   /* Temporary storage for unknown chunk that the library doesn't recognize,
-    * used while reading the chunk.
-    */
-   png_unknown_chunk unknown_chunk;
-#endif
-
-/* New member added in libpng-1.2.26 */
-  png_size_t old_big_row_buf_size;
-
-#ifdef PNG_READ_SUPPORTED
-/* New member added in libpng-1.2.30 */
-  png_bytep        read_buffer;      /* buffer for reading chunk data */
-  png_alloc_size_t read_buffer_size; /* current size of the buffer */
-#endif
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-  uInt             IDAT_read_size;   /* limit on read buffer size for IDAT */
-#endif
-
-#ifdef PNG_IO_STATE_SUPPORTED
-/* New member added in libpng-1.4.0 */
-   png_uint_32 io_state;
-#endif
-
-/* New member added in libpng-1.5.6 */
-   png_bytep big_prev_row;
-
-/* New member added in libpng-1.5.7 */
-   void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info,
-      png_bytep row, png_const_bytep prev_row);
-
-#ifdef PNG_READ_SUPPORTED
-#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
-   png_colorspace   colorspace;
-#endif
-#endif
-};
-#endif /* PNGSTRUCT_H */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngtrans.c b/modules/juce_graphics/image_formats/pnglib/pngtrans.c
deleted file mode 100644
index 20558af..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngtrans.c
+++ /dev/null
@@ -1,830 +0,0 @@
-
-/* pngtrans.c - transforms the data in a row (used by both readers and writers)
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Turn on BGR-to-RGB mapping */
-void PNGAPI
-png_set_bgr(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_bgr");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_BGR;
-}
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Turn on 16 bit byte swapping */
-void PNGAPI
-png_set_swap(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_swap");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (png_ptr->bit_depth == 16)
-      png_ptr->transformations |= PNG_SWAP_BYTES;
-}
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
-/* Turn on pixel packing */
-void PNGAPI
-png_set_packing(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_packing");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (png_ptr->bit_depth < 8)
-   {
-      png_ptr->transformations |= PNG_PACK;
-      png_ptr->usr_bit_depth = 8;
-   }
-}
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-/* Turn on packed pixel swapping */
-void PNGAPI
-png_set_packswap(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_packswap");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (png_ptr->bit_depth < 8)
-      png_ptr->transformations |= PNG_PACKSWAP;
-}
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-void PNGAPI
-png_set_shift(png_structrp png_ptr, png_const_color_8p true_bits)
-{
-   png_debug(1, "in png_set_shift");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_SHIFT;
-   png_ptr->shift = *true_bits;
-}
-#endif
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
-    defined(PNG_WRITE_INTERLACING_SUPPORTED)
-int PNGAPI
-png_set_interlace_handling(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_interlace handling");
-
-   if (png_ptr && png_ptr->interlaced)
-   {
-      png_ptr->transformations |= PNG_INTERLACE;
-      return (7);
-   }
-
-   return (1);
-}
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-/* Add a filler byte on read, or remove a filler or alpha byte on write.
- * The filler type has changed in v0.95 to allow future 2-byte fillers
- * for 48-bit input data, as well as to avoid problems with some compilers
- * that don't like bytes as parameters.
- */
-void PNGAPI
-png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
-{
-   png_debug(1, "in png_set_filler");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* In libpng 1.6 it is possible to determine whether this is a read or write
-    * operation and therefore to do more checking here for a valid call.
-    */
-   if (png_ptr->mode & PNG_IS_READ_STRUCT)
-   {
-#     ifdef PNG_READ_FILLER_SUPPORTED
-         /* On read png_set_filler is always valid, regardless of the base PNG
-          * format, because other transformations can give a format where the
-          * filler code can execute (basically an 8 or 16-bit component RGB or G
-          * format.)
-          *
-          * NOTE: usr_channels is not used by the read code!  (This has led to
-          * confusion in the past.)  The filler is only used in the read code.
-          */
-         png_ptr->filler = (png_uint_16)filler;
-#     else
-         png_app_error(png_ptr, "png_set_filler not supported on read");
-         PNG_UNUSED(filler) /* not used in the write case */
-         return;
-#     endif
-   }
-
-   else /* write */
-   {
-#     ifdef PNG_WRITE_FILLER_SUPPORTED
-         /* On write the usr_channels parameter must be set correctly at the
-          * start to record the number of channels in the app-supplied data.
-          */
-         switch (png_ptr->color_type)
-         {
-            case PNG_COLOR_TYPE_RGB:
-               png_ptr->usr_channels = 4;
-               break;
-
-            case PNG_COLOR_TYPE_GRAY:
-               if (png_ptr->bit_depth >= 8)
-               {
-                  png_ptr->usr_channels = 2;
-                  break;
-               }
-
-               else
-               {
-                  /* There simply isn't any code in libpng to strip out bits
-                   * from bytes when the components are less than a byte in
-                   * size!
-                   */
-                  png_app_error(png_ptr,
-                     "png_set_filler is invalid for low bit depth gray output");
-                  return;
-               }
-
-            default:
-               png_app_error(png_ptr,
-                  "png_set_filler: inappropriate color type");
-               return;
-         }
-#     else
-         png_app_error(png_ptr, "png_set_filler not supported on write");
-         return;
-#     endif
-   }
-
-   /* Here on success - libpng supports the operation, set the transformation
-    * and the flag to say where the filler channel is.
-    */
-   png_ptr->transformations |= PNG_FILLER;
-
-   if (filler_loc == PNG_FILLER_AFTER)
-      png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
-
-   else
-      png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
-}
-
-/* Added to libpng-1.2.7 */
-void PNGAPI
-png_set_add_alpha(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
-{
-   png_debug(1, "in png_set_add_alpha");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_set_filler(png_ptr, filler, filler_loc);
-   /* The above may fail to do anything. */
-   if (png_ptr->transformations & PNG_FILLER)
-      png_ptr->transformations |= PNG_ADD_ALPHA;
-}
-
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_swap_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_swap_alpha");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_SWAP_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_invert_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_invert_alpha");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_INVERT_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-void PNGAPI
-png_set_invert_mono(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_invert_mono");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_INVERT_MONO;
-}
-
-/* Invert monochrome grayscale data */
-void /* PRIVATE */
-png_do_invert(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_invert");
-
-  /* This test removed from libpng version 1.0.13 and 1.2.0:
-   *   if (row_info->bit_depth == 1 &&
-   */
-   if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      png_bytep rp = row;
-      png_size_t i;
-      png_size_t istop = row_info->rowbytes;
-
-      for (i = 0; i < istop; i++)
-      {
-         *rp = (png_byte)(~(*rp));
-         rp++;
-      }
-   }
-
-   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
-      row_info->bit_depth == 8)
-   {
-      png_bytep rp = row;
-      png_size_t i;
-      png_size_t istop = row_info->rowbytes;
-
-      for (i = 0; i < istop; i += 2)
-      {
-         *rp = (png_byte)(~(*rp));
-         rp += 2;
-      }
-   }
-
-#ifdef PNG_16BIT_SUPPORTED
-   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
-      row_info->bit_depth == 16)
-   {
-      png_bytep rp = row;
-      png_size_t i;
-      png_size_t istop = row_info->rowbytes;
-
-      for (i = 0; i < istop; i += 4)
-      {
-         *rp = (png_byte)(~(*rp));
-         *(rp + 1) = (png_byte)(~(*(rp + 1)));
-         rp += 4;
-      }
-   }
-#endif
-}
-#endif
-
-#ifdef PNG_16BIT_SUPPORTED
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Swaps byte order on 16 bit depth images */
-void /* PRIVATE */
-png_do_swap(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_swap");
-
-   if (row_info->bit_depth == 16)
-   {
-      png_bytep rp = row;
-      png_uint_32 i;
-      png_uint_32 istop= row_info->width * row_info->channels;
-
-      for (i = 0; i < istop; i++, rp += 2)
-      {
-         png_byte t = *rp;
-         *rp = *(rp + 1);
-         *(rp + 1) = t;
-      }
-   }
-}
-#endif
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-static PNG_CONST png_byte onebppswaptable[256] = {
-   0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
-   0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
-   0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
-   0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
-   0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
-   0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
-   0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
-   0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
-   0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
-   0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
-   0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
-   0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
-   0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
-   0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
-   0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
-   0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
-   0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
-   0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
-   0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
-   0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
-   0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
-   0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
-   0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
-   0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
-   0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
-   0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
-   0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
-   0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
-   0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
-   0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
-   0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
-   0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-
-static PNG_CONST png_byte twobppswaptable[256] = {
-   0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
-   0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
-   0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
-   0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
-   0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
-   0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
-   0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
-   0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
-   0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
-   0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
-   0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
-   0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
-   0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
-   0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
-   0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
-   0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
-   0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
-   0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
-   0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
-   0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
-   0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
-   0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
-   0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
-   0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
-   0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
-   0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
-   0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
-   0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
-   0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
-   0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
-   0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
-   0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
-};
-
-static PNG_CONST png_byte fourbppswaptable[256] = {
-   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
-   0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
-   0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
-   0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
-   0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
-   0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
-   0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
-   0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
-   0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
-   0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
-   0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
-   0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
-   0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
-   0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
-   0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
-   0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
-   0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
-   0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
-   0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
-   0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
-   0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
-   0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
-   0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
-   0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
-   0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
-   0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
-   0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
-   0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
-   0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
-   0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
-   0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
-   0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
-};
-
-/* Swaps pixel packing order within bytes */
-void /* PRIVATE */
-png_do_packswap(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_packswap");
-
-   if (row_info->bit_depth < 8)
-   {
-      png_bytep rp;
-      png_const_bytep end, table;
-
-      end = row + row_info->rowbytes;
-
-      if (row_info->bit_depth == 1)
-         table = onebppswaptable;
-
-      else if (row_info->bit_depth == 2)
-         table = twobppswaptable;
-
-      else if (row_info->bit_depth == 4)
-         table = fourbppswaptable;
-
-      else
-         return;
-
-      for (rp = row; rp < end; rp++)
-         *rp = table[*rp];
-   }
-}
-#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
-    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-/* Remove a channel - this used to be 'png_do_strip_filler' but it used a
- * somewhat weird combination of flags to determine what to do.  All the calls
- * to png_do_strip_filler are changed in 1.5.2 to call this instead with the
- * correct arguments.
- *
- * The routine isn't general - the channel must be the channel at the start or
- * end (not in the middle) of each pixel.
- */
-void /* PRIVATE */
-png_do_strip_channel(png_row_infop row_info, png_bytep row, int at_start)
-{
-   png_bytep sp = row; /* source pointer */
-   png_bytep dp = row; /* destination pointer */
-   png_bytep ep = row + row_info->rowbytes; /* One beyond end of row */
-
-   /* At the start sp will point to the first byte to copy and dp to where
-    * it is copied to.  ep always points just beyond the end of the row, so
-    * the loop simply copies (channels-1) channels until sp reaches ep.
-    *
-    * at_start:        0 -- convert AG, XG, ARGB, XRGB, AAGG, XXGG, etc.
-    *            nonzero -- convert GA, GX, RGBA, RGBX, GGAA, RRGGBBXX, etc.
-    */
-
-   /* GA, GX, XG cases */
-   if (row_info->channels == 2)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if (at_start) /* Skip initial filler */
-            ++sp;
-         else          /* Skip initial channel and, for sp, the filler */
-            sp += 2, ++dp;
-
-         /* For a 1 pixel wide image there is nothing to do */
-         while (sp < ep)
-            *dp++ = *sp, sp += 2;
-
-         row_info->pixel_depth = 8;
-      }
-
-      else if (row_info->bit_depth == 16)
-      {
-         if (at_start) /* Skip initial filler */
-            sp += 2;
-         else          /* Skip initial channel and, for sp, the filler */
-            sp += 4, dp += 2;
-
-         while (sp < ep)
-            *dp++ = *sp++, *dp++ = *sp, sp += 3;
-
-         row_info->pixel_depth = 16;
-      }
-
-      else
-         return; /* bad bit depth */
-
-      row_info->channels = 1;
-
-      /* Finally fix the color type if it records an alpha channel */
-      if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-         row_info->color_type = PNG_COLOR_TYPE_GRAY;
-   }
-
-   /* RGBA, RGBX, XRGB cases */
-   else if (row_info->channels == 4)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if (at_start) /* Skip initial filler */
-            ++sp;
-         else          /* Skip initial channels and, for sp, the filler */
-            sp += 4, dp += 3;
-
-         /* Note that the loop adds 3 to dp and 4 to sp each time. */
-         while (sp < ep)
-            *dp++ = *sp++, *dp++ = *sp++, *dp++ = *sp, sp += 2;
-
-         row_info->pixel_depth = 24;
-      }
-
-      else if (row_info->bit_depth == 16)
-      {
-         if (at_start) /* Skip initial filler */
-            sp += 2;
-         else          /* Skip initial channels and, for sp, the filler */
-            sp += 8, dp += 6;
-
-         while (sp < ep)
-         {
-            /* Copy 6 bytes, skip 2 */
-            *dp++ = *sp++, *dp++ = *sp++;
-            *dp++ = *sp++, *dp++ = *sp++;
-            *dp++ = *sp++, *dp++ = *sp, sp += 3;
-         }
-
-         row_info->pixel_depth = 48;
-      }
-
-      else
-         return; /* bad bit depth */
-
-      row_info->channels = 3;
-
-      /* Finally fix the color type if it records an alpha channel */
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-         row_info->color_type = PNG_COLOR_TYPE_RGB;
-   }
-
-   else
-      return; /* The filler channel has gone already */
-
-   /* Fix the rowbytes value. */
-   row_info->rowbytes = dp-row;
-}
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Swaps red and blue bytes within a pixel */
-void /* PRIVATE */
-png_do_bgr(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_bgr");
-
-   if ((row_info->color_type & PNG_COLOR_MASK_COLOR))
-   {
-      png_uint_32 row_width = row_info->width;
-      if (row_info->bit_depth == 8)
-      {
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 3)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 2);
-               *(rp + 2) = save;
-            }
-         }
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 4)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 2);
-               *(rp + 2) = save;
-            }
-         }
-      }
-
-#ifdef PNG_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 6)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 4);
-               *(rp + 4) = save;
-               save = *(rp + 1);
-               *(rp + 1) = *(rp + 5);
-               *(rp + 5) = save;
-            }
-         }
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 8)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 4);
-               *(rp + 4) = save;
-               save = *(rp + 1);
-               *(rp + 1) = *(rp + 5);
-               *(rp + 5) = save;
-            }
-         }
-      }
-#endif
-   }
-}
-#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
-
-#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \
-    defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED)
-/* Added at libpng-1.5.10 */
-void /* PRIVATE */
-png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info)
-{
-   if (png_ptr->num_palette < (1 << row_info->bit_depth) &&
-      png_ptr->num_palette > 0) /* num_palette can be 0 in MNG files */
-   {
-      /* Calculations moved outside switch in an attempt to stop different
-       * compiler warnings.  'padding' is in *bits* within the last byte, it is
-       * an 'int' because pixel_depth becomes an 'int' in the expression below,
-       * and this calculation is used because it avoids warnings that other
-       * forms produced on either GCC or MSVC.
-       */
-      int padding = (-row_info->pixel_depth * row_info->width) & 7;
-      png_bytep rp = png_ptr->row_buf + row_info->rowbytes;
-
-      switch (row_info->bit_depth)
-      {
-         case 1:
-         {
-            /* in this case, all bytes must be 0 so we don't need
-             * to unpack the pixels except for the rightmost one.
-             */
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-              if (*rp >> padding != 0)
-                 png_ptr->num_palette_max = 1;
-              padding = 0;
-            }
-
-            break;
-         }
-
-         case 2:
-         {
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-              int i = ((*rp >> padding) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 2) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 4) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 6) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              padding = 0;
-            }
-
-            break;
-         }
-
-         case 4:
-         {
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-              int i = ((*rp >> padding) & 0x0f);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 4) & 0x0f);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              padding = 0;
-            }
-
-            break;
-         }
-
-         case 8:
-         {
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-               if (*rp > png_ptr->num_palette_max)
-                  png_ptr->num_palette_max = (int) *rp;
-            }
-
-            break;
-         }
-
-         default:
-            break;
-      }
-   }
-}
-#endif /* PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-void PNGAPI
-png_set_user_transform_info(png_structrp png_ptr, png_voidp
-   user_transform_ptr, int user_transform_depth, int user_transform_channels)
-{
-   png_debug(1, "in png_set_user_transform_info");
-
-   if (png_ptr == NULL)
-      return;
-   png_ptr->user_transform_ptr = user_transform_ptr;
-   png_ptr->user_transform_depth = (png_byte)user_transform_depth;
-   png_ptr->user_transform_channels = (png_byte)user_transform_channels;
-}
-#endif
-
-/* This function returns a pointer to the user_transform_ptr associated with
- * the user transform functions.  The application should free any memory
- * associated with this pointer before png_write_destroy and png_read_destroy
- * are called.
- */
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-png_voidp PNGAPI
-png_get_user_transform_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return (NULL);
-
-   return png_ptr->user_transform_ptr;
-}
-#endif
-
-#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED
-png_uint_32 PNGAPI
-png_get_current_row_number(png_const_structrp png_ptr)
-{
-   /* See the comments in png.h - this is the sub-image row when reading and
-    * interlaced image.
-    */
-   if (png_ptr != NULL)
-      return png_ptr->row_number;
-
-   return PNG_UINT_32_MAX; /* help the app not to fail silently */
-}
-
-png_byte PNGAPI
-png_get_current_pass_number(png_const_structrp png_ptr)
-{
-   if (png_ptr != NULL)
-      return png_ptr->pass;
-   return 8; /* invalid */
-}
-#endif /* PNG_USER_TRANSFORM_INFO_SUPPORTED */
-#endif /* PNG_READ_USER_TRANSFORM_SUPPORTED ||
-          PNG_WRITE_USER_TRANSFORM_SUPPORTED */
-#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngwio.c b/modules/juce_graphics/image_formats/pnglib/pngwio.c
deleted file mode 100644
index c5fca98..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngwio.c
+++ /dev/null
@@ -1,164 +0,0 @@
-
-/* pngwio.c - functions for data output
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all output.  Users who need
- * special handling are expected to write functions that have the same
- * arguments as these and perform similar functions, but that possibly
- * use different output methods.  Note that you shouldn't change these
- * functions, but rather write replacement functions and then change
- * them at run time with png_set_write_fn(...).
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_WRITE_SUPPORTED
-
-/* Write the data to whatever output you are using.  The default routine
- * writes to a file pointer.  Note that this routine sometimes gets called
- * with very small lengths, so you should implement some kind of simple
- * buffering if you are using unbuffered writes.  This should never be asked
- * to write more than 64K on a 16 bit machine.
- */
-
-void /* PRIVATE */
-png_write_data(png_structrp png_ptr, png_const_bytep data, png_size_t length)
-{
-   /* NOTE: write_data_fn must not change the buffer! */
-   if (png_ptr->write_data_fn != NULL )
-      (*(png_ptr->write_data_fn))(png_ptr, png_constcast(png_bytep,data),
-         length);
-
-   else
-      png_error(png_ptr, "Call to NULL write function");
-}
-
-#ifdef PNG_STDIO_SUPPORTED
-/* This is the function that does the actual writing of data.  If you are
- * not writing to a standard C stream, you should create a replacement
- * write_data function and use it at run time with png_set_write_fn(), rather
- * than changing the library.
- */
-void PNGCBAPI
-png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
-   png_size_t check;
-
-   if (png_ptr == NULL)
-      return;
-
-   check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
-
-   if (check != length)
-      png_error(png_ptr, "Write Error");
-}
-#endif
-
-/* This function is called to output any data pending writing (normally
- * to disk).  After png_flush is called, there should be no data pending
- * writing in any buffers.
- */
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-void /* PRIVATE */
-png_flush(png_structrp png_ptr)
-{
-   if (png_ptr->output_flush_fn != NULL)
-      (*(png_ptr->output_flush_fn))(png_ptr);
-}
-
-#  ifdef PNG_STDIO_SUPPORTED
-void PNGCBAPI
-png_default_flush(png_structp png_ptr)
-{
-   png_FILE_p io_ptr;
-
-   if (png_ptr == NULL)
-      return;
-
-   io_ptr = png_voidcast(png_FILE_p, (png_ptr->io_ptr));
-   fflush(io_ptr);
-}
-#  endif
-#endif
-
-/* This function allows the application to supply new output functions for
- * libpng if standard C streams aren't being used.
- *
- * This function takes as its arguments:
- * png_ptr       - pointer to a png output data structure
- * io_ptr        - pointer to user supplied structure containing info about
- *                 the output functions.  May be NULL.
- * write_data_fn - pointer to a new output function that takes as its
- *                 arguments a pointer to a png_struct, a pointer to
- *                 data to be written, and a 32-bit unsigned int that is
- *                 the number of bytes to be written.  The new write
- *                 function should call png_error(png_ptr, "Error msg")
- *                 to exit and output any fatal error messages.  May be
- *                 NULL, in which case libpng's default function will
- *                 be used.
- * flush_data_fn - pointer to a new flush function that takes as its
- *                 arguments a pointer to a png_struct.  After a call to
- *                 the flush function, there should be no data in any buffers
- *                 or pending transmission.  If the output method doesn't do
- *                 any buffering of output, a function prototype must still be
- *                 supplied although it doesn't have to do anything.  If
- *                 PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile
- *                 time, output_flush_fn will be ignored, although it must be
- *                 supplied for compatibility.  May be NULL, in which case
- *                 libpng's default function will be used, if
- *                 PNG_WRITE_FLUSH_SUPPORTED is defined.  This is not
- *                 a good idea if io_ptr does not point to a standard
- *                 *FILE structure.
- */
-void PNGAPI
-png_set_write_fn(png_structrp png_ptr, png_voidp io_ptr,
-    png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->io_ptr = io_ptr;
-
-#ifdef PNG_STDIO_SUPPORTED
-   if (write_data_fn != NULL)
-      png_ptr->write_data_fn = write_data_fn;
-
-   else
-      png_ptr->write_data_fn = png_default_write_data;
-#else
-   png_ptr->write_data_fn = write_data_fn;
-#endif
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-#  ifdef PNG_STDIO_SUPPORTED
-
-   if (output_flush_fn != NULL)
-      png_ptr->output_flush_fn = output_flush_fn;
-
-   else
-      png_ptr->output_flush_fn = png_default_flush;
-
-#  else
-   png_ptr->output_flush_fn = output_flush_fn;
-#  endif
-#endif /* PNG_WRITE_FLUSH_SUPPORTED */
-
-   /* It is an error to read while writing a png file */
-   if (png_ptr->read_data_fn != NULL)
-   {
-      png_ptr->read_data_fn = NULL;
-
-      png_warning(png_ptr,
-          "Can't set both read_data_fn and write_data_fn in the"
-          " same structure");
-   }
-}
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngwrite.c b/modules/juce_graphics/image_formats/pnglib/pngwrite.c
deleted file mode 100644
index 4c68682..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngwrite.c
+++ /dev/null
@@ -1,2331 +0,0 @@
-
-/* pngwrite.c - general routines to write a PNG file
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-#if defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
-#  include <errno.h>
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-/* Write out all the unknown chunks for the current given location */
-static void
-write_unknown_chunks(png_structrp png_ptr, png_const_inforp info_ptr,
-   unsigned int where)
-{
-   if (info_ptr->unknown_chunks_num)
-   {
-      png_const_unknown_chunkp up;
-
-      png_debug(5, "writing extra chunks");
-
-      for (up = info_ptr->unknown_chunks;
-           up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
-           ++up)
-         if (up->location & where)
-      {
-         /* If per-chunk unknown chunk handling is enabled use it, otherwise
-          * just write the chunks the application has set.
-          */
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-         int keep = png_handle_as_unknown(png_ptr, up->name);
-
-         /* NOTE: this code is radically different from the read side in the
-          * matter of handling an ancillary unknown chunk.  In the read side
-          * the default behavior is to discard it, in the code below the default
-          * behavior is to write it.  Critical chunks are, however, only
-          * written if explicitly listed or if the default is set to write all
-          * unknown chunks.
-          *
-          * The default handling is also slightly weird - it is not possible to
-          * stop the writing of all unsafe-to-copy chunks!
-          *
-          * TODO: REVIEW: this would seem to be a bug.
-          */
-         if (keep != PNG_HANDLE_CHUNK_NEVER &&
-             ((up->name[3] & 0x20) /* safe-to-copy overrides everything */ ||
-              keep == PNG_HANDLE_CHUNK_ALWAYS ||
-              (keep == PNG_HANDLE_CHUNK_AS_DEFAULT &&
-               png_ptr->unknown_default == PNG_HANDLE_CHUNK_ALWAYS)))
-#endif
-         {
-            /* TODO: review, what is wrong with a zero length unknown chunk? */
-            if (up->size == 0)
-               png_warning(png_ptr, "Writing zero-length unknown chunk");
-
-            png_write_chunk(png_ptr, up->name, up->data, up->size);
-         }
-      }
-   }
-}
-#endif /* PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED */
-
-/* Writes all the PNG information.  This is the suggested way to use the
- * library.  If you have a new chunk to add, make a function to write it,
- * and put it in the correct location here.  If you want the chunk written
- * after the image data, put it in png_write_end().  I strongly encourage
- * you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing
- * the chunk, as that will keep the code from breaking if you want to just
- * write a plain PNG file.  If you have long comments, I suggest writing
- * them in png_write_end(), and compressing them.
- */
-void PNGAPI
-png_write_info_before_PLTE(png_structrp png_ptr, png_const_inforp info_ptr)
-{
-   png_debug(1, "in png_write_info_before_PLTE");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
-   {
-   /* Write PNG signature */
-   png_write_sig(png_ptr);
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   if ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) && \
-       (png_ptr->mng_features_permitted))
-   {
-      png_warning(png_ptr, "MNG features are not allowed in a PNG datastream");
-      png_ptr->mng_features_permitted = 0;
-   }
-#endif
-
-   /* Write IHDR information. */
-   png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
-       info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type,
-       info_ptr->filter_type,
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-       info_ptr->interlace_type
-#else
-       0
-#endif
-      );
-
-   /* The rest of these check to see if the valid field has the appropriate
-    * flag set, and if it does, writes the chunk.
-    *
-    * 1.6.0: COLORSPACE support controls the writing of these chunks too, and
-    * the chunks will be written if the WRITE routine is there and information
-    * is available in the COLORSPACE.  (See png_colorspace_sync_info in png.c
-    * for where the valid flags get set.)
-    *
-    * Under certain circumstances the colorspace can be invalidated without
-    * syncing the info_struct 'valid' flags; this happens if libpng detects and
-    * error and calls png_error while the color space is being set, yet the
-    * application continues writing the PNG.  So check the 'invalid' flag here
-    * too.
-    */
-#ifdef PNG_GAMMA_SUPPORTED
-#  ifdef PNG_WRITE_gAMA_SUPPORTED
-      if (!(info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) &&
-         (info_ptr->colorspace.flags & PNG_COLORSPACE_FROM_gAMA) &&
-         (info_ptr->valid & PNG_INFO_gAMA))
-         png_write_gAMA_fixed(png_ptr, info_ptr->colorspace.gamma);
-#  endif
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-   /* Write only one of sRGB or an ICC profile.  If a profile was supplied
-    * and it matches one of the known sRGB ones issue a warning.
-    */
-#  ifdef PNG_WRITE_iCCP_SUPPORTED
-      if (!(info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) &&
-         (info_ptr->valid & PNG_INFO_iCCP))
-      {
-#        ifdef PNG_WRITE_sRGB_SUPPORTED
-            if (info_ptr->valid & PNG_INFO_sRGB)
-               png_app_warning(png_ptr,
-                  "profile matches sRGB but writing iCCP instead");
-#        endif
-
-         png_write_iCCP(png_ptr, info_ptr->iccp_name,
-            info_ptr->iccp_profile);
-      }
-#     ifdef PNG_WRITE_sRGB_SUPPORTED
-         else
-#     endif
-#  endif
-
-#  ifdef PNG_WRITE_sRGB_SUPPORTED
-      if (!(info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) &&
-         (info_ptr->valid & PNG_INFO_sRGB))
-         png_write_sRGB(png_ptr, info_ptr->colorspace.rendering_intent);
-#  endif /* WRITE_sRGB */
-#endif /* COLORSPACE */
-
-#ifdef PNG_WRITE_sBIT_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_sBIT)
-      png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-#  ifdef PNG_WRITE_cHRM_SUPPORTED
-      if (!(info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) &&
-         (info_ptr->colorspace.flags & PNG_COLORSPACE_FROM_cHRM) &&
-         (info_ptr->valid & PNG_INFO_cHRM))
-         png_write_cHRM_fixed(png_ptr, &info_ptr->colorspace.end_points_xy);
-#  endif
-#endif
-
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-      write_unknown_chunks(png_ptr, info_ptr, PNG_HAVE_IHDR);
-#endif
-
-      png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
-   }
-}
-
-void PNGAPI
-png_write_info(png_structrp png_ptr, png_const_inforp info_ptr)
-{
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
-   int i;
-#endif
-
-   png_debug(1, "in png_write_info");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   png_write_info_before_PLTE(png_ptr, info_ptr);
-
-   if (info_ptr->valid & PNG_INFO_PLTE)
-      png_write_PLTE(png_ptr, info_ptr->palette,
-          (png_uint_32)info_ptr->num_palette);
-
-   else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      png_error(png_ptr, "Valid palette required for paletted images");
-
-#ifdef PNG_WRITE_tRNS_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_tRNS)
-   {
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-      /* Invert the alpha channel (in tRNS) */
-      if ((png_ptr->transformations & PNG_INVERT_ALPHA) &&
-          info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         int j;
-         for (j = 0; j<(int)info_ptr->num_trans; j++)
-            info_ptr->trans_alpha[j] =
-               (png_byte)(255 - info_ptr->trans_alpha[j]);
-      }
-#endif
-      png_write_tRNS(png_ptr, info_ptr->trans_alpha, &(info_ptr->trans_color),
-          info_ptr->num_trans, info_ptr->color_type);
-   }
-#endif
-#ifdef PNG_WRITE_bKGD_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_bKGD)
-      png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type);
-#endif
-
-#ifdef PNG_WRITE_hIST_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_hIST)
-      png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette);
-#endif
-
-#ifdef PNG_WRITE_oFFs_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_oFFs)
-      png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset,
-          info_ptr->offset_unit_type);
-#endif
-
-#ifdef PNG_WRITE_pCAL_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_pCAL)
-      png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0,
-          info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams,
-          info_ptr->pcal_units, info_ptr->pcal_params);
-#endif
-
-#ifdef PNG_WRITE_sCAL_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_sCAL)
-      png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit,
-          info_ptr->scal_s_width, info_ptr->scal_s_height);
-#endif /* sCAL */
-
-#ifdef PNG_WRITE_pHYs_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_pHYs)
-      png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit,
-          info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type);
-#endif /* pHYs */
-
-#ifdef PNG_WRITE_tIME_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_tIME)
-   {
-      png_write_tIME(png_ptr, &(info_ptr->mod_time));
-      png_ptr->mode |= PNG_WROTE_tIME;
-   }
-#endif /* tIME */
-
-#ifdef PNG_WRITE_sPLT_SUPPORTED
-   if (info_ptr->valid & PNG_INFO_sPLT)
-      for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
-         png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
-#endif /* sPLT */
-
-#ifdef PNG_WRITE_TEXT_SUPPORTED
-   /* Check to see if we need to write text chunks */
-   for (i = 0; i < info_ptr->num_text; i++)
-   {
-      png_debug2(2, "Writing header text chunk %d, type %d", i,
-          info_ptr->text[i].compression);
-      /* An internationalized chunk? */
-      if (info_ptr->text[i].compression > 0)
-      {
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-         /* Write international chunk */
-         png_write_iTXt(png_ptr,
-             info_ptr->text[i].compression,
-             info_ptr->text[i].key,
-             info_ptr->text[i].lang,
-             info_ptr->text[i].lang_key,
-             info_ptr->text[i].text);
-#else
-          png_warning(png_ptr, "Unable to write international text");
-#endif
-          /* Mark this chunk as written */
-          info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-      }
-
-      /* If we want a compressed text chunk */
-      else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt)
-      {
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-         /* Write compressed chunk */
-         png_write_zTXt(png_ptr, info_ptr->text[i].key,
-             info_ptr->text[i].text, 0,
-             info_ptr->text[i].compression);
-#else
-         png_warning(png_ptr, "Unable to write compressed text");
-#endif
-         /* Mark this chunk as written */
-         info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
-      }
-
-      else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
-      {
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-         /* Write uncompressed chunk */
-         png_write_tEXt(png_ptr, info_ptr->text[i].key,
-             info_ptr->text[i].text,
-             0);
-         /* Mark this chunk as written */
-         info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-#else
-         /* Can't get here */
-         png_warning(png_ptr, "Unable to write uncompressed text");
-#endif
-      }
-   }
-#endif /* tEXt */
-
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-   write_unknown_chunks(png_ptr, info_ptr, PNG_HAVE_PLTE);
-#endif
-}
-
-/* Writes the end of the PNG file.  If you don't want to write comments or
- * time information, you can pass NULL for info.  If you already wrote these
- * in png_write_info(), do not write them again here.  If you have long
- * comments, I suggest writing them here, and compressing them.
- */
-void PNGAPI
-png_write_end(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_debug(1, "in png_write_end");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (!(png_ptr->mode & PNG_HAVE_IDAT))
-      png_error(png_ptr, "No IDATs written into file");
-
-#ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   if (png_ptr->num_palette_max > png_ptr->num_palette)
-      png_benign_error(png_ptr, "Wrote palette index exceeding num_palette");
-#endif
-
-   /* See if user wants us to write information chunks */
-   if (info_ptr != NULL)
-   {
-#ifdef PNG_WRITE_TEXT_SUPPORTED
-      int i; /* local index variable */
-#endif
-#ifdef PNG_WRITE_tIME_SUPPORTED
-      /* Check to see if user has supplied a time chunk */
-      if ((info_ptr->valid & PNG_INFO_tIME) &&
-          !(png_ptr->mode & PNG_WROTE_tIME))
-         png_write_tIME(png_ptr, &(info_ptr->mod_time));
-
-#endif
-#ifdef PNG_WRITE_TEXT_SUPPORTED
-      /* Loop through comment chunks */
-      for (i = 0; i < info_ptr->num_text; i++)
-      {
-         png_debug2(2, "Writing trailer text chunk %d, type %d", i,
-            info_ptr->text[i].compression);
-         /* An internationalized chunk? */
-         if (info_ptr->text[i].compression > 0)
-         {
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-            /* Write international chunk */
-            png_write_iTXt(png_ptr,
-                info_ptr->text[i].compression,
-                info_ptr->text[i].key,
-                info_ptr->text[i].lang,
-                info_ptr->text[i].lang_key,
-                info_ptr->text[i].text);
-#else
-            png_warning(png_ptr, "Unable to write international text");
-#endif
-            /* Mark this chunk as written */
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-         }
-
-         else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
-         {
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-            /* Write compressed chunk */
-            png_write_zTXt(png_ptr, info_ptr->text[i].key,
-                info_ptr->text[i].text, 0,
-                info_ptr->text[i].compression);
-#else
-            png_warning(png_ptr, "Unable to write compressed text");
-#endif
-            /* Mark this chunk as written */
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
-         }
-
-         else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
-         {
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-            /* Write uncompressed chunk */
-            png_write_tEXt(png_ptr, info_ptr->text[i].key,
-                info_ptr->text[i].text, 0);
-#else
-            png_warning(png_ptr, "Unable to write uncompressed text");
-#endif
-
-            /* Mark this chunk as written */
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-         }
-      }
-#endif
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-      write_unknown_chunks(png_ptr, info_ptr, PNG_AFTER_IDAT);
-#endif
-   }
-
-   png_ptr->mode |= PNG_AFTER_IDAT;
-
-   /* Write end of PNG file */
-   png_write_IEND(png_ptr);
-   /* This flush, added in libpng-1.0.8, removed from libpng-1.0.9beta03,
-    * and restored again in libpng-1.2.30, may cause some applications that
-    * do not set png_ptr->output_flush_fn to crash.  If your application
-    * experiences a problem, please try building libpng with
-    * PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED defined, and report the event to
-    * png-mng-implement at lists.sf.net .
-    */
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-#  ifdef PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED
-   png_flush(png_ptr);
-#  endif
-#endif
-}
-
-#ifdef PNG_CONVERT_tIME_SUPPORTED
-void PNGAPI
-png_convert_from_struct_tm(png_timep ptime, PNG_CONST struct tm * ttime)
-{
-   png_debug(1, "in png_convert_from_struct_tm");
-
-   ptime->year = (png_uint_16)(1900 + ttime->tm_year);
-   ptime->month = (png_byte)(ttime->tm_mon + 1);
-   ptime->day = (png_byte)ttime->tm_mday;
-   ptime->hour = (png_byte)ttime->tm_hour;
-   ptime->minute = (png_byte)ttime->tm_min;
-   ptime->second = (png_byte)ttime->tm_sec;
-}
-
-void PNGAPI
-png_convert_from_time_t(png_timep ptime, time_t ttime)
-{
-   struct tm *tbuf;
-
-   png_debug(1, "in png_convert_from_time_t");
-
-   tbuf = gmtime(&ttime);
-   png_convert_from_struct_tm(ptime, tbuf);
-}
-#endif
-
-/* Initialize png_ptr structure, and allocate any memory needed */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_write_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn),PNG_ALLOCATED)
-{
-#ifndef PNG_USER_MEM_SUPPORTED
-   png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-      error_fn, warn_fn, NULL, NULL, NULL);
-#else
-   return png_create_write_struct_2(user_png_ver, error_ptr, error_fn,
-       warn_fn, NULL, NULL, NULL);
-}
-
-/* Alternate initialize png_ptr structure, and allocate any memory needed */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_write_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
-{
-   png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-      error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
-#endif /* PNG_USER_MEM_SUPPORTED */
-
-   /* Set the zlib control values to defaults; they can be overridden by the
-    * application after the struct has been created.
-    */
-   png_ptr->zbuffer_size = PNG_ZBUF_SIZE;
-
-   /* The 'zlib_strategy' setting is irrelevant because png_default_claim in
-    * pngwutil.c defaults it according to whether or not filters will be used,
-    * and ignores this setting.
-    */
-   png_ptr->zlib_strategy = PNG_Z_DEFAULT_STRATEGY;
-   png_ptr->zlib_level = PNG_Z_DEFAULT_COMPRESSION;
-   png_ptr->zlib_mem_level = 8;
-   png_ptr->zlib_window_bits = 15;
-   png_ptr->zlib_method = 8;
-
-#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
-   png_ptr->zlib_text_strategy = PNG_TEXT_Z_DEFAULT_STRATEGY;
-   png_ptr->zlib_text_level = PNG_TEXT_Z_DEFAULT_COMPRESSION;
-   png_ptr->zlib_text_mem_level = 8;
-   png_ptr->zlib_text_window_bits = 15;
-   png_ptr->zlib_text_method = 8;
-#endif /* PNG_WRITE_COMPRESSED_TEXT_SUPPORTED */
-
-   /* This is a highly dubious configuration option; by default it is off, but
-    * it may be appropriate for private builds that are testing extensions not
-    * conformant to the current specification, or of applications that must not
-    * fail to write at all costs!
-    */
-#  ifdef PNG_BENIGN_WRITE_ERRORS_SUPPORTED
-      png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
-      /* In stable builds only warn if an application error can be completely
-       * handled.
-       */
-#  endif
-
-   /* App warnings are warnings in release (or release candidate) builds but
-    * are errors during development.
-    */
-#  if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-      png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
-#  endif
-
-   if (png_ptr != NULL)
-   {
-      /* TODO: delay this, it can be done in png_init_io() (if the app doesn't
-       * do it itself) avoiding setting the default function if it is not
-       * required.
-       */
-      png_set_write_fn(png_ptr, NULL, NULL, NULL);
-   }
-
-   return png_ptr;
-}
-
-
-/* Write a few rows of image data.  If the image is interlaced,
- * either you will have to write the 7 sub images, or, if you
- * have called png_set_interlace_handling(), you will have to
- * "write" the image seven times.
- */
-void PNGAPI
-png_write_rows(png_structrp png_ptr, png_bytepp row,
-    png_uint_32 num_rows)
-{
-   png_uint_32 i; /* row counter */
-   png_bytepp rp; /* row pointer */
-
-   png_debug(1, "in png_write_rows");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* Loop through the rows */
-   for (i = 0, rp = row; i < num_rows; i++, rp++)
-   {
-      png_write_row(png_ptr, *rp);
-   }
-}
-
-/* Write the image.  You only need to call this function once, even
- * if you are writing an interlaced image.
- */
-void PNGAPI
-png_write_image(png_structrp png_ptr, png_bytepp image)
-{
-   png_uint_32 i; /* row index */
-   int pass, num_pass; /* pass variables */
-   png_bytepp rp; /* points to current row */
-
-   if (png_ptr == NULL)
-      return;
-
-   png_debug(1, "in png_write_image");
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Initialize interlace handling.  If image is not interlaced,
-    * this will set pass to 1
-    */
-   num_pass = png_set_interlace_handling(png_ptr);
-#else
-   num_pass = 1;
-#endif
-   /* Loop through passes */
-   for (pass = 0; pass < num_pass; pass++)
-   {
-      /* Loop through image */
-      for (i = 0, rp = image; i < png_ptr->height; i++, rp++)
-      {
-         png_write_row(png_ptr, *rp);
-      }
-   }
-}
-
-/* Called by user to write a row of image data */
-void PNGAPI
-png_write_row(png_structrp png_ptr, png_const_bytep row)
-{
-   /* 1.5.6: moved from png_struct to be a local structure: */
-   png_row_info row_info;
-
-   if (png_ptr == NULL)
-      return;
-
-   png_debug2(1, "in png_write_row (row %u, pass %d)",
-      png_ptr->row_number, png_ptr->pass);
-
-   /* Initialize transformations and other stuff if first time */
-   if (png_ptr->row_number == 0 && png_ptr->pass == 0)
-   {
-      /* Make sure we wrote the header info */
-      if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
-         png_error(png_ptr,
-             "png_write_info was never called before png_write_row");
-
-      /* Check for transforms that have been set but were defined out */
-#if !defined(PNG_WRITE_INVERT_SUPPORTED) && defined(PNG_READ_INVERT_SUPPORTED)
-      if (png_ptr->transformations & PNG_INVERT_MONO)
-         png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_FILLER_SUPPORTED) && defined(PNG_READ_FILLER_SUPPORTED)
-      if (png_ptr->transformations & PNG_FILLER)
-         png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined");
-#endif
-#if !defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
-    defined(PNG_READ_PACKSWAP_SUPPORTED)
-      if (png_ptr->transformations & PNG_PACKSWAP)
-         png_warning(png_ptr,
-             "PNG_WRITE_PACKSWAP_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_PACK_SUPPORTED) && defined(PNG_READ_PACK_SUPPORTED)
-      if (png_ptr->transformations & PNG_PACK)
-         png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_SHIFT_SUPPORTED) && defined(PNG_READ_SHIFT_SUPPORTED)
-      if (png_ptr->transformations & PNG_SHIFT)
-         png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_BGR_SUPPORTED) && defined(PNG_READ_BGR_SUPPORTED)
-      if (png_ptr->transformations & PNG_BGR)
-         png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_SWAP_SUPPORTED) && defined(PNG_READ_SWAP_SUPPORTED)
-      if (png_ptr->transformations & PNG_SWAP_BYTES)
-         png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined");
-#endif
-
-      png_write_start_row(png_ptr);
-   }
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* If interlaced and not interested in row, return */
-   if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
-   {
-      switch (png_ptr->pass)
-      {
-         case 0:
-            if (png_ptr->row_number & 0x07)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 1:
-            if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 2:
-            if ((png_ptr->row_number & 0x07) != 4)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 3:
-            if ((png_ptr->row_number & 0x03) || png_ptr->width < 3)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 4:
-            if ((png_ptr->row_number & 0x03) != 2)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 5:
-            if ((png_ptr->row_number & 0x01) || png_ptr->width < 2)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 6:
-            if (!(png_ptr->row_number & 0x01))
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         default: /* error: ignore it */
-            break;
-      }
-   }
-#endif
-
-   /* Set up row info for transformations */
-   row_info.color_type = png_ptr->color_type;
-   row_info.width = png_ptr->usr_width;
-   row_info.channels = png_ptr->usr_channels;
-   row_info.bit_depth = png_ptr->usr_bit_depth;
-   row_info.pixel_depth = (png_byte)(row_info.bit_depth * row_info.channels);
-   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
-
-   png_debug1(3, "row_info->color_type = %d", row_info.color_type);
-   png_debug1(3, "row_info->width = %u", row_info.width);
-   png_debug1(3, "row_info->channels = %d", row_info.channels);
-   png_debug1(3, "row_info->bit_depth = %d", row_info.bit_depth);
-   png_debug1(3, "row_info->pixel_depth = %d", row_info.pixel_depth);
-   png_debug1(3, "row_info->rowbytes = %lu", (unsigned long)row_info.rowbytes);
-
-   /* Copy user's row into buffer, leaving room for filter byte. */
-   memcpy(png_ptr->row_buf + 1, row, row_info.rowbytes);
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Handle interlacing */
-   if (png_ptr->interlaced && png_ptr->pass < 6 &&
-       (png_ptr->transformations & PNG_INTERLACE))
-   {
-      png_do_write_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass);
-      /* This should always get caught above, but still ... */
-      if (!(row_info.width))
-      {
-         png_write_finish_row(png_ptr);
-         return;
-      }
-   }
-#endif
-
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-   /* Handle other transformations */
-   if (png_ptr->transformations)
-      png_do_write_transformations(png_ptr, &row_info);
-#endif
-
-   /* At this point the row_info pixel depth must match the 'transformed' depth,
-    * which is also the output depth.
-    */
-   if (row_info.pixel_depth != png_ptr->pixel_depth ||
-      row_info.pixel_depth != png_ptr->transformed_pixel_depth)
-      png_error(png_ptr, "internal write transform logic error");
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   /* Write filter_method 64 (intrapixel differencing) only if
-    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
-    * 2. Libpng did not write a PNG signature (this filter_method is only
-    *    used in PNG datastreams that are embedded in MNG datastreams) and
-    * 3. The application called png_permit_mng_features with a mask that
-    *    included PNG_FLAG_MNG_FILTER_64 and
-    * 4. The filter_method is 64 and
-    * 5. The color_type is RGB or RGBA
-    */
-   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
-       (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
-   {
-      /* Intrapixel differencing */
-      png_do_write_intrapixel(&row_info, png_ptr->row_buf + 1);
-   }
-#endif
-
-/* Added at libpng-1.5.10 */
-#ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Check for out-of-range palette index */
-   if (row_info.color_type == PNG_COLOR_TYPE_PALETTE &&
-       png_ptr->num_palette_max >= 0)
-      png_do_check_palette_indexes(png_ptr, &row_info);
-#endif
-
-   /* Find a filter if necessary, filter the row and write it out. */
-   png_write_find_filter(png_ptr, &row_info);
-
-   if (png_ptr->write_row_fn != NULL)
-      (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
-}
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-/* Set the automatic flush interval or 0 to turn flushing off */
-void PNGAPI
-png_set_flush(png_structrp png_ptr, int nrows)
-{
-   png_debug(1, "in png_set_flush");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
-}
-
-/* Flush the current output buffers now */
-void PNGAPI
-png_write_flush(png_structrp png_ptr)
-{
-   png_debug(1, "in png_write_flush");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* We have already written out all of the data */
-   if (png_ptr->row_number >= png_ptr->num_rows)
-      return;
-
-   png_compress_IDAT(png_ptr, NULL, 0, Z_SYNC_FLUSH);
-   png_ptr->flush_rows = 0;
-   png_flush(png_ptr);
-}
-#endif /* PNG_WRITE_FLUSH_SUPPORTED */
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-static void png_reset_filter_heuristics(png_structrp png_ptr);/* forward decl */
-#endif
-
-/* Free any memory used in png_ptr struct without freeing the struct itself. */
-static void
-png_write_destroy(png_structrp png_ptr)
-{
-   png_debug(1, "in png_write_destroy");
-
-   /* Free any memory zlib uses */
-   if (png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED)
-      deflateEnd(&png_ptr->zstream);
-
-   /* Free our memory.  png_free checks NULL for us. */
-   png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
-   png_free(png_ptr, png_ptr->row_buf);
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   png_free(png_ptr, png_ptr->prev_row);
-   png_free(png_ptr, png_ptr->sub_row);
-   png_free(png_ptr, png_ptr->up_row);
-   png_free(png_ptr, png_ptr->avg_row);
-   png_free(png_ptr, png_ptr->paeth_row);
-#endif
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   /* Use this to save a little code space, it doesn't free the filter_costs */
-   png_reset_filter_heuristics(png_ptr);
-   png_free(png_ptr, png_ptr->filter_costs);
-   png_free(png_ptr, png_ptr->inv_filter_costs);
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-   png_free(png_ptr, png_ptr->chunk_list);
-#endif
-
-   /* The error handling and memory handling information is left intact at this
-    * point: the jmp_buf may still have to be freed.  See png_destroy_png_struct
-    * for how this happens.
-    */
-}
-
-/* Free all memory used by the write.
- * In libpng 1.6.0 this API changed quietly to no longer accept a NULL value for
- * *png_ptr_ptr.  Prior to 1.6.0 it would accept such a value and it would free
- * the passed in info_structs but it would quietly fail to free any of the data
- * inside them.  In 1.6.0 it quietly does nothing (it has to be quiet because it
- * has no png_ptr.)
- */
-void PNGAPI
-png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
-{
-   png_debug(1, "in png_destroy_write_struct");
-
-   if (png_ptr_ptr != NULL)
-   {
-      png_structrp png_ptr = *png_ptr_ptr;
-
-      if (png_ptr != NULL) /* added in libpng 1.6.0 */
-      {
-         png_destroy_info_struct(png_ptr, info_ptr_ptr);
-
-         *png_ptr_ptr = NULL;
-         png_write_destroy(png_ptr);
-         png_destroy_png_struct(png_ptr);
-      }
-   }
-}
-
-/* Allow the application to select one or more row filters to use. */
-void PNGAPI
-png_set_filter(png_structrp png_ptr, int method, int filters)
-{
-   png_debug(1, "in png_set_filter");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
-       (method == PNG_INTRAPIXEL_DIFFERENCING))
-      method = PNG_FILTER_TYPE_BASE;
-
-#endif
-   if (method == PNG_FILTER_TYPE_BASE)
-   {
-      switch (filters & (PNG_ALL_FILTERS | 0x07))
-      {
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-         case 5:
-         case 6:
-         case 7: png_app_error(png_ptr, "Unknown row filter for method 0");
-            /* FALL THROUGH */
-#endif /* PNG_WRITE_FILTER_SUPPORTED */
-         case PNG_FILTER_VALUE_NONE:
-            png_ptr->do_filter = PNG_FILTER_NONE; break;
-
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-         case PNG_FILTER_VALUE_SUB:
-            png_ptr->do_filter = PNG_FILTER_SUB; break;
-
-         case PNG_FILTER_VALUE_UP:
-            png_ptr->do_filter = PNG_FILTER_UP; break;
-
-         case PNG_FILTER_VALUE_AVG:
-            png_ptr->do_filter = PNG_FILTER_AVG; break;
-
-         case PNG_FILTER_VALUE_PAETH:
-            png_ptr->do_filter = PNG_FILTER_PAETH; break;
-
-         default:
-            png_ptr->do_filter = (png_byte)filters; break;
-#else
-         default:
-            png_app_error(png_ptr, "Unknown row filter for method 0");
-#endif /* PNG_WRITE_FILTER_SUPPORTED */
-      }
-
-      /* If we have allocated the row_buf, this means we have already started
-       * with the image and we should have allocated all of the filter buffers
-       * that have been selected.  If prev_row isn't already allocated, then
-       * it is too late to start using the filters that need it, since we
-       * will be missing the data in the previous row.  If an application
-       * wants to start and stop using particular filters during compression,
-       * it should start out with all of the filters, and then add and
-       * remove them after the start of compression.
-       */
-      if (png_ptr->row_buf != NULL)
-      {
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-         if ((png_ptr->do_filter & PNG_FILTER_SUB) && png_ptr->sub_row == NULL)
-         {
-            png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
-                (png_ptr->rowbytes + 1));
-            png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
-         }
-
-         if ((png_ptr->do_filter & PNG_FILTER_UP) && png_ptr->up_row == NULL)
-         {
-            if (png_ptr->prev_row == NULL)
-            {
-               png_warning(png_ptr, "Can't add Up filter after starting");
-               png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
-                   ~PNG_FILTER_UP);
-            }
-
-            else
-            {
-               png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
-                   (png_ptr->rowbytes + 1));
-               png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
-            }
-         }
-
-         if ((png_ptr->do_filter & PNG_FILTER_AVG) && png_ptr->avg_row == NULL)
-         {
-            if (png_ptr->prev_row == NULL)
-            {
-               png_warning(png_ptr, "Can't add Average filter after starting");
-               png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
-                   ~PNG_FILTER_AVG);
-            }
-
-            else
-            {
-               png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
-                   (png_ptr->rowbytes + 1));
-               png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
-            }
-         }
-
-         if ((png_ptr->do_filter & PNG_FILTER_PAETH) &&
-             png_ptr->paeth_row == NULL)
-         {
-            if (png_ptr->prev_row == NULL)
-            {
-               png_warning(png_ptr, "Can't add Paeth filter after starting");
-               png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH);
-            }
-
-            else
-            {
-               png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
-                   (png_ptr->rowbytes + 1));
-               png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
-            }
-         }
-
-         if (png_ptr->do_filter == PNG_NO_FILTERS)
-#endif /* PNG_WRITE_FILTER_SUPPORTED */
-            png_ptr->do_filter = PNG_FILTER_NONE;
-      }
-   }
-   else
-      png_error(png_ptr, "Unknown custom filter method");
-}
-
-/* This allows us to influence the way in which libpng chooses the "best"
- * filter for the current scanline.  While the "minimum-sum-of-absolute-
- * differences metric is relatively fast and effective, there is some
- * question as to whether it can be improved upon by trying to keep the
- * filtered data going to zlib more consistent, hopefully resulting in
- * better compression.
- */
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED      /* GRR 970116 */
-/* Convenience reset API. */
-static void
-png_reset_filter_heuristics(png_structrp png_ptr)
-{
-   /* Clear out any old values in the 'weights' - this must be done because if
-    * the app calls set_filter_heuristics multiple times with different
-    * 'num_weights' values we would otherwise potentially have wrong sized
-    * arrays.
-    */
-   png_ptr->num_prev_filters = 0;
-   png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
-   if (png_ptr->prev_filters != NULL)
-   {
-      png_bytep old = png_ptr->prev_filters;
-      png_ptr->prev_filters = NULL;
-      png_free(png_ptr, old);
-   }
-   if (png_ptr->filter_weights != NULL)
-   {
-      png_uint_16p old = png_ptr->filter_weights;
-      png_ptr->filter_weights = NULL;
-      png_free(png_ptr, old);
-   }
-
-   if (png_ptr->inv_filter_weights != NULL)
-   {
-      png_uint_16p old = png_ptr->inv_filter_weights;
-      png_ptr->inv_filter_weights = NULL;
-      png_free(png_ptr, old);
-   }
-
-   /* Leave the filter_costs - this array is fixed size. */
-}
-
-static int
-png_init_filter_heuristics(png_structrp png_ptr, int heuristic_method,
-   int num_weights)
-{
-   if (png_ptr == NULL)
-      return 0;
-
-   /* Clear out the arrays */
-   png_reset_filter_heuristics(png_ptr);
-
-   /* Check arguments; the 'reset' function makes the correct settings for the
-    * unweighted case, but we must handle the weight case by initializing the
-    * arrays for the caller.
-    */
-   if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-   {
-      int i;
-
-      if (num_weights > 0)
-      {
-         png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_byte)) * num_weights));
-
-         /* To make sure that the weighting starts out fairly */
-         for (i = 0; i < num_weights; i++)
-         {
-            png_ptr->prev_filters[i] = 255;
-         }
-
-         png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * num_weights));
-
-         png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * num_weights));
-
-         for (i = 0; i < num_weights; i++)
-         {
-            png_ptr->inv_filter_weights[i] =
-            png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
-         }
-
-         /* Safe to set this now */
-         png_ptr->num_prev_filters = (png_byte)num_weights;
-      }
-
-      /* If, in the future, there are other filter methods, this would
-       * need to be based on png_ptr->filter.
-       */
-      if (png_ptr->filter_costs == NULL)
-      {
-         png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * PNG_FILTER_VALUE_LAST));
-
-         png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * PNG_FILTER_VALUE_LAST));
-      }
-
-      for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
-      {
-         png_ptr->inv_filter_costs[i] =
-         png_ptr->filter_costs[i] = PNG_COST_FACTOR;
-      }
-
-      /* All the arrays are inited, safe to set this: */
-      png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_WEIGHTED;
-
-      /* Return the 'ok' code. */
-      return 1;
-   }
-   else if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT ||
-      heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED)
-   {
-      return 1;
-   }
-   else
-   {
-      png_warning(png_ptr, "Unknown filter heuristic method");
-      return 0;
-   }
-}
-
-/* Provide floating and fixed point APIs */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_filter_heuristics(png_structrp png_ptr, int heuristic_method,
-    int num_weights, png_const_doublep filter_weights,
-    png_const_doublep filter_costs)
-{
-   png_debug(1, "in png_set_filter_heuristics");
-
-   /* The internal API allocates all the arrays and ensures that the elements of
-    * those arrays are set to the default value.
-    */
-   if (!png_init_filter_heuristics(png_ptr, heuristic_method, num_weights))
-      return;
-
-   /* If using the weighted method copy in the weights. */
-   if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-   {
-      int i;
-      for (i = 0; i < num_weights; i++)
-      {
-         if (filter_weights[i] <= 0.0)
-         {
-            png_ptr->inv_filter_weights[i] =
-            png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
-         }
-
-         else
-         {
-            png_ptr->inv_filter_weights[i] =
-                (png_uint_16)(PNG_WEIGHT_FACTOR*filter_weights[i]+.5);
-
-            png_ptr->filter_weights[i] =
-                (png_uint_16)(PNG_WEIGHT_FACTOR/filter_weights[i]+.5);
-         }
-      }
-
-      /* Here is where we set the relative costs of the different filters.  We
-       * should take the desired compression level into account when setting
-       * the costs, so that Paeth, for instance, has a high relative cost at low
-       * compression levels, while it has a lower relative cost at higher
-       * compression settings.  The filter types are in order of increasing
-       * relative cost, so it would be possible to do this with an algorithm.
-       */
-      for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) if (filter_costs[i] >= 1.0)
-      {
-         png_ptr->inv_filter_costs[i] =
-             (png_uint_16)(PNG_COST_FACTOR / filter_costs[i] + .5);
-
-         png_ptr->filter_costs[i] =
-             (png_uint_16)(PNG_COST_FACTOR * filter_costs[i] + .5);
-      }
-   }
-}
-#endif /* FLOATING_POINT */
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void PNGAPI
-png_set_filter_heuristics_fixed(png_structrp png_ptr, int heuristic_method,
-    int num_weights, png_const_fixed_point_p filter_weights,
-    png_const_fixed_point_p filter_costs)
-{
-   png_debug(1, "in png_set_filter_heuristics_fixed");
-
-   /* The internal API allocates all the arrays and ensures that the elements of
-    * those arrays are set to the default value.
-    */
-   if (!png_init_filter_heuristics(png_ptr, heuristic_method, num_weights))
-      return;
-
-   /* If using the weighted method copy in the weights. */
-   if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-   {
-      int i;
-      for (i = 0; i < num_weights; i++)
-      {
-         if (filter_weights[i] <= 0)
-         {
-            png_ptr->inv_filter_weights[i] =
-            png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
-         }
-
-         else
-         {
-            png_ptr->inv_filter_weights[i] = (png_uint_16)
-               ((PNG_WEIGHT_FACTOR*filter_weights[i]+PNG_FP_HALF)/PNG_FP_1);
-
-            png_ptr->filter_weights[i] = (png_uint_16)((PNG_WEIGHT_FACTOR*
-               PNG_FP_1+(filter_weights[i]/2))/filter_weights[i]);
-         }
-      }
-
-      /* Here is where we set the relative costs of the different filters.  We
-       * should take the desired compression level into account when setting
-       * the costs, so that Paeth, for instance, has a high relative cost at low
-       * compression levels, while it has a lower relative cost at higher
-       * compression settings.  The filter types are in order of increasing
-       * relative cost, so it would be possible to do this with an algorithm.
-       */
-      for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
-         if (filter_costs[i] >= PNG_FP_1)
-      {
-         png_uint_32 tmp;
-
-         /* Use a 32 bit unsigned temporary here because otherwise the
-          * intermediate value will be a 32 bit *signed* integer (ANSI rules)
-          * and this will get the wrong answer on division.
-          */
-         tmp = PNG_COST_FACTOR*PNG_FP_1 + (filter_costs[i]/2);
-         tmp /= filter_costs[i];
-
-         png_ptr->inv_filter_costs[i] = (png_uint_16)tmp;
-
-         tmp = PNG_COST_FACTOR * filter_costs[i] + PNG_FP_HALF;
-         tmp /= PNG_FP_1;
-
-         png_ptr->filter_costs[i] = (png_uint_16)tmp;
-      }
-   }
-}
-#endif /* FIXED_POINT */
-#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
-
-void PNGAPI
-png_set_compression_level(png_structrp png_ptr, int level)
-{
-   png_debug(1, "in png_set_compression_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_level = level;
-}
-
-void PNGAPI
-png_set_compression_mem_level(png_structrp png_ptr, int mem_level)
-{
-   png_debug(1, "in png_set_compression_mem_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_mem_level = mem_level;
-}
-
-void PNGAPI
-png_set_compression_strategy(png_structrp png_ptr, int strategy)
-{
-   png_debug(1, "in png_set_compression_strategy");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* The flag setting here prevents the libpng dynamic selection of strategy.
-    */
-   png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY;
-   png_ptr->zlib_strategy = strategy;
-}
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-void PNGAPI
-png_set_compression_window_bits(png_structrp png_ptr, int window_bits)
-{
-   if (png_ptr == NULL)
-      return;
-
-   /* Prior to 1.6.0 this would warn but then set the window_bits value, this
-    * meant that negative window bits values could be selected which would cause
-    * libpng to write a non-standard PNG file with raw deflate or gzip
-    * compressed IDAT or ancillary chunks.  Such files can be read and there is
-    * no warning on read, so this seems like a very bad idea.
-    */
-   if (window_bits > 15)
-   {
-      png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
-      window_bits = 15;
-   }
-
-   else if (window_bits < 8)
-   {
-      png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
-      window_bits = 8;
-   }
-
-   png_ptr->zlib_window_bits = window_bits;
-}
-
-void PNGAPI
-png_set_compression_method(png_structrp png_ptr, int method)
-{
-   png_debug(1, "in png_set_compression_method");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* This would produce an invalid PNG file if it worked, but it doesn't and
-    * deflate will fault it, so it is harmless to just warn here.
-    */
-   if (method != 8)
-      png_warning(png_ptr, "Only compression method 8 is supported by PNG");
-
-   png_ptr->zlib_method = method;
-}
-
-/* The following were added to libpng-1.5.4 */
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-void PNGAPI
-png_set_text_compression_level(png_structrp png_ptr, int level)
-{
-   png_debug(1, "in png_set_text_compression_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_text_level = level;
-}
-
-void PNGAPI
-png_set_text_compression_mem_level(png_structrp png_ptr, int mem_level)
-{
-   png_debug(1, "in png_set_text_compression_mem_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_text_mem_level = mem_level;
-}
-
-void PNGAPI
-png_set_text_compression_strategy(png_structrp png_ptr, int strategy)
-{
-   png_debug(1, "in png_set_text_compression_strategy");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_text_strategy = strategy;
-}
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-void PNGAPI
-png_set_text_compression_window_bits(png_structrp png_ptr, int window_bits)
-{
-   if (png_ptr == NULL)
-      return;
-
-   if (window_bits > 15)
-   {
-      png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
-      window_bits = 15;
-   }
-
-   else if (window_bits < 8)
-   {
-      png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
-      window_bits = 8;
-   }
-
-   png_ptr->zlib_text_window_bits = window_bits;
-}
-
-void PNGAPI
-png_set_text_compression_method(png_structrp png_ptr, int method)
-{
-   png_debug(1, "in png_set_text_compression_method");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (method != 8)
-      png_warning(png_ptr, "Only compression method 8 is supported by PNG");
-
-   png_ptr->zlib_text_method = method;
-}
-#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */
-/* end of API added to libpng-1.5.4 */
-
-void PNGAPI
-png_set_write_status_fn(png_structrp png_ptr, png_write_status_ptr write_row_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->write_row_fn = write_row_fn;
-}
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-void PNGAPI
-png_set_write_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
-    write_user_transform_fn)
-{
-   png_debug(1, "in png_set_write_user_transform_fn");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_USER_TRANSFORM;
-   png_ptr->write_user_transform_fn = write_user_transform_fn;
-}
-#endif
-
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-void PNGAPI
-png_write_png(png_structrp png_ptr, png_inforp info_ptr,
-    int transforms, voidp params)
-{
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* Write the file header information. */
-   png_write_info(png_ptr, info_ptr);
-
-   /* ------ these transformations don't touch the info structure ------- */
-
-#ifdef PNG_WRITE_INVERT_SUPPORTED
-   /* Invert monochrome pixels */
-   if (transforms & PNG_TRANSFORM_INVERT_MONO)
-      png_set_invert_mono(png_ptr);
-#endif
-
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-   /* Shift the pixels up to a legal bit depth and fill in
-    * as appropriate to correctly scale the image.
-    */
-   if ((transforms & PNG_TRANSFORM_SHIFT)
-       && (info_ptr->valid & PNG_INFO_sBIT))
-      png_set_shift(png_ptr, &info_ptr->sig_bit);
-#endif
-
-#ifdef PNG_WRITE_PACK_SUPPORTED
-   /* Pack pixels into bytes */
-   if (transforms & PNG_TRANSFORM_PACKING)
-       png_set_packing(png_ptr);
-#endif
-
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-   /* Swap location of alpha bytes from ARGB to RGBA */
-   if (transforms & PNG_TRANSFORM_SWAP_ALPHA)
-      png_set_swap_alpha(png_ptr);
-#endif
-
-#ifdef PNG_WRITE_FILLER_SUPPORTED
-   /* Pack XRGB/RGBX/ARGB/RGBA into RGB (4 channels -> 3 channels) */
-   if (transforms & PNG_TRANSFORM_STRIP_FILLER_AFTER)
-      png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
-
-   else if (transforms & PNG_TRANSFORM_STRIP_FILLER_BEFORE)
-      png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-#endif
-
-#ifdef PNG_WRITE_BGR_SUPPORTED
-   /* Flip BGR pixels to RGB */
-   if (transforms & PNG_TRANSFORM_BGR)
-      png_set_bgr(png_ptr);
-#endif
-
-#ifdef PNG_WRITE_SWAP_SUPPORTED
-   /* Swap bytes of 16-bit files to most significant byte first */
-   if (transforms & PNG_TRANSFORM_SWAP_ENDIAN)
-      png_set_swap(png_ptr);
-#endif
-
-#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
-   /* Swap bits of 1, 2, 4 bit packed pixel formats */
-   if (transforms & PNG_TRANSFORM_PACKSWAP)
-      png_set_packswap(png_ptr);
-#endif
-
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-   /* Invert the alpha channel from opacity to transparency */
-   if (transforms & PNG_TRANSFORM_INVERT_ALPHA)
-      png_set_invert_alpha(png_ptr);
-#endif
-
-   /* ----------------------- end of transformations ------------------- */
-
-   /* Write the bits */
-   if (info_ptr->valid & PNG_INFO_IDAT)
-       png_write_image(png_ptr, info_ptr->row_pointers);
-
-   /* It is REQUIRED to call this to finish writing the rest of the file */
-   png_write_end(png_ptr, info_ptr);
-
-   PNG_UNUSED(transforms)   /* Quiet compiler warnings */
-   PNG_UNUSED(params)
-}
-#endif
-
-
-#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
-#ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
-/* Initialize the write structure - general purpose utility. */
-static int
-png_image_write_init(png_imagep image)
-{
-   png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, image,
-          png_safe_error, png_safe_warning);
-
-   if (png_ptr != NULL)
-   {
-      png_infop info_ptr = png_create_info_struct(png_ptr);
-
-      if (info_ptr != NULL)
-      {
-         png_controlp control = png_voidcast(png_controlp,
-            png_malloc_warn(png_ptr, (sizeof *control)));
-
-         if (control != NULL)
-         {
-            memset(control, 0, (sizeof *control));
-
-            control->png_ptr = png_ptr;
-            control->info_ptr = info_ptr;
-            control->for_write = 1;
-
-            image->opaque = control;
-            return 1;
-         }
-
-         /* Error clean up */
-         png_destroy_info_struct(png_ptr, &info_ptr);
-      }
-
-      png_destroy_write_struct(&png_ptr, NULL);
-   }
-
-   return png_image_error(image, "png_image_write_: out of memory");
-}
-
-/* Arguments to png_image_write_main: */
-typedef struct
-{
-   /* Arguments: */
-   png_imagep      image;
-   png_const_voidp buffer;
-   png_int_32      row_stride;
-   png_const_voidp colormap;
-   int             convert_to_8bit;
-   /* Local variables: */
-   png_const_voidp first_row;
-   ptrdiff_t       row_bytes;
-   png_voidp       local_row;
-} png_image_write_control;
-
-/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
- * do any necessary byte swapping.  The component order is defined by the
- * png_image format value.
- */
-static int
-png_write_image_16bit(png_voidp argument)
-{
-   png_image_write_control *display = png_voidcast(png_image_write_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-
-   png_const_uint_16p input_row = png_voidcast(png_const_uint_16p,
-      display->first_row);
-   png_uint_16p output_row = png_voidcast(png_uint_16p, display->local_row);
-   png_uint_16p row_end;
-   const int channels = (image->format & PNG_FORMAT_FLAG_COLOR) ? 3 : 1;
-   int aindex = 0;
-   png_uint_32 y = image->height;
-
-   if (image->format & PNG_FORMAT_FLAG_ALPHA)
-   {
-      if (image->format & PNG_FORMAT_FLAG_AFIRST)
-      {
-         aindex = -1;
-         ++input_row; /* To point to the first component */
-         ++output_row;
-      }
-
-      else
-         aindex = channels;
-   }
-
-   else
-      png_error(png_ptr, "png_write_image: internal call error");
-
-   /* Work out the output row end and count over this, note that the increment
-    * above to 'row' means that row_end can actually be beyond the end of the
-    * row; this is correct.
-    */
-   row_end = output_row + image->width * (channels+1);
-
-   while (y-- > 0)
-   {
-      png_const_uint_16p in_ptr = input_row;
-      png_uint_16p out_ptr = output_row;
-
-      while (out_ptr < row_end)
-      {
-         const png_uint_16 alpha = in_ptr[aindex];
-         png_uint_32 reciprocal = 0;
-         int c;
-
-         out_ptr[aindex] = alpha;
-
-         /* Calculate a reciprocal.  The correct calculation is simply
-          * component/alpha*65535 << 15. (I.e. 15 bits of precision); this
-          * allows correct rounding by adding .5 before the shift.  'reciprocal'
-          * is only initialized when required.
-          */
-         if (alpha > 0 && alpha < 65535)
-            reciprocal = ((0xffff<<15)+(alpha>>1))/alpha;
-
-         c = channels;
-         do /* always at least one channel */
-         {
-            png_uint_16 component = *in_ptr++;
-
-            /* The following gives 65535 for an alpha of 0, which is fine,
-             * otherwise if 0/0 is represented as some other value there is more
-             * likely to be a discontinuity which will probably damage
-             * compression when moving from a fully transparent area to a
-             * nearly transparent one.  (The assumption here is that opaque
-             * areas tend not to be 0 intensity.)
-             */
-            if (component >= alpha)
-               component = 65535;
-
-            /* component<alpha, so component/alpha is less than one and
-             * component*reciprocal is less than 2^31.
-             */
-            else if (component > 0 && alpha < 65535)
-            {
-               png_uint_32 calc = component * reciprocal;
-               calc += 16384; /* round to nearest */
-               component = (png_uint_16)(calc >> 15);
-            }
-
-            *out_ptr++ = component;
-         }
-         while (--c > 0);
-
-         /* Skip to next component (skip the intervening alpha channel) */
-         ++in_ptr;
-         ++out_ptr;
-      }
-
-      png_write_row(png_ptr, png_voidcast(png_const_bytep, display->local_row));
-      input_row += display->row_bytes/(sizeof (png_uint_16));
-   }
-
-   return 1;
-}
-
-/* Given 16-bit input (1 to 4 channels) write 8-bit output.  If an alpha channel
- * is present it must be removed from the components, the components are then
- * written in sRGB encoding.  No components are added or removed.
- *
- * Calculate an alpha reciprocal to reverse pre-multiplication.  As above the
- * calculation can be done to 15 bits of accuracy; however, the output needs to
- * be scaled in the range 0..255*65535, so include that scaling here.
- */
-#define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+(alpha>>1))/alpha)
-
-static png_byte
-png_unpremultiply(png_uint_32 component, png_uint_32 alpha,
-   png_uint_32 reciprocal/*from the above macro*/)
-{
-   /* The following gives 1.0 for an alpha of 0, which is fine, otherwise if 0/0
-    * is represented as some other value there is more likely to be a
-    * discontinuity which will probably damage compression when moving from a
-    * fully transparent area to a nearly transparent one.  (The assumption here
-    * is that opaque areas tend not to be 0 intensity.)
-    *
-    * There is a rounding problem here; if alpha is less than 128 it will end up
-    * as 0 when scaled to 8 bits.  To avoid introducing spurious colors into the
-    * output change for this too.
-    */
-   if (component >= alpha || alpha < 128)
-      return 255;
-
-   /* component<alpha, so component/alpha is less than one and
-    * component*reciprocal is less than 2^31.
-    */
-   else if (component > 0)
-   {
-      /* The test is that alpha/257 (rounded) is less than 255, the first value
-       * that becomes 255 is 65407.
-       * NOTE: this must agree with the PNG_DIV257 macro (which must, therefore,
-       * be exact!)  [Could also test reciprocal != 0]
-       */
-      if (alpha < 65407)
-      {
-         component *= reciprocal;
-         component += 64; /* round to nearest */
-         component >>= 7;
-      }
-
-      else
-         component *= 255;
-
-      /* Convert the component to sRGB. */
-      return (png_byte)PNG_sRGB_FROM_LINEAR(component);
-   }
-
-   else
-      return 0;
-}
-
-static int
-png_write_image_8bit(png_voidp argument)
-{
-   png_image_write_control *display = png_voidcast(png_image_write_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-
-   png_const_uint_16p input_row = png_voidcast(png_const_uint_16p,
-      display->first_row);
-   png_bytep output_row = png_voidcast(png_bytep, display->local_row);
-   png_uint_32 y = image->height;
-   const int channels = (image->format & PNG_FORMAT_FLAG_COLOR) ? 3 : 1;
-
-   if (image->format & PNG_FORMAT_FLAG_ALPHA)
-   {
-      png_bytep row_end;
-      int aindex;
-
-      if (image->format & PNG_FORMAT_FLAG_AFIRST)
-      {
-         aindex = -1;
-         ++input_row; /* To point to the first component */
-         ++output_row;
-      }
-
-      else
-         aindex = channels;
-
-      /* Use row_end in place of a loop counter: */
-      row_end = output_row + image->width * (channels+1);
-
-      while (y-- > 0)
-      {
-         png_const_uint_16p in_ptr = input_row;
-         png_bytep out_ptr = output_row;
-
-         while (out_ptr < row_end)
-         {
-            png_uint_16 alpha = in_ptr[aindex];
-            png_byte alphabyte = (png_byte)PNG_DIV257(alpha);
-            png_uint_32 reciprocal = 0;
-            int c;
-
-            /* Scale and write the alpha channel. */
-            out_ptr[aindex] = alphabyte;
-
-            if (alphabyte > 0 && alphabyte < 255)
-               reciprocal = UNP_RECIPROCAL(alpha);
-
-            c = channels;
-            do /* always at least one channel */
-               *out_ptr++ = png_unpremultiply(*in_ptr++, alpha, reciprocal);
-            while (--c > 0);
-
-            /* Skip to next component (skip the intervening alpha channel) */
-            ++in_ptr;
-            ++out_ptr;
-         } /* while out_ptr < row_end */
-
-         png_write_row(png_ptr, png_voidcast(png_const_bytep,
-            display->local_row));
-         input_row += display->row_bytes/(sizeof (png_uint_16));
-      } /* while y */
-   }
-
-   else
-   {
-      /* No alpha channel, so the row_end really is the end of the row and it
-       * is sufficient to loop over the components one by one.
-       */
-      png_bytep row_end = output_row + image->width * channels;
-
-      while (y-- > 0)
-      {
-         png_const_uint_16p in_ptr = input_row;
-         png_bytep out_ptr = output_row;
-
-         while (out_ptr < row_end)
-         {
-            png_uint_32 component = *in_ptr++;
-
-            component *= 255;
-            *out_ptr++ = (png_byte)PNG_sRGB_FROM_LINEAR(component);
-         }
-
-         png_write_row(png_ptr, output_row);
-         input_row += display->row_bytes/(sizeof (png_uint_16));
-      }
-   }
-
-   return 1;
-}
-
-static void
-png_image_set_PLTE(png_image_write_control *display)
-{
-   const png_imagep image = display->image;
-   const void *cmap = display->colormap;
-   const int entries = image->colormap_entries > 256 ? 256 :
-      (int)image->colormap_entries;
-
-   /* NOTE: the caller must check for cmap != NULL and entries != 0 */
-   const png_uint_32 format = image->format;
-   const int channels = PNG_IMAGE_SAMPLE_CHANNELS(format);
-
-#  ifdef PNG_FORMAT_BGR_SUPPORTED
-      const int afirst = (format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
-         (format & PNG_FORMAT_FLAG_ALPHA) != 0;
-#  else
-#     define afirst 0
-#  endif
-
-#  ifdef PNG_FORMAT_BGR_SUPPORTED
-      const int bgr = (format & PNG_FORMAT_FLAG_BGR) ? 2 : 0;
-#  else
-#     define bgr 0
-#  endif
-
-   int i, num_trans;
-   png_color palette[256];
-   png_byte tRNS[256];
-
-   memset(tRNS, 255, (sizeof tRNS));
-   memset(palette, 0, (sizeof palette));
-
-   for (i=num_trans=0; i<entries; ++i)
-   {
-      /* This gets automatically converted to sRGB with reversal of the
-       * pre-multiplication if the color-map has an alpha channel.
-       */
-      if (format & PNG_FORMAT_FLAG_LINEAR)
-      {
-         png_const_uint_16p entry = png_voidcast(png_const_uint_16p, cmap);
-
-         entry += i * channels;
-
-         if (channels & 1) /* no alpha */
-         {
-            if (channels >= 3) /* RGB */
-            {
-               palette[i].blue = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
-                  entry[(2 ^ bgr)]);
-               palette[i].green = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
-                  entry[1]);
-               palette[i].red = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
-                  entry[bgr]);
-            }
-
-            else /* Gray */
-               palette[i].blue = palette[i].red = palette[i].green =
-                  (png_byte)PNG_sRGB_FROM_LINEAR(255 * *entry);
-         }
-
-         else /* alpha */
-         {
-            png_uint_16 alpha = entry[afirst ? 0 : channels-1];
-            png_byte alphabyte = (png_byte)PNG_DIV257(alpha);
-            png_uint_32 reciprocal = 0;
-
-            /* Calculate a reciprocal, as in the png_write_image_8bit code above
-             * this is designed to produce a value scaled to 255*65535 when
-             * divided by 128 (i.e. asr 7).
-             */
-            if (alphabyte > 0 && alphabyte < 255)
-               reciprocal = (((0xffff*0xff)<<7)+(alpha>>1))/alpha;
-
-            tRNS[i] = alphabyte;
-            if (alphabyte < 255)
-               num_trans = i+1;
-
-            if (channels >= 3) /* RGB */
-            {
-               palette[i].blue = png_unpremultiply(entry[afirst + (2 ^ bgr)],
-                  alpha, reciprocal);
-               palette[i].green = png_unpremultiply(entry[afirst + 1], alpha,
-                  reciprocal);
-               palette[i].red = png_unpremultiply(entry[afirst + bgr], alpha,
-                  reciprocal);
-            }
-
-            else /* gray */
-               palette[i].blue = palette[i].red = palette[i].green =
-                  png_unpremultiply(entry[afirst], alpha, reciprocal);
-         }
-      }
-
-      else /* Color-map has sRGB values */
-      {
-         png_const_bytep entry = png_voidcast(png_const_bytep, cmap);
-
-         entry += i * channels;
-
-         switch (channels)
-         {
-            case 4:
-               tRNS[i] = entry[afirst ? 0 : 3];
-               if (tRNS[i] < 255)
-                  num_trans = i+1;
-               /* FALL THROUGH */
-            case 3:
-               palette[i].blue = entry[afirst + (2 ^ bgr)];
-               palette[i].green = entry[afirst + 1];
-               palette[i].red = entry[afirst + bgr];
-               break;
-
-            case 2:
-               tRNS[i] = entry[1 ^ afirst];
-               if (tRNS[i] < 255)
-                  num_trans = i+1;
-               /* FALL THROUGH */
-            case 1:
-               palette[i].blue = palette[i].red = palette[i].green =
-                  entry[afirst];
-               break;
-
-            default:
-               break;
-         }
-      }
-   }
-
-#  ifdef afirst
-#     undef afirst
-#  endif
-#  ifdef bgr
-#     undef bgr
-#  endif
-
-   png_set_PLTE(image->opaque->png_ptr, image->opaque->info_ptr, palette,
-      entries);
-
-   if (num_trans > 0)
-      png_set_tRNS(image->opaque->png_ptr, image->opaque->info_ptr, tRNS,
-         num_trans, NULL);
-
-   image->colormap_entries = entries;
-}
-
-static int
-png_image_write_main(png_voidp argument)
-{
-   png_image_write_control *display = png_voidcast(png_image_write_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-   png_uint_32 format = image->format;
-
-   int colormap = (format & PNG_FORMAT_FLAG_COLORMAP) != 0;
-   int linear = !colormap && (format & PNG_FORMAT_FLAG_LINEAR) != 0; /* input */
-   int alpha = !colormap && (format & PNG_FORMAT_FLAG_ALPHA) != 0;
-   int write_16bit = linear && !colormap && !display->convert_to_8bit;
-
-#  ifdef PNG_BENIGN_ERRORS_SUPPORTED
-      /* Make sure we error out on any bad situation */
-      png_set_benign_errors(png_ptr, 0/*error*/);
-#  endif
-
-   /* Default the 'row_stride' parameter if required. */
-   if (display->row_stride == 0)
-      display->row_stride = PNG_IMAGE_ROW_STRIDE(*image);
-
-   /* Set the required transforms then write the rows in the correct order. */
-   if (format & PNG_FORMAT_FLAG_COLORMAP)
-   {
-      if (display->colormap != NULL && image->colormap_entries > 0)
-      {
-         png_uint_32 entries = image->colormap_entries;
-
-         png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
-            entries > 16 ? 8 : (entries > 4 ? 4 : (entries > 2 ? 2 : 1)),
-            PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
-            PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
-         png_image_set_PLTE(display);
-      }
-
-      else
-         png_error(image->opaque->png_ptr,
-            "no color-map for color-mapped image");
-   }
-
-   else
-      png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
-         write_16bit ? 16 : 8,
-         ((format & PNG_FORMAT_FLAG_COLOR) ? PNG_COLOR_MASK_COLOR : 0) +
-         ((format & PNG_FORMAT_FLAG_ALPHA) ? PNG_COLOR_MASK_ALPHA : 0),
-         PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
-   /* Counter-intuitively the data transformations must be called *after*
-    * png_write_info, not before as in the read code, but the 'set' functions
-    * must still be called before.  Just set the color space information, never
-    * write an interlaced image.
-    */
-
-   if (write_16bit)
-   {
-      /* The gamma here is 1.0 (linear) and the cHRM chunk matches sRGB. */
-      png_set_gAMA_fixed(png_ptr, info_ptr, PNG_GAMMA_LINEAR);
-
-      if (!(image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB))
-         png_set_cHRM_fixed(png_ptr, info_ptr,
-            /* color      x       y */
-            /* white */ 31270, 32900,
-            /* red   */ 64000, 33000,
-            /* green */ 30000, 60000,
-            /* blue  */ 15000,  6000
-         );
-   }
-
-   else if (!(image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB))
-      png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_PERCEPTUAL);
-
-   /* Else writing an 8-bit file and the *colors* aren't sRGB, but the 8-bit
-    * space must still be gamma encoded.
-    */
-   else
-      png_set_gAMA_fixed(png_ptr, info_ptr, PNG_GAMMA_sRGB_INVERSE);
-
-   /* Write the file header. */
-   png_write_info(png_ptr, info_ptr);
-
-   /* Now set up the data transformations (*after* the header is written),
-    * remove the handled transformations from the 'format' flags for checking.
-    *
-    * First check for a little endian system if writing 16 bit files.
-    */
-   if (write_16bit)
-   {
-      PNG_CONST png_uint_16 le = 0x0001;
-
-      if (*(png_const_bytep)&le)
-         png_set_swap(png_ptr);
-   }
-
-#  ifdef PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
-      if (format & PNG_FORMAT_FLAG_BGR)
-      {
-         if (!colormap && (format & PNG_FORMAT_FLAG_COLOR) != 0)
-            png_set_bgr(png_ptr);
-         format &= ~PNG_FORMAT_FLAG_BGR;
-      }
-#  endif
-
-#  ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
-      if (format & PNG_FORMAT_FLAG_AFIRST)
-      {
-         if (!colormap && (format & PNG_FORMAT_FLAG_ALPHA) != 0)
-            png_set_swap_alpha(png_ptr);
-         format &= ~PNG_FORMAT_FLAG_AFIRST;
-      }
-#  endif
-
-   /* If there are 16 or fewer color-map entries we wrote a lower bit depth
-    * above, but the application data is still byte packed.
-    */
-   if (colormap && image->colormap_entries <= 16)
-      png_set_packing(png_ptr);
-
-   /* That should have handled all (both) the transforms. */
-   if ((format & ~(png_uint_32)(PNG_FORMAT_FLAG_COLOR | PNG_FORMAT_FLAG_LINEAR |
-         PNG_FORMAT_FLAG_ALPHA | PNG_FORMAT_FLAG_COLORMAP)) != 0)
-      png_error(png_ptr, "png_write_image: unsupported transformation");
-
-   {
-      png_const_bytep row = png_voidcast(png_const_bytep, display->buffer);
-      ptrdiff_t row_bytes = display->row_stride;
-
-      if (linear)
-         row_bytes *= (sizeof (png_uint_16));
-
-      if (row_bytes < 0)
-         row += (image->height-1) * (-row_bytes);
-
-      display->first_row = row;
-      display->row_bytes = row_bytes;
-   }
-
-   /* Apply 'fast' options if the flag is set. */
-   if ((image->flags & PNG_IMAGE_FLAG_FAST) != 0)
-   {
-      png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_NO_FILTERS);
-      /* NOTE: determined by experiment using pngstest, this reflects some
-       * balance between the time to write the image once and the time to read
-       * it about 50 times.  The speed-up in pngstest was about 10-20% of the
-       * total (user) time on a heavily loaded system.
-       */
-      png_set_compression_level(png_ptr, 3);
-   }
-
-   /* Check for the cases that currently require a pre-transform on the row
-    * before it is written.  This only applies when the input is 16-bit and
-    * either there is an alpha channel or it is converted to 8-bit.
-    */
-   if ((linear && alpha) || (!colormap && display->convert_to_8bit))
-   {
-      png_bytep row = png_voidcast(png_bytep, png_malloc(png_ptr,
-         png_get_rowbytes(png_ptr, info_ptr)));
-      int result;
-
-      display->local_row = row;
-      if (write_16bit)
-         result = png_safe_execute(image, png_write_image_16bit, display);
-      else
-         result = png_safe_execute(image, png_write_image_8bit, display);
-      display->local_row = NULL;
-
-      png_free(png_ptr, row);
-
-      /* Skip the 'write_end' on error: */
-      if (!result)
-         return 0;
-   }
-
-   /* Otherwise this is the case where the input is in a format currently
-    * supported by the rest of the libpng write code; call it directly.
-    */
-   else
-   {
-      png_const_bytep row = png_voidcast(png_const_bytep, display->first_row);
-      ptrdiff_t row_bytes = display->row_bytes;
-      png_uint_32 y = image->height;
-
-      while (y-- > 0)
-      {
-         png_write_row(png_ptr, row);
-         row += row_bytes;
-      }
-   }
-
-   png_write_end(png_ptr, info_ptr);
-   return 1;
-}
-
-int PNGAPI
-png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
-   const void *buffer, png_int_32 row_stride, const void *colormap)
-{
-   /* Write the image to the given (FILE*). */
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file != NULL)
-      {
-         if (png_image_write_init(image))
-         {
-            png_image_write_control display;
-            int result;
-
-            /* This is slightly evil, but png_init_io doesn't do anything other
-             * than this and we haven't changed the standard IO functions so
-             * this saves a 'safe' function.
-             */
-            image->opaque->png_ptr->io_ptr = file;
-
-            memset(&display, 0, (sizeof display));
-            display.image = image;
-            display.buffer = buffer;
-            display.row_stride = row_stride;
-            display.colormap = colormap;
-            display.convert_to_8bit = convert_to_8bit;
-
-            result = png_safe_execute(image, png_image_write_main, &display);
-            png_image_free(image);
-            return result;
-         }
-
-         else
-            return 0;
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_write_to_stdio: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_write_to_stdio: incorrect PNG_IMAGE_VERSION");
-
-   else
-      return 0;
-}
-
-int PNGAPI
-png_image_write_to_file(png_imagep image, const char *file_name,
-   int convert_to_8bit, const void *buffer, png_int_32 row_stride,
-   const void *colormap)
-{
-   /* Write the image to the named file. */
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file_name != NULL)
-      {
-         FILE *fp = fopen(file_name, "wb");
-
-         if (fp != NULL)
-         {
-            if (png_image_write_to_stdio(image, fp, convert_to_8bit, buffer,
-               row_stride, colormap))
-            {
-               int error; /* from fflush/fclose */
-
-               /* Make sure the file is flushed correctly. */
-               if (fflush(fp) == 0 && ferror(fp) == 0)
-               {
-                  if (fclose(fp) == 0)
-                     return 1;
-
-                  error = errno; /* from fclose */
-               }
-
-               else
-               {
-                  error = errno; /* from fflush or ferror */
-                  (void)fclose(fp);
-               }
-
-               (void)remove(file_name);
-               /* The image has already been cleaned up; this is just used to
-                * set the error (because the original write succeeded).
-                */
-               return png_image_error(image, strerror(error));
-            }
-
-            else
-            {
-               /* Clean up: just the opened file. */
-               (void)fclose(fp);
-               (void)remove(file_name);
-               return 0;
-            }
-         }
-
-         else
-            return png_image_error(image, strerror(errno));
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_write_to_file: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_write_to_file: incorrect PNG_IMAGE_VERSION");
-
-   else
-      return 0;
-}
-#endif /* PNG_STDIO_SUPPORTED */
-#endif /* SIMPLIFIED_WRITE */
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngwtran.c b/modules/juce_graphics/image_formats/pnglib/pngwtran.c
deleted file mode 100644
index 2cdd7c9..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngwtran.c
+++ /dev/null
@@ -1,637 +0,0 @@
-
-/* pngwtran.c - transforms the data in a row for PNG writers
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_WRITE_SUPPORTED
-
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-/* Transform the data according to the user's wishes.  The order of
- * transformations is significant.
- */
-void /* PRIVATE */
-png_do_write_transformations(png_structrp png_ptr, png_row_infop row_info)
-{
-   png_debug(1, "in png_do_write_transformations");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-   if (png_ptr->transformations & PNG_USER_TRANSFORM)
-      if (png_ptr->write_user_transform_fn != NULL)
-         (*(png_ptr->write_user_transform_fn)) /* User write transform
-                                                 function */
-             (png_ptr,  /* png_ptr */
-             row_info,  /* row_info: */
-                /*  png_uint_32 width;       width of row */
-                /*  png_size_t rowbytes;     number of bytes in row */
-                /*  png_byte color_type;     color type of pixels */
-                /*  png_byte bit_depth;      bit depth of samples */
-                /*  png_byte channels;       number of channels (1-4) */
-                /*  png_byte pixel_depth;    bits per pixel (depth*channels) */
-             png_ptr->row_buf + 1);      /* start of pixel data for row */
-#endif
-
-#ifdef PNG_WRITE_FILLER_SUPPORTED
-   if (png_ptr->transformations & PNG_FILLER)
-      png_do_strip_channel(row_info, png_ptr->row_buf + 1,
-         !(png_ptr->flags & PNG_FLAG_FILLER_AFTER));
-#endif
-
-#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
-   if (png_ptr->transformations & PNG_PACKSWAP)
-      png_do_packswap(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_PACK_SUPPORTED
-   if (png_ptr->transformations & PNG_PACK)
-      png_do_pack(row_info, png_ptr->row_buf + 1,
-          (png_uint_32)png_ptr->bit_depth);
-#endif
-
-#ifdef PNG_WRITE_SWAP_SUPPORTED
-   if (png_ptr->transformations & PNG_SWAP_BYTES)
-      png_do_swap(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-   if (png_ptr->transformations & PNG_SHIFT)
-      png_do_shift(row_info, png_ptr->row_buf + 1,
-          &(png_ptr->shift));
-#endif
-
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-   if (png_ptr->transformations & PNG_SWAP_ALPHA)
-      png_do_write_swap_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-   if (png_ptr->transformations & PNG_INVERT_ALPHA)
-      png_do_write_invert_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_BGR_SUPPORTED
-   if (png_ptr->transformations & PNG_BGR)
-      png_do_bgr(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_INVERT_SUPPORTED
-   if (png_ptr->transformations & PNG_INVERT_MONO)
-      png_do_invert(row_info, png_ptr->row_buf + 1);
-#endif
-}
-
-#ifdef PNG_WRITE_PACK_SUPPORTED
-/* Pack pixels into bytes.  Pass the true bit depth in bit_depth.  The
- * row_info bit depth should be 8 (one pixel per byte).  The channels
- * should be 1 (this only happens on grayscale and paletted images).
- */
-void /* PRIVATE */
-png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
-{
-   png_debug(1, "in png_do_pack");
-
-   if (row_info->bit_depth == 8 &&
-      row_info->channels == 1)
-   {
-      switch ((int)bit_depth)
-      {
-         case 1:
-         {
-            png_bytep sp, dp;
-            int mask, v;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            sp = row;
-            dp = row;
-            mask = 0x80;
-            v = 0;
-
-            for (i = 0; i < row_width; i++)
-            {
-               if (*sp != 0)
-                  v |= mask;
-
-               sp++;
-
-               if (mask > 1)
-                  mask >>= 1;
-
-               else
-               {
-                  mask = 0x80;
-                  *dp = (png_byte)v;
-                  dp++;
-                  v = 0;
-               }
-            }
-
-            if (mask != 0x80)
-               *dp = (png_byte)v;
-
-            break;
-         }
-
-         case 2:
-         {
-            png_bytep sp, dp;
-            int shift, v;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            sp = row;
-            dp = row;
-            shift = 6;
-            v = 0;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte value;
-
-               value = (png_byte)(*sp & 0x03);
-               v |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 6;
-                  *dp = (png_byte)v;
-                  dp++;
-                  v = 0;
-               }
-
-               else
-                  shift -= 2;
-
-               sp++;
-            }
-
-            if (shift != 6)
-               *dp = (png_byte)v;
-
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp, dp;
-            int shift, v;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            sp = row;
-            dp = row;
-            shift = 4;
-            v = 0;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte value;
-
-               value = (png_byte)(*sp & 0x0f);
-               v |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 4;
-                  *dp = (png_byte)v;
-                  dp++;
-                  v = 0;
-               }
-
-               else
-                  shift -= 4;
-
-               sp++;
-            }
-
-            if (shift != 4)
-               *dp = (png_byte)v;
-
-            break;
-         }
-
-         default:
-            break;
-      }
-
-      row_info->bit_depth = (png_byte)bit_depth;
-      row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
-          row_info->width);
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-/* Shift pixel values to take advantage of whole range.  Pass the
- * true number of bits in bit_depth.  The row should be packed
- * according to row_info->bit_depth.  Thus, if you had a row of
- * bit depth 4, but the pixels only had values from 0 to 7, you
- * would pass 3 as bit_depth, and this routine would translate the
- * data to 0 to 15.
- */
-void /* PRIVATE */
-png_do_shift(png_row_infop row_info, png_bytep row,
-    png_const_color_8p bit_depth)
-{
-   png_debug(1, "in png_do_shift");
-
-   if (row_info->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      int shift_start[4], shift_dec[4];
-      int channels = 0;
-
-      if (row_info->color_type & PNG_COLOR_MASK_COLOR)
-      {
-         shift_start[channels] = row_info->bit_depth - bit_depth->red;
-         shift_dec[channels] = bit_depth->red;
-         channels++;
-
-         shift_start[channels] = row_info->bit_depth - bit_depth->green;
-         shift_dec[channels] = bit_depth->green;
-         channels++;
-
-         shift_start[channels] = row_info->bit_depth - bit_depth->blue;
-         shift_dec[channels] = bit_depth->blue;
-         channels++;
-      }
-
-      else
-      {
-         shift_start[channels] = row_info->bit_depth - bit_depth->gray;
-         shift_dec[channels] = bit_depth->gray;
-         channels++;
-      }
-
-      if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
-      {
-         shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
-         shift_dec[channels] = bit_depth->alpha;
-         channels++;
-      }
-
-      /* With low row depths, could only be grayscale, so one channel */
-      if (row_info->bit_depth < 8)
-      {
-         png_bytep bp = row;
-         png_size_t i;
-         unsigned int mask;
-         png_size_t row_bytes = row_info->rowbytes;
-
-         if (bit_depth->gray == 1 && row_info->bit_depth == 2)
-            mask = 0x55;
-
-         else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
-            mask = 0x11;
-
-         else
-            mask = 0xff;
-
-         for (i = 0; i < row_bytes; i++, bp++)
-         {
-            int j;
-            unsigned int v, out;
-
-            v = *bp;
-            out = 0;
-
-            for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
-            {
-               if (j > 0)
-                  out |= v << j;
-
-               else
-                  out |= (v >> (-j)) & mask;
-            }
-
-            *bp = (png_byte)(out & 0xff);
-         }
-      }
-
-      else if (row_info->bit_depth == 8)
-      {
-         png_bytep bp = row;
-         png_uint_32 i;
-         png_uint_32 istop = channels * row_info->width;
-
-         for (i = 0; i < istop; i++, bp++)
-         {
-
-            const unsigned int c = i%channels;
-            int j;
-            unsigned int v, out;
-
-            v = *bp;
-            out = 0;
-
-            for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
-            {
-               if (j > 0)
-                  out |= v << j;
-
-               else
-                  out |= v >> (-j);
-            }
-
-            *bp = (png_byte)(out & 0xff);
-         }
-      }
-
-      else
-      {
-         png_bytep bp;
-         png_uint_32 i;
-         png_uint_32 istop = channels * row_info->width;
-
-         for (bp = row, i = 0; i < istop; i++)
-         {
-            const unsigned int c = i%channels;
-            int j;
-            unsigned int value, v;
-
-            v = png_get_uint_16(bp);
-            value = 0;
-
-            for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
-            {
-               if (j > 0)
-                  value |= v << j;
-
-               else
-                  value |= v >> (-j);
-            }
-            *bp++ = (png_byte)((value >> 8) & 0xff);
-            *bp++ = (png_byte)(value & 0xff);
-         }
-      }
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-void /* PRIVATE */
-png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_write_swap_alpha");
-
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This converts from ARGB to RGBA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save;
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This converts from AARRGGBB to RRGGBBAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save[2];
-               save[0] = *(sp++);
-               save[1] = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save[0];
-               *(dp++) = save[1];
-            }
-         }
-#endif /* PNG_WRITE_16BIT_SUPPORTED */
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This converts from AG to GA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save;
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This converts from AAGG to GGAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save[2];
-               save[0] = *(sp++);
-               save[1] = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save[0];
-               *(dp++) = save[1];
-            }
-         }
-#endif /* PNG_WRITE_16BIT_SUPPORTED */
-      }
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-void /* PRIVATE */
-png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_write_invert_alpha");
-
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This inverts the alpha channel in RGBA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               /* Does nothing
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               */
-               sp+=3; dp = sp;
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This inverts the alpha channel in RRGGBBAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               /* Does nothing
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               */
-               sp+=6; dp = sp;
-               *(dp++) = (png_byte)(255 - *(sp++));
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-#endif /* PNG_WRITE_16BIT_SUPPORTED */
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This inverts the alpha channel in GA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               *(dp++) = *(sp++);
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This inverts the alpha channel in GGAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               /* Does nothing
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               */
-               sp+=2; dp = sp;
-               *(dp++) = (png_byte)(255 - *(sp++));
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-#endif /* PNG_WRITE_16BIT_SUPPORTED */
-      }
-   }
-}
-#endif
-#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-/* Undoes intrapixel differencing  */
-void /* PRIVATE */
-png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_write_intrapixel");
-
-   if ((row_info->color_type & PNG_COLOR_MASK_COLOR))
-   {
-      int bytes_per_pixel;
-      png_uint_32 row_width = row_info->width;
-      if (row_info->bit_depth == 8)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 3;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 4;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            *(rp)     = (png_byte)((*rp       - *(rp + 1)) & 0xff);
-            *(rp + 2) = (png_byte)((*(rp + 2) - *(rp + 1)) & 0xff);
-         }
-      }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 6;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 8;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            png_uint_32 s0   = (*(rp    ) << 8) | *(rp + 1);
-            png_uint_32 s1   = (*(rp + 2) << 8) | *(rp + 3);
-            png_uint_32 s2   = (*(rp + 4) << 8) | *(rp + 5);
-            png_uint_32 red  = (png_uint_32)((s0 - s1) & 0xffffL);
-            png_uint_32 blue = (png_uint_32)((s2 - s1) & 0xffffL);
-            *(rp    ) = (png_byte)((red >> 8) & 0xff);
-            *(rp + 1) = (png_byte)(red & 0xff);
-            *(rp + 4) = (png_byte)((blue >> 8) & 0xff);
-            *(rp + 5) = (png_byte)(blue & 0xff);
-         }
-      }
-#endif /* PNG_WRITE_16BIT_SUPPORTED */
-   }
-}
-#endif /* PNG_MNG_FEATURES_SUPPORTED */
-#endif /* PNG_WRITE_SUPPORTED */
diff --git a/modules/juce_graphics/image_formats/pnglib/pngwutil.c b/modules/juce_graphics/image_formats/pnglib/pngwutil.c
deleted file mode 100644
index c90ff8b..0000000
--- a/modules/juce_graphics/image_formats/pnglib/pngwutil.c
+++ /dev/null
@@ -1,3020 +0,0 @@
-
-/* pngwutil.c - utilities to write a PNG file
- *
- * Last changed in libpng 1.6.0 [February 14, 2013]
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_WRITE_SUPPORTED
-
-#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-/* Place a 32-bit number into a buffer in PNG byte order.  We work
- * with unsigned numbers for convenience, although one supported
- * ancillary chunk uses signed (two's complement) numbers.
- */
-void PNGAPI
-png_save_uint_32(png_bytep buf, png_uint_32 i)
-{
-   buf[0] = (png_byte)((i >> 24) & 0xff);
-   buf[1] = (png_byte)((i >> 16) & 0xff);
-   buf[2] = (png_byte)((i >> 8) & 0xff);
-   buf[3] = (png_byte)(i & 0xff);
-}
-
-/* Place a 16-bit number into a buffer in PNG byte order.
- * The parameter is declared unsigned int, not png_uint_16,
- * just to avoid potential problems on pre-ANSI C compilers.
- */
-void PNGAPI
-png_save_uint_16(png_bytep buf, unsigned int i)
-{
-   buf[0] = (png_byte)((i >> 8) & 0xff);
-   buf[1] = (png_byte)(i & 0xff);
-}
-#endif
-
-/* Simple function to write the signature.  If we have already written
- * the magic bytes of the signature, or more likely, the PNG stream is
- * being embedded into another stream and doesn't need its own signature,
- * we should call png_set_sig_bytes() to tell libpng how many of the
- * bytes have already been written.
- */
-void PNGAPI
-png_write_sig(png_structrp png_ptr)
-{
-   png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that the signature is being written */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_SIGNATURE;
-#endif
-
-   /* Write the rest of the 8 byte signature */
-   png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes],
-      (png_size_t)(8 - png_ptr->sig_bytes));
-
-   if (png_ptr->sig_bytes < 3)
-      png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
-}
-
-/* Write the start of a PNG chunk.  The type is the chunk type.
- * The total_length is the sum of the lengths of all the data you will be
- * passing in png_write_chunk_data().
- */
-static void
-png_write_chunk_header(png_structrp png_ptr, png_uint_32 chunk_name,
-    png_uint_32 length)
-{
-   png_byte buf[8];
-
-#if defined(PNG_DEBUG) && (PNG_DEBUG > 0)
-   PNG_CSTRING_FROM_CHUNK(buf, chunk_name);
-   png_debug2(0, "Writing %s chunk, length = %lu", buf, (unsigned long)length);
-#endif
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that the chunk header is being written.
-    * PNG_IO_CHUNK_HDR requires a single I/O call.
-    */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_CHUNK_HDR;
-#endif
-
-   /* Write the length and the chunk name */
-   png_save_uint_32(buf, length);
-   png_save_uint_32(buf + 4, chunk_name);
-   png_write_data(png_ptr, buf, 8);
-
-   /* Put the chunk name into png_ptr->chunk_name */
-   png_ptr->chunk_name = chunk_name;
-
-   /* Reset the crc and run it over the chunk name */
-   png_reset_crc(png_ptr);
-
-   png_calculate_crc(png_ptr, buf + 4, 4);
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that chunk data will (possibly) be written.
-    * PNG_IO_CHUNK_DATA does NOT require a specific number of I/O calls.
-    */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_CHUNK_DATA;
-#endif
-}
-
-void PNGAPI
-png_write_chunk_start(png_structrp png_ptr, png_const_bytep chunk_string,
-    png_uint_32 length)
-{
-   png_write_chunk_header(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), length);
-}
-
-/* Write the data of a PNG chunk started with png_write_chunk_header().
- * Note that multiple calls to this function are allowed, and that the
- * sum of the lengths from these calls *must* add up to the total_length
- * given to png_write_chunk_header().
- */
-void PNGAPI
-png_write_chunk_data(png_structrp png_ptr, png_const_bytep data,
-    png_size_t length)
-{
-   /* Write the data, and run the CRC over it */
-   if (png_ptr == NULL)
-      return;
-
-   if (data != NULL && length > 0)
-   {
-      png_write_data(png_ptr, data, length);
-
-      /* Update the CRC after writing the data,
-       * in case that the user I/O routine alters it.
-       */
-      png_calculate_crc(png_ptr, data, length);
-   }
-}
-
-/* Finish a chunk started with png_write_chunk_header(). */
-void PNGAPI
-png_write_chunk_end(png_structrp png_ptr)
-{
-   png_byte buf[4];
-
-   if (png_ptr == NULL) return;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that the chunk CRC is being written.
-    * PNG_IO_CHUNK_CRC requires a single I/O function call.
-    */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_CHUNK_CRC;
-#endif
-
-   /* Write the crc in a single operation */
-   png_save_uint_32(buf, png_ptr->crc);
-
-   png_write_data(png_ptr, buf, (png_size_t)4);
-}
-
-/* Write a PNG chunk all at once.  The type is an array of ASCII characters
- * representing the chunk name.  The array must be at least 4 bytes in
- * length, and does not need to be null terminated.  To be safe, pass the
- * pre-defined chunk names here, and if you need a new one, define it
- * where the others are defined.  The length is the length of the data.
- * All the data must be present.  If that is not possible, use the
- * png_write_chunk_start(), png_write_chunk_data(), and png_write_chunk_end()
- * functions instead.
- */
-static void
-png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
-   png_const_bytep data, png_size_t length)
-{
-   if (png_ptr == NULL)
-      return;
-
-   /* On 64 bit architectures 'length' may not fit in a png_uint_32. */
-   if (length > PNG_UINT_31_MAX)
-      png_error(png_ptr, "length exceeds PNG maxima");
-
-   png_write_chunk_header(png_ptr, chunk_name, (png_uint_32)length);
-   png_write_chunk_data(png_ptr, data, length);
-   png_write_chunk_end(png_ptr);
-}
-
-/* This is the API that calls the internal function above. */
-void PNGAPI
-png_write_chunk(png_structrp png_ptr, png_const_bytep chunk_string,
-   png_const_bytep data, png_size_t length)
-{
-   png_write_complete_chunk(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), data,
-      length);
-}
-
-/* This is used below to find the size of an image to pass to png_deflate_claim,
- * so it only needs to be accurate if the size is less than 16384 bytes (the
- * point at which a lower LZ window size can be used.)
- */
-static png_alloc_size_t
-png_image_size(png_structrp png_ptr)
-{
-   /* Only return sizes up to the maximum of a png_uint_32, do this by limiting
-    * the width and height used to 15 bits.
-    */
-   png_uint_32 h = png_ptr->height;
-
-   if (png_ptr->rowbytes < 32768 && h < 32768)
-   {
-      if (png_ptr->interlaced)
-      {
-         /* Interlacing makes the image larger because of the replication of
-          * both the filter byte and the padding to a byte boundary.
-          */
-         png_uint_32 w = png_ptr->width;
-         unsigned int pd = png_ptr->pixel_depth;
-         png_alloc_size_t cb_base;
-         int pass;
-
-         for (cb_base=0, pass=0; pass<=6; ++pass)
-         {
-            png_uint_32 pw = PNG_PASS_COLS(w, pass);
-
-            if (pw > 0)
-               cb_base += (PNG_ROWBYTES(pd, pw)+1) * PNG_PASS_ROWS(h, pass);
-         }
-
-         return cb_base;
-      }
-
-      else
-         return (png_ptr->rowbytes+1) * h;
-   }
-
-   else
-      return 0xffffffffU;
-}
-
-#ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-   /* This is the code to hack the first two bytes of the deflate stream (the
-    * deflate header) to correct the windowBits value to match the actual data
-    * size.  Note that the second argument is the *uncompressed* size but the
-    * first argument is the *compressed* data (and it must be deflate
-    * compressed.)
-    */
-static void
-optimize_cmf(png_bytep data, png_alloc_size_t data_size)
-{
-   /* Optimize the CMF field in the zlib stream.  The resultant zlib stream is
-    * still compliant to the stream specification.
-    */
-   if (data_size <= 16384) /* else windowBits must be 15 */
-   {
-      unsigned int z_cmf = data[0];  /* zlib compression method and flags */
-
-      if ((z_cmf & 0x0f) == 8 && (z_cmf & 0xf0) <= 0x70)
-      {
-         unsigned int z_cinfo;
-         unsigned int half_z_window_size;
-
-         z_cinfo = z_cmf >> 4;
-         half_z_window_size = 1U << (z_cinfo + 7);
-
-         if (data_size <= half_z_window_size) /* else no change */
-         {
-            unsigned int tmp;
-
-            do
-            {
-               half_z_window_size >>= 1;
-               --z_cinfo;
-            }
-            while (z_cinfo > 0 && data_size <= half_z_window_size);
-
-            z_cmf = (z_cmf & 0x0f) | (z_cinfo << 4);
-
-            data[0] = (png_byte)z_cmf;
-            tmp = data[1] & 0xe0;
-            tmp += 0x1f - ((z_cmf << 8) + tmp) % 0x1f;
-            data[1] = (png_byte)tmp;
-         }
-      }
-   }
-}
-#else
-#  define optimize_cmf(dp,dl) ((void)0)
-#endif /* PNG_WRITE_OPTIMIZE_CMF_SUPPORTED */
-
-/* Initialize the compressor for the appropriate type of compression. */
-static int
-png_deflate_claim(png_structrp png_ptr, png_uint_32 owner,
-   png_alloc_size_t data_size)
-{
-   if (png_ptr->zowner != 0)
-   {
-      char msg[64];
-
-      PNG_STRING_FROM_CHUNK(msg, owner);
-      msg[4] = ':';
-      msg[5] = ' ';
-      PNG_STRING_FROM_CHUNK(msg+6, png_ptr->zowner);
-      /* So the message that results is "<chunk> using zstream"; this is an
-       * internal error, but is very useful for debugging.  i18n requirements
-       * are minimal.
-       */
-      (void)png_safecat(msg, (sizeof msg), 10, " using zstream");
-#     if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-         png_warning(png_ptr, msg);
-
-         /* Attempt sane error recovery */
-         if (png_ptr->zowner == png_IDAT) /* don't steal from IDAT */
-         {
-            png_ptr->zstream.msg = PNGZ_MSG_CAST("in use by IDAT");
-            return Z_STREAM_ERROR;
-         }
-
-         png_ptr->zowner = 0;
-#     else
-         png_error(png_ptr, msg);
-#     endif
-   }
-
-   {
-      int level = png_ptr->zlib_level;
-      int method = png_ptr->zlib_method;
-      int windowBits = png_ptr->zlib_window_bits;
-      int memLevel = png_ptr->zlib_mem_level;
-      int strategy; /* set below */
-      int ret; /* zlib return code */
-
-      if (owner == png_IDAT)
-      {
-         if (png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_STRATEGY)
-            strategy = png_ptr->zlib_strategy;
-
-         else if (png_ptr->do_filter != PNG_FILTER_NONE)
-            strategy = PNG_Z_DEFAULT_STRATEGY;
-
-         else
-            strategy = PNG_Z_DEFAULT_NOFILTER_STRATEGY;
-      }
-
-      else
-      {
-#        ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-            level = png_ptr->zlib_text_level;
-            method = png_ptr->zlib_text_method;
-            windowBits = png_ptr->zlib_text_window_bits;
-            memLevel = png_ptr->zlib_text_mem_level;
-            strategy = png_ptr->zlib_text_strategy;
-#        else
-            /* If customization is not supported the values all come from the
-             * IDAT values except for the strategy, which is fixed to the
-             * default.  (This is the pre-1.6.0 behavior too, although it was
-             * implemented in a very different way.)
-             */
-            strategy = Z_DEFAULT_STRATEGY;
-#        endif
-      }
-
-      /* Adjust 'windowBits' down if larger than 'data_size'; to stop this
-       * happening just pass 32768 as the data_size parameter.  Notice that zlib
-       * requires an extra 262 bytes in the window in addition to the data to be
-       * able to see the whole of the data, so if data_size+262 takes us to the
-       * next windowBits size we need to fix up the value later.  (Because even
-       * though deflate needs the extra window, inflate does not!)
-       */
-      if (data_size <= 16384)
-      {
-         /* IMPLEMENTATION NOTE: this 'half_window_size' stuff is only here to
-          * work round a Microsoft Visual C misbehavior which, contrary to C-90,
-          * widens the result of the following shift to 64-bits if (and,
-          * apparently, only if) it is used in a test.
-          */
-         unsigned int half_window_size = 1U << (windowBits-1);
-
-         while (data_size + 262 <= half_window_size)
-         {
-            half_window_size >>= 1;
-            --windowBits;
-         }
-      }
-
-      /* Check against the previous initialized values, if any. */
-      if ((png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED) &&
-         (png_ptr->zlib_set_level != level ||
-         png_ptr->zlib_set_method != method ||
-         png_ptr->zlib_set_window_bits != windowBits ||
-         png_ptr->zlib_set_mem_level != memLevel ||
-         png_ptr->zlib_set_strategy != strategy))
-      {
-         if (deflateEnd(&png_ptr->zstream) != Z_OK)
-            png_warning(png_ptr, "deflateEnd failed (ignored)");
-
-         png_ptr->flags &= ~PNG_FLAG_ZSTREAM_INITIALIZED;
-      }
-
-      /* For safety clear out the input and output pointers (currently zlib
-       * doesn't use them on Init, but it might in the future).
-       */
-      png_ptr->zstream.next_in = NULL;
-      png_ptr->zstream.avail_in = 0;
-      png_ptr->zstream.next_out = NULL;
-      png_ptr->zstream.avail_out = 0;
-
-      /* Now initialize if required, setting the new parameters, otherwise just
-       * to a simple reset to the previous parameters.
-       */
-      if (png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED)
-         ret = deflateReset(&png_ptr->zstream);
-
-      else
-      {
-         ret = deflateInit2(&png_ptr->zstream, level, method, windowBits,
-            memLevel, strategy);
-
-         if (ret == Z_OK)
-            png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
-      }
-
-      /* The return code is from either deflateReset or deflateInit2; they have
-       * pretty much the same set of error codes.
-       */
-      if (ret == Z_OK)
-         png_ptr->zowner = owner;
-
-      else
-         png_zstream_error(png_ptr, ret);
-
-      return ret;
-   }
-}
-
-/* Clean up (or trim) a linked list of compression buffers. */
-void /* PRIVATE */
-png_free_buffer_list(png_structrp png_ptr, png_compression_bufferp *listp)
-{
-   png_compression_bufferp list = *listp;
-
-   if (list != NULL)
-   {
-      *listp = NULL;
-
-      do
-      {
-         png_compression_bufferp next = list->next;
-
-         png_free(png_ptr, list);
-         list = next;
-      }
-      while (list != NULL);
-   }
-}
-
-#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
-/* This pair of functions encapsulates the operation of (a) compressing a
- * text string, and (b) issuing it later as a series of chunk data writes.
- * The compression_state structure is shared context for these functions
- * set up by the caller to allow access to the relevant local variables.
- *
- * compression_buffer (new in 1.6.0) is just a linked list of zbuffer_size
- * temporary buffers.  From 1.6.0 it is retained in png_struct so that it will
- * be correctly freed in the event of a write error (previous implementations
- * just leaked memory.)
- */
-typedef struct
-{
-   png_const_bytep      input;        /* The uncompressed input data */
-   png_alloc_size_t     input_len;    /* Its length */
-   png_uint_32          output_len;   /* Final compressed length */
-   png_byte             output[1024]; /* First block of output */
-} compression_state;
-
-static void
-png_text_compress_init(compression_state *comp, png_const_bytep input,
-   png_alloc_size_t input_len)
-{
-   comp->input = input;
-   comp->input_len = input_len;
-   comp->output_len = 0;
-}
-
-/* Compress the data in the compression state input */
-static int
-png_text_compress(png_structrp png_ptr, png_uint_32 chunk_name,
-   compression_state *comp, png_uint_32 prefix_len)
-{
-   int ret;
-
-   /* To find the length of the output it is necessary to first compress the
-    * input, the result is buffered rather than using the two-pass algorithm
-    * that is used on the inflate side; deflate is assumed to be slower and a
-    * PNG writer is assumed to have more memory available than a PNG reader.
-    *
-    * IMPLEMENTATION NOTE: the zlib API deflateBound() can be used to find an
-    * upper limit on the output size, but it is always bigger than the input
-    * size so it is likely to be more efficient to use this linked-list
-    * approach.
-    */
-   ret = png_deflate_claim(png_ptr, chunk_name, comp->input_len);
-
-   if (ret != Z_OK)
-      return ret;
-
-   /* Set up the compression buffers, we need a loop here to avoid overflowing a
-    * uInt.  Use ZLIB_IO_MAX to limit the input.  The output is always limited
-    * by the output buffer size, so there is no need to check that.  Since this
-    * is ANSI-C we know that an 'int', hence a uInt, is always at least 16 bits
-    * in size.
-    */
-   {
-      png_compression_bufferp *end = &png_ptr->zbuffer_list;
-      png_alloc_size_t input_len = comp->input_len; /* may be zero! */
-      png_uint_32 output_len;
-
-      /* zlib updates these for us: */
-      png_ptr->zstream.next_in = PNGZ_INPUT_CAST(comp->input);
-      png_ptr->zstream.avail_in = 0; /* Set below */
-      png_ptr->zstream.next_out = comp->output;
-      png_ptr->zstream.avail_out = (sizeof comp->output);
-
-      output_len = png_ptr->zstream.avail_out;
-
-      do
-      {
-         uInt avail_in = ZLIB_IO_MAX;
-
-         if (avail_in > input_len)
-            avail_in = (uInt)input_len;
-
-         input_len -= avail_in;
-
-         png_ptr->zstream.avail_in = avail_in;
-
-         if (png_ptr->zstream.avail_out == 0)
-         {
-            png_compression_buffer *next;
-
-            /* Chunk data is limited to 2^31 bytes in length, so the prefix
-             * length must be counted here.
-             */
-            if (output_len + prefix_len > PNG_UINT_31_MAX)
-            {
-               ret = Z_MEM_ERROR;
-               break;
-            }
-
-            /* Need a new (malloc'ed) buffer, but there may be one present
-             * already.
-             */
-            next = *end;
-            if (next == NULL)
-            {
-               next = png_voidcast(png_compression_bufferp, png_malloc_base
-                  (png_ptr, PNG_COMPRESSION_BUFFER_SIZE(png_ptr)));
-
-               if (next == NULL)
-               {
-                  ret = Z_MEM_ERROR;
-                  break;
-               }
-
-               /* Link in this buffer (so that it will be freed later) */
-               next->next = NULL;
-               *end = next;
-            }
-
-            png_ptr->zstream.next_out = next->output;
-            png_ptr->zstream.avail_out = png_ptr->zbuffer_size;
-            output_len += png_ptr->zstream.avail_out;
-
-            /* Move 'end' to the next buffer pointer. */
-            end = &next->next;
-         }
-
-         /* Compress the data */
-         ret = deflate(&png_ptr->zstream,
-            input_len > 0 ? Z_NO_FLUSH : Z_FINISH);
-
-         /* Claw back input data that was not consumed (because avail_in is
-          * reset above every time round the loop).
-          */
-         input_len += png_ptr->zstream.avail_in;
-         png_ptr->zstream.avail_in = 0; /* safety */
-      }
-      while (ret == Z_OK);
-
-      /* There may be some space left in the last output buffer, this needs to
-       * be subtracted from output_len.
-       */
-      output_len -= png_ptr->zstream.avail_out;
-      png_ptr->zstream.avail_out = 0; /* safety */
-      comp->output_len = output_len;
-
-      /* Now double check the output length, put in a custom message if it is
-       * too long.  Otherwise ensure the z_stream::msg pointer is set to
-       * something.
-       */
-      if (output_len + prefix_len >= PNG_UINT_31_MAX)
-      {
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("compressed data too long");
-         ret = Z_MEM_ERROR;
-      }
-
-      else
-         png_zstream_error(png_ptr, ret);
-
-      /* Reset zlib for another zTXt/iTXt or image data */
-      png_ptr->zowner = 0;
-
-      /* The only success case is Z_STREAM_END, input_len must be 0, if not this
-       * is an internal error.
-       */
-      if (ret == Z_STREAM_END && input_len == 0)
-      {
-         /* Fix up the deflate header, if required */
-         optimize_cmf(comp->output, comp->input_len);
-
-         /* But Z_OK is returned, not Z_STREAM_END; this allows the claim
-          * function above to return Z_STREAM_END on an error (though it never
-          * does in the current versions of zlib.)
-          */
-         return Z_OK;
-      }
-
-      else
-         return ret;
-   }
-}
-
-/* Ship the compressed text out via chunk writes */
-static void
-png_write_compressed_data_out(png_structrp png_ptr, compression_state *comp)
-{
-   png_uint_32 output_len = comp->output_len;
-   png_const_bytep output = comp->output;
-   png_uint_32 avail = (sizeof comp->output);
-   png_compression_buffer *next = png_ptr->zbuffer_list;
-
-   for (;;)
-   {
-      if (avail > output_len)
-         avail = output_len;
-
-      png_write_chunk_data(png_ptr, output, avail);
-
-      output_len -= avail;
-
-      if (output_len == 0 || next == NULL)
-         break;
-
-      avail = png_ptr->zbuffer_size;
-      output = next->output;
-      next = next->next;
-   }
-
-   /* This is an internal error; 'next' must have been NULL! */
-   if (output_len > 0)
-      png_error(png_ptr, "error writing ancillary chunked compressed data");
-}
-#endif /* PNG_WRITE_COMPRESSED_TEXT_SUPPORTED */
-
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
-    defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
-/* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification,
- * and if invalid, correct the keyword rather than discarding the entire
- * chunk.  The PNG 1.0 specification requires keywords 1-79 characters in
- * length, forbids leading or trailing whitespace, multiple internal spaces,
- * and the non-break space (0x80) from ISO 8859-1.  Returns keyword length.
- *
- * The 'new_key' buffer must be 80 characters in size (for the keyword plus a
- * trailing '\0').  If this routine returns 0 then there was no keyword, or a
- * valid one could not be generated, and the caller must png_error.
- */
-static png_uint_32
-png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
-{
-   png_const_charp orig_key = key;
-   png_uint_32 key_len = 0;
-   int bad_character = 0;
-   int space = 1;
-
-   png_debug(1, "in png_check_keyword");
-
-   if (key == NULL)
-   {
-      *new_key = 0;
-      return 0;
-   }
-
-   while (*key && key_len < 79)
-   {
-      png_byte ch = (png_byte)(0xff & *key++);
-
-      if ((ch > 32 && ch <= 126) || (ch >= 161 /*&& ch <= 255*/))
-         *new_key++ = ch, ++key_len, space = 0;
-
-      else if (!space)
-      {
-         /* A space or an invalid character when one wasn't seen immediately
-          * before; output just a space.
-          */
-         *new_key++ = 32, ++key_len, space = 1;
-
-         /* If the character was not a space then it is invalid. */
-         if (ch != 32)
-            bad_character = ch;
-      }
-
-      else if (!bad_character)
-         bad_character = ch; /* just skip it, record the first error */
-   }
-
-   if (key_len > 0 && space) /* trailing space */
-   {
-      --key_len, --new_key;
-      if (!bad_character)
-         bad_character = 32;
-   }
-
-   /* Terminate the keyword */
-   *new_key = 0;
-
-   if (key_len == 0)
-      return 0;
-
-   /* Try to only output one warning per keyword: */
-   if (*key) /* keyword too long */
-      png_warning(png_ptr, "keyword truncated");
-
-   else if (bad_character)
-   {
-      PNG_WARNING_PARAMETERS(p)
-
-      png_warning_parameter(p, 1, orig_key);
-      png_warning_parameter_signed(p, 2, PNG_NUMBER_FORMAT_02x, bad_character);
-
-      png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x at 2'");
-   }
-
-   return key_len;
-}
-#endif
-
-/* Write the IHDR chunk, and update the png_struct with the necessary
- * information.  Note that the rest of this code depends upon this
- * information being correct.
- */
-void /* PRIVATE */
-png_write_IHDR(png_structrp png_ptr, png_uint_32 width, png_uint_32 height,
-    int bit_depth, int color_type, int compression_type, int filter_type,
-    int interlace_type)
-{
-   png_byte buf[13]; /* Buffer to store the IHDR info */
-
-   png_debug(1, "in png_write_IHDR");
-
-   /* Check that we have valid input data from the application info */
-   switch (color_type)
-   {
-      case PNG_COLOR_TYPE_GRAY:
-         switch (bit_depth)
-         {
-            case 1:
-            case 2:
-            case 4:
-            case 8:
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-            case 16:
-#endif
-               png_ptr->channels = 1; break;
-
-            default:
-               png_error(png_ptr,
-                   "Invalid bit depth for grayscale image");
-         }
-         break;
-
-      case PNG_COLOR_TYPE_RGB:
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         if (bit_depth != 8 && bit_depth != 16)
-#else
-         if (bit_depth != 8)
-#endif
-            png_error(png_ptr, "Invalid bit depth for RGB image");
-
-         png_ptr->channels = 3;
-         break;
-
-      case PNG_COLOR_TYPE_PALETTE:
-         switch (bit_depth)
-         {
-            case 1:
-            case 2:
-            case 4:
-            case 8:
-               png_ptr->channels = 1;
-               break;
-
-            default:
-               png_error(png_ptr, "Invalid bit depth for paletted image");
-         }
-         break;
-
-      case PNG_COLOR_TYPE_GRAY_ALPHA:
-         if (bit_depth != 8 && bit_depth != 16)
-            png_error(png_ptr, "Invalid bit depth for grayscale+alpha image");
-
-         png_ptr->channels = 2;
-         break;
-
-      case PNG_COLOR_TYPE_RGB_ALPHA:
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         if (bit_depth != 8 && bit_depth != 16)
-#else
-         if (bit_depth != 8)
-#endif
-            png_error(png_ptr, "Invalid bit depth for RGBA image");
-
-         png_ptr->channels = 4;
-         break;
-
-      default:
-         png_error(png_ptr, "Invalid image color type specified");
-   }
-
-   if (compression_type != PNG_COMPRESSION_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Invalid compression type specified");
-      compression_type = PNG_COMPRESSION_TYPE_BASE;
-   }
-
-   /* Write filter_method 64 (intrapixel differencing) only if
-    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
-    * 2. Libpng did not write a PNG signature (this filter_method is only
-    *    used in PNG datastreams that are embedded in MNG datastreams) and
-    * 3. The application called png_permit_mng_features with a mask that
-    *    included PNG_FLAG_MNG_FILTER_64 and
-    * 4. The filter_method is 64 and
-    * 5. The color_type is RGB or RGBA
-    */
-   if (
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-       !((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
-       ((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
-       (color_type == PNG_COLOR_TYPE_RGB ||
-        color_type == PNG_COLOR_TYPE_RGB_ALPHA) &&
-       (filter_type == PNG_INTRAPIXEL_DIFFERENCING)) &&
-#endif
-       filter_type != PNG_FILTER_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Invalid filter type specified");
-      filter_type = PNG_FILTER_TYPE_BASE;
-   }
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   if (interlace_type != PNG_INTERLACE_NONE &&
-       interlace_type != PNG_INTERLACE_ADAM7)
-   {
-      png_warning(png_ptr, "Invalid interlace type specified");
-      interlace_type = PNG_INTERLACE_ADAM7;
-   }
-#else
-   interlace_type=PNG_INTERLACE_NONE;
-#endif
-
-   /* Save the relevent information */
-   png_ptr->bit_depth = (png_byte)bit_depth;
-   png_ptr->color_type = (png_byte)color_type;
-   png_ptr->interlaced = (png_byte)interlace_type;
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   png_ptr->filter_type = (png_byte)filter_type;
-#endif
-   png_ptr->compression_type = (png_byte)compression_type;
-   png_ptr->width = width;
-   png_ptr->height = height;
-
-   png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels);
-   png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
-   /* Set the usr info, so any transformations can modify it */
-   png_ptr->usr_width = png_ptr->width;
-   png_ptr->usr_bit_depth = png_ptr->bit_depth;
-   png_ptr->usr_channels = png_ptr->channels;
-
-   /* Pack the header information into the buffer */
-   png_save_uint_32(buf, width);
-   png_save_uint_32(buf + 4, height);
-   buf[8] = (png_byte)bit_depth;
-   buf[9] = (png_byte)color_type;
-   buf[10] = (png_byte)compression_type;
-   buf[11] = (png_byte)filter_type;
-   buf[12] = (png_byte)interlace_type;
-
-   /* Write the chunk */
-   png_write_complete_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
-
-   if (!(png_ptr->do_filter))
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
-          png_ptr->bit_depth < 8)
-         png_ptr->do_filter = PNG_FILTER_NONE;
-
-      else
-         png_ptr->do_filter = PNG_ALL_FILTERS;
-   }
-
-   png_ptr->mode = PNG_HAVE_IHDR; /* not READY_FOR_ZTXT */
-}
-
-/* Write the palette.  We are careful not to trust png_color to be in the
- * correct order for PNG, so people can redefine it to any convenient
- * structure.
- */
-void /* PRIVATE */
-png_write_PLTE(png_structrp png_ptr, png_const_colorp palette,
-    png_uint_32 num_pal)
-{
-   png_uint_32 i;
-   png_const_colorp pal_ptr;
-   png_byte buf[3];
-
-   png_debug(1, "in png_write_PLTE");
-
-   if ((
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-       !(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) &&
-#endif
-       num_pal == 0) || num_pal > 256)
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         png_error(png_ptr, "Invalid number of colors in palette");
-      }
-
-      else
-      {
-         png_warning(png_ptr, "Invalid number of colors in palette");
-         return;
-      }
-   }
-
-   if (!(png_ptr->color_type&PNG_COLOR_MASK_COLOR))
-   {
-      png_warning(png_ptr,
-          "Ignoring request to write a PLTE chunk in grayscale PNG");
-
-      return;
-   }
-
-   png_ptr->num_palette = (png_uint_16)num_pal;
-   png_debug1(3, "num_palette = %d", png_ptr->num_palette);
-
-   png_write_chunk_header(png_ptr, png_PLTE, (png_uint_32)(num_pal * 3));
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-
-   for (i = 0, pal_ptr = palette; i < num_pal; i++, pal_ptr++)
-   {
-      buf[0] = pal_ptr->red;
-      buf[1] = pal_ptr->green;
-      buf[2] = pal_ptr->blue;
-      png_write_chunk_data(png_ptr, buf, (png_size_t)3);
-   }
-
-#else
-   /* This is a little slower but some buggy compilers need to do this
-    * instead
-    */
-   pal_ptr=palette;
-
-   for (i = 0; i < num_pal; i++)
-   {
-      buf[0] = pal_ptr[i].red;
-      buf[1] = pal_ptr[i].green;
-      buf[2] = pal_ptr[i].blue;
-      png_write_chunk_data(png_ptr, buf, (png_size_t)3);
-   }
-
-#endif
-   png_write_chunk_end(png_ptr);
-   png_ptr->mode |= PNG_HAVE_PLTE;
-}
-
-/* This is similar to png_text_compress, above, except that it does not require
- * all of the data at once and, instead of buffering the compressed result,
- * writes it as IDAT chunks.  Unlike png_text_compress it *can* png_error out
- * because it calls the write interface.  As a result it does its own error
- * reporting and does not return an error code.  In the event of error it will
- * just call png_error.  The input data length may exceed 32-bits.  The 'flush'
- * parameter is exactly the same as that to deflate, with the following
- * meanings:
- *
- * Z_NO_FLUSH: normal incremental output of compressed data
- * Z_SYNC_FLUSH: do a SYNC_FLUSH, used by png_write_flush
- * Z_FINISH: this is the end of the input, do a Z_FINISH and clean up
- *
- * The routine manages the acquire and release of the png_ptr->zstream by
- * checking and (at the end) clearing png_ptr->zowner, it does some sanity
- * checks on the 'mode' flags while doing this.
- */
-void /* PRIVATE */
-png_compress_IDAT(png_structrp png_ptr, png_const_bytep input,
-   png_alloc_size_t input_len, int flush)
-{
-   if (png_ptr->zowner != png_IDAT)
-   {
-      /* First time.   Ensure we have a temporary buffer for compression and
-       * trim the buffer list if it has more than one entry to free memory.
-       * If 'WRITE_COMPRESSED_TEXT' is not set the list will never have been
-       * created at this point, but the check here is quick and safe.
-       */
-      if (png_ptr->zbuffer_list == NULL)
-      {
-         png_ptr->zbuffer_list = png_voidcast(png_compression_bufferp,
-            png_malloc(png_ptr, PNG_COMPRESSION_BUFFER_SIZE(png_ptr)));
-         png_ptr->zbuffer_list->next = NULL;
-      }
-
-      else
-         png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list->next);
-
-      /* It is a terminal error if we can't claim the zstream. */
-      if (png_deflate_claim(png_ptr, png_IDAT, png_image_size(png_ptr)) != Z_OK)
-         png_error(png_ptr, png_ptr->zstream.msg);
-
-      /* The output state is maintained in png_ptr->zstream, so it must be
-       * initialized here after the claim.
-       */
-      png_ptr->zstream.next_out = png_ptr->zbuffer_list->output;
-      png_ptr->zstream.avail_out = png_ptr->zbuffer_size;
-   }
-
-   /* Now loop reading and writing until all the input is consumed or an error
-    * terminates the operation.  The _out values are maintained across calls to
-    * this function, but the input must be reset each time.
-    */
-   png_ptr->zstream.next_in = PNGZ_INPUT_CAST(input);
-   png_ptr->zstream.avail_in = 0; /* set below */
-   for (;;)
-   {
-      int ret;
-
-      /* INPUT: from the row data */
-      uInt avail = ZLIB_IO_MAX;
-
-      if (avail > input_len)
-         avail = (uInt)input_len; /* safe because of the check */
-
-      png_ptr->zstream.avail_in = avail;
-      input_len -= avail;
-
-      ret = deflate(&png_ptr->zstream, input_len > 0 ? Z_NO_FLUSH : flush);
-
-      /* Include as-yet unconsumed input */
-      input_len += png_ptr->zstream.avail_in;
-      png_ptr->zstream.avail_in = 0;
-
-      /* OUTPUT: write complete IDAT chunks when avail_out drops to zero, note
-       * that these two zstream fields are preserved across the calls, therefore
-       * there is no need to set these up on entry to the loop.
-       */
-      if (png_ptr->zstream.avail_out == 0)
-      {
-         png_bytep data = png_ptr->zbuffer_list->output;
-         uInt size = png_ptr->zbuffer_size;
-
-         /* Write an IDAT containing the data then reset the buffer.  The
-          * first IDAT may need deflate header optimization.
-          */
-#        ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-            if (!(png_ptr->mode & PNG_HAVE_IDAT) &&
-               png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE)
-               optimize_cmf(data, png_image_size(png_ptr));
-#        endif
-
-         png_write_complete_chunk(png_ptr, png_IDAT, data, size);
-         png_ptr->mode |= PNG_HAVE_IDAT;
-
-         png_ptr->zstream.next_out = data;
-         png_ptr->zstream.avail_out = size;
-
-         /* For SYNC_FLUSH or FINISH it is essential to keep calling zlib with
-          * the same flush parameter until it has finished output, for NO_FLUSH
-          * it doesn't matter.
-          */
-         if (ret == Z_OK && flush != Z_NO_FLUSH)
-            continue;
-      }
-
-      /* The order of these checks doesn't matter much; it just effect which
-       * possible error might be detected if multiple things go wrong at once.
-       */
-      if (ret == Z_OK) /* most likely return code! */
-      {
-         /* If all the input has been consumed then just return.  If Z_FINISH
-          * was used as the flush parameter something has gone wrong if we get
-          * here.
-          */
-         if (input_len == 0)
-         {
-            if (flush == Z_FINISH)
-               png_error(png_ptr, "Z_OK on Z_FINISH with output space");
-
-            return;
-         }
-      }
-
-      else if (ret == Z_STREAM_END && flush == Z_FINISH)
-      {
-         /* This is the end of the IDAT data; any pending output must be
-          * flushed.  For small PNG files we may still be at the beginning.
-          */
-         png_bytep data = png_ptr->zbuffer_list->output;
-         uInt size = png_ptr->zbuffer_size - png_ptr->zstream.avail_out;
-
-#        ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-            if (!(png_ptr->mode & PNG_HAVE_IDAT) &&
-               png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE)
-               optimize_cmf(data, png_image_size(png_ptr));
-#        endif
-
-         png_write_complete_chunk(png_ptr, png_IDAT, data, size);
-         png_ptr->zstream.avail_out = 0;
-         png_ptr->zstream.next_out = NULL;
-         png_ptr->mode |= PNG_HAVE_IDAT | PNG_AFTER_IDAT;
-
-         png_ptr->zowner = 0; /* Release the stream */
-         return;
-      }
-
-      else
-      {
-         /* This is an error condition. */
-         png_zstream_error(png_ptr, ret);
-         png_error(png_ptr, png_ptr->zstream.msg);
-      }
-   }
-}
-
-/* Write an IEND chunk */
-void /* PRIVATE */
-png_write_IEND(png_structrp png_ptr)
-{
-   png_debug(1, "in png_write_IEND");
-
-   png_write_complete_chunk(png_ptr, png_IEND, NULL, (png_size_t)0);
-   png_ptr->mode |= PNG_HAVE_IEND;
-}
-
-#ifdef PNG_WRITE_gAMA_SUPPORTED
-/* Write a gAMA chunk */
-void /* PRIVATE */
-png_write_gAMA_fixed(png_structrp png_ptr, png_fixed_point file_gamma)
-{
-   png_byte buf[4];
-
-   png_debug(1, "in png_write_gAMA");
-
-   /* file_gamma is saved in 1/100,000ths */
-   png_save_uint_32(buf, (png_uint_32)file_gamma);
-   png_write_complete_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
-}
-#endif
-
-#ifdef PNG_WRITE_sRGB_SUPPORTED
-/* Write a sRGB chunk */
-void /* PRIVATE */
-png_write_sRGB(png_structrp png_ptr, int srgb_intent)
-{
-   png_byte buf[1];
-
-   png_debug(1, "in png_write_sRGB");
-
-   if (srgb_intent >= PNG_sRGB_INTENT_LAST)
-      png_warning(png_ptr,
-          "Invalid sRGB rendering intent specified");
-
-   buf[0]=(png_byte)srgb_intent;
-   png_write_complete_chunk(png_ptr, png_sRGB, buf, (png_size_t)1);
-}
-#endif
-
-#ifdef PNG_WRITE_iCCP_SUPPORTED
-/* Write an iCCP chunk */
-void /* PRIVATE */
-png_write_iCCP(png_structrp png_ptr, png_const_charp name,
-    png_const_bytep profile)
-{
-   png_uint_32 name_len;
-   png_uint_32 profile_len;
-   png_byte new_name[81]; /* 1 byte for the compression byte */
-   compression_state comp;
-
-   png_debug(1, "in png_write_iCCP");
-
-   /* These are all internal problems: the profile should have been checked
-    * before when it was stored.
-    */
-   if (profile == NULL)
-      png_error(png_ptr, "No profile for iCCP chunk"); /* internal error */
-
-   profile_len = png_get_uint_32(profile);
-
-   if (profile_len < 132)
-      png_error(png_ptr, "ICC profile too short");
-
-   if (profile_len & 0x03)
-      png_error(png_ptr, "ICC profile length invalid (not a multiple of 4)");
-
-   {
-      png_uint_32 embedded_profile_len = png_get_uint_32(profile);
-
-      if (profile_len != embedded_profile_len)
-         png_error(png_ptr, "Profile length does not match profile");
-   }
-
-   name_len = png_check_keyword(png_ptr, name, new_name);
-
-   if (name_len == 0)
-      png_error(png_ptr, "iCCP: invalid keyword");
-
-   new_name[++name_len] = PNG_COMPRESSION_TYPE_BASE;
-
-   /* Make sure we include the NULL after the name and the compression type */
-   ++name_len;
-
-   png_text_compress_init(&comp, profile, profile_len);
-
-   /* Allow for keyword terminator and compression byte */
-   if (png_text_compress(png_ptr, png_iCCP, &comp, name_len) != Z_OK)
-      png_error(png_ptr, png_ptr->zstream.msg);
-
-   png_write_chunk_header(png_ptr, png_iCCP, name_len + comp.output_len);
-
-   png_write_chunk_data(png_ptr, new_name, name_len);
-
-   png_write_compressed_data_out(png_ptr, &comp);
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_sPLT_SUPPORTED
-/* Write a sPLT chunk */
-void /* PRIVATE */
-png_write_sPLT(png_structrp png_ptr, png_const_sPLT_tp spalette)
-{
-   png_uint_32 name_len;
-   png_byte new_name[80];
-   png_byte entrybuf[10];
-   png_size_t entry_size = (spalette->depth == 8 ? 6 : 10);
-   png_size_t palette_size = entry_size * spalette->nentries;
-   png_sPLT_entryp ep;
-#ifndef PNG_POINTER_INDEXING_SUPPORTED
-   int i;
-#endif
-
-   png_debug(1, "in png_write_sPLT");
-
-   name_len = png_check_keyword(png_ptr, spalette->name, new_name);
-
-   if (name_len == 0)
-      png_error(png_ptr, "sPLT: invalid keyword");
-
-   /* Make sure we include the NULL after the name */
-   png_write_chunk_header(png_ptr, png_sPLT,
-       (png_uint_32)(name_len + 2 + palette_size));
-
-   png_write_chunk_data(png_ptr, (png_bytep)new_name,
-       (png_size_t)(name_len + 1));
-
-   png_write_chunk_data(png_ptr, &spalette->depth, (png_size_t)1);
-
-   /* Loop through each palette entry, writing appropriately */
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   for (ep = spalette->entries; ep<spalette->entries + spalette->nentries; ep++)
-   {
-      if (spalette->depth == 8)
-      {
-         entrybuf[0] = (png_byte)ep->red;
-         entrybuf[1] = (png_byte)ep->green;
-         entrybuf[2] = (png_byte)ep->blue;
-         entrybuf[3] = (png_byte)ep->alpha;
-         png_save_uint_16(entrybuf + 4, ep->frequency);
-      }
-
-      else
-      {
-         png_save_uint_16(entrybuf + 0, ep->red);
-         png_save_uint_16(entrybuf + 2, ep->green);
-         png_save_uint_16(entrybuf + 4, ep->blue);
-         png_save_uint_16(entrybuf + 6, ep->alpha);
-         png_save_uint_16(entrybuf + 8, ep->frequency);
-      }
-
-      png_write_chunk_data(png_ptr, entrybuf, entry_size);
-   }
-#else
-   ep=spalette->entries;
-   for (i = 0; i>spalette->nentries; i++)
-   {
-      if (spalette->depth == 8)
-      {
-         entrybuf[0] = (png_byte)ep[i].red;
-         entrybuf[1] = (png_byte)ep[i].green;
-         entrybuf[2] = (png_byte)ep[i].blue;
-         entrybuf[3] = (png_byte)ep[i].alpha;
-         png_save_uint_16(entrybuf + 4, ep[i].frequency);
-      }
-
-      else
-      {
-         png_save_uint_16(entrybuf + 0, ep[i].red);
-         png_save_uint_16(entrybuf + 2, ep[i].green);
-         png_save_uint_16(entrybuf + 4, ep[i].blue);
-         png_save_uint_16(entrybuf + 6, ep[i].alpha);
-         png_save_uint_16(entrybuf + 8, ep[i].frequency);
-      }
-
-      png_write_chunk_data(png_ptr, entrybuf, entry_size);
-   }
-#endif
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_sBIT_SUPPORTED
-/* Write the sBIT chunk */
-void /* PRIVATE */
-png_write_sBIT(png_structrp png_ptr, png_const_color_8p sbit, int color_type)
-{
-   png_byte buf[4];
-   png_size_t size;
-
-   png_debug(1, "in png_write_sBIT");
-
-   /* Make sure we don't depend upon the order of PNG_COLOR_8 */
-   if (color_type & PNG_COLOR_MASK_COLOR)
-   {
-      png_byte maxbits;
-
-      maxbits = (png_byte)(color_type==PNG_COLOR_TYPE_PALETTE ? 8 :
-          png_ptr->usr_bit_depth);
-
-      if (sbit->red == 0 || sbit->red > maxbits ||
-          sbit->green == 0 || sbit->green > maxbits ||
-          sbit->blue == 0 || sbit->blue > maxbits)
-      {
-         png_warning(png_ptr, "Invalid sBIT depth specified");
-         return;
-      }
-
-      buf[0] = sbit->red;
-      buf[1] = sbit->green;
-      buf[2] = sbit->blue;
-      size = 3;
-   }
-
-   else
-   {
-      if (sbit->gray == 0 || sbit->gray > png_ptr->usr_bit_depth)
-      {
-         png_warning(png_ptr, "Invalid sBIT depth specified");
-         return;
-      }
-
-      buf[0] = sbit->gray;
-      size = 1;
-   }
-
-   if (color_type & PNG_COLOR_MASK_ALPHA)
-   {
-      if (sbit->alpha == 0 || sbit->alpha > png_ptr->usr_bit_depth)
-      {
-         png_warning(png_ptr, "Invalid sBIT depth specified");
-         return;
-      }
-
-      buf[size++] = sbit->alpha;
-   }
-
-   png_write_complete_chunk(png_ptr, png_sBIT, buf, size);
-}
-#endif
-
-#ifdef PNG_WRITE_cHRM_SUPPORTED
-/* Write the cHRM chunk */
-void /* PRIVATE */
-png_write_cHRM_fixed(png_structrp png_ptr, const png_xy *xy)
-{
-   png_byte buf[32];
-
-   png_debug(1, "in png_write_cHRM");
-
-   /* Each value is saved in 1/100,000ths */
-   png_save_int_32(buf,      xy->whitex);
-   png_save_int_32(buf +  4, xy->whitey);
-
-   png_save_int_32(buf +  8, xy->redx);
-   png_save_int_32(buf + 12, xy->redy);
-
-   png_save_int_32(buf + 16, xy->greenx);
-   png_save_int_32(buf + 20, xy->greeny);
-
-   png_save_int_32(buf + 24, xy->bluex);
-   png_save_int_32(buf + 28, xy->bluey);
-
-   png_write_complete_chunk(png_ptr, png_cHRM, buf, 32);
-}
-#endif
-
-#ifdef PNG_WRITE_tRNS_SUPPORTED
-/* Write the tRNS chunk */
-void /* PRIVATE */
-png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
-    png_const_color_16p tran, int num_trans, int color_type)
-{
-   png_byte buf[6];
-
-   png_debug(1, "in png_write_tRNS");
-
-   if (color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (num_trans <= 0 || num_trans > (int)png_ptr->num_palette)
-      {
-         png_app_warning(png_ptr,
-             "Invalid number of transparent colors specified");
-         return;
-      }
-
-      /* Write the chunk out as it is */
-      png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha,
-         (png_size_t)num_trans);
-   }
-
-   else if (color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      /* One 16 bit value */
-      if (tran->gray >= (1 << png_ptr->bit_depth))
-      {
-         png_app_warning(png_ptr,
-             "Ignoring attempt to write tRNS chunk out-of-range for bit_depth");
-
-         return;
-      }
-
-      png_save_uint_16(buf, tran->gray);
-      png_write_complete_chunk(png_ptr, png_tRNS, buf, (png_size_t)2);
-   }
-
-   else if (color_type == PNG_COLOR_TYPE_RGB)
-   {
-      /* Three 16 bit values */
-      png_save_uint_16(buf, tran->red);
-      png_save_uint_16(buf + 2, tran->green);
-      png_save_uint_16(buf + 4, tran->blue);
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-      if (png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4]))
-#else
-      if (buf[0] | buf[2] | buf[4])
-#endif
-      {
-         png_app_warning(png_ptr,
-           "Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8");
-         return;
-      }
-
-      png_write_complete_chunk(png_ptr, png_tRNS, buf, (png_size_t)6);
-   }
-
-   else
-   {
-      png_app_warning(png_ptr, "Can't write tRNS with an alpha channel");
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_bKGD_SUPPORTED
-/* Write the background chunk */
-void /* PRIVATE */
-png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
-{
-   png_byte buf[6];
-
-   png_debug(1, "in png_write_bKGD");
-
-   if (color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-          (png_ptr->num_palette ||
-          (!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) &&
-#endif
-         back->index >= png_ptr->num_palette)
-      {
-         png_warning(png_ptr, "Invalid background palette index");
-         return;
-      }
-
-      buf[0] = back->index;
-      png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)1);
-   }
-
-   else if (color_type & PNG_COLOR_MASK_COLOR)
-   {
-      png_save_uint_16(buf, back->red);
-      png_save_uint_16(buf + 2, back->green);
-      png_save_uint_16(buf + 4, back->blue);
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-      if (png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4]))
-#else
-      if (buf[0] | buf[2] | buf[4])
-#endif
-      {
-         png_warning(png_ptr,
-             "Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8");
-
-         return;
-      }
-
-      png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)6);
-   }
-
-   else
-   {
-      if (back->gray >= (1 << png_ptr->bit_depth))
-      {
-         png_warning(png_ptr,
-             "Ignoring attempt to write bKGD chunk out-of-range for bit_depth");
-
-         return;
-      }
-
-      png_save_uint_16(buf, back->gray);
-      png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)2);
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_hIST_SUPPORTED
-/* Write the histogram */
-void /* PRIVATE */
-png_write_hIST(png_structrp png_ptr, png_const_uint_16p hist, int num_hist)
-{
-   int i;
-   png_byte buf[3];
-
-   png_debug(1, "in png_write_hIST");
-
-   if (num_hist > (int)png_ptr->num_palette)
-   {
-      png_debug2(3, "num_hist = %d, num_palette = %d", num_hist,
-          png_ptr->num_palette);
-
-      png_warning(png_ptr, "Invalid number of histogram entries specified");
-      return;
-   }
-
-   png_write_chunk_header(png_ptr, png_hIST, (png_uint_32)(num_hist * 2));
-
-   for (i = 0; i < num_hist; i++)
-   {
-      png_save_uint_16(buf, hist[i]);
-      png_write_chunk_data(png_ptr, buf, (png_size_t)2);
-   }
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-/* Write a tEXt chunk */
-void /* PRIVATE */
-png_write_tEXt(png_structrp png_ptr, png_const_charp key, png_const_charp text,
-    png_size_t text_len)
-{
-   png_uint_32 key_len;
-   png_byte new_key[80];
-
-   png_debug(1, "in png_write_tEXt");
-
-   key_len = png_check_keyword(png_ptr, key, new_key);
-
-   if (key_len == 0)
-      png_error(png_ptr, "tEXt: invalid keyword");
-
-   if (text == NULL || *text == '\0')
-      text_len = 0;
-
-   else
-      text_len = strlen(text);
-
-   if (text_len > PNG_UINT_31_MAX - (key_len+1))
-      png_error(png_ptr, "tEXt: text too long");
-
-   /* Make sure we include the 0 after the key */
-   png_write_chunk_header(png_ptr, png_tEXt,
-       (png_uint_32)/*checked above*/(key_len + text_len + 1));
-   /*
-    * We leave it to the application to meet PNG-1.0 requirements on the
-    * contents of the text.  PNG-1.0 through PNG-1.2 discourage the use of
-    * any non-Latin-1 characters except for NEWLINE.  ISO PNG will forbid them.
-    * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
-    */
-   png_write_chunk_data(png_ptr, new_key, key_len + 1);
-
-   if (text_len)
-      png_write_chunk_data(png_ptr, (png_const_bytep)text, text_len);
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-/* Write a compressed text chunk */
-void /* PRIVATE */
-png_write_zTXt(png_structrp png_ptr, png_const_charp key, png_const_charp text,
-    png_size_t text_len, int compression)
-{
-   png_uint_32 key_len;
-   png_byte new_key[81];
-   compression_state comp;
-
-   png_debug(1, "in png_write_zTXt");
-   PNG_UNUSED(text_len) /* Always use strlen */
-
-   if (compression == PNG_TEXT_COMPRESSION_NONE)
-   {
-      png_write_tEXt(png_ptr, key, text, 0);
-      return;
-   }
-
-   if (compression != PNG_TEXT_COMPRESSION_zTXt)
-      png_error(png_ptr, "zTXt: invalid compression type");
-
-   key_len = png_check_keyword(png_ptr, key, new_key);
-
-   if (key_len == 0)
-      png_error(png_ptr, "zTXt: invalid keyword");
-
-   /* Add the compression method and 1 for the keyword separator. */
-   new_key[++key_len] = PNG_COMPRESSION_TYPE_BASE;
-   ++key_len;
-
-   /* Compute the compressed data; do it now for the length */
-   png_text_compress_init(&comp, (png_const_bytep)text,
-      text == NULL ? 0 : strlen(text));
-
-   if (png_text_compress(png_ptr, png_zTXt, &comp, key_len) != Z_OK)
-      png_error(png_ptr, png_ptr->zstream.msg);
-
-   /* Write start of chunk */
-   png_write_chunk_header(png_ptr, png_zTXt, key_len + comp.output_len);
-
-   /* Write key */
-   png_write_chunk_data(png_ptr, new_key, key_len);
-
-   /* Write the compressed data */
-   png_write_compressed_data_out(png_ptr, &comp);
-
-   /* Close the chunk */
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-/* Write an iTXt chunk */
-void /* PRIVATE */
-png_write_iTXt(png_structrp png_ptr, int compression, png_const_charp key,
-    png_const_charp lang, png_const_charp lang_key, png_const_charp text)
-{
-   png_uint_32 key_len, prefix_len;
-   png_size_t lang_len, lang_key_len;
-   png_byte new_key[82];
-   compression_state comp;
-
-   png_debug(1, "in png_write_iTXt");
-
-   key_len = png_check_keyword(png_ptr, key, new_key);
-
-   if (key_len == 0)
-      png_error(png_ptr, "iTXt: invalid keyword");
-
-   /* Set the compression flag */
-   switch (compression)
-   {
-      case PNG_ITXT_COMPRESSION_NONE:
-      case PNG_TEXT_COMPRESSION_NONE:
-         compression = new_key[++key_len] = 0; /* no compression */
-         break;
-
-      case PNG_TEXT_COMPRESSION_zTXt:
-      case PNG_ITXT_COMPRESSION_zTXt:
-         compression = new_key[++key_len] = 1; /* compressed */
-         break;
-
-      default:
-         png_error(png_ptr, "iTXt: invalid compression");
-   }
-
-   new_key[++key_len] = PNG_COMPRESSION_TYPE_BASE;
-   ++key_len; /* for the keywod separator */
-
-   /* We leave it to the application to meet PNG-1.0 requirements on the
-    * contents of the text.  PNG-1.0 through PNG-1.2 discourage the use of
-    * any non-Latin-1 characters except for NEWLINE.  ISO PNG, however,
-    * specifies that the text is UTF-8 and this really doesn't require any
-    * checking.
-    *
-    * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
-    *
-    * TODO: validate the language tag correctly (see the spec.)
-    */
-   if (lang == NULL) lang = ""; /* empty language is valid */
-   lang_len = strlen(lang)+1;
-   if (lang_key == NULL) lang_key = ""; /* may be empty */
-   lang_key_len = strlen(lang_key)+1;
-   if (text == NULL) text = ""; /* may be empty */
-
-   prefix_len = key_len;
-   if (lang_len > PNG_UINT_31_MAX-prefix_len)
-      prefix_len = PNG_UINT_31_MAX;
-   else
-      prefix_len = (png_uint_32)(prefix_len + lang_len);
-
-   if (lang_key_len > PNG_UINT_31_MAX-prefix_len)
-      prefix_len = PNG_UINT_31_MAX;
-   else
-      prefix_len = (png_uint_32)(prefix_len + lang_key_len);
-
-   png_text_compress_init(&comp, (png_const_bytep)text, strlen(text));
-
-   if (compression)
-   {
-      if (png_text_compress(png_ptr, png_iTXt, &comp, prefix_len) != Z_OK)
-         png_error(png_ptr, png_ptr->zstream.msg);
-   }
-
-   else
-   {
-      if (comp.input_len > PNG_UINT_31_MAX-prefix_len)
-         png_error(png_ptr, "iTXt: uncompressed text too long");
-   }
-
-   png_write_chunk_header(png_ptr, png_iTXt, comp.output_len + prefix_len);
-
-   png_write_chunk_data(png_ptr, new_key, key_len);
-
-   png_write_chunk_data(png_ptr, (png_const_bytep)lang, lang_len);
-
-   png_write_chunk_data(png_ptr, (png_const_bytep)lang_key, lang_key_len);
-
-   if (compression)
-      png_write_compressed_data_out(png_ptr, &comp);
-
-   else
-      png_write_chunk_data(png_ptr, (png_const_bytep)text, comp.input_len);
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_oFFs_SUPPORTED
-/* Write the oFFs chunk */
-void /* PRIVATE */
-png_write_oFFs(png_structrp png_ptr, png_int_32 x_offset, png_int_32 y_offset,
-    int unit_type)
-{
-   png_byte buf[9];
-
-   png_debug(1, "in png_write_oFFs");
-
-   if (unit_type >= PNG_OFFSET_LAST)
-      png_warning(png_ptr, "Unrecognized unit type for oFFs chunk");
-
-   png_save_int_32(buf, x_offset);
-   png_save_int_32(buf + 4, y_offset);
-   buf[8] = (png_byte)unit_type;
-
-   png_write_complete_chunk(png_ptr, png_oFFs, buf, (png_size_t)9);
-}
-#endif
-#ifdef PNG_WRITE_pCAL_SUPPORTED
-/* Write the pCAL chunk (described in the PNG extensions document) */
-void /* PRIVATE */
-png_write_pCAL(png_structrp png_ptr, png_charp purpose, png_int_32 X0,
-    png_int_32 X1, int type, int nparams, png_const_charp units,
-    png_charpp params)
-{
-   png_uint_32 purpose_len;
-   png_size_t units_len, total_len;
-   png_size_tp params_len;
-   png_byte buf[10];
-   png_byte new_purpose[80];
-   int i;
-
-   png_debug1(1, "in png_write_pCAL (%d parameters)", nparams);
-
-   if (type >= PNG_EQUATION_LAST)
-      png_error(png_ptr, "Unrecognized equation type for pCAL chunk");
-
-   purpose_len = png_check_keyword(png_ptr, purpose, new_purpose);
-
-   if (purpose_len == 0)
-      png_error(png_ptr, "pCAL: invalid keyword");
-
-   ++purpose_len; /* terminator */
-
-   png_debug1(3, "pCAL purpose length = %d", (int)purpose_len);
-   units_len = strlen(units) + (nparams == 0 ? 0 : 1);
-   png_debug1(3, "pCAL units length = %d", (int)units_len);
-   total_len = purpose_len + units_len + 10;
-
-   params_len = (png_size_tp)png_malloc(png_ptr,
-       (png_alloc_size_t)(nparams * (sizeof (png_size_t))));
-
-   /* Find the length of each parameter, making sure we don't count the
-    * null terminator for the last parameter.
-    */
-   for (i = 0; i < nparams; i++)
-   {
-      params_len[i] = strlen(params[i]) + (i == nparams - 1 ? 0 : 1);
-      png_debug2(3, "pCAL parameter %d length = %lu", i,
-          (unsigned long)params_len[i]);
-      total_len += params_len[i];
-   }
-
-   png_debug1(3, "pCAL total length = %d", (int)total_len);
-   png_write_chunk_header(png_ptr, png_pCAL, (png_uint_32)total_len);
-   png_write_chunk_data(png_ptr, new_purpose, purpose_len);
-   png_save_int_32(buf, X0);
-   png_save_int_32(buf + 4, X1);
-   buf[8] = (png_byte)type;
-   buf[9] = (png_byte)nparams;
-   png_write_chunk_data(png_ptr, buf, (png_size_t)10);
-   png_write_chunk_data(png_ptr, (png_const_bytep)units, (png_size_t)units_len);
-
-   for (i = 0; i < nparams; i++)
-   {
-      png_write_chunk_data(png_ptr, (png_const_bytep)params[i], params_len[i]);
-   }
-
-   png_free(png_ptr, params_len);
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_sCAL_SUPPORTED
-/* Write the sCAL chunk */
-void /* PRIVATE */
-png_write_sCAL_s(png_structrp png_ptr, int unit, png_const_charp width,
-    png_const_charp height)
-{
-   png_byte buf[64];
-   png_size_t wlen, hlen, total_len;
-
-   png_debug(1, "in png_write_sCAL_s");
-
-   wlen = strlen(width);
-   hlen = strlen(height);
-   total_len = wlen + hlen + 2;
-
-   if (total_len > 64)
-   {
-      png_warning(png_ptr, "Can't write sCAL (buffer too small)");
-      return;
-   }
-
-   buf[0] = (png_byte)unit;
-   memcpy(buf + 1, width, wlen + 1);      /* Append the '\0' here */
-   memcpy(buf + wlen + 2, height, hlen);  /* Do NOT append the '\0' here */
-
-   png_debug1(3, "sCAL total length = %u", (unsigned int)total_len);
-   png_write_complete_chunk(png_ptr, png_sCAL, buf, total_len);
-}
-#endif
-
-#ifdef PNG_WRITE_pHYs_SUPPORTED
-/* Write the pHYs chunk */
-void /* PRIVATE */
-png_write_pHYs(png_structrp png_ptr, png_uint_32 x_pixels_per_unit,
-    png_uint_32 y_pixels_per_unit,
-    int unit_type)
-{
-   png_byte buf[9];
-
-   png_debug(1, "in png_write_pHYs");
-
-   if (unit_type >= PNG_RESOLUTION_LAST)
-      png_warning(png_ptr, "Unrecognized unit type for pHYs chunk");
-
-   png_save_uint_32(buf, x_pixels_per_unit);
-   png_save_uint_32(buf + 4, y_pixels_per_unit);
-   buf[8] = (png_byte)unit_type;
-
-   png_write_complete_chunk(png_ptr, png_pHYs, buf, (png_size_t)9);
-}
-#endif
-
-#ifdef PNG_WRITE_tIME_SUPPORTED
-/* Write the tIME chunk.  Use either png_convert_from_struct_tm()
- * or png_convert_from_time_t(), or fill in the structure yourself.
- */
-void /* PRIVATE */
-png_write_tIME(png_structrp png_ptr, png_const_timep mod_time)
-{
-   png_byte buf[7];
-
-   png_debug(1, "in png_write_tIME");
-
-   if (mod_time->month  > 12 || mod_time->month  < 1 ||
-       mod_time->day    > 31 || mod_time->day    < 1 ||
-       mod_time->hour   > 23 || mod_time->second > 60)
-   {
-      png_warning(png_ptr, "Invalid time specified for tIME chunk");
-      return;
-   }
-
-   png_save_uint_16(buf, mod_time->year);
-   buf[2] = mod_time->month;
-   buf[3] = mod_time->day;
-   buf[4] = mod_time->hour;
-   buf[5] = mod_time->minute;
-   buf[6] = mod_time->second;
-
-   png_write_complete_chunk(png_ptr, png_tIME, buf, (png_size_t)7);
-}
-#endif
-
-/* Initializes the row writing capability of libpng */
-void /* PRIVATE */
-png_write_start_row(png_structrp png_ptr)
-{
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-
-   png_alloc_size_t buf_size;
-   int usr_pixel_depth;
-
-   png_debug(1, "in png_write_start_row");
-
-   usr_pixel_depth = png_ptr->usr_channels * png_ptr->usr_bit_depth;
-   buf_size = PNG_ROWBYTES(usr_pixel_depth, png_ptr->width) + 1;
-
-   /* 1.5.6: added to allow checking in the row write code. */
-   png_ptr->transformed_pixel_depth = png_ptr->pixel_depth;
-   png_ptr->maximum_pixel_depth = (png_byte)usr_pixel_depth;
-
-   /* Set up row buffer */
-   png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, buf_size);
-
-   png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE;
-
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   /* Set up filtering buffer, if using this filter */
-   if (png_ptr->do_filter & PNG_FILTER_SUB)
-   {
-      png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, png_ptr->rowbytes + 1);
-
-      png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
-   }
-
-   /* We only need to keep the previous row if we are using one of these. */
-   if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH))
-   {
-      /* Set up previous row buffer */
-      png_ptr->prev_row = (png_bytep)png_calloc(png_ptr, buf_size);
-
-      if (png_ptr->do_filter & PNG_FILTER_UP)
-      {
-         png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
-            png_ptr->rowbytes + 1);
-
-         png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
-      }
-
-      if (png_ptr->do_filter & PNG_FILTER_AVG)
-      {
-         png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
-             png_ptr->rowbytes + 1);
-
-         png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
-      }
-
-      if (png_ptr->do_filter & PNG_FILTER_PAETH)
-      {
-         png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
-             png_ptr->rowbytes + 1);
-
-         png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
-      }
-   }
-#endif /* PNG_WRITE_FILTER_SUPPORTED */
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* If interlaced, we need to set up width and height of pass */
-   if (png_ptr->interlaced)
-   {
-      if (!(png_ptr->transformations & PNG_INTERLACE))
-      {
-         png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
-             png_pass_ystart[0]) / png_pass_yinc[0];
-
-         png_ptr->usr_width = (png_ptr->width + png_pass_inc[0] - 1 -
-             png_pass_start[0]) / png_pass_inc[0];
-      }
-
-      else
-      {
-         png_ptr->num_rows = png_ptr->height;
-         png_ptr->usr_width = png_ptr->width;
-      }
-   }
-
-   else
-#endif
-   {
-      png_ptr->num_rows = png_ptr->height;
-      png_ptr->usr_width = png_ptr->width;
-   }
-}
-
-/* Internal use only.  Called when finished processing a row of data. */
-void /* PRIVATE */
-png_write_finish_row(png_structrp png_ptr)
-{
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-
-   png_debug(1, "in png_write_finish_row");
-
-   /* Next row */
-   png_ptr->row_number++;
-
-   /* See if we are done */
-   if (png_ptr->row_number < png_ptr->num_rows)
-      return;
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* If interlaced, go to next pass */
-   if (png_ptr->interlaced)
-   {
-      png_ptr->row_number = 0;
-      if (png_ptr->transformations & PNG_INTERLACE)
-      {
-         png_ptr->pass++;
-      }
-
-      else
-      {
-         /* Loop until we find a non-zero width or height pass */
-         do
-         {
-            png_ptr->pass++;
-
-            if (png_ptr->pass >= 7)
-               break;
-
-            png_ptr->usr_width = (png_ptr->width +
-                png_pass_inc[png_ptr->pass] - 1 -
-                png_pass_start[png_ptr->pass]) /
-                png_pass_inc[png_ptr->pass];
-
-            png_ptr->num_rows = (png_ptr->height +
-                png_pass_yinc[png_ptr->pass] - 1 -
-                png_pass_ystart[png_ptr->pass]) /
-                png_pass_yinc[png_ptr->pass];
-
-            if (png_ptr->transformations & PNG_INTERLACE)
-               break;
-
-         } while (png_ptr->usr_width == 0 || png_ptr->num_rows == 0);
-
-      }
-
-      /* Reset the row above the image for the next pass */
-      if (png_ptr->pass < 7)
-      {
-         if (png_ptr->prev_row != NULL)
-            memset(png_ptr->prev_row, 0,
-                (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels*
-                png_ptr->usr_bit_depth, png_ptr->width)) + 1);
-
-         return;
-      }
-   }
-#endif
-
-   /* If we get here, we've just written the last row, so we need
-      to flush the compressor */
-   png_compress_IDAT(png_ptr, NULL, 0, Z_FINISH);
-}
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-/* Pick out the correct pixels for the interlace pass.
- * The basic idea here is to go through the row with a source
- * pointer and a destination pointer (sp and dp), and copy the
- * correct pixels for the pass.  As the row gets compacted,
- * sp will always be >= dp, so we should never overwrite anything.
- * See the default: case for the easiest code to understand.
- */
-void /* PRIVATE */
-png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte  png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   png_debug(1, "in png_do_write_interlace");
-
-   /* We don't have to do anything on the last pass (6) */
-   if (pass < 6)
-   {
-      /* Each pixel depth is handled separately */
-      switch (row_info->pixel_depth)
-      {
-         case 1:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            int shift;
-            int d;
-            int value;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            dp = row;
-            d = 0;
-            shift = 7;
-
-            for (i = png_pass_start[pass]; i < row_width;
-               i += png_pass_inc[pass])
-            {
-               sp = row + (png_size_t)(i >> 3);
-               value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01;
-               d |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 7;
-                  *dp++ = (png_byte)d;
-                  d = 0;
-               }
-
-               else
-                  shift--;
-
-            }
-            if (shift != 7)
-               *dp = (png_byte)d;
-
-            break;
-         }
-
-         case 2:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            int shift;
-            int d;
-            int value;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            dp = row;
-            shift = 6;
-            d = 0;
-
-            for (i = png_pass_start[pass]; i < row_width;
-               i += png_pass_inc[pass])
-            {
-               sp = row + (png_size_t)(i >> 2);
-               value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03;
-               d |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 6;
-                  *dp++ = (png_byte)d;
-                  d = 0;
-               }
-
-               else
-                  shift -= 2;
-            }
-            if (shift != 6)
-               *dp = (png_byte)d;
-
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            int shift;
-            int d;
-            int value;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            dp = row;
-            shift = 4;
-            d = 0;
-            for (i = png_pass_start[pass]; i < row_width;
-                i += png_pass_inc[pass])
-            {
-               sp = row + (png_size_t)(i >> 1);
-               value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f;
-               d |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 4;
-                  *dp++ = (png_byte)d;
-                  d = 0;
-               }
-
-               else
-                  shift -= 4;
-            }
-            if (shift != 4)
-               *dp = (png_byte)d;
-
-            break;
-         }
-
-         default:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-            png_size_t pixel_bytes;
-
-            /* Start at the beginning */
-            dp = row;
-
-            /* Find out how many bytes each pixel takes up */
-            pixel_bytes = (row_info->pixel_depth >> 3);
-
-            /* Loop through the row, only looking at the pixels that matter */
-            for (i = png_pass_start[pass]; i < row_width;
-               i += png_pass_inc[pass])
-            {
-               /* Find out where the original pixel is */
-               sp = row + (png_size_t)i * pixel_bytes;
-
-               /* Move the pixel */
-               if (dp != sp)
-                  memcpy(dp, sp, pixel_bytes);
-
-               /* Next pixel */
-               dp += pixel_bytes;
-            }
-            break;
-         }
-      }
-      /* Set new row width */
-      row_info->width = (row_info->width +
-          png_pass_inc[pass] - 1 -
-          png_pass_start[pass]) /
-          png_pass_inc[pass];
-
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
-          row_info->width);
-   }
-}
-#endif
-
-/* This filters the row, chooses which filter to use, if it has not already
- * been specified by the application, and then writes the row out with the
- * chosen filter.
- */
-static void png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
-   png_size_t row_bytes);
-
-#define PNG_MAXSUM (((png_uint_32)(-1)) >> 1)
-#define PNG_HISHIFT 10
-#define PNG_LOMASK ((png_uint_32)0xffffL)
-#define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT))
-void /* PRIVATE */
-png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
-{
-   png_bytep best_row;
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   png_bytep prev_row, row_buf;
-   png_uint_32 mins, bpp;
-   png_byte filter_to_do = png_ptr->do_filter;
-   png_size_t row_bytes = row_info->rowbytes;
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   int num_p_filters = png_ptr->num_prev_filters;
-#endif
-
-   png_debug(1, "in png_write_find_filter");
-
-#ifndef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-  if (png_ptr->row_number == 0 && filter_to_do == PNG_ALL_FILTERS)
-  {
-     /* These will never be selected so we need not test them. */
-     filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH);
-  }
-#endif
-
-   /* Find out how many bytes offset each pixel is */
-   bpp = (row_info->pixel_depth + 7) >> 3;
-
-   prev_row = png_ptr->prev_row;
-#endif
-   best_row = png_ptr->row_buf;
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   row_buf = best_row;
-   mins = PNG_MAXSUM;
-
-   /* The prediction method we use is to find which method provides the
-    * smallest value when summing the absolute values of the distances
-    * from zero, using anything >= 128 as negative numbers.  This is known
-    * as the "minimum sum of absolute differences" heuristic.  Other
-    * heuristics are the "weighted minimum sum of absolute differences"
-    * (experimental and can in theory improve compression), and the "zlib
-    * predictive" method (not implemented yet), which does test compressions
-    * of lines using different filter methods, and then chooses the
-    * (series of) filter(s) that give minimum compressed data size (VERY
-    * computationally expensive).
-    *
-    * GRR 980525:  consider also
-    *
-    *   (1) minimum sum of absolute differences from running average (i.e.,
-    *       keep running sum of non-absolute differences & count of bytes)
-    *       [track dispersion, too?  restart average if dispersion too large?]
-    *
-    *  (1b) minimum sum of absolute differences from sliding average, probably
-    *       with window size <= deflate window (usually 32K)
-    *
-    *   (2) minimum sum of squared differences from zero or running average
-    *       (i.e., ~ root-mean-square approach)
-    */
-
-
-   /* We don't need to test the 'no filter' case if this is the only filter
-    * that has been chosen, as it doesn't actually do anything to the data.
-    */
-   if ((filter_to_do & PNG_FILTER_NONE) && filter_to_do != PNG_FILTER_NONE)
-   {
-      png_bytep rp;
-      png_uint_32 sum = 0;
-      png_size_t i;
-      int v;
-
-      for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
-      {
-         v = *rp;
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         png_uint_32 sumhi, sumlo;
-         int j;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; /* Gives us some footroom */
-
-         /* Reduce the sum if we match any of the previous rows */
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         /* Factor in the cost of this filter (this is here for completeness,
-          * but it makes no sense to have a "cost" for the NONE filter, as
-          * it has the minimum possible computational cost - none).
-          */
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-      mins = sum;
-   }
-
-   /* Sub filter */
-   if (filter_to_do == PNG_FILTER_SUB)
-   /* It's the only filter so no testing is needed */
-   {
-      png_bytep rp, lp, dp;
-      png_size_t i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
-           i++, rp++, dp++)
-      {
-         *dp = *rp;
-      }
-
-      for (lp = row_buf + 1; i < row_bytes;
-         i++, rp++, lp++, dp++)
-      {
-         *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
-      }
-
-      best_row = png_ptr->sub_row;
-   }
-
-   else if (filter_to_do & PNG_FILTER_SUB)
-   {
-      png_bytep rp, dp, lp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      /* We temporarily increase the "minimum sum" by the factor we
-       * would reduce the sum of this filter, so that we can do the
-       * early exit comparison without scaling the sum each time.
-       */
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
-           i++, rp++, dp++)
-      {
-         v = *dp = *rp;
-
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-      for (lp = row_buf + 1; i < row_bytes;
-         i++, rp++, lp++, dp++)
-      {
-         v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
-            {
-               sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         mins = sum;
-         best_row = png_ptr->sub_row;
-      }
-   }
-
-   /* Up filter */
-   if (filter_to_do == PNG_FILTER_UP)
-   {
-      png_bytep rp, dp, pp;
-      png_size_t i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
-          pp = prev_row + 1; i < row_bytes;
-          i++, rp++, pp++, dp++)
-      {
-         *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
-      }
-
-      best_row = png_ptr->up_row;
-   }
-
-   else if (filter_to_do & PNG_FILTER_UP)
-   {
-      png_bytep rp, dp, pp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
-          pp = prev_row + 1; i < row_bytes; i++)
-      {
-         v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         mins = sum;
-         best_row = png_ptr->up_row;
-      }
-   }
-
-   /* Avg filter */
-   if (filter_to_do == PNG_FILTER_AVG)
-   {
-      png_bytep rp, dp, pp, lp;
-      png_uint_32 i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
-           pp = prev_row + 1; i < bpp; i++)
-      {
-         *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
-      }
-
-      for (lp = row_buf + 1; i < row_bytes; i++)
-      {
-         *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
-                 & 0xff);
-      }
-      best_row = png_ptr->avg_row;
-   }
-
-   else if (filter_to_do & PNG_FILTER_AVG)
-   {
-      png_bytep rp, dp, pp, lp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
-           pp = prev_row + 1; i < bpp; i++)
-      {
-         v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-      for (lp = row_buf + 1; i < row_bytes; i++)
-      {
-         v = *dp++ =
-             (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         mins = sum;
-         best_row = png_ptr->avg_row;
-      }
-   }
-
-   /* Paeth filter */
-   if (filter_to_do == PNG_FILTER_PAETH)
-   {
-      png_bytep rp, dp, pp, cp, lp;
-      png_size_t i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
-          pp = prev_row + 1; i < bpp; i++)
-      {
-         *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-      }
-
-      for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++)
-      {
-         int a, b, c, pa, pb, pc, p;
-
-         b = *pp++;
-         c = *cp++;
-         a = *lp++;
-
-         p = b - c;
-         pc = a - c;
-
-#ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
-
-         p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-
-         *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
-      }
-      best_row = png_ptr->paeth_row;
-   }
-
-   else if (filter_to_do & PNG_FILTER_PAETH)
-   {
-      png_bytep rp, dp, pp, cp, lp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
-          pp = prev_row + 1; i < bpp; i++)
-      {
-         v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-      for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++)
-      {
-         int a, b, c, pa, pb, pc, p;
-
-         b = *pp++;
-         c = *cp++;
-         a = *lp++;
-
-#ifndef PNG_SLOW_PAETH
-         p = b - c;
-         pc = a - c;
-#ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
-         p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-#else /* PNG_SLOW_PAETH */
-         p = a + b - c;
-         pa = abs(p - a);
-         pb = abs(p - b);
-         pc = abs(p - c);
-
-         if (pa <= pb && pa <= pc)
-            p = a;
-
-         else if (pb <= pc)
-            p = b;
-
-         else
-            p = c;
-#endif /* PNG_SLOW_PAETH */
-
-         v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         best_row = png_ptr->paeth_row;
-      }
-   }
-#endif /* PNG_WRITE_FILTER_SUPPORTED */
-
-   /* Do the actual writing of the filtered row data from the chosen filter. */
-   png_write_filtered_row(png_ptr, best_row, row_info->rowbytes+1);
-
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   /* Save the type of filter we picked this time for future calculations */
-   if (png_ptr->num_prev_filters > 0)
-   {
-      int j;
-
-      for (j = 1; j < num_p_filters; j++)
-      {
-         png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1];
-      }
-
-      png_ptr->prev_filters[j] = best_row[0];
-   }
-#endif
-#endif /* PNG_WRITE_FILTER_SUPPORTED */
-}
-
-
-/* Do the actual writing of a previously filtered row. */
-static void
-png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
-   png_size_t full_row_length/*includes filter byte*/)
-{
-   png_debug(1, "in png_write_filtered_row");
-
-   png_debug1(2, "filter = %d", filtered_row[0]);
-
-   png_compress_IDAT(png_ptr, filtered_row, full_row_length, Z_NO_FLUSH);
-
-   /* Swap the current and previous rows */
-   if (png_ptr->prev_row != NULL)
-   {
-      png_bytep tptr;
-
-      tptr = png_ptr->prev_row;
-      png_ptr->prev_row = png_ptr->row_buf;
-      png_ptr->row_buf = tptr;
-   }
-
-   /* Finish row - updates counters and flushes zlib if last row */
-   png_write_finish_row(png_ptr);
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-   png_ptr->flush_rows++;
-
-   if (png_ptr->flush_dist > 0 &&
-       png_ptr->flush_rows >= png_ptr->flush_dist)
-   {
-      png_write_flush(png_ptr);
-   }
-#endif
-}
-#endif /* PNG_WRITE_SUPPORTED */

-- 
juce packaging



More information about the pkg-multimedia-commits mailing list